From 24280f615e72254bb85285a71af21a85d998bc11 Mon Sep 17 00:00:00 2001 From: Darragh Van Tichelen Date: Fri, 1 Feb 2019 13:34:23 +0100 Subject: [PATCH 01/92] First attempt to a circle ci config --- .circleci/config.yml | 31 +++++++++++++++++++++++++++++++ server/PA.spec | 2 +- 2 files changed, 32 insertions(+), 1 deletion(-) create mode 100644 .circleci/config.yml diff --git a/.circleci/config.yml b/.circleci/config.yml new file mode 100644 index 000000000..6b915bd9e --- /dev/null +++ b/.circleci/config.yml @@ -0,0 +1,31 @@ +version: 2 +jobs: + build: + docker: + - image: cdrx/pyinstaller-windows:python3 + + working_directory: ~/PlanarAlly/server + + steps: + - checkout: + path: ~/PlanarAlly + + - restore_cache: + keys: + - v1-dependencies-{{ checksum "requirements.txt" }} + - v1-dependencies- + - run: + name: Install dependencies + command: | + python3 -m venv venv + . venv/bin/activate + pip install -r requirements.txt + + - save_cache: + paths: + - ./venv + key: v1-dependencies-{{ checksum "requirements.txt" }} + + - build_exe: + name: Build Windows executable + command: cdrx/pyinstaller-windows diff --git a/server/PA.spec b/server/PA.spec index 25a20b9f2..75a6e3777 100644 --- a/server/PA.spec +++ b/server/PA.spec @@ -3,7 +3,7 @@ import os import sys from pathlib import Path -pa_dir = Path(SPECPATH).resolve() / "PlanarAlly" +pa_dir = Path(SPECPATH).resolve() def _(arg): From 97193c3b55c0e52c6b86f3af2671f76fb17b85e1 Mon Sep 17 00:00:00 2001 From: Darragh Van Tichelen Date: Fri, 1 Feb 2019 20:21:41 +0100 Subject: [PATCH 02/92] TEST --- server/TEST | 0 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 server/TEST diff --git a/server/TEST b/server/TEST new file mode 100644 index 000000000..e69de29bb From 871b317315428592e3d52eca5cc97bb0df57b8f3 Mon Sep 17 00:00:00 2001 From: Darragh Van Tichelen Date: Fri, 1 Feb 2019 20:23:06 +0100 Subject: [PATCH 03/92] Fix circle config --- .circleci/config.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index 6b915bd9e..ef763a96c 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -26,6 +26,6 @@ jobs: - ./venv key: v1-dependencies-{{ checksum "requirements.txt" }} - - build_exe: + - run: name: Build Windows executable command: cdrx/pyinstaller-windows From 0f3cffd26b75efff9e11725a09ce761defe0f90c Mon Sep 17 00:00:00 2001 From: Darragh Van Tichelen Date: Fri, 1 Feb 2019 21:54:31 +0100 Subject: [PATCH 04/92] Try extra image --- .circleci/config.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.circleci/config.yml b/.circleci/config.yml index ef763a96c..8d730436b 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -2,6 +2,7 @@ version: 2 jobs: build: docker: + - image: circleci/python:3.6.4 - image: cdrx/pyinstaller-windows:python3 working_directory: ~/PlanarAlly/server From b355b49efeb7ca5dfcbdb4c2a847e34b39e033f5 Mon Sep 17 00:00:00 2001 From: Darragh Van Tichelen Date: Fri, 1 Feb 2019 23:04:03 +0100 Subject: [PATCH 05/92] apt get circleci --- .circleci/config.yml | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index 8d730436b..83c7c63d1 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -2,7 +2,6 @@ version: 2 jobs: build: docker: - - image: circleci/python:3.6.4 - image: cdrx/pyinstaller-windows:python3 working_directory: ~/PlanarAlly/server @@ -16,7 +15,11 @@ jobs: - v1-dependencies-{{ checksum "requirements.txt" }} - v1-dependencies- - run: - name: Install dependencies + name: Install apt dependencies + command: sudo apt-get install python3-venv + + - run: + name: Install python dependencies command: | python3 -m venv venv . venv/bin/activate From 6b90251001b16df11cfbc0948f73a23caeea75f7 Mon Sep 17 00:00:00 2001 From: Darragh Van Tichelen Date: Fri, 1 Feb 2019 23:12:22 +0100 Subject: [PATCH 06/92] throw a lot out of the circle config --- .circleci/config.yml | 20 -------------------- 1 file changed, 20 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index 83c7c63d1..0d0e9033d 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -10,26 +10,6 @@ jobs: - checkout: path: ~/PlanarAlly - - restore_cache: - keys: - - v1-dependencies-{{ checksum "requirements.txt" }} - - v1-dependencies- - - run: - name: Install apt dependencies - command: sudo apt-get install python3-venv - - - run: - name: Install python dependencies - command: | - python3 -m venv venv - . venv/bin/activate - pip install -r requirements.txt - - - save_cache: - paths: - - ./venv - key: v1-dependencies-{{ checksum "requirements.txt" }} - - run: name: Build Windows executable command: cdrx/pyinstaller-windows From c484d6f2d5634b922d5a3cbaaea0c2c72073299a Mon Sep 17 00:00:00 2001 From: Darragh Van Tichelen Date: Fri, 1 Feb 2019 23:17:13 +0100 Subject: [PATCH 07/92] Test --- .circleci/config.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index 0d0e9033d..c5f0d99df 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -12,4 +12,4 @@ jobs: - run: name: Build Windows executable - command: cdrx/pyinstaller-windows + command: pyinstaller --clean -y --dist ./dist/windows --workpath /tmp *.spec" From 7214d1dc7ed5c05a17ff473305e94d761e3dc37b Mon Sep 17 00:00:00 2001 From: Darragh Van Tichelen Date: Fri, 1 Feb 2019 23:21:50 +0100 Subject: [PATCH 08/92] another test --- .circleci/config.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index c5f0d99df..34f1884e3 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -12,4 +12,4 @@ jobs: - run: name: Build Windows executable - command: pyinstaller --clean -y --dist ./dist/windows --workpath /tmp *.spec" + command: docker run -v "$(pwd):/src/" cdrx/pyinstaller-windows:python3 From 24cf8be391987feb65b1cae94e6d308cf10192eb Mon Sep 17 00:00:00 2001 From: Darragh Van Tichelen Date: Fri, 1 Feb 2019 23:31:01 +0100 Subject: [PATCH 09/92] dind --- .circleci/config.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index 34f1884e3..a7e505bb3 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -2,7 +2,7 @@ version: 2 jobs: build: docker: - - image: cdrx/pyinstaller-windows:python3 + - image: docker:latest working_directory: ~/PlanarAlly/server From 77c5c9e51201bc76c135f03ca5289d53d71e8967 Mon Sep 17 00:00:00 2001 From: Darragh Van Tichelen Date: Fri, 1 Feb 2019 23:41:04 +0100 Subject: [PATCH 10/92] another one --- .circleci/config.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index a7e505bb3..b541e9af1 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -2,7 +2,7 @@ version: 2 jobs: build: docker: - - image: docker:latest + - image: cdrx/pyinstaller-windows:python3 working_directory: ~/PlanarAlly/server @@ -12,4 +12,4 @@ jobs: - run: name: Build Windows executable - command: docker run -v "$(pwd):/src/" cdrx/pyinstaller-windows:python3 + command: pyinstaller --clean -y --dist ./dist/windows --workpath /tmp *.spec From d9e6c2a4ade5447e69726b90c48db5f9bf0f4b97 Mon Sep 17 00:00:00 2001 From: Darragh Van Tichelen Date: Fri, 1 Feb 2019 23:47:54 +0100 Subject: [PATCH 11/92] store artifacts --- .circleci/config.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.circleci/config.yml b/.circleci/config.yml index b541e9af1..8efed839a 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -13,3 +13,6 @@ jobs: - run: name: Build Windows executable command: pyinstaller --clean -y --dist ./dist/windows --workpath /tmp *.spec + + - store_artifacts: + path: /tmp/dist/windows From 3a93a4f197579c5b0c2440b5269841c62ef258db Mon Sep 17 00:00:00 2001 From: Darragh Van Tichelen Date: Fri, 1 Feb 2019 23:51:59 +0100 Subject: [PATCH 12/92] all --- .circleci/config.yml | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index 8efed839a..f7823fd11 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -15,4 +15,10 @@ jobs: command: pyinstaller --clean -y --dist ./dist/windows --workpath /tmp *.spec - store_artifacts: - path: /tmp/dist/windows + path: /wine/drive_c/tmp/dist/windows + + - store_artifacts: + path: /wine/drive_c/dist/windows + + - store_artifacts: + path: /wine/drive_c/src/tmp/dist/windows From 295ad74159173e7173887310ac3500cb866f9bf4 Mon Sep 17 00:00:00 2001 From: Darragh Van Tichelen Date: Fri, 1 Feb 2019 23:55:31 +0100 Subject: [PATCH 13/92] paths :gun: --- .circleci/config.yml | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index f7823fd11..013c7cd45 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -15,10 +15,4 @@ jobs: command: pyinstaller --clean -y --dist ./dist/windows --workpath /tmp *.spec - store_artifacts: - path: /wine/drive_c/tmp/dist/windows - - - store_artifacts: - path: /wine/drive_c/dist/windows - - - store_artifacts: - path: /wine/drive_c/src/tmp/dist/windows + path: ./dist/windows From 633253ade6c88e781326689ff044fef23bb78f0d Mon Sep 17 00:00:00 2001 From: Darragh Van Tichelen Date: Sat, 2 Feb 2019 17:31:22 +0100 Subject: [PATCH 14/92] Set up CI with Azure Pipelines --- azure-pipelines.yml | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) create mode 100644 azure-pipelines.yml diff --git a/azure-pipelines.yml b/azure-pipelines.yml new file mode 100644 index 000000000..39ef3e2ee --- /dev/null +++ b/azure-pipelines.yml @@ -0,0 +1,27 @@ +# Python package +# Create and test a Python package on multiple Python versions. +# Add steps that analyze code, save the dist with the build record, publish to a PyPI-compatible index, and more: +# https://docs.microsoft.com/azure/devops/pipelines/languages/python + +trigger: +- master + +jobs: + +- job: 'Pyinstaller Linux' + pool: + vmImage: 'Ubuntu-16.04' + + steps: + - task: UsePythonVersion@0 + inputs: + versionSpec: '3.7' + architecture: 'x64' + + - script: python -m pip install --upgrade pip && pip install -r requirements.txt + displayName: 'Install dependencies' + + - script: pip install pyinstaller + displayName: 'Install pyinstaller' + + - script: pyinstaller --clean -y --dist ./dist/windows --workpath /tmp *.spec From 93cee825c44f74cfe662fb2dc0e5e469b5ddce12 Mon Sep 17 00:00:00 2001 From: Darragh Van Tichelen Date: Sat, 2 Feb 2019 17:33:01 +0100 Subject: [PATCH 15/92] Fix job name --- azure-pipelines.yml | 31 +++++++++++++++---------------- 1 file changed, 15 insertions(+), 16 deletions(-) diff --git a/azure-pipelines.yml b/azure-pipelines.yml index 39ef3e2ee..36e2a29b8 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -4,24 +4,23 @@ # https://docs.microsoft.com/azure/devops/pipelines/languages/python trigger: -- master + - master jobs: + - job: "Pyinstaller_Linux" + pool: + vmImage: "Ubuntu-16.04" -- job: 'Pyinstaller Linux' - pool: - vmImage: 'Ubuntu-16.04' - - steps: - - task: UsePythonVersion@0 - inputs: - versionSpec: '3.7' - architecture: 'x64' + steps: + - task: UsePythonVersion@0 + inputs: + versionSpec: "3.7" + architecture: "x64" - - script: python -m pip install --upgrade pip && pip install -r requirements.txt - displayName: 'Install dependencies' + - script: python -m pip install --upgrade pip && pip install -r requirements.txt + displayName: "Install dependencies" - - script: pip install pyinstaller - displayName: 'Install pyinstaller' - - - script: pyinstaller --clean -y --dist ./dist/windows --workpath /tmp *.spec + - script: pip install pyinstaller + displayName: "Install pyinstaller" + + - script: pyinstaller --clean -y --dist ./dist/windows --workpath /tmp *.spec From 3eea10f6f28d116de36827896e968f13a0813db5 Mon Sep 17 00:00:00 2001 From: Darragh Van Tichelen Date: Sat, 2 Feb 2019 17:39:14 +0100 Subject: [PATCH 16/92] Working directory changes in azure pipeline --- azure-pipelines.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/azure-pipelines.yml b/azure-pipelines.yml index 36e2a29b8..9f91b3674 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -19,8 +19,10 @@ jobs: - script: python -m pip install --upgrade pip && pip install -r requirements.txt displayName: "Install dependencies" + workingDirectory: "server" - script: pip install pyinstaller displayName: "Install pyinstaller" - script: pyinstaller --clean -y --dist ./dist/windows --workpath /tmp *.spec + workingDirectory: "server" From b1706f4561cec29580c4a4ae8791d253e0fe8910 Mon Sep 17 00:00:00 2001 From: Darragh Van Tichelen Date: Sat, 2 Feb 2019 17:44:27 +0100 Subject: [PATCH 17/92] try pyinstaller fix --- azure-pipelines.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/azure-pipelines.yml b/azure-pipelines.yml index 9f91b3674..4b77d9c30 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -22,7 +22,7 @@ jobs: workingDirectory: "server" - script: pip install pyinstaller - displayName: "Install pyinstaller" + displayName: "Install PyInstaller" - script: pyinstaller --clean -y --dist ./dist/windows --workpath /tmp *.spec workingDirectory: "server" From 0dae5b48604125cf5dc63ed7fcf84affb108358c Mon Sep 17 00:00:00 2001 From: Darragh Van Tichelen Date: Sat, 2 Feb 2019 17:47:50 +0100 Subject: [PATCH 18/92] Adjusted wrong variable --- azure-pipelines.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/azure-pipelines.yml b/azure-pipelines.yml index 4b77d9c30..f2416e3e4 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -21,7 +21,7 @@ jobs: displayName: "Install dependencies" workingDirectory: "server" - - script: pip install pyinstaller + - script: pip install PyInstaller displayName: "Install PyInstaller" - script: pyinstaller --clean -y --dist ./dist/windows --workpath /tmp *.spec From 1e87c3ffac67ab0a5150547131a0afa47f0d6f2d Mon Sep 17 00:00:00 2001 From: Darragh Van Tichelen Date: Sat, 2 Feb 2019 17:52:24 +0100 Subject: [PATCH 19/92] use temporary pip19 pyinstaller fix --- azure-pipelines.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/azure-pipelines.yml b/azure-pipelines.yml index f2416e3e4..8457afde0 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -21,8 +21,8 @@ jobs: displayName: "Install dependencies" workingDirectory: "server" - - script: pip install PyInstaller - displayName: "Install PyInstaller" + - script: pip install --no-use-pep517 pyinstaller + displayName: "Install pyinstaller" - script: pyinstaller --clean -y --dist ./dist/windows --workpath /tmp *.spec workingDirectory: "server" From 2f302690c6e8e1972057f9951039e9b2ab40082f Mon Sep 17 00:00:00 2001 From: Darragh Van Tichelen Date: Sat, 2 Feb 2019 17:59:49 +0100 Subject: [PATCH 20/92] Spec fixes --- azure-pipelines.yml | 1 + server/PA.spec | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/azure-pipelines.yml b/azure-pipelines.yml index 8457afde0..85434987e 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -25,4 +25,5 @@ jobs: displayName: "Install pyinstaller" - script: pyinstaller --clean -y --dist ./dist/windows --workpath /tmp *.spec + displayName: "Run pyinstaller" workingDirectory: "server" diff --git a/server/PA.spec b/server/PA.spec index 25a20b9f2..75a6e3777 100644 --- a/server/PA.spec +++ b/server/PA.spec @@ -3,7 +3,7 @@ import os import sys from pathlib import Path -pa_dir = Path(SPECPATH).resolve() / "PlanarAlly" +pa_dir = Path(SPECPATH).resolve() def _(arg): From 40a0056c1a2024e7f03c2e7bcb9bc2455189e163 Mon Sep 17 00:00:00 2001 From: Darragh Van Tichelen Date: Sat, 2 Feb 2019 18:18:23 +0100 Subject: [PATCH 21/92] python3-dev --- azure-pipelines.yml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/azure-pipelines.yml b/azure-pipelines.yml index 85434987e..86a8f4f0c 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -17,7 +17,9 @@ jobs: versionSpec: "3.7" architecture: "x64" - - script: python -m pip install --upgrade pip && pip install -r requirements.txt + - script: | + sudo apt-get install -y python3-dev + python -m pip install --upgrade pip && pip install -r requirements.txt displayName: "Install dependencies" workingDirectory: "server" From b140560955c6149a66628f346461fb39f69107e1 Mon Sep 17 00:00:00 2001 From: Darragh Van Tichelen Date: Sat, 2 Feb 2019 18:21:34 +0100 Subject: [PATCH 22/92] 3.7dev --- azure-pipelines.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/azure-pipelines.yml b/azure-pipelines.yml index 86a8f4f0c..4c6fc0393 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -18,7 +18,7 @@ jobs: architecture: "x64" - script: | - sudo apt-get install -y python3-dev + sudo apt-get install -y python3.7-dev python -m pip install --upgrade pip && pip install -r requirements.txt displayName: "Install dependencies" workingDirectory: "server" From 5625c6b45d76aa361e7e8dad43a418d036b45197 Mon Sep 17 00:00:00 2001 From: Darragh Van Tichelen Date: Sat, 2 Feb 2019 18:32:34 +0100 Subject: [PATCH 23/92] try other python install method --- azure-pipelines.yml | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/azure-pipelines.yml b/azure-pipelines.yml index 4c6fc0393..23937d747 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -12,14 +12,18 @@ jobs: vmImage: "Ubuntu-16.04" steps: - - task: UsePythonVersion@0 - inputs: - versionSpec: "3.7" - architecture: "x64" + # - task: UsePythonVersion@0 + # inputs: + # versionSpec: "3.7" + # architecture: "x64" - script: | - sudo apt-get install -y python3.7-dev - python -m pip install --upgrade pip && pip install -r requirements.txt + sudo add-apt-repository ppa:deadsnakes/ppa + sudo apt-get update + sudo apt-get install python3.7 python3.7-dev + displayname: "Install python3.7" + + - script: python -m pip install --upgrade pip && pip install -r requirements.txt displayName: "Install dependencies" workingDirectory: "server" From d2097403faa5ab0a17e96c738430c1b3be0bd463 Mon Sep 17 00:00:00 2001 From: Darragh Van Tichelen Date: Sat, 2 Feb 2019 18:33:38 +0100 Subject: [PATCH 24/92] Add windows job --- azure-pipelines.yml | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/azure-pipelines.yml b/azure-pipelines.yml index 23937d747..ad91a4c84 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -30,6 +30,27 @@ jobs: - script: pip install --no-use-pep517 pyinstaller displayName: "Install pyinstaller" + - script: pyinstaller --clean -y --dist ./dist/linux --workpath /tmp *.spec + displayName: "Run pyinstaller" + workingDirectory: "server" + + - job: "Pyinstaller_Windows" + pool: + vmImage: "vs2017-win2016" + + steps: + - task: UsePythonVersion@0 + inputs: + versionSpec: "3.7" + architecture: "x64" + + - script: python -m pip install --upgrade pip && pip install -r requirements.txt + displayName: "Install dependencies" + workingDirectory: "server" + + - script: pip install --no-use-pep517 pyinstaller + displayName: "Install pyinstaller" + - script: pyinstaller --clean -y --dist ./dist/windows --workpath /tmp *.spec displayName: "Run pyinstaller" workingDirectory: "server" From cb9c3868cad47975189685e324719a9baa71f4a9 Mon Sep 17 00:00:00 2001 From: Darragh Van Tichelen Date: Sat, 2 Feb 2019 18:34:26 +0100 Subject: [PATCH 25/92] fix displayName typo --- azure-pipelines.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/azure-pipelines.yml b/azure-pipelines.yml index ad91a4c84..dac1d2879 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -21,7 +21,7 @@ jobs: sudo add-apt-repository ppa:deadsnakes/ppa sudo apt-get update sudo apt-get install python3.7 python3.7-dev - displayname: "Install python3.7" + displayName: "Install python3.7" - script: python -m pip install --upgrade pip && pip install -r requirements.txt displayName: "Install dependencies" From b8599660454bde52153f6fb48178127c2beab7b4 Mon Sep 17 00:00:00 2001 From: Darragh Van Tichelen Date: Sat, 2 Feb 2019 18:37:56 +0100 Subject: [PATCH 26/92] More azure tweaks --- azure-pipelines.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/azure-pipelines.yml b/azure-pipelines.yml index dac1d2879..545c88e9f 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -20,10 +20,10 @@ jobs: - script: | sudo add-apt-repository ppa:deadsnakes/ppa sudo apt-get update - sudo apt-get install python3.7 python3.7-dev + sudo apt-get install python3.7 python3.7-dev python3.7-pip displayName: "Install python3.7" - - script: python -m pip install --upgrade pip && pip install -r requirements.txt + - script: pip install -r requirements.txt displayName: "Install dependencies" workingDirectory: "server" @@ -51,6 +51,6 @@ jobs: - script: pip install --no-use-pep517 pyinstaller displayName: "Install pyinstaller" - - script: pyinstaller --clean -y --dist ./dist/windows --workpath /tmp *.spec + - script: pyinstaller --clean -y --dist ./dist/windows *.spec displayName: "Run pyinstaller" workingDirectory: "server" From 764d43c545f512bec5e1e9d1d93c1f6d5b23c411 Mon Sep 17 00:00:00 2001 From: Darragh Van Tichelen Date: Sat, 2 Feb 2019 18:43:19 +0100 Subject: [PATCH 27/92] SAME --- azure-pipelines.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/azure-pipelines.yml b/azure-pipelines.yml index 545c88e9f..51b8ab02b 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -20,7 +20,7 @@ jobs: - script: | sudo add-apt-repository ppa:deadsnakes/ppa sudo apt-get update - sudo apt-get install python3.7 python3.7-dev python3.7-pip + sudo apt-get install python3.7 python3.7-dev displayName: "Install python3.7" - script: pip install -r requirements.txt @@ -51,6 +51,6 @@ jobs: - script: pip install --no-use-pep517 pyinstaller displayName: "Install pyinstaller" - - script: pyinstaller --clean -y --dist ./dist/windows *.spec + - script: pyinstaller --clean -y *.spec displayName: "Run pyinstaller" workingDirectory: "server" From d2e07d0d2ffa8dc42116620d053c369a39f10b79 Mon Sep 17 00:00:00 2001 From: Kruptein Date: Sun, 21 Apr 2019 10:25:28 +0200 Subject: [PATCH 28/92] Add option to listen to a socket --- CHANGELOG.md | 4 ++ Dockerfiles/server_config_docker.cfg | 7 ++- server/planarserver.py | 82 ++++++++++++++++++---------- server/server_config.cfg | 7 ++- 4 files changed, 70 insertions(+), 30 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 3a384a529..2e35a23b4 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,10 @@ All notable changes to this project will be documented in this file. ## Unreleased +### Added + +- Option to listen on a socket instead of HOST:PORT. + ## [0.15.0] - 2019-04-14 ### Added diff --git a/Dockerfiles/server_config_docker.cfg b/Dockerfiles/server_config_docker.cfg index 4a9ce5efe..71dbca54b 100644 --- a/Dockerfiles/server_config_docker.cfg +++ b/Dockerfiles/server_config_docker.cfg @@ -1,10 +1,15 @@ [Webserver] +# You can choose to use a HOST:PORT connection or a socket file to listen on +# If you specifiy a socket, it will be used instead of the HTTP:PORT connection host = 0.0.0.0 port = 8000 +# socket = /tmp/planarally.sock + ssl = false # the ssl_ options are only required if ssl is set # modify these to your actual keys! ssl_fullchain = cert/fullchain.pem ssl_privkey = cert/privkey.pem + [General] -save_file = data/planar.save +save_file = data/planar.sqlite \ No newline at end of file diff --git a/server/planarserver.py b/server/planarserver.py index 7539ad9f4..f8f922364 100644 --- a/server/planarserver.py +++ b/server/planarserver.py @@ -3,8 +3,9 @@ This is the code responsible for starting the backend and reacting to socket IO events. """ -# Mimetype recognition for js files apparently is not alwyas properly setup out of the box for some users out there. +# Mimetype recognition for js files apparently is not always properly setup out of the box for some users out there. import mimetypes + if mimetypes.guess_type(".js")[0] == "text/plain": mimetypes.add_type("application/javascript", ".js") @@ -13,6 +14,7 @@ save.check_save() import asyncio +import configparser import sys from aiohttp import web @@ -52,35 +54,59 @@ async def on_shutdown(_): app.router.add_route("*", "/{tail:.*}", routes.root_dev) else: app.router.add_route("*", "/{tail:.*}", routes.root) -# app.router.add_route("*", "/", routes.login) -# app.router.add_get("/rooms", routes.show_rooms) -# app.router.add_get("/rooms/{username}/{roomname}", routes.show_room) -# app.router.add_get("/invite/{code}", routes.claim_invite) -# app.router.add_post("/create_room", routes.create_room) -# app.router.add_get("/assets/", routes.show_assets) -# app.router.add_get("/logout", routes.logout) app.on_shutdown.append(on_shutdown) + +def start_http(host, port): + logger.warning(" RUNNING IN NON SSL CONTEXT ") + web.run_app( + app, + host=host, + port=config.getint("Webserver", "port"), + ) + + +def start_https(host, port, chain, key): + import ssl + + ctx = ssl.SSLContext() + try: + ctx.load_cert_chain(chain, key) + except FileNotFoundError: + logger.critical("SSL FILES ARE NOT FOUND. ABORTING LAUNCH.") + sys.exit(2) + + web.run_app( + app, + host=host, + port=port, + ssl_context=ctx, + ) + + +def start_socket(sock): + web.run_app(app, path=sock) + + if __name__ == "__main__": - if config.getboolean("Webserver", "ssl"): - import ssl - - ctx = ssl.SSLContext() - ctx.load_cert_chain( - config.get("Webserver", "ssl_fullchain"), - config.get("Webserver", "ssl_privkey"), - ) - web.run_app( - app, - host=config.get("Webserver", "host"), - port=config.getint("Webserver", "port"), - ssl_context=ctx, - ) + socket = config.get("Webserver", "socket", fallback=None) + if socket: + start_socket(socket) else: - logger.warning(" RUNNING IN NON SSL CONTEXT ") - web.run_app( - app, - host=config.get("Webserver", "host"), - port=config.getint("Webserver", "port"), - ) + host = config.get("Webserver", "host") + port=config.getint("Webserver", "port") + + if config.getboolean("Webserver", "ssl"): + try: + chain = config.get("Webserver", "ssl_fullchain") + key = config.get("Webserver", "ssl_privkey") + except configparser.NoOptionError: + logger.critical( + "SSL CONFIGURATION IS NOT CORRECTLY CONFIGURED. ABORTING LAUNCH." + ) + sys.exit(2) + + start_https(host, port, chain, key) + else: + start_http(host, port) diff --git a/server/server_config.cfg b/server/server_config.cfg index 84083c81e..06b265a90 100644 --- a/server/server_config.cfg +++ b/server/server_config.cfg @@ -1,10 +1,15 @@ [Webserver] +# You can choose to use a HOST:PORT connection or a socket file to listen on +# If you specifiy a socket, it will be used instead of the HTTP:PORT connection host = 0.0.0.0 port = 8000 +socket = /tmp/planarally.sock + ssl = false # the ssl_ options are only required if ssl is set # modify these to your actual keys! ssl_fullchain = cert/fullchain.pem ssl_privkey = cert/privkey.pem + [General] -save_file = planar.sqlite \ No newline at end of file +save_file = planar.sqlite From ee58b076b6bb2cd1e07f5149b18161c569ddc57d Mon Sep 17 00:00:00 2001 From: Kruptein Date: Sun, 21 Apr 2019 10:31:58 +0200 Subject: [PATCH 29/92] Comment out the socket config by default --- server/server_config.cfg | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/server/server_config.cfg b/server/server_config.cfg index 06b265a90..032f90e61 100644 --- a/server/server_config.cfg +++ b/server/server_config.cfg @@ -3,7 +3,7 @@ # If you specifiy a socket, it will be used instead of the HTTP:PORT connection host = 0.0.0.0 port = 8000 -socket = /tmp/planarally.sock +# socket = /tmp/planarally.sock ssl = false # the ssl_ options are only required if ssl is set From daf04c472fcc5e0bfac89330d499a296690cfb73 Mon Sep 17 00:00:00 2001 From: Kruptein Date: Wed, 15 May 2019 13:34:58 +0200 Subject: [PATCH 30/92] Upgrade node packages --- client/package-lock.json | 2877 ++++++++++++++++++++------------------ client/package.json | 6 +- 2 files changed, 1558 insertions(+), 1325 deletions(-) diff --git a/client/package-lock.json b/client/package-lock.json index 2aea406e8..c9b7c4e14 100644 --- a/client/package-lock.json +++ b/client/package-lock.json @@ -4,6 +4,34 @@ "lockfileVersion": 1, "requires": true, "dependencies": { + "@babel/code-frame": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.0.0.tgz", + "integrity": "sha512-OfC2uemaknXr87bdLUkWog7nYuliM9Ij5HUcajsVcMCpQrcLmtxRbVFTIqmcSkSeYRBFBRxs2FiUqFJDLdiebA==", + "dev": true, + "requires": { + "@babel/highlight": "^7.0.0" + } + }, + "@babel/highlight": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.0.0.tgz", + "integrity": "sha512-UFMC4ZeFC48Tpvj7C8UgLvtkaUuovQX+5xNWrsIoMG8o2z+XFKjKaN9iVmS84dPwVN00W4wPmqvYoZF3EGAsfw==", + "dev": true, + "requires": { + "chalk": "^2.0.0", + "esutils": "^2.0.2", + "js-tokens": "^4.0.0" + }, + "dependencies": { + "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 + } + } + }, "@intervolga/optimize-cssnano-plugin": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/@intervolga/optimize-cssnano-plugin/-/optimize-cssnano-plugin-1.0.6.tgz", @@ -31,16 +59,104 @@ "integrity": "sha512-shAmDyaQC4H92APFoIaVDHCx5bStIocgvbwQyxPRrbUY20V1EYTbSDchWbuwlMG3V17cprZhA6+78JfB+3DTPw==", "dev": true }, + "@soda/friendly-errors-webpack-plugin": { + "version": "1.7.1", + "resolved": "https://registry.npmjs.org/@soda/friendly-errors-webpack-plugin/-/friendly-errors-webpack-plugin-1.7.1.tgz", + "integrity": "sha512-cWKrGaFX+rfbMrAxVv56DzhPNqOJPZuNIS2HGMELtgGzb+vsMzyig9mml5gZ/hr2BGtSLV+dP2LUEuAL8aG2mQ==", + "dev": true, + "requires": { + "chalk": "^1.1.3", + "error-stack-parser": "^2.0.0", + "string-width": "^2.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true + }, + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + } + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + } + } + }, + "@types/events": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@types/events/-/events-3.0.0.tgz", + "integrity": "sha512-EaObqwIvayI5a8dCzhFrjKzVwKLxjoG9T6Ppd5CEo07LRKfQ8Yokw54r5+Wq7FaBQ+yXRvQAYPrHwya1/UFt9g==", + "dev": true + }, + "@types/glob": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.1.1.tgz", + "integrity": "sha512-1Bh06cbWJUHMC97acuD6UMG29nMt0Aqz1vF3guLfG+kHHJhy3AyohZFFxYk2f7Q1SQIrNwvncxAE0N/9s70F2w==", + "dev": true, + "requires": { + "@types/events": "*", + "@types/minimatch": "*", + "@types/node": "*" + } + }, "@types/lodash": { "version": "4.14.118", "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.118.tgz", "integrity": "sha512-iiJbKLZbhSa6FYRip/9ZDX6HXhayXLDGY2Fqws9cOkEQ6XeKfaxB0sC541mowZJueYyMnVUmmG+al5/4fCDrgw==", "dev": true }, + "@types/minimatch": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.3.tgz", + "integrity": "sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA==", + "dev": true + }, + "@types/node": { + "version": "12.0.2", + "resolved": "https://registry.npmjs.org/@types/node/-/node-12.0.2.tgz", + "integrity": "sha512-5tabW/i+9mhrfEOUcLDu2xBPsHJ+X5Orqy9FKpale3SjDA17j5AEpYq5vfy3oAeAHGcvANRCO3NV3d2D6q3NiA==", + "dev": true + }, + "@types/normalize-package-data": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.0.tgz", + "integrity": "sha512-f5j5b/Gf71L+dbqxIpQ4Z2WlmI/mPJ0fOkGGmFgtb6sAu97EPczzbS3/tJKxmcYDj55OX6ssqwDAWOHIYDRDGA==", + "dev": true + }, "@types/q": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/@types/q/-/q-1.5.1.tgz", - "integrity": "sha512-eqz8c/0kwNi/OEHQfvIuJVLTst3in0e7uTKeuY+WL/zfKn0xVujOTp42bS/vUUokhK5P2BppLd9JXMOMHcgbjA==", + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/@types/q/-/q-1.5.2.tgz", + "integrity": "sha512-ce5d3q03Ex0sy4R14722Rmt6MT07Ua+k4FwDfdcToYJcMKNtRVQvJ6JCAPdAmAnbRb6CsX6aYb9m96NGod9uTw==", "dev": true }, "@types/socket.io-client": { @@ -65,107 +181,134 @@ } }, "@types/webpack-env": { - "version": "1.13.6", - "resolved": "http://registry.npmjs.org/@types/webpack-env/-/webpack-env-1.13.6.tgz", - "integrity": "sha512-5Th3OsZ4gTRdr9Mho83BQ23cex4sRhOR4XTG+m+cJc0FhtUBK9Vn62hBJ+pnQYnSxoPOsKoAPOx6FcphxBC8ng==", + "version": "1.13.9", + "resolved": "https://registry.npmjs.org/@types/webpack-env/-/webpack-env-1.13.9.tgz", + "integrity": "sha512-p8zp5xqkly3g4cCmo2mKOHI9+Z/kObmDj0BmjbDDJQlgDTiEGTbm17MEwTAusV6XceCy+bNw9q/ZHXHyKo3zkg==", "dev": true }, "@vue/cli-overlay": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/@vue/cli-overlay/-/cli-overlay-3.3.0.tgz", - "integrity": "sha512-UyfeuX6txu8sRtfhJOJlPgETzU3KjshKY2qAnC34KJKcS+7oIYRpeOo8jMMLjImVE0g6d8Rn3A1GkXjRiKWW6w==", + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/@vue/cli-overlay/-/cli-overlay-3.7.0.tgz", + "integrity": "sha512-QO1rsBVKPZrt+5rHSZXc5UEPVwVgiayOk/cDl+GwSJoR36gnWs1wy1oUX1Awd7QpGiMBK/1+A7aAGhfzKR23Cg==", "dev": true }, "@vue/cli-plugin-typescript": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/@vue/cli-plugin-typescript/-/cli-plugin-typescript-3.1.1.tgz", - "integrity": "sha512-DJqBo6y+w6ZJZBXDK6xk/4EB0/jy9aOemX356QSYxDsTNsHx1Okg3RuCq/wN0yElVVthzi5FEnDlfGymAWzqig==", + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/@vue/cli-plugin-typescript/-/cli-plugin-typescript-3.7.0.tgz", + "integrity": "sha512-7XsJ4+LdAyP/MKX3p171fcVOH4mQAYYciM5TdaUkDsw9vvp8cHpK4FwP4o2BO4OjORsDqqyUy5WLtMh/4YB+Qg==", "dev": true, "requires": { - "@types/webpack-env": "^1.13.6", - "@vue/cli-shared-utils": "^3.1.1", - "fork-ts-checker-webpack-plugin": "^0.4.14", - "globby": "^8.0.1", - "ts-loader": "^5.3.0", - "tslint": "^5.11.0" + "@types/webpack-env": "^1.13.9", + "@vue/cli-shared-utils": "^3.7.0", + "fork-ts-checker-webpack-plugin": "^0.5.2", + "globby": "^9.2.0", + "ts-loader": "^5.3.3", + "tslint": "^5.15.0", + "webpack": ">=4 < 4.29" + }, + "dependencies": { + "tslint": { + "version": "5.16.0", + "resolved": "https://registry.npmjs.org/tslint/-/tslint-5.16.0.tgz", + "integrity": "sha512-UxG2yNxJ5pgGwmMzPMYh/CCnCnh0HfPgtlVRDs1ykZklufFBL1ZoTlWFRz2NQjcoEiDoRp+JyT0lhBbbH/obyA==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.0.0", + "builtin-modules": "^1.1.1", + "chalk": "^2.3.0", + "commander": "^2.12.1", + "diff": "^3.2.0", + "glob": "^7.1.1", + "js-yaml": "^3.13.0", + "minimatch": "^3.0.4", + "mkdirp": "^0.5.1", + "resolve": "^1.3.2", + "semver": "^5.3.0", + "tslib": "^1.8.0", + "tsutils": "^2.29.0" + } + } } }, "@vue/cli-service": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/@vue/cli-service/-/cli-service-3.3.0.tgz", - "integrity": "sha512-7PNitKBBCFcGfCvXSiuUGV2GpGA6KEupQcuxQ2xPL5T3UMSAzJLpx7Siw/9++yO4nQEib6yP3YQk2zTfeXWTSA==", + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/@vue/cli-service/-/cli-service-3.7.0.tgz", + "integrity": "sha512-RMVwpCE3EB9cL9VAgu1Dy/tGxz5zrVG4UMPk5t4KDu8jJhHxvcAzgIEIfS6KRp0AKfA6iDW4J0NU0fopnpyL+g==", "dev": true, "requires": { "@intervolga/optimize-cssnano-plugin": "^1.0.5", - "@vue/cli-overlay": "^3.3.0", - "@vue/cli-shared-utils": "^3.3.0", + "@soda/friendly-errors-webpack-plugin": "^1.7.1", + "@vue/cli-overlay": "^3.7.0", + "@vue/cli-shared-utils": "^3.7.0", + "@vue/component-compiler-utils": "^2.6.0", "@vue/preload-webpack-plugin": "^1.1.0", "@vue/web-component-wrapper": "^1.2.0", - "acorn": "^6.0.4", + "acorn": "^6.1.1", "acorn-walk": "^6.1.1", "address": "^1.0.3", - "autoprefixer": "^8.6.5", - "cache-loader": "^1.2.5", - "case-sensitive-paths-webpack-plugin": "^2.1.2", - "chalk": "^2.4.1", - "clipboardy": "^1.2.3", - "cliui": "^4.1.0", + "autoprefixer": "^9.5.1", + "browserslist": "^4.5.4", + "cache-loader": "^2.0.1", + "case-sensitive-paths-webpack-plugin": "^2.2.0", + "chalk": "^2.4.2", + "cli-highlight": "^2.1.0", + "clipboardy": "^2.0.0", + "cliui": "^5.0.0", "copy-webpack-plugin": "^4.6.0", "css-loader": "^1.0.1", - "cssnano": "^4.1.8", + "cssnano": "^4.1.10", + "current-script-polyfill": "^1.0.0", "debug": "^4.1.1", + "dotenv": "^7.0.0", + "dotenv-expand": "^5.1.0", "escape-string-regexp": "^1.0.5", - "file-loader": "^2.0.0", - "friendly-errors-webpack-plugin": "^1.7.0", + "file-loader": "^3.0.1", "fs-extra": "^7.0.1", - "globby": "^8.0.1", + "globby": "^9.2.0", "hash-sum": "^1.0.2", "html-webpack-plugin": "^3.2.0", "launch-editor-middleware": "^2.2.1", "lodash.defaultsdeep": "^4.6.0", "lodash.mapvalues": "^4.6.0", "lodash.transform": "^4.6.0", - "mini-css-extract-plugin": "^0.5.0", + "mini-css-extract-plugin": "^0.6.0", "minimist": "^1.2.0", - "ora": "^3.0.0", + "ora": "^3.4.0", "portfinder": "^1.0.20", "postcss-loader": "^3.0.0", - "read-pkg": "^4.0.1", - "semver": "^5.6.0", + "read-pkg": "^5.0.0", + "semver": "^6.0.0", "slash": "^2.0.0", "source-map-url": "^0.4.0", "ssri": "^6.0.1", "string.prototype.padend": "^3.0.0", - "terser-webpack-plugin": "^1.2.1", - "thread-loader": "^1.2.0", + "terser-webpack-plugin": "^1.2.3", + "thread-loader": "^2.1.2", "url-loader": "^1.1.2", - "vue-loader": "^15.4.2", - "webpack": "4", - "webpack-bundle-analyzer": "^3.0.3", + "vue-loader": "^15.7.0", + "webpack": ">=4 < 4.29", + "webpack-bundle-analyzer": "^3.3.0", "webpack-chain": "^4.11.0", - "webpack-dev-server": "^3.1.14", - "webpack-merge": "^4.1.5", + "webpack-dev-server": "^3.3.1", + "webpack-merge": "^4.2.1", "yorkie": "^2.0.0" }, "dependencies": { - "@vue/cli-shared-utils": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/@vue/cli-shared-utils/-/cli-shared-utils-3.3.0.tgz", - "integrity": "sha512-V/sU1jc7/jMCAbU8uA5f4j9Yd8lTqdi3I6FEHfLG1nstwhaNi4BU3WKWOAl72NYVWFYG8VuCrYWDn75kMimtuw==", + "acorn": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.1.1.tgz", + "integrity": "sha512-jPTiwtOxaHNaAPg/dmrJ/beuzLRnXtB0kQPQ8JpotKJgTB6rX6c8mlf315941pyjBSaPg8NHXS9fhP4u17DpGA==", + "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": { - "chalk": "^2.4.1", - "execa": "^1.0.0", - "joi": "^14.3.0", - "launch-editor": "^2.2.1", - "lru-cache": "^5.1.1", - "node-ipc": "^9.1.1", - "opn": "^5.3.0", - "ora": "^3.0.0", - "request": "^2.87.0", - "request-promise-native": "^1.0.5", - "semver": "^5.5.0", - "string.prototype.padstart": "^3.0.0" + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" } }, "debug": { @@ -177,107 +320,84 @@ "ms": "^2.1.1" } }, - "hoek": { - "version": "6.1.2", - "resolved": "https://registry.npmjs.org/hoek/-/hoek-6.1.2.tgz", - "integrity": "sha512-6qhh/wahGYZHFSFw12tBbJw5fsAhhwrrG/y3Cs0YMTv2WzMnL0oLPnQJjv1QJvEfylRSOFuP+xCu+tdx0tD16Q==", - "dev": true - }, - "joi": { - "version": "14.3.1", - "resolved": "https://registry.npmjs.org/joi/-/joi-14.3.1.tgz", - "integrity": "sha512-LQDdM+pkOrpAn4Lp+neNIFV3axv1Vna3j38bisbQhETPMANYRbFJFUyOZcOClYvM/hppMhGWuKSFEK9vjrB+bQ==", - "dev": true, - "requires": { - "hoek": "6.x.x", - "isemail": "3.x.x", - "topo": "3.x.x" - } - }, - "lru-cache": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", - "dev": true, - "requires": { - "yallist": "^3.0.2" - } - }, "ms": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", "dev": true }, - "ora": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ora/-/ora-3.0.0.tgz", - "integrity": "sha512-LBS97LFe2RV6GJmXBi6OKcETKyklHNMV0xw7BtsVn2MlsgsydyZetSCbCANr+PFLmDyv4KV88nn0eCKza665Mg==", - "dev": true, - "requires": { - "chalk": "^2.3.1", - "cli-cursor": "^2.1.0", - "cli-spinners": "^1.1.0", - "log-symbols": "^2.2.0", - "strip-ansi": "^4.0.0", - "wcwidth": "^1.0.1" - } - }, - "slash": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz", - "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==", + "semver": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.0.0.tgz", + "integrity": "sha512-0UewU+9rFapKFnlbirLi3byoOuhrSsli/z/ihNnvM24vgF+8sNBiI1LZPBSH9wJKUwaUbw+s3hToDLCXkrghrQ==", "dev": true } } }, "@vue/cli-shared-utils": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/@vue/cli-shared-utils/-/cli-shared-utils-3.1.1.tgz", - "integrity": "sha512-r+R+5LI6IHHPI5tbOSDy5DpiY5O9eTy8LPr/QCPb5RIOg+Pg03VlElW4BL69hePXEHCQZZDsOzgItSmat6mBhg==", + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/@vue/cli-shared-utils/-/cli-shared-utils-3.7.0.tgz", + "integrity": "sha512-+LPDAQ1CE3ci1ADOvNqJMPdqyxgJxOq5HUgGDSKCHwviXF6GtynfljZXiSzgWh5ueMFxJphCfeMsTZqFWwsHVg==", "dev": true, "requires": { "chalk": "^2.4.1", "execa": "^1.0.0", - "joi": "^13.0.0", + "joi": "^14.3.0", "launch-editor": "^2.2.1", - "lru-cache": "^4.1.3", + "lru-cache": "^5.1.1", "node-ipc": "^9.1.1", "opn": "^5.3.0", - "ora": "^2.1.0", + "ora": "^3.4.0", "request": "^2.87.0", - "request-promise-native": "^1.0.5", - "semver": "^5.5.0", + "request-promise-native": "^1.0.7", + "semver": "^6.0.0", "string.prototype.padstart": "^3.0.0" + }, + "dependencies": { + "lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, + "requires": { + "yallist": "^3.0.2" + } + }, + "semver": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.0.0.tgz", + "integrity": "sha512-0UewU+9rFapKFnlbirLi3byoOuhrSsli/z/ihNnvM24vgF+8sNBiI1LZPBSH9wJKUwaUbw+s3hToDLCXkrghrQ==", + "dev": true + } } }, "@vue/component-compiler-utils": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/@vue/component-compiler-utils/-/component-compiler-utils-2.5.0.tgz", - "integrity": "sha512-mSB8jWmE/ZeYZHPDEx9hNiiRh5P2V1Q0tObxEQWtxxfXtkIAvPnj7oucGm5SO8Y/QwIlDJgAGqHfj5MCjoKoOg==", + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/@vue/component-compiler-utils/-/component-compiler-utils-2.6.0.tgz", + "integrity": "sha512-IHjxt7LsOFYc0DkTncB7OXJL7UzwOLPPQCfEUNyxL2qt+tF12THV+EO33O1G2Uk4feMSWua3iD39Itszx0f0bw==", "dev": true, "requires": { "consolidate": "^0.15.1", "hash-sum": "^1.0.2", "lru-cache": "^4.1.2", "merge-source-map": "^1.1.0", - "postcss": "^7.0.7", + "postcss": "^7.0.14", "postcss-selector-parser": "^5.0.0", - "prettier": "1.13.7", - "source-map": "^0.7.3", - "vue-template-es2015-compiler": "^1.6.0" + "prettier": "1.16.3", + "source-map": "~0.6.1", + "vue-template-es2015-compiler": "^1.9.0" }, "dependencies": { "prettier": { - "version": "1.13.7", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-1.13.7.tgz", - "integrity": "sha512-KIU72UmYPGk4MujZGYMFwinB7lOf2LsDNGSOC8ufevsrPLISrZbNJlWstRi3m0AMuszbH+EFSQ/r6w56RSPK6w==", + "version": "1.16.3", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-1.16.3.tgz", + "integrity": "sha512-kn/GU6SMRYPxUakNXhpP0EedT/KmaPzr0H5lIsDogrykbaxOpOfAFfk5XA7DZrJyMAv1wlMV3CPcZruGXVVUZw==", "dev": true }, "source-map": { - "version": "0.7.3", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", - "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true } } @@ -485,19 +605,36 @@ "dev": true }, "accepts": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.5.tgz", - "integrity": "sha1-63d99gEXI6OxTopywIBcjoZ0a9I=", + "version": "1.3.7", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", + "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==", "dev": true, "requires": { - "mime-types": "~2.1.18", - "negotiator": "0.6.1" + "mime-types": "~2.1.24", + "negotiator": "0.6.2" + }, + "dependencies": { + "mime-db": { + "version": "1.40.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.40.0.tgz", + "integrity": "sha512-jYdeOMPy9vnxEqFRRo6ZvTZ8d9oPb+k18PKoYNYUe2stVEBPPwsln/qWzdbmaIvnhZ9v2P+CuecK+fpUfsV2mA==", + "dev": true + }, + "mime-types": { + "version": "2.1.24", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.24.tgz", + "integrity": "sha512-WaFHS3MCl5fapm3oLxU4eYDw77IQM2ACcxQ9RIxfaC3ooc6PFuBMGZZsYpvoXS5D5QTWPieo1jjLdAm3TBP3cQ==", + "dev": true, + "requires": { + "mime-db": "1.40.0" + } + } } }, "acorn": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.0.5.tgz", - "integrity": "sha512-i33Zgp3XWtmZBMNvCr4azvOFeWVw1Rk6p3hfi3LUDvIFraOMywb1kAtrbi+med14m4Xfpqm3zRZMT+c0FNE7kg==", + "version": "5.7.3", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.3.tgz", + "integrity": "sha512-T/zvzYRfbVojPWahDsE5evJdHb3oJoQfFbsrKM7w5Zcs++Tr257tia3BmMP8XYVjp1S9RZXQMh7gao96BlqZOw==", "dev": true }, "acorn-dynamic-import": { @@ -507,14 +644,6 @@ "dev": true, "requires": { "acorn": "^5.0.0" - }, - "dependencies": { - "acorn": { - "version": "5.7.3", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.3.tgz", - "integrity": "sha512-T/zvzYRfbVojPWahDsE5evJdHb3oJoQfFbsrKM7w5Zcs++Tr257tia3BmMP8XYVjp1S9RZXQMh7gao96BlqZOw==", - "dev": true - } } }, "acorn-walk": { @@ -524,9 +653,9 @@ "dev": true }, "address": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/address/-/address-1.0.3.tgz", - "integrity": "sha512-z55ocwKBRLryBs394Sm3ushTtBeg6VAeuku7utSoSnsJKvKcnXFIyC6vh27n3rXyxSgkJBBCAvyOn7gSUcTYjg==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/address/-/address-1.1.0.tgz", + "integrity": "sha512-4diPfzWbLEIElVG4AnqP+00SULlPzNuyJFNnmMrLgyaxG6tZXJ1sn7mjBu4fHrJE+Yp/jgylOweJn2xsLMFggQ==", "dev": true }, "after": { @@ -553,9 +682,9 @@ "dev": true }, "ajv-keywords": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.2.0.tgz", - "integrity": "sha1-6GuBnGAs+IIa1jdBNpjx3sAhhHo=", + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.4.0.tgz", + "integrity": "sha512-aUjdRFISbuFOl0EIZc+9e4FfZp0bDZgAdOOf30bJmw8VM9v84SHyVyxDfbWxpGYbdZD/9XoKxfHVNmxPkhwyGw==", "dev": true }, "alphanum-sort": { @@ -571,9 +700,9 @@ "dev": true }, "ansi-colors": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-3.2.3.tgz", - "integrity": "sha512-LEHHyuhlPY3TmuUYMh2oz89lTShfvgbmzaBcxve9t/9Wuy7Dwf4yoAKcND7KFT1HAQfqZ12qtc+DUrBMeKF9nw==", + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-3.2.4.tgz", + "integrity": "sha512-hHUXGagefjN2iRrID63xckIvotOXOojhQKWIPUZ4mNUZ9nLZW+7FMNoE1lOkEhNWYsx/7ysGIuJYCiMAA9FnrA==", "dev": true }, "ansi-html": { @@ -597,6 +726,12 @@ "color-convert": "^1.9.0" } }, + "any-promise": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", + "integrity": "sha1-q8av7tzqUugJzcA3au0845Y10X8=", + "dev": true + }, "anymatch": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", @@ -605,6 +740,17 @@ "requires": { "micromatch": "^3.1.4", "normalize-path": "^2.1.1" + }, + "dependencies": { + "normalize-path": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", + "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", + "dev": true, + "requires": { + "remove-trailing-separator": "^1.0.1" + } + } } }, "aproba": { @@ -712,12 +858,6 @@ "resolved": "https://registry.npmjs.org/arraybuffer.slice/-/arraybuffer.slice-0.0.7.tgz", "integrity": "sha512-wGUIVQXuehL5TCqQun8OW81jGzAWycqzFF8lFp+GOM5BXLYj3bKNsYC4daB7n6XjCqxQA/qgTJ+8ANR3acjrog==" }, - "arrify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", - "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=", - "dev": true - }, "asn1": { "version": "0.2.4", "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", @@ -739,11 +879,12 @@ } }, "assert": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/assert/-/assert-1.4.1.tgz", - "integrity": "sha1-mZEtWRg2tab1s0XA8H7vwI/GXZE=", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/assert/-/assert-1.5.0.tgz", + "integrity": "sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA==", "dev": true, "requires": { + "object-assign": "^4.1.1", "util": "0.10.3" }, "dependencies": { @@ -783,9 +924,9 @@ "dev": true }, "async-each": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.1.tgz", - "integrity": "sha1-GdOGodntxufByF04iu28xW0zYC0=", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.3.tgz", + "integrity": "sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ==", "dev": true }, "async-foreach": { @@ -812,46 +953,17 @@ "dev": true }, "autoprefixer": { - "version": "8.6.5", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-8.6.5.tgz", - "integrity": "sha512-PLWJN3Xo/rycNkx+mp8iBDMTm3FeWe4VmYaZDSqL5QQB9sLsQkG5k8n+LNDFnhh9kdq2K+egL/icpctOmDHwig==", + "version": "9.5.1", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-9.5.1.tgz", + "integrity": "sha512-KJSzkStUl3wP0D5sdMlP82Q52JLy5+atf2MHAre48+ckWkXgixmfHyWmA77wFDy6jTHU6mIgXv6hAQ2mf1PjJQ==", "dev": true, "requires": { - "browserslist": "^3.2.8", - "caniuse-lite": "^1.0.30000864", + "browserslist": "^4.5.4", + "caniuse-lite": "^1.0.30000957", "normalize-range": "^0.1.2", "num2fraction": "^1.2.2", - "postcss": "^6.0.23", - "postcss-value-parser": "^3.2.3" - }, - "dependencies": { - "browserslist": { - "version": "3.2.8", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-3.2.8.tgz", - "integrity": "sha512-WHVocJYavUwVgVViC0ORikPHQquXwVh939TaelZ4WDqpWgTX/FsGhl/+P4qBUAGcRvtOgDgC+xftNWWp2RUTAQ==", - "dev": true, - "requires": { - "caniuse-lite": "^1.0.30000844", - "electron-to-chromium": "^1.3.47" - } - }, - "postcss": { - "version": "6.0.23", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz", - "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==", - "dev": true, - "requires": { - "chalk": "^2.4.1", - "source-map": "^0.6.1", - "supports-color": "^5.4.0" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } + "postcss": "^7.0.14", + "postcss-value-parser": "^3.3.1" } }, "aws-sign2": { @@ -1047,9 +1159,9 @@ "dev": true }, "binary-extensions": { - "version": "1.12.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.12.0.tgz", - "integrity": "sha512-DYWGk01lDcxeS/K9IHPGWfT8PsJmbXRtRd2Sx72Tnb8pcYZQFF1oSDb8hJtS1vhp212q1Rzi5dUf9+nq0o9UIg==", + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz", + "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==", "dev": true }, "blob": { @@ -1067,9 +1179,9 @@ } }, "bluebird": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.3.tgz", - "integrity": "sha512-/qKPUQlaW1OyR51WeCPBvRnAlnZFUJkCSG5HzGnuIqhgyJtF+T94lFnn33eiazjRm2LAHVy2guNnaq48X9SJuw==", + "version": "3.5.4", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.4.tgz", + "integrity": "sha512-FG+nFEZChJrbQ9tIccIfZJBz3J7mLrAhxakAbnrJWn8d7aKOC+LWifa0G+p4ZqKp4y13T7juYvdhq9NzKdsrjw==", "dev": true }, "bn.js": { @@ -1241,14 +1353,14 @@ } }, "browserslist": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.4.0.tgz", - "integrity": "sha512-tQkHS8VVxWbrjnNDXgt7/+SuPJ7qDvD0Y2e6bLtoQluR2SPvlmPUcfcU75L1KAalhqULlIFJlJ6BDfnYyJxJsw==", + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.6.0.tgz", + "integrity": "sha512-Jk0YFwXBuMOOol8n6FhgkDzn3mY9PYLYGk29zybF05SbRTsMgPqmTNeQQhOghCxq5oFqAXE3u4sYddr4C0uRhg==", "dev": true, "requires": { - "caniuse-lite": "^1.0.30000928", - "electron-to-chromium": "^1.3.100", - "node-releases": "^1.1.3" + "caniuse-lite": "^1.0.30000967", + "electron-to-chromium": "^1.3.133", + "node-releases": "^1.1.19" } }, "buffer": { @@ -1299,33 +1411,34 @@ "dev": true }, "cacache": { - "version": "10.0.4", - "resolved": "http://registry.npmjs.org/cacache/-/cacache-10.0.4.tgz", - "integrity": "sha512-Dph0MzuH+rTQzGPNT9fAnrPmMmjKfST6trxJeK7NQuHRaVw24VzPRWTmg9MpcwOVQZO0E1FBICUlFeNaKPIfHA==", - "dev": true, - "requires": { - "bluebird": "^3.5.1", - "chownr": "^1.0.1", - "glob": "^7.1.2", - "graceful-fs": "^4.1.11", - "lru-cache": "^4.1.1", - "mississippi": "^2.0.0", + "version": "11.3.2", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-11.3.2.tgz", + "integrity": "sha512-E0zP4EPGDOaT2chM08Als91eYnf8Z+eH1awwwVsngUmgppfM5jjJ8l3z5vO5p5w/I3LsiXawb1sW0VY65pQABg==", + "dev": true, + "requires": { + "bluebird": "^3.5.3", + "chownr": "^1.1.1", + "figgy-pudding": "^3.5.1", + "glob": "^7.1.3", + "graceful-fs": "^4.1.15", + "lru-cache": "^5.1.1", + "mississippi": "^3.0.0", "mkdirp": "^0.5.1", "move-concurrently": "^1.0.1", "promise-inflight": "^1.0.1", "rimraf": "^2.6.2", - "ssri": "^5.2.4", - "unique-filename": "^1.1.0", + "ssri": "^6.0.1", + "unique-filename": "^1.1.1", "y18n": "^4.0.0" }, "dependencies": { - "ssri": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-5.3.0.tgz", - "integrity": "sha512-XRSIPqLij52MtgoQavH/x/dU1qVKtWUAAZeOHsR9c2Ddi4XerFy3mc1alf+dLJKl9EUIm/Ht+EowFkTUOA6GAQ==", + "lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", "dev": true, "requires": { - "safe-buffer": "^5.1.1" + "yallist": "^3.0.2" } } } @@ -1348,15 +1461,29 @@ } }, "cache-loader": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/cache-loader/-/cache-loader-1.2.5.tgz", - "integrity": "sha512-enWKEQ4kO3YreDFd7AtVRjtJBmNiqh/X9hVDReu0C4qm8gsGmySkwuWtdc+N5O+vq5FzxL1mIZc30NyXCB7o/Q==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/cache-loader/-/cache-loader-2.0.1.tgz", + "integrity": "sha512-V99T3FOynmGx26Zom+JrVBytLBsmUCzVG2/4NnUKgvXN4bEV42R1ERl1IyiH/cvFIDA1Ytq2lPZ9tXDSahcQpQ==", "dev": true, "requires": { "loader-utils": "^1.1.0", "mkdirp": "^0.5.1", - "neo-async": "^2.5.0", - "schema-utils": "^0.4.2" + "neo-async": "^2.6.0", + "normalize-path": "^3.0.0", + "schema-utils": "^1.0.0" + }, + "dependencies": { + "schema-utils": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", + "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", + "dev": true, + "requires": { + "ajv": "^6.1.0", + "ajv-errors": "^1.0.0", + "ajv-keywords": "^3.1.0" + } + } } }, "call-me-maybe": { @@ -1405,9 +1532,9 @@ } }, "camelcase": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", - "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=", + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", "dev": true }, "camelcase-keys": { @@ -1441,15 +1568,15 @@ } }, "caniuse-lite": { - "version": "1.0.30000928", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30000928.tgz", - "integrity": "sha512-aSpMWRXL6ZXNnzm8hgE4QDLibG5pVJ2Ujzsuj3icazlIkxXkPXtL+BWnMx6FBkWmkZgBHGUxPZQvrbRw2ZTxhg==", + "version": "1.0.30000967", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30000967.tgz", + "integrity": "sha512-rUBIbap+VJfxTzrM4akJ00lkvVb5/n5v3EGXfWzSH5zT8aJmGzjA8HWhJ4U6kCpzxozUSnB+yvAYDRPY6mRpgQ==", "dev": true }, "case-sensitive-paths-webpack-plugin": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/case-sensitive-paths-webpack-plugin/-/case-sensitive-paths-webpack-plugin-2.1.2.tgz", - "integrity": "sha512-oEZgAFfEvKtjSRCu6VgYkuGxwrWXMnQzyBmlLPP7r6PWQVtHxP5Z5N6XsuJvtoVax78am/r7lr46bwo3IVEBOg==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/case-sensitive-paths-webpack-plugin/-/case-sensitive-paths-webpack-plugin-2.2.0.tgz", + "integrity": "sha512-u5ElzokS8A1pm9vM3/iDgTcI3xqHxuCao94Oz8etI3cf0Tio0p8izkDYbTIn09uP3yUUr6+veaE6IkjnTYS46g==", "dev": true }, "caseless": { @@ -1476,24 +1603,23 @@ "dev": true }, "chokidar": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.0.4.tgz", - "integrity": "sha512-z9n7yt9rOvIJrMhvDtDictKrkFHeihkNl6uWMmZlmL6tJtX9Cs+87oK+teBx+JIgzvbX3yZHT3eF8vpbDxHJXQ==", + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.5.tgz", + "integrity": "sha512-i0TprVWp+Kj4WRPtInjexJ8Q+BqTE909VpH8xVhXrJkoc5QC8VO9TryGOqTr+2hljzc1sC62t22h5tZePodM/A==", "dev": true, "requires": { "anymatch": "^2.0.0", - "async-each": "^1.0.0", - "braces": "^2.3.0", - "fsevents": "^1.2.2", + "async-each": "^1.0.1", + "braces": "^2.3.2", + "fsevents": "^1.2.7", "glob-parent": "^3.1.0", - "inherits": "^2.0.1", + "inherits": "^2.0.3", "is-binary-path": "^1.0.0", "is-glob": "^4.0.0", - "lodash.debounce": "^4.0.8", - "normalize-path": "^2.1.1", + "normalize-path": "^3.0.0", "path-is-absolute": "^1.0.0", - "readdirp": "^2.0.0", - "upath": "^1.0.5" + "readdirp": "^2.2.1", + "upath": "^1.1.1" } }, "chownr": { @@ -1581,67 +1707,85 @@ "restore-cursor": "^2.0.0" } }, + "cli-highlight": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/cli-highlight/-/cli-highlight-2.1.1.tgz", + "integrity": "sha512-0y0VlNmdD99GXZHYnvrQcmHxP8Bi6T00qucGgBgGv4kJ0RyDthNnnFPupHV7PYv/OXSVk+azFbOeaW6+vGmx9A==", + "dev": true, + "requires": { + "chalk": "^2.3.0", + "highlight.js": "^9.6.0", + "mz": "^2.4.0", + "parse5": "^4.0.0", + "yargs": "^13.0.0" + } + }, "cli-spinners": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-1.3.1.tgz", - "integrity": "sha512-1QL4544moEsDVH9T/l6Cemov/37iv1RtoKf7NJ04A60+4MREXNfx/QvavbH6QoGdsD4N4Mwy49cmaINR/o2mdg==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.1.0.tgz", + "integrity": "sha512-8B00fJOEh1HPrx4fo5eW16XmE1PcL1tGpGrxy63CXGP9nHdPBN63X75hA1zhvQuhVztJWLqV58Roj2qlNM7cAA==", "dev": true }, "clipboardy": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/clipboardy/-/clipboardy-1.2.3.tgz", - "integrity": "sha512-2WNImOvCRe6r63Gk9pShfkwXsVtKCroMAevIbiae021mS850UkWPbevxsBz3tnvjZIEGvlwaqCPsw+4ulzNgJA==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/clipboardy/-/clipboardy-2.0.0.tgz", + "integrity": "sha512-XbVjHMsss0giNUkp/tV/3eEAZe8i1fZTLzmPKqjE1RGIAWOTiF5D014f6R+g53ZAq0IK3cPrJXFvqE8eQjhFYQ==", "dev": true, "requires": { - "arch": "^2.1.0", - "execa": "^0.8.0" + "arch": "^2.1.1", + "execa": "^1.0.0" + } + }, + "cliui": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", + "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", + "dev": true, + "requires": { + "string-width": "^3.1.0", + "strip-ansi": "^5.2.0", + "wrap-ansi": "^5.1.0" }, "dependencies": { - "cross-spawn": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", - "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=", + "ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "dev": true + }, + "string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", "dev": true, "requires": { - "lru-cache": "^4.0.1", - "shebang-command": "^1.2.0", - "which": "^1.2.9" + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" } }, - "execa": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-0.8.0.tgz", - "integrity": "sha1-2NdrvBtVIX7RkP1t1J08d07PyNo=", + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", "dev": true, "requires": { - "cross-spawn": "^5.0.1", - "get-stream": "^3.0.0", - "is-stream": "^1.1.0", - "npm-run-path": "^2.0.0", - "p-finally": "^1.0.0", - "signal-exit": "^3.0.0", - "strip-eof": "^1.0.0" + "ansi-regex": "^4.1.0" } }, - "get-stream": { - "version": "3.0.0", - "resolved": "http://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", - "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=", - "dev": true + "wrap-ansi": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", + "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.0", + "string-width": "^3.0.0", + "strip-ansi": "^5.0.0" + } } } }, - "cliui": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-4.1.0.tgz", - "integrity": "sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ==", - "dev": true, - "requires": { - "string-width": "^2.1.1", - "strip-ansi": "^4.0.0", - "wrap-ansi": "^2.0.0" - } - }, "clone": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", @@ -1688,9 +1832,9 @@ } }, "color": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/color/-/color-3.1.0.tgz", - "integrity": "sha512-CwyopLkuRYO5ei2EpzpIh6LqJMt6Mt+jZhO5VI5f/wJLZriXQE32/SSqzmrh+QB+AZT81Cj8yv+7zwToW8ahZg==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/color/-/color-3.1.1.tgz", + "integrity": "sha512-PvUltIXRjehRKPSy89VnDWFKY58xyhTLyxIg21vwQBI6qLwZNPmC8k3C1uytIgFKEpOIzN4y32iPm8231zFHIg==", "dev": true, "requires": { "color-convert": "^1.9.1", @@ -1722,12 +1866,6 @@ "simple-swizzle": "^0.2.2" } }, - "colors": { - "version": "1.1.2", - "resolved": "http://registry.npmjs.org/colors/-/colors-1.1.2.tgz", - "integrity": "sha1-FopHAXVran9RoSzgyXv6KMCE7WM=", - "dev": true - }, "combined-stream": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.7.tgz", @@ -1765,25 +1903,33 @@ "integrity": "sha1-ZF/ErfWLcrZJ1crmUTVhnbJv8UM=" }, "compressible": { - "version": "2.0.15", - "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.15.tgz", - "integrity": "sha512-4aE67DL33dSW9gw4CI2H/yTxqHLNcxp0yS6jB+4h+wr3e43+1z7vm0HU9qXOH8j+qjKuL8+UtkOxYQSMq60Ylw==", + "version": "2.0.17", + "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.17.tgz", + "integrity": "sha512-BGHeLCK1GV7j1bSmQQAi26X+GgWcTjLr/0tzSvMCl3LH1w1IJ4PFSPoV5316b30cneTziC+B1a+3OjoSUcQYmw==", "dev": true, "requires": { - "mime-db": ">= 1.36.0 < 2" + "mime-db": ">= 1.40.0 < 2" + }, + "dependencies": { + "mime-db": { + "version": "1.40.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.40.0.tgz", + "integrity": "sha512-jYdeOMPy9vnxEqFRRo6ZvTZ8d9oPb+k18PKoYNYUe2stVEBPPwsln/qWzdbmaIvnhZ9v2P+CuecK+fpUfsV2mA==", + "dev": true + } } }, "compression": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.3.tgz", - "integrity": "sha512-HSjyBG5N1Nnz7tF2+O7A9XUhyjru71/fwgNb7oIsEVHR0WShfs2tIS/EySLgiTe98aOK18YDlMXpzjCXY/n9mg==", + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz", + "integrity": "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==", "dev": true, "requires": { "accepts": "~1.3.5", "bytes": "3.0.0", - "compressible": "~2.0.14", + "compressible": "~2.0.16", "debug": "2.6.9", - "on-headers": "~1.0.1", + "on-headers": "~1.0.2", "safe-buffer": "5.1.2", "vary": "~1.1.2" } @@ -1902,6 +2048,47 @@ "serialize-javascript": "^1.4.0" }, "dependencies": { + "cacache": { + "version": "10.0.4", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-10.0.4.tgz", + "integrity": "sha512-Dph0MzuH+rTQzGPNT9fAnrPmMmjKfST6trxJeK7NQuHRaVw24VzPRWTmg9MpcwOVQZO0E1FBICUlFeNaKPIfHA==", + "dev": true, + "requires": { + "bluebird": "^3.5.1", + "chownr": "^1.0.1", + "glob": "^7.1.2", + "graceful-fs": "^4.1.11", + "lru-cache": "^4.1.1", + "mississippi": "^2.0.0", + "mkdirp": "^0.5.1", + "move-concurrently": "^1.0.1", + "promise-inflight": "^1.0.1", + "rimraf": "^2.6.2", + "ssri": "^5.2.4", + "unique-filename": "^1.1.0", + "y18n": "^4.0.0" + } + }, + "find-cache-dir": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-1.0.0.tgz", + "integrity": "sha1-kojj6ePMN0hxfTnq3hfPcfww7m8=", + "dev": true, + "requires": { + "commondir": "^1.0.1", + "make-dir": "^1.0.0", + "pkg-dir": "^2.0.0" + } + }, + "find-up": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", + "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", + "dev": true, + "requires": { + "locate-path": "^2.0.0" + } + }, "globby": { "version": "7.1.1", "resolved": "https://registry.npmjs.org/globby/-/globby-7.1.1.tgz", @@ -1915,6 +2102,107 @@ "pify": "^3.0.0", "slash": "^1.0.0" } + }, + "ignore": { + "version": "3.3.10", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-3.3.10.tgz", + "integrity": "sha512-Pgs951kaMm5GXP7MOvxERINe3gsaVjUWFm+UZPSq9xYriQAksyhg0csnS0KXSNRD5NmNdapXEpjxG49+AKh/ug==", + "dev": true + }, + "locate-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", + "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", + "dev": true, + "requires": { + "p-locate": "^2.0.0", + "path-exists": "^3.0.0" + } + }, + "make-dir": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz", + "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==", + "dev": true, + "requires": { + "pify": "^3.0.0" + } + }, + "mississippi": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mississippi/-/mississippi-2.0.0.tgz", + "integrity": "sha512-zHo8v+otD1J10j/tC+VNoGK9keCuByhKovAvdn74dmxJl9+mWHnx6EMsDN4lgRoMI/eYo2nchAxniIbUPb5onw==", + "dev": true, + "requires": { + "concat-stream": "^1.5.0", + "duplexify": "^3.4.2", + "end-of-stream": "^1.1.0", + "flush-write-stream": "^1.0.0", + "from2": "^2.1.0", + "parallel-transform": "^1.1.0", + "pump": "^2.0.1", + "pumpify": "^1.3.3", + "stream-each": "^1.1.0", + "through2": "^2.0.0" + } + }, + "p-limit": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", + "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", + "dev": true, + "requires": { + "p-try": "^1.0.0" + } + }, + "p-locate": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", + "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", + "dev": true, + "requires": { + "p-limit": "^1.1.0" + } + }, + "p-try": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", + "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", + "dev": true + }, + "pkg-dir": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-2.0.0.tgz", + "integrity": "sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s=", + "dev": true, + "requires": { + "find-up": "^2.1.0" + } + }, + "pump": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz", + "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==", + "dev": true, + "requires": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "slash": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-1.0.0.tgz", + "integrity": "sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU=", + "dev": true + }, + "ssri": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-5.3.0.tgz", + "integrity": "sha512-XRSIPqLij52MtgoQavH/x/dU1qVKtWUAAZeOHsR9c2Ddi4XerFy3mc1alf+dLJKl9EUIm/Ht+EowFkTUOA6GAQ==", + "dev": true, + "requires": { + "safe-buffer": "^5.1.1" + } } } }, @@ -1925,14 +2213,14 @@ "dev": true }, "cosmiconfig": { - "version": "5.0.7", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-5.0.7.tgz", - "integrity": "sha512-PcLqxTKiDmNT6pSpy4N6KtuPwb53W+2tzNvwOZw0WH9N6O0vLIBq0x8aj8Oj75ere4YcGi48bDFCL+3fRJdlNA==", + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-5.2.1.tgz", + "integrity": "sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA==", "dev": true, "requires": { "import-fresh": "^2.0.0", "is-directory": "^0.3.1", - "js-yaml": "^3.9.0", + "js-yaml": "^3.13.1", "parse-json": "^4.0.0" } }, @@ -2120,9 +2408,9 @@ "dev": true }, "css-what": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-2.1.2.tgz", - "integrity": "sha512-wan8dMWQ0GUeF7DGEPVjhHemVW/vy6xUYmFzRY8RYqgA0JtXC9rJmbScBjqSu6dg9q0lwPQy6ZAmJVr3PPTvqQ==", + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-2.1.3.tgz", + "integrity": "sha512-a+EPoD+uZiNfh+5fxw2nO9QwFa6nJe2Or35fGY6Ipw1R3R4AGz1d1TEZrCegvw2YTmZ0jXirGYlzxxpYSHwpEg==", "dev": true }, "cssesc": { @@ -2132,52 +2420,52 @@ "dev": true }, "cssnano": { - "version": "4.1.8", - "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-4.1.8.tgz", - "integrity": "sha512-5GIY0VzAHORpbKiL3rMXp4w4M1Ki+XlXgEXyuWXVd3h6hlASb+9Vo76dNP56/elLMVBBsUfusCo1q56uW0UWig==", + "version": "4.1.10", + "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-4.1.10.tgz", + "integrity": "sha512-5wny+F6H4/8RgNlaqab4ktc3e0/blKutmq8yNlBFXA//nSFFAqAngjNVRzUvCgYROULmZZUoosL/KSoZo5aUaQ==", "dev": true, "requires": { "cosmiconfig": "^5.0.0", - "cssnano-preset-default": "^4.0.6", + "cssnano-preset-default": "^4.0.7", "is-resolvable": "^1.0.0", "postcss": "^7.0.0" } }, "cssnano-preset-default": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-4.0.6.tgz", - "integrity": "sha512-UPboYbFaJFtDUhJ4fqctThWbbyF4q01/7UhsZbLzp35l+nUxtzh1SifoVlEfyLM3n3Z0htd8B1YlCxy9i+bQvg==", + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-4.0.7.tgz", + "integrity": "sha512-x0YHHx2h6p0fCl1zY9L9roD7rnlltugGu7zXSKQx6k2rYw0Hi3IqxcoAGF7u9Q5w1nt7vK0ulxV8Lo+EvllGsA==", "dev": true, "requires": { "css-declaration-sorter": "^4.0.1", "cssnano-util-raw-cache": "^4.0.1", "postcss": "^7.0.0", - "postcss-calc": "^7.0.0", - "postcss-colormin": "^4.0.2", + "postcss-calc": "^7.0.1", + "postcss-colormin": "^4.0.3", "postcss-convert-values": "^4.0.1", - "postcss-discard-comments": "^4.0.1", + "postcss-discard-comments": "^4.0.2", "postcss-discard-duplicates": "^4.0.2", "postcss-discard-empty": "^4.0.1", "postcss-discard-overridden": "^4.0.1", - "postcss-merge-longhand": "^4.0.10", - "postcss-merge-rules": "^4.0.2", + "postcss-merge-longhand": "^4.0.11", + "postcss-merge-rules": "^4.0.3", "postcss-minify-font-values": "^4.0.2", - "postcss-minify-gradients": "^4.0.1", - "postcss-minify-params": "^4.0.1", - "postcss-minify-selectors": "^4.0.1", + "postcss-minify-gradients": "^4.0.2", + "postcss-minify-params": "^4.0.2", + "postcss-minify-selectors": "^4.0.2", "postcss-normalize-charset": "^4.0.1", - "postcss-normalize-display-values": "^4.0.1", - "postcss-normalize-positions": "^4.0.1", - "postcss-normalize-repeat-style": "^4.0.1", - "postcss-normalize-string": "^4.0.1", - "postcss-normalize-timing-functions": "^4.0.1", + "postcss-normalize-display-values": "^4.0.2", + "postcss-normalize-positions": "^4.0.2", + "postcss-normalize-repeat-style": "^4.0.2", + "postcss-normalize-string": "^4.0.2", + "postcss-normalize-timing-functions": "^4.0.2", "postcss-normalize-unicode": "^4.0.1", "postcss-normalize-url": "^4.0.1", - "postcss-normalize-whitespace": "^4.0.1", - "postcss-ordered-values": "^4.1.1", - "postcss-reduce-initial": "^4.0.2", - "postcss-reduce-transforms": "^4.0.1", - "postcss-svgo": "^4.0.1", + "postcss-normalize-whitespace": "^4.0.2", + "postcss-ordered-values": "^4.1.2", + "postcss-reduce-initial": "^4.0.3", + "postcss-reduce-transforms": "^4.0.2", + "postcss-svgo": "^4.0.2", "postcss-unique-selectors": "^4.0.1" } }, @@ -2229,6 +2517,12 @@ } } }, + "current-script-polyfill": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/current-script-polyfill/-/current-script-polyfill-1.0.0.tgz", + "integrity": "sha1-8xz35PPiGLBybnOMqSoC00iO9hU=", + "dev": true + }, "currently-unhandled": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz", @@ -2275,13 +2569,10 @@ } }, "decamelize": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-2.0.0.tgz", - "integrity": "sha512-Ikpp5scV3MSYxY39ymh45ZLEecsTdv/Xj2CaQfI8RLMuwi7XvjX9H/fhraiSuU+C5w5NTDu4ZU72xNiZnurBPg==", - "dev": true, - "requires": { - "xregexp": "4.0.0" - } + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", + "dev": true }, "decode-uri-component": { "version": "0.2.0", @@ -2302,36 +2593,13 @@ "dev": true }, "default-gateway": { - "version": "2.7.2", - "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-2.7.2.tgz", - "integrity": "sha512-lAc4i9QJR0YHSDFdzeBQKfZ1SRDG3hsJNEkrpcZa8QhBfidLAilT60BDEIVUUGqosFp425KOgB3uYqcnQrWafQ==", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-4.2.0.tgz", + "integrity": "sha512-h6sMrVB1VMWVrW13mSc6ia/DwYYw5MN6+exNu1OaJeFac5aSAvwM7lZ0NVfTABuSkQelr4h5oebg3KB1XPdjgA==", "dev": true, "requires": { - "execa": "^0.10.0", + "execa": "^1.0.0", "ip-regex": "^2.1.0" - }, - "dependencies": { - "execa": { - "version": "0.10.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-0.10.0.tgz", - "integrity": "sha512-7XOMnz8Ynx1gGo/3hyV9loYNPWM94jG3+3T3Y8tsfSstFmETmENCMU/A/zj8Lyaj1lkgEepKepvd6240tBRvlw==", - "dev": true, - "requires": { - "cross-spawn": "^6.0.0", - "get-stream": "^3.0.0", - "is-stream": "^1.1.0", - "npm-run-path": "^2.0.0", - "p-finally": "^1.0.0", - "signal-exit": "^3.0.0", - "strip-eof": "^1.0.0" - } - }, - "get-stream": { - "version": "3.0.0", - "resolved": "http://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", - "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=", - "dev": true - } } }, "defaults": { @@ -2394,17 +2662,18 @@ } }, "del": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/del/-/del-3.0.0.tgz", - "integrity": "sha1-U+z2mf/LyzljdpGrE7rxYIGXZuU=", + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/del/-/del-4.1.1.tgz", + "integrity": "sha512-QwGuEUouP2kVwQenAsOof5Fv8K9t3D8Ca8NxcXKrIpEHjTXK5J2nXLdP+ALI1cgv8wj7KuwBhTwBkOZSJKM5XQ==", "dev": true, "requires": { + "@types/glob": "^7.1.1", "globby": "^6.1.0", - "is-path-cwd": "^1.0.0", - "is-path-in-cwd": "^1.0.0", - "p-map": "^1.1.1", - "pify": "^3.0.0", - "rimraf": "^2.2.8" + "is-path-cwd": "^2.0.0", + "is-path-in-cwd": "^2.0.0", + "p-map": "^2.0.0", + "pify": "^4.0.1", + "rimraf": "^2.6.3" }, "dependencies": { "globby": { @@ -2427,6 +2696,21 @@ "dev": true } } + }, + "pify": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", + "dev": true + }, + "rimraf": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", + "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", + "dev": true, + "requires": { + "glob": "^7.1.3" + } } } }, @@ -2488,12 +2772,11 @@ } }, "dir-glob": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-2.0.0.tgz", - "integrity": "sha512-37qirFDz8cA5fimp9feo43fSuRo2gHwaIn6dXL8Ber1dGwUosDrGZeCCXq57WnIqE4aQ+u3eQZzsk1yOzhdwag==", + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-2.2.2.tgz", + "integrity": "sha512-f9LBi5QWzIW3I6e//uxZoLBlUt9kcp66qo0sSCxL6YZKc75R1c4MFCoe/LaZiBGmgujvQdxc5Bn3QhfyvK5Hsw==", "dev": true, "requires": { - "arrify": "^1.0.1", "path-type": "^3.0.0" } }, @@ -2532,21 +2815,13 @@ } }, "dom-serializer": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.0.tgz", - "integrity": "sha1-BzxpdUbOB4DOI75KKOKT5AvDDII=", + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.1.tgz", + "integrity": "sha512-l0IU0pPzLWSHBcieZbpOKgkIn3ts3vAh7ZuFyXNwJxJXk/c4Gwj9xaTJwIDVQCXawWD0qb3IzMGH5rglQaO0XA==", "dev": true, "requires": { - "domelementtype": "~1.1.1", - "entities": "~1.1.1" - }, - "dependencies": { - "domelementtype": { - "version": "1.1.3", - "resolved": "http://registry.npmjs.org/domelementtype/-/domelementtype-1.1.3.tgz", - "integrity": "sha1-vSh3PiZCiBrsUVRJJCmcXNgiGFs=", - "dev": true - } + "domelementtype": "^1.3.0", + "entities": "^1.1.1" } }, "domain-browser": { @@ -2562,9 +2837,9 @@ "dev": true }, "domhandler": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.1.0.tgz", - "integrity": "sha1-0mRvXlf2w7qxHPbLBdPArPdBJZQ=", + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.4.2.tgz", + "integrity": "sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA==", "dev": true, "requires": { "domelementtype": "1" @@ -2589,6 +2864,18 @@ "is-obj": "^1.0.0" } }, + "dotenv": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-7.0.0.tgz", + "integrity": "sha512-M3NhsLbV1i6HuGzBUH8vXrtxOk+tWmzWKDMbAVSUp3Zsjm7ywFeuwrUXhmhQyRK1q5B5GGy7hcXPbj3bnfZg2g==", + "dev": true + }, + "dotenv-expand": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-5.1.0.tgz", + "integrity": "sha512-YXQl1DSa4/PQyRfgrv6aoNjhasp/p4qs9FjJ4q4cQk+8m4r6k4ZSiEyytKG8f8W9gi8WsQtIObNmKd+tMzNTmA==", + "dev": true + }, "duplexer": { "version": "0.1.1", "resolved": "http://registry.npmjs.org/duplexer/-/duplexer-0.1.1.tgz", @@ -2596,9 +2883,9 @@ "dev": true }, "duplexify": { - "version": "3.6.1", - "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.6.1.tgz", - "integrity": "sha512-vM58DwdnKmty+FSPzT14K9JXb90H+j5emaR4KYbr2KTIz00WHGbWOe5ghQTx233ZCLZtrGDALzKwcjEtSt35mA==", + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.7.1.tgz", + "integrity": "sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==", "dev": true, "requires": { "end-of-stream": "^1.0.0", @@ -2636,9 +2923,9 @@ "dev": true }, "electron-to-chromium": { - "version": "1.3.102", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.102.tgz", - "integrity": "sha512-2nzZuXw/KBPnI3QX3UOCSRvJiVy7o9+VHRDQ3D/EHCvVc89X6aj/GlNmEgiR2GBIhmSWXIi4W1M5okA5ScSlNg==", + "version": "1.3.134", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.134.tgz", + "integrity": "sha512-C3uK2SrtWg/gSWaluLHWSHjyebVZCe4ZC0NVgTAoTq8tCR9FareRK5T7R7AS/nPZShtlEcjVMX1kQ8wi4nU68w==", "dev": true }, "elliptic": { @@ -2656,6 +2943,12 @@ "minimalistic-crypto-utils": "^1.0.0" } }, + "emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", + "dev": true + }, "emojis-list": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-2.1.0.tgz", @@ -2772,16 +3065,17 @@ } }, "es-abstract": { - "version": "1.12.0", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.12.0.tgz", - "integrity": "sha512-C8Fx/0jFmV5IPoMOFPA9P9G5NtqW+4cOPit3MIuvR2t7Ag2K15EJTpxnHAYTzL+aYQJIESYeXZmDBfOBE1HcpA==", + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.13.0.tgz", + "integrity": "sha512-vDZfg/ykNxQVwup/8E1BZhVzFfBxs9NqMzGcvIJrqg5k2/5Za2bWo40dK2J1pgLngZ7c+Shh8lwYtLGyrwPutg==", "dev": true, "requires": { - "es-to-primitive": "^1.1.1", + "es-to-primitive": "^1.2.0", "function-bind": "^1.1.1", - "has": "^1.0.1", - "is-callable": "^1.1.3", - "is-regex": "^1.0.4" + "has": "^1.0.3", + "is-callable": "^1.1.4", + "is-regex": "^1.0.4", + "object-keys": "^1.0.12" } }, "es-to-primitive": { @@ -2808,9 +3102,9 @@ "dev": true }, "eslint-scope": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.0.tgz", - "integrity": "sha512-1G6UTDi7Jc1ELFwnR58HV4fK9OQK4S6N985f166xqXxpjU6plxFISJa2Ba9KCQuFa8RCnj/lSFJbHo7UFDBnUA==", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.3.tgz", + "integrity": "sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg==", "dev": true, "requires": { "esrecurse": "^4.1.0", @@ -2857,15 +3151,15 @@ "dev": true }, "eventemitter3": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-3.1.0.tgz", - "integrity": "sha512-ivIvhpq/Y0uSjcHDcOIccjmYjGLcP09MFGE7ysAwkAvkXfpZlC985pH2/ui64DKazbTW/4kN3yqozUxlXzI6cA==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-3.1.2.tgz", + "integrity": "sha512-tvtQIeLVHjDkJYnzf2dgVMxfuSGJeM/7UCG17TT4EumTfNtF+0nebF/4zWOIkCreAbtNqhGEboB6BWrwqNaw4Q==", "dev": true }, "events": { - "version": "1.1.1", - "resolved": "http://registry.npmjs.org/events/-/events-1.1.1.tgz", - "integrity": "sha1-nr23Y1rQmccNzEwqH1AEKI6L2SQ=", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.0.0.tgz", + "integrity": "sha512-Dc381HFWJzEOhQ+d8pkNon++bk9h6cdAoAj4iE6Q4y6xgTzySWXlKn05/TVNpjnfRqi/X0EpJEJohPjNI3zpVA==", "dev": true }, "eventsource": { @@ -3080,9 +3374,9 @@ "dev": true }, "fast-glob": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-2.2.4.tgz", - "integrity": "sha512-FjK2nCGI/McyzgNtTESqaWP3trPvHyRyoyY70hxjc3oKPNmDe8taohLZpoVKoUjW85tbU5txaYUZCNtVzygl1g==", + "version": "2.2.6", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-2.2.6.tgz", + "integrity": "sha512-0BvMaZc1k9F+MeWWMe8pL6YltFzZYcJsYU7D4JyDA6PAczaXvxqQQ/z+mDF7/4Mw01DeUc+i3CTKajnkANkV4w==", "dev": true, "requires": { "@mrmlnc/readdir-enhanced": "^2.2.1", @@ -3121,9 +3415,9 @@ "dev": true }, "file-loader": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/file-loader/-/file-loader-2.0.0.tgz", - "integrity": "sha512-YCsBfd1ZGCyonOKLxPiKPdu+8ld9HAaMEvJewzz+b2eTF7uL5Zm/HdBF6FjCrpCMRq25Mi0U1gl4pwn2TlH7hQ==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/file-loader/-/file-loader-3.0.1.tgz", + "integrity": "sha512-4sNIOXgtH/9WZq4NvlfU3Opn5ynUsqBwSLyM+I7UOwdGigTBYfVVQEwe/msZNX/j4pCJTIM14Fsw66Svo1oVrw==", "dev": true, "requires": { "loader-utils": "^1.0.2", @@ -3188,33 +3482,33 @@ } }, "find-cache-dir": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-1.0.0.tgz", - "integrity": "sha1-kojj6ePMN0hxfTnq3hfPcfww7m8=", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.1.0.tgz", + "integrity": "sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==", "dev": true, "requires": { "commondir": "^1.0.1", - "make-dir": "^1.0.0", - "pkg-dir": "^2.0.0" + "make-dir": "^2.0.0", + "pkg-dir": "^3.0.0" } }, "find-up": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", - "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", "dev": true, "requires": { - "locate-path": "^2.0.0" + "locate-path": "^3.0.0" } }, "flush-write-stream": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/flush-write-stream/-/flush-write-stream-1.0.3.tgz", - "integrity": "sha512-calZMC10u0FMUqoiunI2AiGIIUtUIvifNwkHhNupZH4cbNnW1Itkoh/Nf5HFYmDrwWPjrUxpkZT0KhuCq0jmGw==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/flush-write-stream/-/flush-write-stream-1.1.1.tgz", + "integrity": "sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w==", "dev": true, "requires": { - "inherits": "^2.0.1", - "readable-stream": "^2.0.4" + "inherits": "^2.0.3", + "readable-stream": "^2.3.6" } }, "follow-redirects": { @@ -3257,18 +3551,16 @@ "dev": true }, "fork-ts-checker-webpack-plugin": { - "version": "0.4.15", - "resolved": "https://registry.npmjs.org/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-0.4.15.tgz", - "integrity": "sha512-qNYuygh2GxXehBvQZ5rI5YlQFn+7ZV6kmkyD9Sgs33dWl73NZdUOB5aCp8v0EXJn176AhPrZP8YCMT3h01fs+g==", + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-0.5.2.tgz", + "integrity": "sha512-a5IG+xXyKnpruI0CP/anyRLAoxWtp3lzdG6flxicANnoSzz64b12dJ7ASAVRrI2OaWwZR2JyBaMHFQqInhWhIw==", "dev": true, "requires": { "babel-code-frame": "^6.22.0", "chalk": "^2.4.1", "chokidar": "^2.0.4", - "lodash": "^4.17.11", "micromatch": "^3.1.10", "minimatch": "^3.0.4", - "resolve": "^1.5.0", "tapable": "^1.0.0" } }, @@ -3304,59 +3596,6 @@ "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=", "dev": true }, - "friendly-errors-webpack-plugin": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/friendly-errors-webpack-plugin/-/friendly-errors-webpack-plugin-1.7.0.tgz", - "integrity": "sha512-K27M3VK30wVoOarP651zDmb93R9zF28usW4ocaK3mfQeIEI5BPht/EzZs5E8QLLwbLRJQMwscAjDxYPb1FuNiw==", - "dev": true, - "requires": { - "chalk": "^1.1.3", - "error-stack-parser": "^2.0.0", - "string-width": "^2.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", - "dev": true - }, - "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", - "dev": true - }, - "chalk": { - "version": "1.1.3", - "resolved": "http://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dev": true, - "requires": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" - } - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "http://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dev": true, - "requires": { - "ansi-regex": "^2.0.0" - } - }, - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "dev": true - } - } - }, "from2": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz", @@ -3397,14 +3636,14 @@ "dev": true }, "fsevents": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.4.tgz", - "integrity": "sha512-z8H8/diyk76B7q5wg+Ud0+CqzcAF3mBBI/bA5ne5zrRUUIvNkJY//D3BqyH571KuAC4Nr7Rw7CjWX4r0y9DvNg==", + "version": "1.2.9", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.9.tgz", + "integrity": "sha512-oeyj2H3EjjonWcFjD5NvZNE9Rqe4UW+nQBU2HNeKw0koVLEFIhtyETyAakeAM3de7Z/SW5kcA+fZUait9EApnw==", "dev": true, "optional": true, "requires": { - "nan": "^2.9.2", - "node-pre-gyp": "^0.10.0" + "nan": "^2.12.1", + "node-pre-gyp": "^0.12.0" }, "dependencies": { "abbrev": { @@ -3426,7 +3665,7 @@ "optional": true }, "are-we-there-yet": { - "version": "1.1.4", + "version": "1.1.5", "bundled": true, "dev": true, "optional": true, @@ -3452,7 +3691,7 @@ } }, "chownr": { - "version": "1.0.1", + "version": "1.1.1", "bundled": true, "dev": true, "optional": true @@ -3482,16 +3721,16 @@ "optional": true }, "debug": { - "version": "2.6.9", + "version": "4.1.1", "bundled": true, "dev": true, "optional": true, "requires": { - "ms": "2.0.0" + "ms": "^2.1.1" } }, "deep-extend": { - "version": "0.5.1", + "version": "0.6.0", "bundled": true, "dev": true, "optional": true @@ -3540,7 +3779,7 @@ } }, "glob": { - "version": "7.1.2", + "version": "7.1.3", "bundled": true, "dev": true, "optional": true, @@ -3560,12 +3799,12 @@ "optional": true }, "iconv-lite": { - "version": "0.4.21", + "version": "0.4.24", "bundled": true, "dev": true, "optional": true, "requires": { - "safer-buffer": "^2.1.0" + "safer-buffer": ">= 2.1.2 < 3" } }, "ignore-walk": { @@ -3630,17 +3869,17 @@ "optional": true }, "minipass": { - "version": "2.2.4", + "version": "2.3.5", "bundled": true, "dev": true, "optional": true, "requires": { - "safe-buffer": "^5.1.1", + "safe-buffer": "^5.1.2", "yallist": "^3.0.0" } }, "minizlib": { - "version": "1.1.0", + "version": "1.2.1", "bundled": true, "dev": true, "optional": true, @@ -3658,35 +3897,42 @@ } }, "ms": { - "version": "2.0.0", + "version": "2.1.1", "bundled": true, "dev": true, "optional": true }, + "nan": { + "version": "2.13.2", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.13.2.tgz", + "integrity": "sha512-TghvYc72wlMGMVMluVo9WRJc0mB8KxxF/gZ4YYFy7V2ZQX9l7rgbPg7vjS9mt6U5HXODVFVI2bOduCzwOMv/lw==", + "dev": true, + "optional": true + }, "needle": { - "version": "2.2.0", + "version": "2.3.0", "bundled": true, "dev": true, "optional": true, "requires": { - "debug": "^2.1.2", + "debug": "^4.1.0", "iconv-lite": "^0.4.4", "sax": "^1.2.4" } }, "node-pre-gyp": { - "version": "0.10.0", + "version": "0.12.0", "bundled": true, "dev": true, "optional": true, "requires": { "detect-libc": "^1.0.2", "mkdirp": "^0.5.1", - "needle": "^2.2.0", + "needle": "^2.2.1", "nopt": "^4.0.1", "npm-packlist": "^1.1.6", "npmlog": "^4.0.2", - "rc": "^1.1.7", + "rc": "^1.2.7", "rimraf": "^2.6.1", "semver": "^5.3.0", "tar": "^4" @@ -3703,13 +3949,13 @@ } }, "npm-bundled": { - "version": "1.0.3", + "version": "1.0.6", "bundled": true, "dev": true, "optional": true }, "npm-packlist": { - "version": "1.1.10", + "version": "1.4.1", "bundled": true, "dev": true, "optional": true, @@ -3786,12 +4032,12 @@ "optional": true }, "rc": { - "version": "1.2.7", + "version": "1.2.8", "bundled": true, "dev": true, "optional": true, "requires": { - "deep-extend": "^0.5.1", + "deep-extend": "^0.6.0", "ini": "~1.3.0", "minimist": "^1.2.0", "strip-json-comments": "~2.0.1" @@ -3821,16 +4067,16 @@ } }, "rimraf": { - "version": "2.6.2", + "version": "2.6.3", "bundled": true, "dev": true, "optional": true, "requires": { - "glob": "^7.0.5" + "glob": "^7.1.3" } }, "safe-buffer": { - "version": "5.1.1", + "version": "5.1.2", "bundled": true, "dev": true, "optional": true @@ -3848,7 +4094,7 @@ "optional": true }, "semver": { - "version": "5.5.0", + "version": "5.7.0", "bundled": true, "dev": true, "optional": true @@ -3901,17 +4147,17 @@ "optional": true }, "tar": { - "version": "4.4.1", + "version": "4.4.8", "bundled": true, "dev": true, "optional": true, "requires": { - "chownr": "^1.0.1", + "chownr": "^1.1.1", "fs-minipass": "^1.2.5", - "minipass": "^2.2.4", - "minizlib": "^1.1.0", + "minipass": "^2.3.4", + "minizlib": "^1.1.1", "mkdirp": "^0.5.0", - "safe-buffer": "^5.1.1", + "safe-buffer": "^5.1.2", "yallist": "^3.0.2" } }, @@ -3922,12 +4168,12 @@ "optional": true }, "wide-align": { - "version": "1.1.2", + "version": "1.1.3", "bundled": true, "dev": true, "optional": true, "requires": { - "string-width": "^1.0.2" + "string-width": "^1.0.2 || 2" } }, "wrappy": { @@ -3937,7 +4183,7 @@ "optional": true }, "yallist": { - "version": "3.0.2", + "version": "3.0.3", "bundled": true, "dev": true, "optional": true @@ -3945,9 +4191,9 @@ } }, "fstream": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/fstream/-/fstream-1.0.11.tgz", - "integrity": "sha1-XB+x8RdHcRTwYyoOtLcbPLD9MXE=", + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/fstream/-/fstream-1.0.12.tgz", + "integrity": "sha512-WvJ193OHa0GHPEL+AycEJgxvBEwyfRkN1vhjca23OaPVMCaLCXTd5qAu82AjTcgP1UJmytkOKb63Ypde7raDIg==", "dev": true, "requires": { "graceful-fs": "^4.1.2", @@ -4102,18 +4348,27 @@ "dev": true }, "globby": { - "version": "8.0.1", - "resolved": "http://registry.npmjs.org/globby/-/globby-8.0.1.tgz", - "integrity": "sha512-oMrYrJERnKBLXNLVTqhm3vPEdJ/b2ZE28xN4YARiix1NOIOBPEpOUnm844K1iu/BkphCaf2WNFwMszv8Soi1pw==", - "dev": true, - "requires": { - "array-union": "^1.0.1", - "dir-glob": "^2.0.0", - "fast-glob": "^2.0.2", - "glob": "^7.1.2", - "ignore": "^3.3.5", - "pify": "^3.0.0", - "slash": "^1.0.0" + "version": "9.2.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-9.2.0.tgz", + "integrity": "sha512-ollPHROa5mcxDEkwg6bPt3QbEf4pDQSNtd6JPL1YvOvAo/7/0VAm9TccUeoTmarjPw4pfUthSCqcyfNB1I3ZSg==", + "dev": true, + "requires": { + "@types/glob": "^7.1.1", + "array-union": "^1.0.2", + "dir-glob": "^2.2.2", + "fast-glob": "^2.2.6", + "glob": "^7.1.3", + "ignore": "^4.0.3", + "pify": "^4.0.1", + "slash": "^2.0.0" + }, + "dependencies": { + "pify": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", + "dev": true + } } }, "globule": { @@ -4134,13 +4389,21 @@ "dev": true }, "gzip-size": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/gzip-size/-/gzip-size-5.0.0.tgz", - "integrity": "sha512-5iI7omclyqrnWw4XbXAmGhPsABkSIDQonv2K0h61lybgofWa6iZyvrI3r2zsJH4P8Nb64fFVzlvfhs0g7BBxAA==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/gzip-size/-/gzip-size-5.1.0.tgz", + "integrity": "sha512-wfSnvypBDRW94v5W3ckvvz/zFUNdJ81VgOP6tE4bPpRUcc0wGqU+y0eZjJEvKxwubJFix6P84sE8M51YWLT7rQ==", "dev": true, "requires": { "duplexer": "^0.1.1", - "pify": "^3.0.0" + "pify": "^4.0.1" + }, + "dependencies": { + "pify": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", + "dev": true + } } }, "handle-thing": { @@ -4299,6 +4562,12 @@ "integrity": "sha512-l9sfDFsuqtOqKDsQdqrMRk0U85RZc0RtOR9yPI7mRVOa4FsR/BVnZ0shmQRM96Ji99kYZP/7hn1cedc1+ApsTQ==", "dev": true }, + "highlight.js": { + "version": "9.15.6", + "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-9.15.6.tgz", + "integrity": "sha512-zozTAWM1D6sozHo8kqhfYgsac+B+q0PmsjXeyDrYIHHcBN0zTVT66+s2GW1GZv7DbyaROdLXKdabwS/WqPyIdQ==", + "dev": true + }, "hmac-drbg": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", @@ -4311,9 +4580,9 @@ } }, "hoek": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/hoek/-/hoek-5.0.4.tgz", - "integrity": "sha512-Alr4ZQgoMlnere5FZJsIyfIjORBqZll5POhDsF4q64dPuJR6rNxXdDxtHSQq8OXRurhmx+PWYEE8bXRROY8h0w==", + "version": "6.1.3", + "resolved": "https://registry.npmjs.org/hoek/-/hoek-6.1.3.tgz", + "integrity": "sha512-YXXAAhmF9zpQbC7LEcREFtXfGq5K1fmd+4PHkBq8NUqmzW3G+Dq10bI/i0KucLRwss3YYFQ0fSfoxBZYiGUqtQ==", "dev": true }, "hoopy": { @@ -4417,49 +4686,29 @@ } }, "htmlparser2": { - "version": "3.3.0", - "resolved": "http://registry.npmjs.org/htmlparser2/-/htmlparser2-3.3.0.tgz", - "integrity": "sha1-zHDQWln2VC5D8OaFyYLhTJJKnv4=", + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.10.1.tgz", + "integrity": "sha512-IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ==", "dev": true, "requires": { - "domelementtype": "1", - "domhandler": "2.1", - "domutils": "1.1", - "readable-stream": "1.0" + "domelementtype": "^1.3.1", + "domhandler": "^2.3.0", + "domutils": "^1.5.1", + "entities": "^1.1.1", + "inherits": "^2.0.1", + "readable-stream": "^3.1.1" }, "dependencies": { - "domutils": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.1.6.tgz", - "integrity": "sha1-vdw94Jm5ou+sxRxiPyj0FuzFdIU=", - "dev": true, - "requires": { - "domelementtype": "1" - } - }, - "isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", - "dev": true - }, "readable-stream": { - "version": "1.0.34", - "resolved": "http://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", - "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.3.0.tgz", + "integrity": "sha512-EsI+s3k3XsW+fU8fQACLN59ky34AZ14LoeVZpYwmZvldCFo0r0gnelwF2TcMjLor/BTL5aDJVBMkss0dthToPw==", "dev": true, "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" } - }, - "string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", - "dev": true } } }, @@ -4499,15 +4748,15 @@ } }, "http-proxy-middleware": { - "version": "0.18.0", - "resolved": "http://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-0.18.0.tgz", - "integrity": "sha512-Fs25KVMPAIIcgjMZkVHJoKg9VcXcC1C8yb9JUgeDvVXY0S/zgVIhMb+qVswDIgtJe2DfckMSY2d6TuTEutlk6Q==", + "version": "0.19.1", + "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-0.19.1.tgz", + "integrity": "sha512-yHYTgWMQO8VvwNS22eLLloAkvungsKdKTLO8AJlftYIKNfJr3GK3zK0ZCfzDDGUBttdGc8xFy1mCitvNKQtC3Q==", "dev": true, "requires": { - "http-proxy": "^1.16.2", + "http-proxy": "^1.17.0", "is-glob": "^4.0.0", - "lodash": "^4.17.5", - "micromatch": "^3.1.9" + "lodash": "^4.17.11", + "micromatch": "^3.1.10" } }, "http-signature": { @@ -4571,9 +4820,9 @@ } }, "ieee754": { - "version": "1.1.12", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.12.tgz", - "integrity": "sha512-GguP+DRY+pJ3soyIiGPTvdiVXjZ+DbXOxGpXn3eMvNW4x4irjqXm4wHKscC+TfxSJ0yw/S1F24tqdMNsMZTiLA==", + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.13.tgz", + "integrity": "sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==", "dev": true }, "iferr": { @@ -4583,9 +4832,9 @@ "dev": true }, "ignore": { - "version": "3.3.10", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-3.3.10.tgz", - "integrity": "sha512-Pgs951kaMm5GXP7MOvxERINe3gsaVjUWFm+UZPSq9xYriQAksyhg0csnS0KXSNRD5NmNdapXEpjxG49+AKh/ug==", + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", + "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", "dev": true }, "import-cwd": { @@ -4593,91 +4842,37 @@ "resolved": "https://registry.npmjs.org/import-cwd/-/import-cwd-2.1.0.tgz", "integrity": "sha1-qmzzbnInYShcs3HsZRn1PiQ1sKk=", "dev": true, - "requires": { - "import-from": "^2.1.0" - } - }, - "import-fresh": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-2.0.0.tgz", - "integrity": "sha1-2BNVwVYS04bGH53dOSLUMEgipUY=", - "dev": true, - "requires": { - "caller-path": "^2.0.0", - "resolve-from": "^3.0.0" - } - }, - "import-from": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/import-from/-/import-from-2.1.0.tgz", - "integrity": "sha1-M1238qev/VOqpHHUuAId7ja387E=", - "dev": true, - "requires": { - "resolve-from": "^3.0.0" - } - }, - "import-local": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/import-local/-/import-local-2.0.0.tgz", - "integrity": "sha512-b6s04m3O+s3CGSbqDIyP4R6aAwAeYlVq9+WUWep6iHa8ETRf9yei1U48C5MmfJmV9AiLYYBKPMq/W+/WRpQmCQ==", - "dev": true, - "requires": { - "pkg-dir": "^3.0.0", - "resolve-cwd": "^2.0.0" - }, - "dependencies": { - "find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", - "dev": true, - "requires": { - "locate-path": "^3.0.0" - } - }, - "locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", - "dev": true, - "requires": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - } - }, - "p-limit": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.1.0.tgz", - "integrity": "sha512-NhURkNcrVB+8hNfLuysU8enY5xn2KXphsHBaC2YmRNTZRc7RWusw6apSpdEj3jo4CMb6W9nrF6tTnsJsJeyu6g==", - "dev": true, - "requires": { - "p-try": "^2.0.0" - } - }, - "p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", - "dev": true, - "requires": { - "p-limit": "^2.0.0" - } - }, - "p-try": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.0.0.tgz", - "integrity": "sha512-hMp0onDKIajHfIkdRk3P4CdCmErkYAxxDtP3Wx/4nZ3aGlau2VKh3mZpcuFkH27WQkL/3WBCPOktzA9ZOAnMQQ==", - "dev": true - }, - "pkg-dir": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", - "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", - "dev": true, - "requires": { - "find-up": "^3.0.0" - } - } + "requires": { + "import-from": "^2.1.0" + } + }, + "import-fresh": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-2.0.0.tgz", + "integrity": "sha1-2BNVwVYS04bGH53dOSLUMEgipUY=", + "dev": true, + "requires": { + "caller-path": "^2.0.0", + "resolve-from": "^3.0.0" + } + }, + "import-from": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/import-from/-/import-from-2.1.0.tgz", + "integrity": "sha1-M1238qev/VOqpHHUuAId7ja387E=", + "dev": true, + "requires": { + "resolve-from": "^3.0.0" + } + }, + "import-local": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/import-local/-/import-local-2.0.0.tgz", + "integrity": "sha512-b6s04m3O+s3CGSbqDIyP4R6aAwAeYlVq9+WUWep6iHa8ETRf9yei1U48C5MmfJmV9AiLYYBKPMq/W+/WRpQmCQ==", + "dev": true, + "requires": { + "pkg-dir": "^3.0.0", + "resolve-cwd": "^2.0.0" } }, "imurmurhash": { @@ -4729,13 +4924,13 @@ "dev": true }, "internal-ip": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/internal-ip/-/internal-ip-3.0.1.tgz", - "integrity": "sha512-NXXgESC2nNVtU+pqmC9e6R8B1GpKxzsAQhffvh5AL79qKnodd+L7tnEQmTiUAVngqLalPbSqRA7XGIEL5nCd0Q==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/internal-ip/-/internal-ip-4.3.0.tgz", + "integrity": "sha512-S1zBo1D6zcsyuC6PMmY5+55YMILQ9av8lotMx447Bq6SAgo/sDK6y6uUKmuYhW7eacnIhFfsPmCNYdDzsnnDCg==", "dev": true, "requires": { - "default-gateway": "^2.6.0", - "ipaddr.js": "^1.5.2" + "default-gateway": "^4.2.0", + "ipaddr.js": "^1.9.0" } }, "invert-kv": { @@ -4757,9 +4952,9 @@ "dev": true }, "ipaddr.js": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.8.0.tgz", - "integrity": "sha1-6qM9bd16zo9/b+DJygRA5wZzix4=", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.0.tgz", + "integrity": "sha512-M4Sjn6N/+O6/IXSJseKqHoFc+5FdGJ22sXqnjTpdZweHK64MzEPAyQZyEU3R/KRv2GLoa7nNtg/C2Ev6m7z+eA==", "dev": true }, "is-absolute-url": { @@ -4808,15 +5003,6 @@ "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" }, - "is-builtin-module": { - "version": "1.0.0", - "resolved": "http://registry.npmjs.org/is-builtin-module/-/is-builtin-module-1.0.0.tgz", - "integrity": "sha1-VAVy0096wxGfj3bDDLwbHgN6/74=", - "dev": true, - "requires": { - "builtin-modules": "^1.0.0" - } - }, "is-callable": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.4.tgz", @@ -4925,9 +5111,9 @@ "dev": true }, "is-glob": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.0.tgz", - "integrity": "sha1-lSHHaEXMJhCoUgPd8ICpWML/q8A=", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", + "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", "dev": true, "requires": { "is-extglob": "^2.1.1" @@ -4960,29 +5146,35 @@ "dev": true }, "is-path-cwd": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-1.0.0.tgz", - "integrity": "sha1-0iXsIxMuie3Tj9p2dHLmLmXxEG0=", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-2.1.0.tgz", + "integrity": "sha512-Sc5j3/YnM8tDeyCsVeKlm/0p95075DyLmDEIkSgQ7mXkrOX+uTCtmQFm0CYzVyJwcCCmO3k8qfJt17SxQwB5Zw==", "dev": true }, "is-path-in-cwd": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-1.0.1.tgz", - "integrity": "sha512-FjV1RTW48E7CWM7eE/J2NJvAEEVektecDBVBE5Hh3nM1Jd0kvhHtX68Pr3xsDf857xt3Y4AkwVULK1Vku62aaQ==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-2.1.0.tgz", + "integrity": "sha512-rNocXHgipO+rvnP6dk3zI20RpOtrAM/kzbB258Uw5BWr3TpXi861yzjo16Dn4hUox07iw5AyeMLHWsujkjzvRQ==", "dev": true, "requires": { - "is-path-inside": "^1.0.0" + "is-path-inside": "^2.1.0" } }, "is-path-inside": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-1.0.1.tgz", - "integrity": "sha1-jvW33lBDej/cprToZe96pVy0gDY=", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-2.1.0.tgz", + "integrity": "sha512-wiyhTzfDWsvwAW53OBWF5zuvaOGlZ6PwYxAbPVDhpm+gM09xKQGjBq/8uYN12aDvMxnAnq3dxTyoSoRNmg5YFg==", "dev": true, "requires": { - "path-is-inside": "^1.0.1" + "path-is-inside": "^1.0.2" } }, + "is-plain-obj": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", + "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=", + "dev": true + }, "is-plain-object": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", @@ -5095,20 +5287,20 @@ "dev": true }, "joi": { - "version": "13.7.0", - "resolved": "https://registry.npmjs.org/joi/-/joi-13.7.0.tgz", - "integrity": "sha512-xuY5VkHfeOYK3Hdi91ulocfuFopwgbSORmIwzcwHKESQhC7w1kD5jaVSPnqDxS2I8t3RZ9omCKAxNwXN5zG1/Q==", + "version": "14.3.1", + "resolved": "https://registry.npmjs.org/joi/-/joi-14.3.1.tgz", + "integrity": "sha512-LQDdM+pkOrpAn4Lp+neNIFV3axv1Vna3j38bisbQhETPMANYRbFJFUyOZcOClYvM/hppMhGWuKSFEK9vjrB+bQ==", "dev": true, "requires": { - "hoek": "5.x.x", + "hoek": "6.x.x", "isemail": "3.x.x", "topo": "3.x.x" } }, "js-base64": { - "version": "2.4.9", - "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-2.4.9.tgz", - "integrity": "sha512-xcinL3AuDJk7VSzsHgb9DvvIXayBbadtMZ4HFPx8rUszbW1MuNMlwYVC4zzCZ6e1sqZpnNS5ZFYOhXqA39T7LQ==", + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-2.5.1.tgz", + "integrity": "sha512-M7kLczedRMYX4L8Mdh4MzyAMM9O5osx+4FcOQuTvr3A9F2D9S5JXheN0ewNbrvK2UatkTRhL5ejGmGSjNMiZuw==", "dev": true }, "js-message": { @@ -5133,9 +5325,9 @@ "dev": true }, "js-yaml": { - "version": "3.12.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.12.0.tgz", - "integrity": "sha512-PIt2cnwmPfL4hKNwqeiuz4bKfnzHTBv6HyVgjahA6mPLwPDzjDWrplJBMjHUFxku/N3FlmrbyPclad+I+4mJ3A==", + "version": "3.13.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz", + "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==", "dev": true, "requires": { "argparse": "^1.0.7", @@ -5288,9 +5480,9 @@ } }, "loader-runner": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-2.3.1.tgz", - "integrity": "sha512-By6ZFY7ETWOc9RFaAIb23IjJVcM4dvJC/N57nmdz9RSkMXvAXGI7SyVlAw3v8vjtDRlqThgVDVmTnr9fqMlxkw==", + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-2.4.0.tgz", + "integrity": "sha512-Jsmr89RcXGIwivFY21FcRrisYZfvLMTWx5kOLc+JTxtpBOG6xML0vzbc6SEQG2FO9/4Fc3wW4LVcB5DmGflaRw==", "dev": true }, "loader-utils": { @@ -5305,12 +5497,12 @@ } }, "locate-path": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", - "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", "dev": true, "requires": { - "p-locate": "^2.0.0", + "p-locate": "^3.0.0", "path-exists": "^3.0.0" } }, @@ -5320,24 +5512,6 @@ "integrity": "sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg==", "dev": true }, - "lodash.assign": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/lodash.assign/-/lodash.assign-4.2.0.tgz", - "integrity": "sha1-DZnzzNem0mHRm9rrkkUAXShYCOc=", - "dev": true - }, - "lodash.clonedeep": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", - "integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=", - "dev": true - }, - "lodash.debounce": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", - "integrity": "sha1-gteb/zCmfEAF/9XiUVMArZyk168=", - "dev": true - }, "lodash.defaultsdeep": { "version": "4.6.0", "resolved": "https://registry.npmjs.org/lodash.defaultsdeep/-/lodash.defaultsdeep-4.6.0.tgz", @@ -5356,12 +5530,6 @@ "integrity": "sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4=", "dev": true }, - "lodash.mergewith": { - "version": "4.6.1", - "resolved": "https://registry.npmjs.org/lodash.mergewith/-/lodash.mergewith-4.6.1.tgz", - "integrity": "sha512-eWw5r+PYICtEBgrBE5hhlT6aAa75f411bgDz/ZL2KZqYV03USvucsxcHUIlGTDTECs1eunpI7HOV7U+WLDvNdQ==", - "dev": true - }, "lodash.tail": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/lodash.tail/-/lodash.tail-4.1.1.tgz", @@ -5427,12 +5595,21 @@ } }, "make-dir": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz", - "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", + "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", "dev": true, "requires": { - "pify": "^3.0.0" + "pify": "^4.0.1", + "semver": "^5.6.0" + }, + "dependencies": { + "pify": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", + "dev": true + } } }, "map-age-cleaner": { @@ -5494,14 +5671,22 @@ "dev": true }, "mem": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/mem/-/mem-4.0.0.tgz", - "integrity": "sha512-WQxG/5xYc3tMbYLXoXPm81ET2WDULiU5FxbuIoNbJqLOOI8zehXFdZuiUEgfdrU2mVB1pxBZUGlYORSrpuJreA==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/mem/-/mem-4.3.0.tgz", + "integrity": "sha512-qX2bG48pTqYRVmDB37rn/6PT7LcR8T7oAX3bf99u1Tt1nzxYfxkgqDwUwolPlXweM0XzBOBFzSx4kfp7KP1s/w==", "dev": true, "requires": { "map-age-cleaner": "^0.1.1", - "mimic-fn": "^1.0.0", - "p-is-promise": "^1.1.0" + "mimic-fn": "^2.0.0", + "p-is-promise": "^2.0.0" + }, + "dependencies": { + "mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "dev": true + } } }, "memory-fs": { @@ -5530,14 +5715,6 @@ "read-pkg-up": "^1.0.1", "redent": "^1.0.0", "trim-newlines": "^1.0.0" - }, - "dependencies": { - "decamelize": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", - "dev": true - } } }, "merge-descriptors": { @@ -5607,9 +5784,9 @@ } }, "mime": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-2.4.0.tgz", - "integrity": "sha512-ikBcWwyqXQSHKtciCcctu9YfPbFYZ4+gbHEmE0Q8jzcTYQg5dHCr3g2wwAZjPoJfQVXZq6KXAjpXOTf5/cjT7w==", + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.4.2.tgz", + "integrity": "sha512-zJBfZDkwRu+j3Pdd2aHsR5GfH2jIWhmL1ZzBoc+X+3JEti2hbArWcyJ+1laC1D2/U/W1a/+Cegj0/OnEU2ybjg==", "dev": true }, "mime-db": { @@ -5634,16 +5811,28 @@ "dev": true }, "mini-css-extract-plugin": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-0.5.0.tgz", - "integrity": "sha512-IuaLjruM0vMKhUUT51fQdQzBYTX49dLj8w68ALEAe2A4iYNpIC4eMac67mt3NzycvjOlf07/kYxJDc0RTl1Wqw==", + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-0.6.0.tgz", + "integrity": "sha512-79q5P7YGI6rdnVyIAV4NXpBQJFWdkzJxCim3Kog4078fM0piAaFlwocqbejdWtLW1cEzCexPrh6EdyFsPgVdAw==", "dev": true, "requires": { "loader-utils": "^1.1.0", + "normalize-url": "^2.0.1", "schema-utils": "^1.0.0", "webpack-sources": "^1.1.0" }, "dependencies": { + "normalize-url": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-2.0.1.tgz", + "integrity": "sha512-D6MUW4K/VzoJ4rJ01JFKxDrtY1v9wrgzCX5f2qj/lzH1m/lW6MhUZFKerVsnyjOhOsYzI9Kqqak+10l4LvLpMw==", + "dev": true, + "requires": { + "prepend-http": "^2.0.0", + "query-string": "^5.0.1", + "sort-keys": "^2.0.0" + } + }, "schema-utils": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", @@ -5685,9 +5874,9 @@ "dev": true }, "mississippi": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/mississippi/-/mississippi-2.0.0.tgz", - "integrity": "sha512-zHo8v+otD1J10j/tC+VNoGK9keCuByhKovAvdn74dmxJl9+mWHnx6EMsDN4lgRoMI/eYo2nchAxniIbUPb5onw==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/mississippi/-/mississippi-3.0.0.tgz", + "integrity": "sha512-x471SsVjUtBRtcvd4BzKE9kFC+/2TeWgKCgw0bZcw1b9l2X3QX5vCWgF+KaZaYm87Ss//rHnWryupDrgLvmSkA==", "dev": true, "requires": { "concat-stream": "^1.5.0", @@ -5696,22 +5885,10 @@ "flush-write-stream": "^1.0.0", "from2": "^2.1.0", "parallel-transform": "^1.1.0", - "pump": "^2.0.1", + "pump": "^3.0.0", "pumpify": "^1.3.3", "stream-each": "^1.1.0", "through2": "^2.0.0" - }, - "dependencies": { - "pump": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz", - "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==", - "dev": true, - "requires": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - } } }, "mixin-deep": { @@ -5805,10 +5982,21 @@ "integrity": "sha1-iZ8R2WhuXgXLkbNdXw5jt3PPyQE=", "dev": true }, + "mz": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", + "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", + "dev": true, + "requires": { + "any-promise": "^1.0.0", + "object-assign": "^4.0.1", + "thenify-all": "^1.0.0" + } + }, "nan": { - "version": "2.11.1", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.11.1.tgz", - "integrity": "sha512-iji6k87OSXa0CcrLl9z+ZiYSuR2o+c0bGuNmXdrhTQTakxytAFsC56SArGYoiHlJlFoHSnvmhpceZJaXkVuOtA==", + "version": "2.13.2", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.13.2.tgz", + "integrity": "sha512-TghvYc72wlMGMVMluVo9WRJc0mB8KxxF/gZ4YYFy7V2ZQX9l7rgbPg7vjS9mt6U5HXODVFVI2bOduCzwOMv/lw==", "dev": true }, "nanomatch": { @@ -5831,9 +6019,9 @@ } }, "negotiator": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.1.tgz", - "integrity": "sha1-KzJxhOiZIQEXeyhWP7XnECrNDKk=", + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", + "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==", "dev": true }, "neo-async": { @@ -5903,9 +6091,9 @@ } }, "node-libs-browser": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-2.1.0.tgz", - "integrity": "sha512-5AzFzdoIMb89hBGMZglEegffzgRg+ZFoUmisQ8HI4j1KDdpx13J0taNp2y9xPbur6W61gepGDDotGBVQ7mfUCg==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-2.2.0.tgz", + "integrity": "sha512-5MQunG/oyOaBdttrL40dA7bUfPORLRWMUJLQtMg7nluxUvk5XwnLdL9twQHFAjRx/y7mIMkLKT9++qPbbk6BZA==", "dev": true, "requires": { "assert": "^1.1.1", @@ -5915,7 +6103,7 @@ "constants-browserify": "^1.0.0", "crypto-browserify": "^3.11.0", "domain-browser": "^1.1.1", - "events": "^1.0.0", + "events": "^3.0.0", "https-browserify": "^1.0.0", "os-browserify": "^0.3.0", "path-browserify": "0.0.0", @@ -5929,7 +6117,7 @@ "timers-browserify": "^2.0.4", "tty-browserify": "0.0.0", "url": "^0.11.0", - "util": "^0.10.3", + "util": "^0.11.0", "vm-browserify": "0.0.4" }, "dependencies": { @@ -5942,18 +6130,18 @@ } }, "node-releases": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.3.tgz", - "integrity": "sha512-6VrvH7z6jqqNFY200kdB6HdzkgM96Oaj9v3dqGfgp6mF+cHmU4wyQKZ2/WPDRVoR0Jz9KqbamaBN0ZhdUaysUQ==", + "version": "1.1.19", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.19.tgz", + "integrity": "sha512-SH/B4WwovHbulIALsQllAVwqZZD1kPmKCqrhGfR29dXjLAVZMHvBjD3S6nL9D/J9QkmZ1R92/0wCMDKXUUvyyA==", "dev": true, "requires": { "semver": "^5.3.0" } }, "node-sass": { - "version": "4.10.0", - "resolved": "https://registry.npmjs.org/node-sass/-/node-sass-4.10.0.tgz", - "integrity": "sha512-fDQJfXszw6vek63Fe/ldkYXmRYK/QS6NbvM3i5oEo9ntPDy4XX7BcKZyTKv+/kSSxRtXXc7l+MSwEmYc0CSy6Q==", + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/node-sass/-/node-sass-4.12.0.tgz", + "integrity": "sha512-A1Iv4oN+Iel6EPv77/HddXErL2a+gZ4uBeZUy+a8O35CFYTXhgA8MgLCWBtwpGZdCvTvQ9d+bQxX/QC36GDPpQ==", "dev": true, "requires": { "async-foreach": "^0.1.3", @@ -5963,12 +6151,10 @@ "get-stdin": "^4.0.1", "glob": "^7.0.3", "in-publish": "^2.0.0", - "lodash.assign": "^4.2.0", - "lodash.clonedeep": "^4.3.2", - "lodash.mergewith": "^4.6.0", + "lodash": "^4.17.11", "meow": "^3.7.0", "mkdirp": "^0.5.1", - "nan": "^2.10.0", + "nan": "^2.13.2", "node-gyp": "^3.8.0", "npmlog": "^4.0.0", "request": "^2.88.0", @@ -6039,25 +6225,33 @@ } }, "normalize-package-data": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.4.0.tgz", - "integrity": "sha512-9jjUFbTPfEy3R/ad/2oNbKtW9Hgovl5O1FvFWKkKblNXoN/Oou6+9+KKohPK13Yc3/TyunyWhJp6gvRNR/PPAw==", + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", + "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", "dev": true, "requires": { "hosted-git-info": "^2.1.4", - "is-builtin-module": "^1.0.0", + "resolve": "^1.10.0", "semver": "2 || 3 || 4 || 5", "validate-npm-package-license": "^3.0.1" + }, + "dependencies": { + "resolve": { + "version": "1.10.1", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.10.1.tgz", + "integrity": "sha512-KuIe4mf++td/eFb6wkaPbMDnP6kObCaEtIDuHOUED6MNUo4K670KZUHuuvYPZDxNF0WVLw49n06M2m2dXphEzA==", + "dev": true, + "requires": { + "path-parse": "^1.0.6" + } + } } }, "normalize-path": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", - "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", - "dev": true, - "requires": { - "remove-trailing-separator": "^1.0.1" - } + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true }, "normalize-range": { "version": "0.1.2", @@ -6162,9 +6356,9 @@ } }, "object-keys": { - "version": "1.0.12", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.0.12.tgz", - "integrity": "sha512-FTMyFUm2wBcGHnH2eXmz7tC6IwlqQZ6mVZ+6dm6vZ4IQIHjs6FdNsQBuKGPuUUUY6NfJw2PshC08Tn6LzLDOag==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", "dev": true }, "object-visit": { @@ -6223,9 +6417,9 @@ } }, "on-headers": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.1.tgz", - "integrity": "sha1-ko9dD0cNSTQmUepnlLCFfBAGk/c=", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", + "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==", "dev": true }, "once": { @@ -6253,26 +6447,54 @@ "dev": true }, "opn": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/opn/-/opn-5.4.0.tgz", - "integrity": "sha512-YF9MNdVy/0qvJvDtunAOzFw9iasOQHpVthTCvGzxt61Il64AYSGdK+rYwld7NAfk9qJ7dt+hymBNSc9LNYS+Sw==", + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/opn/-/opn-5.5.0.tgz", + "integrity": "sha512-PqHpggC9bLV0VeWcdKhkpxY+3JTzetLSqTCWL/z/tFIbI6G8JCjondXklT1JinczLz2Xib62sSp0T/gKT4KksA==", "dev": true, "requires": { "is-wsl": "^1.1.0" } }, "ora": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/ora/-/ora-2.1.0.tgz", - "integrity": "sha512-hNNlAd3gfv/iPmsNxYoAPLvxg7HuPozww7fFonMZvL84tP6Ox5igfk5j/+a9rtJJwqMgKK+JgWsAQik5o0HTLA==", + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/ora/-/ora-3.4.0.tgz", + "integrity": "sha512-eNwHudNbO1folBP3JsZ19v9azXWtQZjICdr3Q0TDPIaeBQ3mXLrh54wM+er0+hSp+dWKf+Z8KM58CYzEyIYxYg==", "dev": true, "requires": { - "chalk": "^2.3.1", + "chalk": "^2.4.2", "cli-cursor": "^2.1.0", - "cli-spinners": "^1.1.0", + "cli-spinners": "^2.0.0", "log-symbols": "^2.2.0", - "strip-ansi": "^4.0.0", + "strip-ansi": "^5.2.0", "wcwidth": "^1.0.1" + }, + "dependencies": { + "ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "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" + } + }, + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "requires": { + "ansi-regex": "^4.1.0" + } + } } }, "original": { @@ -6336,45 +6558,45 @@ "dev": true }, "p-is-promise": { - "version": "1.1.0", - "resolved": "http://registry.npmjs.org/p-is-promise/-/p-is-promise-1.1.0.tgz", - "integrity": "sha1-nJRWmJ6fZYgBewQ01WCXZ1w9oF4=", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-2.1.0.tgz", + "integrity": "sha512-Y3W0wlRPK8ZMRbNq97l4M5otioeA5lm1z7bkNkxCka8HSPjR0xRWmpCmc9utiaLP9Jb1eD8BgeIxTW4AIF45Pg==", "dev": true }, "p-limit": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", - "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.0.tgz", + "integrity": "sha512-pZbTJpoUsCzV48Mc9Nh51VbwO0X9cuPFE8gYwx9BTCt9SF8/b7Zljd2fVgOxhIF/HDTKgpVzs+GPhyKfjLLFRQ==", "dev": true, "requires": { - "p-try": "^1.0.0" + "p-try": "^2.0.0" } }, "p-locate": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", - "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", "dev": true, "requires": { - "p-limit": "^1.1.0" + "p-limit": "^2.0.0" } }, "p-map": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-1.2.0.tgz", - "integrity": "sha512-r6zKACMNhjPJMTl8KcFH4li//gkrXWfbD6feV8l6doRHlzljFWGJ2AP6iKaCJXyZmAUMOPtvbW7EXkbWO/pLEA==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-2.1.0.tgz", + "integrity": "sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==", "dev": true }, "p-try": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", - "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", "dev": true }, "pako": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.7.tgz", - "integrity": "sha512-3HNK5tW4x8o5mO8RuHZp3Ydw9icZXx0RANAOMzlMzx7LVXhMJ4mo3MOBpzyd7r/+RUu8BmndP47LXT+vzjtWcQ==", + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.10.tgz", + "integrity": "sha512-0DTvPVU3ed8+HNXOu5Bs+o//Mbdj9VNQMUOe9oKCwh8l0GNwpTDMKCWbRjgtD291AWnkAgkqA/LOnQS8AmS1tw==", "dev": true }, "parallel-transform": { @@ -6398,16 +6620,17 @@ } }, "parse-asn1": { - "version": "5.1.1", - "resolved": "http://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.1.tgz", - "integrity": "sha512-KPx7flKXg775zZpnp9SxJlz00gTd4BmJ2yJufSc44gMCRrRQ7NSzAcSJQfifuOLgW6bEi+ftrALtsgALeB2Adw==", + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.4.tgz", + "integrity": "sha512-Qs5duJcuvNExRfFZ99HDD3z4mAi3r9Wl/FOjEOijlxwCZs7E7mW2vjTpgQ4J8LpTF8x5v+1Vn5UQFejmWT11aw==", "dev": true, "requires": { "asn1.js": "^4.0.0", "browserify-aes": "^1.0.0", "create-hash": "^1.1.0", "evp_bytestokey": "^1.0.0", - "pbkdf2": "^3.0.3" + "pbkdf2": "^3.0.3", + "safe-buffer": "^5.1.1" } }, "parse-json": { @@ -6420,6 +6643,12 @@ "json-parse-better-errors": "^1.0.1" } }, + "parse5": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-4.0.0.tgz", + "integrity": "sha512-VrZ7eOd3T1Fk4XWNXMgiGBK/z0MG48BWG2uQNU4I72fkQuKUTZpl+u9k+CxEG0twMVzSmXEEz12z5Fnw1jIQFA==", + "dev": true + }, "parseqs": { "version": "0.0.5", "resolved": "https://registry.npmjs.org/parseqs/-/parseqs-0.0.5.tgz", @@ -6437,9 +6666,9 @@ } }, "parseurl": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.2.tgz", - "integrity": "sha1-/CidTtiZMRlGDBViUyYs3I3mW/M=", + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", "dev": true }, "pascalcase": { @@ -6546,12 +6775,12 @@ } }, "pkg-dir": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-2.0.0.tgz", - "integrity": "sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s=", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", + "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", "dev": true, "requires": { - "find-up": "^2.1.0" + "find-up": "^3.0.0" } }, "portfinder": { @@ -6572,9 +6801,9 @@ "dev": true }, "postcss": { - "version": "7.0.11", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.11.tgz", - "integrity": "sha512-9AXb//5UcjeOEof9T+yPw3XTa5SL207ZOIC/lHYP4mbUTEh4M0rDAQekQpVANCZdwQwKhBtFZCk3i3h3h2hdWg==", + "version": "7.0.16", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.16.tgz", + "integrity": "sha512-MOo8zNSlIqh22Uaa3drkdIAgUGEL+AD1ESiSdmElLUmE2uVDo1QloiT/IfW9qRw8Gw+Y/w69UVMGwbufMSftxA==", "dev": true, "requires": { "chalk": "^2.4.2", @@ -6634,9 +6863,9 @@ } }, "postcss-colormin": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-4.0.2.tgz", - "integrity": "sha512-1QJc2coIehnVFsz0otges8kQLsryi4lo19WD+U5xCWvXd0uw/Z+KKYnbiNDCnO9GP+PvErPHCG0jNvWTngk9Rw==", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-4.0.3.tgz", + "integrity": "sha512-WyQFAdDZpExQh32j0U0feWisZ0dmOtPl44qYmJKkq9xFWY3p+4qnRzCHeNrkeRhwPHz9bQ3mo0/yVkaply0MNw==", "dev": true, "requires": { "browserslist": "^4.0.0", @@ -6657,9 +6886,9 @@ } }, "postcss-discard-comments": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-4.0.1.tgz", - "integrity": "sha512-Ay+rZu1Sz6g8IdzRjUgG2NafSNpp2MSMOQUb+9kkzzzP+kh07fP0yNbhtFejURnyVXSX3FYy2nVNW1QTnNjgBQ==", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-4.0.2.tgz", + "integrity": "sha512-RJutN259iuRf3IW7GZyLM5Sw4GLTOH8FmsXBnv8Ab/Tc2k4SR4qbV4DNbyyY4+Sjo362SyDmW2DQ7lBSChrpkg==", "dev": true, "requires": { "postcss": "^7.0.0" @@ -6742,9 +6971,9 @@ } }, "postcss-merge-longhand": { - "version": "4.0.10", - "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-4.0.10.tgz", - "integrity": "sha512-hME10s6CSjm9nlVIcO1ukR7Jr5RisTaaC1y83jWCivpuBtPohA3pZE7cGTIVSYjXvLnXozHTiVOkG4dnnl756g==", + "version": "4.0.11", + "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-4.0.11.tgz", + "integrity": "sha512-alx/zmoeXvJjp7L4mxEMjh8lxVlDFX1gqWHzaaQewwMZiVhLo42TEClKaeHbRf6J7j82ZOdTJ808RtN0ZOZwvw==", "dev": true, "requires": { "css-color-names": "0.0.4", @@ -6754,9 +6983,9 @@ } }, "postcss-merge-rules": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-4.0.2.tgz", - "integrity": "sha512-UiuXwCCJtQy9tAIxsnurfF0mrNHKc4NnNx6NxqmzNNjXpQwLSukUxELHTRF0Rg1pAmcoKLih8PwvZbiordchag==", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-4.0.3.tgz", + "integrity": "sha512-U7e3r1SbvYzO0Jr3UT/zKBVgYYyhAz0aitvGIYOYK5CPmkNih+WDSsS5tvPrJ8YMQYlEMvsZIiqmn7HdFUaeEQ==", "dev": true, "requires": { "browserslist": "^4.0.0", @@ -6791,9 +7020,9 @@ } }, "postcss-minify-gradients": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-4.0.1.tgz", - "integrity": "sha512-pySEW3E6Ly5mHm18rekbWiAjVi/Wj8KKt2vwSfVFAWdW6wOIekgqxKxLU7vJfb107o3FDNPkaYFCxGAJBFyogA==", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-4.0.2.tgz", + "integrity": "sha512-qKPfwlONdcf/AndP1U8SJ/uzIJtowHlMaSioKzebAXSG4iJthlWC9iSWznQcX4f66gIWX44RSA841HTHj3wK+Q==", "dev": true, "requires": { "cssnano-util-get-arguments": "^4.0.0", @@ -6803,9 +7032,9 @@ } }, "postcss-minify-params": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-4.0.1.tgz", - "integrity": "sha512-h4W0FEMEzBLxpxIVelRtMheskOKKp52ND6rJv+nBS33G1twu2tCyurYj/YtgU76+UDCvWeNs0hs8HFAWE2OUFg==", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-4.0.2.tgz", + "integrity": "sha512-G7eWyzEx0xL4/wiBBJxJOz48zAKV2WG3iZOqVhPet/9geefm/Px5uo1fzlHu+DOjT+m0Mmiz3jkQzVHe6wxAWg==", "dev": true, "requires": { "alphanum-sort": "^1.0.0", @@ -6817,9 +7046,9 @@ } }, "postcss-minify-selectors": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-4.0.1.tgz", - "integrity": "sha512-8+plQkomve3G+CodLCgbhAKrb5lekAnLYuL1d7Nz+/7RANpBEVdgBkPNwljfSKvZ9xkkZTZITd04KP+zeJTJqg==", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-4.0.2.tgz", + "integrity": "sha512-D5S1iViljXBj9kflQo4YutWnJmwm8VvIsU1GeXJGiG9j8CIg9zs4voPMdQDUmIxetUOh60VilsNzCiAFTOqu3g==", "dev": true, "requires": { "alphanum-sort": "^1.0.0", @@ -6966,9 +7195,9 @@ } }, "postcss-normalize-display-values": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-4.0.1.tgz", - "integrity": "sha512-R5mC4vaDdvsrku96yXP7zak+O3Mm9Y8IslUobk7IMP+u/g+lXvcN4jngmHY5zeJnrQvE13dfAg5ViU05ZFDwdg==", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-4.0.2.tgz", + "integrity": "sha512-3F2jcsaMW7+VtRMAqf/3m4cPFhPD3EFRgNs18u+k3lTJJlVe7d0YPO+bnwqo2xg8YiRpDXJI2u8A0wqJxMsQuQ==", "dev": true, "requires": { "cssnano-util-get-match": "^4.0.0", @@ -6977,9 +7206,9 @@ } }, "postcss-normalize-positions": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-4.0.1.tgz", - "integrity": "sha512-GNoOaLRBM0gvH+ZRb2vKCIujzz4aclli64MBwDuYGU2EY53LwiP7MxOZGE46UGtotrSnmarPPZ69l2S/uxdaWA==", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-4.0.2.tgz", + "integrity": "sha512-Dlf3/9AxpxE+NF1fJxYDeggi5WwV35MXGFnnoccP/9qDtFrTArZ0D0R+iKcg5WsUd8nUYMIl8yXDCtcrT8JrdA==", "dev": true, "requires": { "cssnano-util-get-arguments": "^4.0.0", @@ -6989,9 +7218,9 @@ } }, "postcss-normalize-repeat-style": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-4.0.1.tgz", - "integrity": "sha512-fFHPGIjBUyUiswY2rd9rsFcC0t3oRta4wxE1h3lpwfQZwFeFjXFSiDtdJ7APCmHQOnUZnqYBADNRPKPwFAONgA==", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-4.0.2.tgz", + "integrity": "sha512-qvigdYYMpSuoFs3Is/f5nHdRLJN/ITA7huIoCyqqENJe9PvPmLhNLMu7QTjPdtnVf6OcYYO5SHonx4+fbJE1+Q==", "dev": true, "requires": { "cssnano-util-get-arguments": "^4.0.0", @@ -7001,9 +7230,9 @@ } }, "postcss-normalize-string": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-4.0.1.tgz", - "integrity": "sha512-IJoexFTkAvAq5UZVxWXAGE0yLoNN/012v7TQh5nDo6imZJl2Fwgbhy3J2qnIoaDBrtUP0H7JrXlX1jjn2YcvCQ==", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-4.0.2.tgz", + "integrity": "sha512-RrERod97Dnwqq49WNz8qo66ps0swYZDSb6rM57kN2J+aoyEAJfZ6bMx0sx/F9TIEX0xthPGCmeyiam/jXif0eA==", "dev": true, "requires": { "has": "^1.0.0", @@ -7012,9 +7241,9 @@ } }, "postcss-normalize-timing-functions": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-4.0.1.tgz", - "integrity": "sha512-1nOtk7ze36+63ONWD8RCaRDYsnzorrj+Q6fxkQV+mlY5+471Qx9kspqv0O/qQNMeApg8KNrRf496zHwJ3tBZ7w==", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-4.0.2.tgz", + "integrity": "sha512-acwJY95edP762e++00Ehq9L4sZCEcOPyaHwoaFOhIwWCDfik6YvqsYNxckee65JHLKzuNSSmAdxwD2Cud1Z54A==", "dev": true, "requires": { "cssnano-util-get-match": "^4.0.0", @@ -7046,9 +7275,9 @@ } }, "postcss-normalize-whitespace": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-4.0.1.tgz", - "integrity": "sha512-U8MBODMB2L+nStzOk6VvWWjZgi5kQNShCyjRhMT3s+W9Jw93yIjOnrEkKYD3Ul7ChWbEcjDWmXq0qOL9MIAnAw==", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-4.0.2.tgz", + "integrity": "sha512-tO8QIgrsI3p95r8fyqKV+ufKlSHh9hMJqACqbv2XknufqEDhDvbguXGBBqxw9nsQoXWf0qOqppziKJKHMD4GtA==", "dev": true, "requires": { "postcss": "^7.0.0", @@ -7056,9 +7285,9 @@ } }, "postcss-ordered-values": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-4.1.1.tgz", - "integrity": "sha512-PeJiLgJWPzkVF8JuKSBcylaU+hDJ/TX3zqAMIjlghgn1JBi6QwQaDZoDIlqWRcCAI8SxKrt3FCPSRmOgKRB97Q==", + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-4.1.2.tgz", + "integrity": "sha512-2fCObh5UanxvSxeXrtLtlwVThBvHn6MQcu4ksNT2tsaV2Fg76R2CV98W7wNSlX+5/pFwEyaDwKLLoEV7uRybAw==", "dev": true, "requires": { "cssnano-util-get-arguments": "^4.0.0", @@ -7067,9 +7296,9 @@ } }, "postcss-reduce-initial": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-4.0.2.tgz", - "integrity": "sha512-epUiC39NonKUKG+P3eAOKKZtm5OtAtQJL7Ye0CBN1f+UQTHzqotudp+hki7zxXm7tT0ZAKDMBj1uihpPjP25ug==", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-4.0.3.tgz", + "integrity": "sha512-gKWmR5aUulSjbzOfD9AlJiHCGH6AEVLaM0AV+aSioxUDd16qXP1PCh8d1/BGVvpdWn8k/HiK7n6TjeoXN1F7DA==", "dev": true, "requires": { "browserslist": "^4.0.0", @@ -7079,9 +7308,9 @@ } }, "postcss-reduce-transforms": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-4.0.1.tgz", - "integrity": "sha512-sZVr3QlGs0pjh6JAIe6DzWvBaqYw05V1t3d9Tp+VnFRT5j+rsqoWsysh/iSD7YNsULjq9IAylCznIwVd5oU/zA==", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-4.0.2.tgz", + "integrity": "sha512-EEVig1Q2QJ4ELpJXMZR8Vt5DQx8/mo+dGWSR7vWXqcob2gQLyQGsionYcGKATXvQzMPn6DSN1vTN7yFximdIAg==", "dev": true, "requires": { "cssnano-util-get-match": "^4.0.0", @@ -7102,9 +7331,9 @@ } }, "postcss-svgo": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-4.0.1.tgz", - "integrity": "sha512-YD5uIk5NDRySy0hcI+ZJHwqemv2WiqqzDgtvgMzO8EGSkK5aONyX8HMVFRFJSdO8wUWTuisUFn/d7yRRbBr5Qw==", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-4.0.2.tgz", + "integrity": "sha512-C6wyjo3VwFm0QgBy+Fu7gCYOkCmgmClghO+pjcxvrcBKtiKt0uCF+hvbMO1fyv5BMImRK90SMb+dwUnfbGd+jw==", "dev": true, "requires": { "is-svg": "^3.0.0", @@ -7130,6 +7359,12 @@ "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", "dev": true }, + "prepend-http": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz", + "integrity": "sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=", + "dev": true + }, "prettier": { "version": "1.15.2", "resolved": "https://registry.npmjs.org/prettier/-/prettier-1.15.2.tgz", @@ -7165,13 +7400,13 @@ "dev": true }, "proxy-addr": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.4.tgz", - "integrity": "sha512-5erio2h9jp5CHGwcybmxmVqHmnCBZeewlfJ0pex+UW7Qny7OOZXTtH56TGNyBizkgiOwhJtMKrVzDTeKcySZwA==", + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.5.tgz", + "integrity": "sha512-t/7RxHXPH6cJtP0pRG6smSr9QJidhB+3kXu0KgXnbGYMgzEnUxRQ4/LDdfOwZEMyIh3/xHb8PX3t+lfL9z+YVQ==", "dev": true, "requires": { "forwarded": "~0.1.2", - "ipaddr.js": "1.8.0" + "ipaddr.js": "1.9.0" } }, "prr": { @@ -7257,6 +7492,17 @@ "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==", "dev": true }, + "query-string": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/query-string/-/query-string-5.1.1.tgz", + "integrity": "sha512-gjWOsm2SoGlgLEdAGt7a6slVOk9mGiXmPFMqrEhLQ68rhQuBnpfs3+EmlvqKyxnCo9/PPlF+9MtY02S1aFg+Jw==", + "dev": true, + "requires": { + "decode-uri-component": "^0.2.0", + "object-assign": "^4.1.0", + "strict-uri-encode": "^1.0.0" + } + }, "querystring": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", @@ -7270,15 +7516,15 @@ "dev": true }, "querystringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.1.0.tgz", - "integrity": "sha512-sluvZZ1YiTLD5jsqZcDmFyV2EwToyXZBfpoVOmktMmW+VEnhgakFHnasVph65fOjGPTWN0Nw3+XQaSeMayr0kg==", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.1.1.tgz", + "integrity": "sha512-w7fLxIRCRT7U8Qu53jQnJyPkYZIaR4n5151KMfcJlO/A9397Wxb1amJvROTK6TOnp7PfoAmg/qXiNHI+08jRfA==", "dev": true }, "randombytes": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.0.6.tgz", - "integrity": "sha512-CIQ5OFxf4Jou6uOKe9t1AOgqpeU5fd70A8NPdHSGeYXqXsPe6peOwI0cUl88RWZ6sP1vPMV3avd/R6cZ5/sP1A==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", "dev": true, "requires": { "safe-buffer": "^5.1.0" @@ -7295,9 +7541,9 @@ } }, "range-parser": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.0.tgz", - "integrity": "sha1-9JvmtIeJTdxA3MlKMi9hEJLgDV4=", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", "dev": true }, "raw-body": { @@ -7313,14 +7559,38 @@ } }, "read-pkg": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-4.0.1.tgz", - "integrity": "sha1-ljYlN48+HE1IyFhytabsfV0JMjc=", + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.1.1.tgz", + "integrity": "sha512-dFcTLQi6BZ+aFUaICg7er+/usEoqFdQxiEBsEMNGoipenihtxxtdrQuBXvyANCEI8VuUIVYFgeHGx9sLLvim4w==", "dev": true, "requires": { - "normalize-package-data": "^2.3.2", + "@types/normalize-package-data": "^2.4.0", + "normalize-package-data": "^2.5.0", "parse-json": "^4.0.0", - "pify": "^3.0.0" + "type-fest": "^0.4.1" + }, + "dependencies": { + "normalize-package-data": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", + "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", + "dev": true, + "requires": { + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + } + }, + "resolve": { + "version": "1.10.1", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.10.1.tgz", + "integrity": "sha512-KuIe4mf++td/eFb6wkaPbMDnP6kObCaEtIDuHOUED6MNUo4K670KZUHuuvYPZDxNF0WVLw49n06M2m2dXphEzA==", + "dev": true, + "requires": { + "path-parse": "^1.0.6" + } + } } }, "read-pkg-up": { @@ -7484,14 +7754,14 @@ "dev": true }, "renderkid": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/renderkid/-/renderkid-2.0.2.tgz", - "integrity": "sha512-FsygIxevi1jSiPY9h7vZmBFUbAOcbYm9UwyiLNdVsLRs/5We9Ob5NMPbGYUTWiLq5L+ezlVdE0A8bbME5CWTpg==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/renderkid/-/renderkid-2.0.3.tgz", + "integrity": "sha512-z8CLQp7EZBPCwCnncgf9C4XAi3WR0dv+uWu/PjIyhhAb5d6IJ/QZqlHFprHeKT+59//V6BNUsLbvN8+2LarxGA==", "dev": true, "requires": { "css-select": "^1.1.0", - "dom-converter": "~0.2", - "htmlparser2": "~3.3.0", + "dom-converter": "^0.2", + "htmlparser2": "^3.3.0", "strip-ansi": "^3.0.0", "utila": "^0.4.0" }, @@ -7585,23 +7855,23 @@ } }, "request-promise-core": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/request-promise-core/-/request-promise-core-1.1.1.tgz", - "integrity": "sha1-Pu4AssWqgyOc+wTFcA2jb4HNCLY=", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/request-promise-core/-/request-promise-core-1.1.2.tgz", + "integrity": "sha512-UHYyq1MO8GsefGEt7EprS8UrXsm1TxEvFUX1IMTuSLU2Rh7fTIdFtl8xD7JiEYiWU2dl+NYAjCTksTehQUxPag==", "dev": true, "requires": { - "lodash": "^4.13.1" + "lodash": "^4.17.11" } }, "request-promise-native": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/request-promise-native/-/request-promise-native-1.0.5.tgz", - "integrity": "sha1-UoF3D2jgyXGeUWP9P6tIIhX0/aU=", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/request-promise-native/-/request-promise-native-1.0.7.tgz", + "integrity": "sha512-rIMnbBdgNViL37nZ1b3L/VfPOpSi0TqVDQPAvO6U14lMzOLrt5nilxCQqtDKhZeDiW0/hkCXGoQjhgJd/tCh6w==", "dev": true, "requires": { - "request-promise-core": "1.1.1", - "stealthy-require": "^1.1.0", - "tough-cookie": ">=2.3.3" + "request-promise-core": "1.1.2", + "stealthy-require": "^1.1.1", + "tough-cookie": "^2.3.3" } }, "require-directory": { @@ -7766,14 +8036,8 @@ "requires": { "string-width": "^1.0.1", "strip-ansi": "^3.0.1", - "wrap-ansi": "^2.0.0" - } - }, - "decamelize": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", - "dev": true + "wrap-ansi": "^2.0.0" + } }, "invert-kv": { "version": "1.0.0", @@ -7974,9 +8238,9 @@ } }, "serialize-javascript": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-1.6.1.tgz", - "integrity": "sha512-A5MOagrPFga4YaKQSWHryl7AXvbQkEqpw4NNYMTNYUNV51bA8ABHgYFpqKx+YFFrw59xMV1qGH1R4AgoNIVgCw==", + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-1.7.0.tgz", + "integrity": "sha512-ke8UG8ulpFOxO8f8gRYabHQe/ZntKlcig2Mp+8+URDP1D8vJZ0KUt7LYo07q25Z/+JVSgpr/cui9PIp5H6/+nA==", "dev": true }, "serve-index": { @@ -8127,9 +8391,9 @@ } }, "slash": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-1.0.0.tgz", - "integrity": "sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU=", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz", + "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==", "dev": true }, "snapdragon": { @@ -8345,6 +8609,15 @@ } } }, + "sort-keys": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-2.0.0.tgz", + "integrity": "sha1-ZYU1WEhh7JfXMNbPQYIuH1ZoQSg=", + "dev": true, + "requires": { + "is-plain-obj": "^1.0.0" + } + }, "sortablejs": { "version": "1.7.0", "resolved": "https://registry.npmjs.org/sortablejs/-/sortablejs-1.7.0.tgz", @@ -8376,9 +8649,9 @@ } }, "source-map-support": { - "version": "0.5.10", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.10.tgz", - "integrity": "sha512-YfQ3tQFTK/yzlGJuX8pTwa4tifQj4QS2Mj7UegOu8jAz59MqIiMGPXxQhVQiIMNzayuUSF/jEuVnfFF5JqybmQ==", + "version": "0.5.12", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.12.tgz", + "integrity": "sha512-4h2Pbvyy15EE02G+JOZpUCmqWJuqrs+sEkzewTm++BPi7Hvn/HwcqLAcNxYAyI0x13CpPPn+kMjl+hplXMHITQ==", "dev": true, "requires": { "buffer-from": "^1.0.0", @@ -8491,9 +8764,9 @@ "dev": true }, "readable-stream": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.1.1.tgz", - "integrity": "sha512-DkN66hPyqDhnIQ6Jcsvx9bFjhw214O4poMBcIMgPVpQvNy9a0e0Uhg5SqySyDKAmUlwt8LonTBz1ezOnM8pUdA==", + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.3.0.tgz", + "integrity": "sha512-EsI+s3k3XsW+fU8fQACLN59ky34AZ14LoeVZpYwmZvldCFo0r0gnelwF2TcMjLor/BTL5aDJVBMkss0dthToPw==", "dev": true, "requires": { "inherits": "^2.0.3", @@ -8599,9 +8872,9 @@ "dev": true }, "stream-browserify": { - "version": "2.0.1", - "resolved": "http://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.1.tgz", - "integrity": "sha1-ZiZu5fm9uZQKTkUUyvtDu3Hlyds=", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.2.tgz", + "integrity": "sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg==", "dev": true, "requires": { "inherits": "~2.0.1", @@ -8637,6 +8910,12 @@ "integrity": "sha1-1cdSgl5TZ+eG944Y5EXqIjoVWVI=", "dev": true }, + "strict-uri-encode": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz", + "integrity": "sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM=", + "dev": true + }, "string-width": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", @@ -8709,9 +8988,9 @@ "dev": true }, "stylehacks": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-4.0.1.tgz", - "integrity": "sha512-TK5zEPeD9NyC1uPIdjikzsgWxdQQN/ry1X3d1iOz1UkYDCmcr928gWD1KHgyC27F50UnE0xCTrBOO1l6KR8M4w==", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-4.0.3.tgz", + "integrity": "sha512-7GlLk9JwlElY4Y6a/rmbH2MhVlTyVmiJd1PfTCqFaIBEGMYNsrO/v3SeGTdhBThLg4Z+NbOk/qFMwCa+J+3p/g==", "dev": true, "requires": { "browserslist": "^4.0.0", @@ -8742,61 +9021,55 @@ } }, "svgo": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/svgo/-/svgo-1.1.1.tgz", - "integrity": "sha512-GBkJbnTuFpM4jFbiERHDWhZc/S/kpHToqmZag3aEBjPYK44JAN2QBjvrGIxLOoCyMZjuFQIfTO2eJd8uwLY/9g==", + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/svgo/-/svgo-1.2.2.tgz", + "integrity": "sha512-rAfulcwp2D9jjdGu+0CuqlrAUin6bBWrpoqXWwKDZZZJfXcUXQSxLJOFJCQCSA0x0pP2U0TxSlJu2ROq5Bq6qA==", "dev": true, "requires": { - "coa": "~2.0.1", - "colors": "~1.1.2", + "chalk": "^2.4.1", + "coa": "^2.0.2", "css-select": "^2.0.0", - "css-select-base-adapter": "~0.1.0", + "css-select-base-adapter": "^0.1.1", "css-tree": "1.0.0-alpha.28", "css-url-regex": "^1.1.0", - "csso": "^3.5.0", - "js-yaml": "^3.12.0", + "csso": "^3.5.1", + "js-yaml": "^3.13.1", "mkdirp": "~0.5.1", - "object.values": "^1.0.4", + "object.values": "^1.1.0", "sax": "~1.2.4", - "stable": "~0.1.6", + "stable": "^0.1.8", "unquote": "~1.1.1", "util.promisify": "~1.0.0" } }, "tapable": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.0.tgz", - "integrity": "sha512-IlqtmLVaZA2qab8epUXbVWRn3aB1imbDMJtjB3nu4X0NqPkcY/JH9ZtCBWKHWPxs8Svi9tyo8w2dBoi07qZbBA==", + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz", + "integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==", "dev": true }, "tar": { - "version": "2.2.1", - "resolved": "http://registry.npmjs.org/tar/-/tar-2.2.1.tgz", - "integrity": "sha1-jk0qJWwOIYXGsYrWlK7JaLg8sdE=", + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/tar/-/tar-2.2.2.tgz", + "integrity": "sha512-FCEhQ/4rE1zYv9rYXJw/msRqsnmlje5jHP6huWeBZ704jUTy02c5AZyWujpMR1ax6mVw9NyJMfuK2CMDWVIfgA==", "dev": true, "requires": { "block-stream": "*", - "fstream": "^1.0.2", + "fstream": "^1.0.12", "inherits": "2" } }, "terser": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/terser/-/terser-3.14.1.tgz", - "integrity": "sha512-NSo3E99QDbYSMeJaEk9YW2lTg3qS9V0aKGlb+PlOrei1X02r1wSBHCNX/O+yeTRFSWPKPIGj6MqvvdqV4rnVGw==", + "version": "3.17.0", + "resolved": "https://registry.npmjs.org/terser/-/terser-3.17.0.tgz", + "integrity": "sha512-/FQzzPJmCpjAH9Xvk2paiWrFq+5M6aVOf+2KRbwhByISDX/EujxsK+BAvrhb6H+2rtrLCHK9N01wO014vrIwVQ==", "dev": true, "requires": { - "commander": "~2.17.1", + "commander": "^2.19.0", "source-map": "~0.6.1", - "source-map-support": "~0.5.6" + "source-map-support": "~0.5.10" }, "dependencies": { - "commander": { - "version": "2.17.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.17.1.tgz", - "integrity": "sha512-wPMUt6FnH2yzG95SA6mzjQOEKUU3aLaDEmzs1ti+1E9h+CsrZghRlqEM/EJ4KscsQVG8uNN4uVreUeT8+drlgg==", - "dev": true - }, "source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", @@ -8806,133 +9079,22 @@ } }, "terser-webpack-plugin": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-1.2.1.tgz", - "integrity": "sha512-GGSt+gbT0oKcMDmPx4SRSfJPE1XaN3kQRWG4ghxKQw9cn5G9x6aCKSsgYdvyM0na9NJ4Drv0RG6jbBByZ5CMjw==", + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-1.2.4.tgz", + "integrity": "sha512-64IiILNQlACWZLzFlpzNaG0bpQ4ytaB7fwOsbpsdIV70AfLUmIGGeuKL0YV2WmtcrURjE2aOvHD4/lrFV3Rg+Q==", "dev": true, "requires": { - "cacache": "^11.0.2", + "cacache": "^11.3.2", "find-cache-dir": "^2.0.0", + "is-wsl": "^1.1.0", "schema-utils": "^1.0.0", - "serialize-javascript": "^1.4.0", + "serialize-javascript": "^1.7.0", "source-map": "^0.6.1", - "terser": "^3.8.1", - "webpack-sources": "^1.1.0", - "worker-farm": "^1.5.2" + "terser": "^3.17.0", + "webpack-sources": "^1.3.0", + "worker-farm": "^1.7.0" }, "dependencies": { - "cacache": { - "version": "11.3.2", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-11.3.2.tgz", - "integrity": "sha512-E0zP4EPGDOaT2chM08Als91eYnf8Z+eH1awwwVsngUmgppfM5jjJ8l3z5vO5p5w/I3LsiXawb1sW0VY65pQABg==", - "dev": true, - "requires": { - "bluebird": "^3.5.3", - "chownr": "^1.1.1", - "figgy-pudding": "^3.5.1", - "glob": "^7.1.3", - "graceful-fs": "^4.1.15", - "lru-cache": "^5.1.1", - "mississippi": "^3.0.0", - "mkdirp": "^0.5.1", - "move-concurrently": "^1.0.1", - "promise-inflight": "^1.0.1", - "rimraf": "^2.6.2", - "ssri": "^6.0.1", - "unique-filename": "^1.1.1", - "y18n": "^4.0.0" - } - }, - "find-cache-dir": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.0.0.tgz", - "integrity": "sha512-LDUY6V1Xs5eFskUVYtIwatojt6+9xC9Chnlk/jYOOvn3FAFfSaWddxahDGyNHh0b2dMXa6YW2m0tk8TdVaXHlA==", - "dev": true, - "requires": { - "commondir": "^1.0.1", - "make-dir": "^1.0.0", - "pkg-dir": "^3.0.0" - } - }, - "find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", - "dev": true, - "requires": { - "locate-path": "^3.0.0" - } - }, - "locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", - "dev": true, - "requires": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - } - }, - "lru-cache": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", - "dev": true, - "requires": { - "yallist": "^3.0.2" - } - }, - "mississippi": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/mississippi/-/mississippi-3.0.0.tgz", - "integrity": "sha512-x471SsVjUtBRtcvd4BzKE9kFC+/2TeWgKCgw0bZcw1b9l2X3QX5vCWgF+KaZaYm87Ss//rHnWryupDrgLvmSkA==", - "dev": true, - "requires": { - "concat-stream": "^1.5.0", - "duplexify": "^3.4.2", - "end-of-stream": "^1.1.0", - "flush-write-stream": "^1.0.0", - "from2": "^2.1.0", - "parallel-transform": "^1.1.0", - "pump": "^3.0.0", - "pumpify": "^1.3.3", - "stream-each": "^1.1.0", - "through2": "^2.0.0" - } - }, - "p-limit": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.1.0.tgz", - "integrity": "sha512-NhURkNcrVB+8hNfLuysU8enY5xn2KXphsHBaC2YmRNTZRc7RWusw6apSpdEj3jo4CMb6W9nrF6tTnsJsJeyu6g==", - "dev": true, - "requires": { - "p-try": "^2.0.0" - } - }, - "p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", - "dev": true, - "requires": { - "p-limit": "^2.0.0" - } - }, - "p-try": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.0.0.tgz", - "integrity": "sha512-hMp0onDKIajHfIkdRk3P4CdCmErkYAxxDtP3Wx/4nZ3aGlau2VKh3mZpcuFkH27WQkL/3WBCPOktzA9ZOAnMQQ==", - "dev": true - }, - "pkg-dir": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", - "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", - "dev": true, - "requires": { - "find-up": "^3.0.0" - } - }, "schema-utils": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", @@ -8952,26 +9114,33 @@ } } }, + "thenify": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.0.tgz", + "integrity": "sha1-5p44obq+lpsBCCB5eLn2K4hgSDk=", + "dev": true, + "requires": { + "any-promise": "^1.0.0" + } + }, + "thenify-all": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz", + "integrity": "sha1-GhkY1ALY/D+Y+/I02wvMjMEOlyY=", + "dev": true, + "requires": { + "thenify": ">= 3.1.0 < 4" + } + }, "thread-loader": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/thread-loader/-/thread-loader-1.2.0.tgz", - "integrity": "sha512-acJ0rvUk53+ly9cqYWNOpPqOgCkNpmHLPDGduNm4hDQWF7EDKEJXAopG9iEWsPPcml09wePkq3NF+ZUqnO6tbg==", + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/thread-loader/-/thread-loader-2.1.2.tgz", + "integrity": "sha512-7xpuc9Ifg6WU+QYw/8uUqNdRwMD+N5gjwHKMqETrs96Qn+7BHwECpt2Brzr4HFlf4IAkZsayNhmGdbkBsTJ//w==", "dev": true, "requires": { - "async": "^2.3.0", - "loader-runner": "^2.3.0", - "loader-utils": "^1.1.0" - }, - "dependencies": { - "async": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.1.tgz", - "integrity": "sha512-fNEiL2+AZt6AlAw/29Cr0UDe4sRAHCpEHh54WMz+Bb7QfNcFw4h3loofyJpLeQs4Yx7yuqu/2dLgM5hKOs6HlQ==", - "dev": true, - "requires": { - "lodash": "^4.17.10" - } - } + "loader-runner": "^2.3.1", + "loader-utils": "^1.1.0", + "neo-async": "^2.6.0" } }, "through2": { @@ -9070,14 +9239,6 @@ "dev": true, "requires": { "hoek": "6.x.x" - }, - "dependencies": { - "hoek": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/hoek/-/hoek-6.0.3.tgz", - "integrity": "sha512-TU6RyZ/XaQCTWRLrdqZZtZqwxUVr6PDMfi6MlWNURZ7A6czanQqX4pFE1mdOUQR9FdPCsZ0UzL8jI/izZ+eBSQ==", - "dev": true - } } }, "toposort": { @@ -9126,9 +9287,9 @@ "dev": true }, "ts-loader": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/ts-loader/-/ts-loader-5.3.0.tgz", - "integrity": "sha512-lGSNs7szRFj/rK9T1EQuayE3QNLg6izDUxt5jpmq0RG1rU2bapAt7E7uLckLCUPeO1jwxCiet2oRaWovc53UAg==", + "version": "5.4.5", + "resolved": "https://registry.npmjs.org/ts-loader/-/ts-loader-5.4.5.tgz", + "integrity": "sha512-XYsjfnRQCBum9AMRZpk2rTYSVpdZBpZK+kDh0TeT3kxmQNBDVIeUjdPjY5RZry4eIAb8XHc4gYSUiUWPYvzSRw==", "dev": true, "requires": { "chalk": "^2.3.0", @@ -9200,14 +9361,37 @@ "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", "dev": true }, + "type-fest": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.4.1.tgz", + "integrity": "sha512-IwzA/LSfD2vC1/YDYMv/zHP4rDF1usCwllsDpbolT3D4fUepIO7f9K70jjmUewU/LmGUKJcwcVtDCpnKk4BPMw==", + "dev": true + }, "type-is": { - "version": "1.6.16", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.16.tgz", - "integrity": "sha512-HRkVv/5qY2G6I8iab9cI7v1bOIdhm94dVjQCPFElW9W+3GeDOSHmy2EBYe4VTApuzolPcmgFTN3ftVJRKR2J9Q==", + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", "dev": true, "requires": { "media-typer": "0.3.0", - "mime-types": "~2.1.18" + "mime-types": "~2.1.24" + }, + "dependencies": { + "mime-db": { + "version": "1.40.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.40.0.tgz", + "integrity": "sha512-jYdeOMPy9vnxEqFRRo6ZvTZ8d9oPb+k18PKoYNYUe2stVEBPPwsln/qWzdbmaIvnhZ9v2P+CuecK+fpUfsV2mA==", + "dev": true + }, + "mime-types": { + "version": "2.1.24", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.24.tgz", + "integrity": "sha512-WaFHS3MCl5fapm3oLxU4eYDw77IQM2ACcxQ9RIxfaC3ooc6PFuBMGZZsYpvoXS5D5QTWPieo1jjLdAm3TBP3cQ==", + "dev": true, + "requires": { + "mime-db": "1.40.0" + } + } } }, "typedarray": { @@ -9223,21 +9407,15 @@ "dev": true }, "uglify-js": { - "version": "3.4.9", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.4.9.tgz", - "integrity": "sha512-8CJsbKOtEbnJsTyv6LE6m6ZKniqMiFWmm9sRbopbkGs3gMPPfd3Fh8iIA4Ykv5MgaTbqHr4BaoGLJLZNhsrW1Q==", + "version": "3.4.10", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.4.10.tgz", + "integrity": "sha512-Y2VsbPVs0FIshJztycsO2SfPk7/KAF/T72qzv9u5EpQ4kB2hQoHlhNQTsNyy6ul7lQtqJN/AoWeS23OzEiEFxw==", "dev": true, "requires": { - "commander": "~2.17.1", + "commander": "~2.19.0", "source-map": "~0.6.1" }, "dependencies": { - "commander": { - "version": "2.17.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.17.1.tgz", - "integrity": "sha512-wPMUt6FnH2yzG95SA6mzjQOEKUU3aLaDEmzs1ti+1E9h+CsrZghRlqEM/EJ4KscsQVG8uNN4uVreUeT8+drlgg==", - "dev": true - }, "source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", @@ -9375,9 +9553,9 @@ } }, "upath": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/upath/-/upath-1.1.0.tgz", - "integrity": "sha512-bzpH/oBhoS/QI/YtbkqCg6VEiPYjSZtrHQM6/QnJS6OL9pKUFLqb3aFh4Scvwm45+7iAgiMkLhSbaZxUqmrprw==", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/upath/-/upath-1.1.2.tgz", + "integrity": "sha512-kXpym8nmDmlCBr7nKdIx8P2jNBa+pBpIUFRnKJ4dr8htyYGJFokkr2ZvERRtUN+9SY+JqXouNgUPtv6JQva/2Q==", "dev": true }, "upper-case": { @@ -9444,12 +9622,12 @@ } }, "url-parse": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.4.4.tgz", - "integrity": "sha512-/92DTTorg4JjktLNLe6GPS2/RvAd/RGr6LuktmWSMLEOa6rjnlrFXNgSbSmkNvCoL2T028A0a1JaJLzRMlFoHg==", + "version": "1.4.7", + "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.4.7.tgz", + "integrity": "sha512-d3uaVyzDB9tQoSXFvuSUNFibTd9zxd2bkVrDRvF5TmvWWQwqE4lgYJ5m+x1DbecWkw+LK4RNl2CU1hHuOKPVlg==", "dev": true, "requires": { - "querystringify": "^2.0.0", + "querystringify": "^2.1.1", "requires-port": "^1.0.0" } }, @@ -9460,9 +9638,9 @@ "dev": true }, "util": { - "version": "0.10.4", - "resolved": "https://registry.npmjs.org/util/-/util-0.10.4.tgz", - "integrity": "sha512-0Pm9hTQ3se5ll1XihRic3FDIku70C+iHUdT/W926rSgHV5QgXsYbKZN8MSC3tJtSkhuROzvsQjAaFENRXr+19A==", + "version": "0.11.1", + "resolved": "https://registry.npmjs.org/util/-/util-0.11.1.tgz", + "integrity": "sha512-HShAsny+zS2TZfaXxD9tYj4HQGlBezXZMZuM/S5PKLLoZkShZiGk9o5CzukI1LVHZvjdvZ2Sj1aW/Ndn2NB/HQ==", "dev": true, "requires": { "inherits": "2.0.3" @@ -9519,9 +9697,9 @@ "dev": true }, "vendors": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/vendors/-/vendors-1.0.2.tgz", - "integrity": "sha512-w/hry/368nO21AN9QljsaIhb9ZiZtZARoVH5f3CsFbawdLdayCgKRPup7CggujvySMxx0I91NOyxdVENohprLQ==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/vendors/-/vendors-1.0.3.tgz", + "integrity": "sha512-fOi47nsJP5Wqefa43kyWSg80qF+Q3XA6MUkgi7Hp1HQaKDQW4cQrK2D0P7mmbFtsV1N89am55Yru/nyEwRubcw==", "dev": true }, "verror": { @@ -9566,18 +9744,18 @@ } }, "vue-hot-reload-api": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/vue-hot-reload-api/-/vue-hot-reload-api-2.3.1.tgz", - "integrity": "sha512-AA86yKZ5uOKz87/q1UpngEXhbRkaYg1b7HMMVRobNV1IVKqZe8oLIzo6iMocVwZXnYitlGwf2k4ZRLOZlS8oPQ==", + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/vue-hot-reload-api/-/vue-hot-reload-api-2.3.3.tgz", + "integrity": "sha512-KmvZVtmM26BQOMK1rwUZsrqxEGeKiYSZGA7SNWE6uExx8UX/cj9hq2MRV/wWC3Cq6AoeDGk57rL9YMFRel/q+g==", "dev": true }, "vue-loader": { - "version": "15.5.1", - "resolved": "https://registry.npmjs.org/vue-loader/-/vue-loader-15.5.1.tgz", - "integrity": "sha512-gsTA9xRzu9jGBzkcrAB8my14RkHMzdr5rY/mCFmxgY2tOVsd2Z1MaYCDXHu5nX6PyHAsVK2/hXmarPln/2MiIw==", + "version": "15.7.0", + "resolved": "https://registry.npmjs.org/vue-loader/-/vue-loader-15.7.0.tgz", + "integrity": "sha512-x+NZ4RIthQOxcFclEcs8sXGEWqnZHodL2J9Vq+hUz+TDZzBaDIh1j3d9M2IUlTjtrHTZy4uMuRdTi8BGws7jLA==", "dev": true, "requires": { - "@vue/component-compiler-utils": "^2.4.0", + "@vue/component-compiler-utils": "^2.5.1", "hash-sum": "^1.0.2", "loader-utils": "^1.1.0", "vue-hot-reload-api": "^2.3.0", @@ -9624,9 +9802,9 @@ } }, "vue-template-es2015-compiler": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/vue-template-es2015-compiler/-/vue-template-es2015-compiler-1.8.1.tgz", - "integrity": "sha512-mxBBMuSaPG9+NkVMbh28r8gvWQJ8UXxqDxVNeLy2KBUZiSNxZsagjYwLL8gjROb4oaaYtwRv3K8gAmw76I/U7Q==", + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/vue-template-es2015-compiler/-/vue-template-es2015-compiler-1.9.1.tgz", + "integrity": "sha512-4gDntzrifFnCEvyoO8PqyJDmguXgVPxKiIxrBKjIowvL9l+N66196+72XVYR8BBf1Uv1Fgt3bGevJ+sEmxfZzw==", "dev": true }, "vuedraggable": { @@ -9707,23 +9885,16 @@ "terser-webpack-plugin": "^1.1.0", "watchpack": "^1.5.0", "webpack-sources": "^1.3.0" - }, - "dependencies": { - "acorn": { - "version": "5.7.3", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.3.tgz", - "integrity": "sha512-T/zvzYRfbVojPWahDsE5evJdHb3oJoQfFbsrKM7w5Zcs++Tr257tia3BmMP8XYVjp1S9RZXQMh7gao96BlqZOw==", - "dev": true - } } }, "webpack-bundle-analyzer": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/webpack-bundle-analyzer/-/webpack-bundle-analyzer-3.0.3.tgz", - "integrity": "sha512-naLWiRfmtH4UJgtUktRTLw6FdoZJ2RvCR9ePbwM9aRMsS/KjFerkPZG9epEvXRAw5d5oPdrs9+3p+afNjxW8Xw==", + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/webpack-bundle-analyzer/-/webpack-bundle-analyzer-3.3.2.tgz", + "integrity": "sha512-7qvJLPKB4rRWZGjVp5U1KEjwutbDHSKboAl0IfafnrdXMrgC0tOtZbQD6Rw0u4cmpgRN4O02Fc0t8eAT+FgGzA==", "dev": true, "requires": { - "acorn": "^5.7.3", + "acorn": "^6.0.7", + "acorn-walk": "^6.1.1", "bfj": "^6.1.1", "chalk": "^2.4.1", "commander": "^2.18.0", @@ -9738,9 +9909,9 @@ }, "dependencies": { "acorn": { - "version": "5.7.3", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.3.tgz", - "integrity": "sha512-T/zvzYRfbVojPWahDsE5evJdHb3oJoQfFbsrKM7w5Zcs++Tr257tia3BmMP8XYVjp1S9RZXQMh7gao96BlqZOw==", + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.1.1.tgz", + "integrity": "sha512-jPTiwtOxaHNaAPg/dmrJ/beuzLRnXtB0kQPQ8JpotKJgTB6rX6c8mlf315941pyjBSaPg8NHXS9fhP4u17DpGA==", "dev": true } } @@ -9756,53 +9927,53 @@ } }, "webpack-dev-middleware": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-3.4.0.tgz", - "integrity": "sha512-Q9Iyc0X9dP9bAsYskAVJ/hmIZZQwf/3Sy4xCAZgL5cUkjZmUZLt4l5HpbST/Pdgjn3u6pE7u5OdGd1apgzRujA==", + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-3.7.0.tgz", + "integrity": "sha512-qvDesR1QZRIAZHOE3iQ4CXLZZSQ1lAUsSpnQmlB1PBfoN/xdRjmge3Dok0W4IdaVLJOGJy3sGI4sZHwjRU0PCA==", "dev": true, "requires": { - "memory-fs": "~0.4.1", - "mime": "^2.3.1", - "range-parser": "^1.0.3", + "memory-fs": "^0.4.1", + "mime": "^2.4.2", + "range-parser": "^1.2.1", "webpack-log": "^2.0.0" } }, "webpack-dev-server": { - "version": "3.1.14", - "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-3.1.14.tgz", - "integrity": "sha512-mGXDgz5SlTxcF3hUpfC8hrQ11yhAttuUQWf1Wmb+6zo3x6rb7b9mIfuQvAPLdfDRCGRGvakBWHdHOa0I9p/EVQ==", + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-3.3.1.tgz", + "integrity": "sha512-jY09LikOyGZrxVTXK0mgIq9y2IhCoJ05848dKZqX1gAGLU1YDqgpOT71+W53JH/wI4v6ky4hm+KvSyW14JEs5A==", "dev": true, "requires": { "ansi-html": "0.0.7", "bonjour": "^3.5.0", - "chokidar": "^2.0.0", - "compression": "^1.5.2", - "connect-history-api-fallback": "^1.3.0", - "debug": "^3.1.0", - "del": "^3.0.0", - "express": "^4.16.2", - "html-entities": "^1.2.0", - "http-proxy-middleware": "~0.18.0", + "chokidar": "^2.1.5", + "compression": "^1.7.4", + "connect-history-api-fallback": "^1.6.0", + "debug": "^4.1.1", + "del": "^4.1.0", + "express": "^4.16.4", + "html-entities": "^1.2.1", + "http-proxy-middleware": "^0.19.1", "import-local": "^2.0.0", - "internal-ip": "^3.0.1", + "internal-ip": "^4.2.0", "ip": "^1.1.5", - "killable": "^1.0.0", - "loglevel": "^1.4.1", - "opn": "^5.1.0", - "portfinder": "^1.0.9", + "killable": "^1.0.1", + "loglevel": "^1.6.1", + "opn": "^5.5.0", + "portfinder": "^1.0.20", "schema-utils": "^1.0.0", - "selfsigned": "^1.9.1", - "semver": "^5.6.0", - "serve-index": "^1.7.2", + "selfsigned": "^1.10.4", + "semver": "^6.0.0", + "serve-index": "^1.9.1", "sockjs": "0.3.19", "sockjs-client": "1.3.0", "spdy": "^4.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^5.1.0", + "strip-ansi": "^3.0.1", + "supports-color": "^6.1.0", "url": "^0.11.0", - "webpack-dev-middleware": "3.4.0", + "webpack-dev-middleware": "^3.6.2", "webpack-log": "^2.0.0", - "yargs": "12.0.2" + "yargs": "12.0.5" }, "dependencies": { "ansi-regex": { @@ -9811,10 +9982,38 @@ "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", "dev": true }, + "cliui": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-4.1.0.tgz", + "integrity": "sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ==", + "dev": true, + "requires": { + "string-width": "^2.1.1", + "strip-ansi": "^4.0.0", + "wrap-ansi": "^2.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "requires": { + "ansi-regex": "^3.0.0" + } + } + } + }, "debug": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", - "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", + "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", "dev": true, "requires": { "ms": "^2.1.1" @@ -9837,6 +10036,12 @@ "ajv-keywords": "^3.1.0" } }, + "semver": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.0.0.tgz", + "integrity": "sha512-0UewU+9rFapKFnlbirLi3byoOuhrSsli/z/ihNnvM24vgF+8sNBiI1LZPBSH9wJKUwaUbw+s3hToDLCXkrghrQ==", + "dev": true + }, "strip-ansi": { "version": "3.0.1", "resolved": "http://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", @@ -9845,6 +10050,45 @@ "requires": { "ansi-regex": "^2.0.0" } + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + }, + "yargs": { + "version": "12.0.5", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-12.0.5.tgz", + "integrity": "sha512-Lhz8TLaYnxq/2ObqHDql8dX8CJi97oHxrjUcYtzKbbykPtVW9WB+poxI+NM2UIzsMgNCZTIf0AQwsjK5yMAqZw==", + "dev": true, + "requires": { + "cliui": "^4.0.0", + "decamelize": "^1.2.0", + "find-up": "^3.0.0", + "get-caller-file": "^1.0.1", + "os-locale": "^3.0.0", + "require-directory": "^2.1.1", + "require-main-filename": "^1.0.1", + "set-blocking": "^2.0.0", + "string-width": "^2.0.0", + "which-module": "^2.0.0", + "y18n": "^3.2.1 || ^4.0.0", + "yargs-parser": "^11.1.1" + } + }, + "yargs-parser": { + "version": "11.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-11.1.1.tgz", + "integrity": "sha512-C6kB/WJDiaxONLJQnF8ccx9SEeoTTLek8RVbaOIsrAUS8VrBEXfmeSnCZxygc+XC2sNMBIwOOnfcxiynjHsVSQ==", + "dev": true, + "requires": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + } } } }, @@ -9926,9 +10170,9 @@ } }, "worker-farm": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/worker-farm/-/worker-farm-1.6.0.tgz", - "integrity": "sha512-6w+3tHbM87WnSWnENBUvA2pxJPLhQUg5LKwUQHq3r+XPhIM+Gh2R5ycbwPCyuGbNg+lPgdcnQUhuC02kJCvffQ==", + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/worker-farm/-/worker-farm-1.7.0.tgz", + "integrity": "sha512-rvw3QTZc8lAxyVrqcSGVm5yP/IJ2UcB3U0graE3LCFoZ0Yn2x4EoVSqJKdB/T5M+FLcRPjz4TDacRf3OCfNUzw==", "dev": true, "requires": { "errno": "~0.1.7" @@ -9988,9 +10232,9 @@ "dev": true }, "ws": { - "version": "6.1.2", - "resolved": "https://registry.npmjs.org/ws/-/ws-6.1.2.tgz", - "integrity": "sha512-rfUqzvz0WxmSXtJpPMX2EeASXabOrSMk1ruMOV3JBTBjo4ac2lDjGGsbQSyxj8Odhw5fBib8ZKEjDNvgouNKYw==", + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.1.tgz", + "integrity": "sha512-GIyAXC2cB7LjvpgMt9EKS2ldqr0MTrORaleiOno6TweZ6r3TKtoFQWay/2PceJ3RuBasOHzXNn5Lrw1X0bEjqA==", "dev": true, "requires": { "async-limiter": "~1.0.0" @@ -10001,12 +10245,6 @@ "resolved": "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.5.5.tgz", "integrity": "sha1-wodrBhaKrcQOV9l+gRkayPQ5iz4=" }, - "xregexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/xregexp/-/xregexp-4.0.0.tgz", - "integrity": "sha512-PHyM+sQouu7xspQQwELlGwwd05mXUFqwFYfqPO0cC7x4fxyHnnuetmQr6CjJiafIDoH4MogHb9dOoJzR/Y4rFg==", - "dev": true - }, "xtend": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz", @@ -10026,77 +10264,72 @@ "dev": true }, "yargs": { - "version": "12.0.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-12.0.2.tgz", - "integrity": "sha512-e7SkEx6N6SIZ5c5H22RTZae61qtn3PYUE8JYbBFlK9sYmh3DMQ6E5ygtaG/2BW0JZi4WGgTR2IV5ChqlqrDGVQ==", + "version": "13.2.4", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.2.4.tgz", + "integrity": "sha512-HG/DWAJa1PAnHT9JAhNa8AbAv3FPaiLzioSjCcmuXXhP8MlpHO5vwls4g4j6n30Z74GVQj8Xa62dWVx1QCGklg==", "dev": true, "requires": { - "cliui": "^4.0.0", - "decamelize": "^2.0.0", + "cliui": "^5.0.0", "find-up": "^3.0.0", - "get-caller-file": "^1.0.1", - "os-locale": "^3.0.0", + "get-caller-file": "^2.0.1", + "os-locale": "^3.1.0", "require-directory": "^2.1.1", - "require-main-filename": "^1.0.1", + "require-main-filename": "^2.0.0", "set-blocking": "^2.0.0", - "string-width": "^2.0.0", + "string-width": "^3.0.0", "which-module": "^2.0.0", - "y18n": "^3.2.1 || ^4.0.0", - "yargs-parser": "^10.1.0" + "y18n": "^4.0.0", + "yargs-parser": "^13.1.0" }, "dependencies": { - "find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", - "dev": true, - "requires": { - "locate-path": "^3.0.0" - } + "ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "dev": true }, - "locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", - "dev": true, - "requires": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - } + "get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true }, - "p-limit": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.1.0.tgz", - "integrity": "sha512-NhURkNcrVB+8hNfLuysU8enY5xn2KXphsHBaC2YmRNTZRc7RWusw6apSpdEj3jo4CMb6W9nrF6tTnsJsJeyu6g==", + "require-main-filename": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", + "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", + "dev": true + }, + "string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", "dev": true, "requires": { - "p-try": "^2.0.0" + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" } }, - "p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", "dev": true, "requires": { - "p-limit": "^2.0.0" + "ansi-regex": "^4.1.0" } - }, - "p-try": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.0.0.tgz", - "integrity": "sha512-hMp0onDKIajHfIkdRk3P4CdCmErkYAxxDtP3Wx/4nZ3aGlau2VKh3mZpcuFkH27WQkL/3WBCPOktzA9ZOAnMQQ==", - "dev": true } } }, "yargs-parser": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-10.1.0.tgz", - "integrity": "sha512-VCIyR1wJoEBZUqk5PA+oOBF6ypbwh5aNB3I50guxAL/quggdfs4TtNHQrSazFA3fYZ+tEqfs0zIGlv0c/rgjbQ==", + "version": "13.1.0", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.0.tgz", + "integrity": "sha512-Yq+32PrijHRri0vVKQEm+ys8mbqWjLiwQkMFNXEENutzLPP0bE4Lcd4iA3OQY5HF+GD3xXxf0MEHb8E4/SA3AA==", "dev": true, "requires": { - "camelcase": "^4.1.0" + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" } }, "yeast": { diff --git a/client/package.json b/client/package.json index 6c0cdb3d7..e28d13db4 100644 --- a/client/package.json +++ b/client/package.json @@ -34,9 +34,9 @@ "@types/socket.io-client": "^1.4.32", "@types/tinycolor2": "^1.4.1", "@types/vue-color": "^2.4.1", - "@vue/cli-plugin-typescript": "^3.1.1", - "@vue/cli-service": "^3.3.0", - "node-sass": "^4.9.0", + "@vue/cli-plugin-typescript": "^3.7.0", + "@vue/cli-service": "^3.7.0", + "node-sass": "^4.12.0", "prettier": "^1.15.2", "rimraf": "^2.6.2", "sass-loader": "^7.0.1", From 5168c10ef9bc211e90fecb79e313271209414f4c Mon Sep 17 00:00:00 2001 From: Kruptein Date: Wed, 15 May 2019 14:08:51 +0200 Subject: [PATCH 31/92] Add core active token logic --- client/src/game/layers/fowplayers.ts | 2 +- client/src/game/layers/manager.ts | 6 ++++++ client/src/game/store.ts | 19 +++++++++++++++---- 3 files changed, 22 insertions(+), 5 deletions(-) diff --git a/client/src/game/layers/fowplayers.ts b/client/src/game/layers/fowplayers.ts index 0f73b39c5..cdddecdf4 100644 --- a/client/src/game/layers/fowplayers.ts +++ b/client/src/game/layers/fowplayers.ts @@ -33,7 +33,7 @@ export class FOWPlayersLayer extends Layer { // Then cut out all the player vision auras const maxLength = ctx.canvas.width + ctx.canvas.height; - for (const tokenId of gameStore.ownedtokens) { + for (const tokenId of gameStore.activeTokens) { const token = layerManager.UUIDMap.get(tokenId); if (token === undefined) continue; const center = token.center(); diff --git a/client/src/game/layers/manager.ts b/client/src/game/layers/manager.ts index fae974383..39500dc28 100644 --- a/client/src/game/layers/manager.ts +++ b/client/src/game/layers/manager.ts @@ -109,6 +109,12 @@ class LayerManager { if (this.layers[i].isVisionLayer) this.layers[i].invalidate(true); } + invalidatePlayerVision() { + for (const layer of this.layers) { + if (layer.name === "fow-players") layer.invalidate(true); + } + } + dropAsset(event: DragEvent) { const layer = this.getLayer(); if (layer === undefined || event === null || event.dataTransfer === null) return; diff --git a/client/src/game/store.ts b/client/src/game/store.ts index b21b72669..b682ae0c5 100644 --- a/client/src/game/store.ts +++ b/client/src/game/store.ts @@ -1,4 +1,4 @@ -import Vue from 'vue'; +import Vue from "vue"; import { Action, getModule, Module, Mutation, VuexModule } from "vuex-module-decorators"; @@ -61,6 +61,7 @@ class GameStore extends VuexModule implements GameState { annotations: string[] = []; movementblockers: string[] = []; ownedtokens: string[] = []; + _activeTokens: string[] = []; BV = Object.freeze(new BoundingVolume([])); @@ -72,7 +73,7 @@ class GameStore extends VuexModule implements GameState { clipboard: ServerShape[] = []; // Maps are not yet supported in Vue untill 3.X, so for now we're using a plain old object - labels: {[uuid: string]: Label} = {}; + labels: { [uuid: string]: Label } = {}; filterNoLabel = false; labelFilters: string[] = []; @@ -87,6 +88,11 @@ class GameStore extends VuexModule implements GameState { return zoomValue(this.zoomDisplay); } + get activeTokens() { + if (this._activeTokens.length === 0) return this.ownedtokens; + return this._activeTokens; + } + @Mutation setZoomDisplay(zoom: number) { if (zoom === this.zoomDisplay) return; @@ -140,8 +146,7 @@ class GameStore extends VuexModule implements GameState { updatedLayers.add(shape.layer); } } - for (const layer of updatedLayers) - layerManager.getLayer(layer)!.invalidate(false); + for (const layer of updatedLayers) layerManager.getLayer(layer)!.invalidate(false); Vue.delete(this.labels, data.uuid); } @@ -373,6 +378,12 @@ class GameStore extends VuexModule implements GameState { this.clipboard = clipboard; } + @Mutation + setActiveTokens(...tokens: string[]) { + this._activeTokens = tokens; + layerManager.invalidatePlayerVision(); + } + @Action clear() { (this.context.state).visionSources = []; From 50fbbaece1458466d79e74b679b0feddf63fbe34 Mon Sep 17 00:00:00 2001 From: Kruptein Date: Wed, 15 May 2019 16:23:40 +0200 Subject: [PATCH 32/92] Add vision tool --- CHANGELOG.md | 1 + client/src/game/layers/manager.ts | 6 --- client/src/game/store.ts | 17 ++++++- client/src/game/ui/tools/tools.vue | 5 +- client/src/game/ui/tools/vision.vue | 78 +++++++++++++++++++++++++++++ 5 files changed, 99 insertions(+), 8 deletions(-) create mode 100644 client/src/game/ui/tools/vision.vue diff --git a/CHANGELOG.md b/CHANGELOG.md index fe3fc1ef1..7c7b03963 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -10,6 +10,7 @@ All notable changes to this project will be documented in this file. ### Added - Option to listen on a socket instead of HOST:PORT. +- Vision tool to change active tokens. ## [0.15.1] - 2019-05-15 diff --git a/client/src/game/layers/manager.ts b/client/src/game/layers/manager.ts index 39500dc28..fae974383 100644 --- a/client/src/game/layers/manager.ts +++ b/client/src/game/layers/manager.ts @@ -109,12 +109,6 @@ class LayerManager { if (this.layers[i].isVisionLayer) this.layers[i].invalidate(true); } - invalidatePlayerVision() { - for (const layer of this.layers) { - if (layer.name === "fow-players") layer.invalidate(true); - } - } - dropAsset(event: DragEvent) { const layer = this.getLayer(); if (layer === undefined || event === null || event.dataTransfer === null) return; diff --git a/client/src/game/store.ts b/client/src/game/store.ts index b682ae0c5..8f2834804 100644 --- a/client/src/game/store.ts +++ b/client/src/game/store.ts @@ -381,7 +381,22 @@ class GameStore extends VuexModule implements GameState { @Mutation setActiveTokens(...tokens: string[]) { this._activeTokens = tokens; - layerManager.invalidatePlayerVision(); + layerManager.invalidateLight(); + } + + @Mutation + addActiveToken(token: string) { + this._activeTokens.push(token); + layerManager.invalidateLight(); + } + + @Mutation + removeActiveToken(token: string) { + if (this._activeTokens.length === 0) { + this._activeTokens = [...this.ownedtokens]; + } + this._activeTokens.splice(this._activeTokens.indexOf(token), 1); + layerManager.invalidateLight(); } @Action diff --git a/client/src/game/ui/tools/tools.vue b/client/src/game/ui/tools/tools.vue index 013e31180..d231100b3 100644 --- a/client/src/game/ui/tools/tools.vue +++ b/client/src/game/ui/tools/tools.vue @@ -23,6 +23,7 @@ + @@ -41,6 +42,7 @@ import FilterTool from "@/game/ui/tools/filter.vue"; import MapTool from "@/game/ui/tools/map.vue"; import PanTool from "@/game/ui/tools/pan"; import SelectTool from "@/game/ui/tools/select.vue"; +import VisionTool from "@/game/ui/tools/vision.vue"; import { layerManager } from "@/game/layers/manager"; import { gameManager } from "@/game/manager"; @@ -58,6 +60,7 @@ import Component from "vue-class-component"; "ruler-tool": RulerTool, "map-tool": MapTool, "filter-tool": FilterTool, + "vision-tool": VisionTool, "shape-menu": ShapeContext, "createtoken-dialog": CreateTokenModal, }, @@ -73,7 +76,7 @@ export default class Tools extends Vue { }; currentTool = "Select"; - tools = ["Select", "Pan", "Draw", "Ruler", "Map", "Filter"]; + tools = ["Select", "Pan", "Draw", "Ruler", "Map", "Filter", "Vision"]; dmTools = ["Map"]; get IS_DM(): boolean { diff --git a/client/src/game/ui/tools/vision.vue b/client/src/game/ui/tools/vision.vue new file mode 100644 index 000000000..4c86e1263 --- /dev/null +++ b/client/src/game/ui/tools/vision.vue @@ -0,0 +1,78 @@ + + + + + From bc2fb74a92ef7b112dd856c6ef3ec5a5788fa138 Mon Sep 17 00:00:00 2001 From: Kruptein Date: Wed, 15 May 2019 16:52:48 +0200 Subject: [PATCH 33/92] Add vision lock button to initiative dialog --- CHANGELOG.md | 1 + client/src/game/store.ts | 2 +- client/src/game/ui/initiative.vue | 19 +++++++++++++++++++ 3 files changed, 21 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 7c7b03963..e6c336f50 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -11,6 +11,7 @@ All notable changes to this project will be documented in this file. - Option to listen on a socket instead of HOST:PORT. - Vision tool to change active tokens. +- Vision lock button to initiative to only show vision of current actor. ## [0.15.1] - 2019-05-15 diff --git a/client/src/game/store.ts b/client/src/game/store.ts index 8f2834804..e4990ee85 100644 --- a/client/src/game/store.ts +++ b/client/src/game/store.ts @@ -379,7 +379,7 @@ class GameStore extends VuexModule implements GameState { } @Mutation - setActiveTokens(...tokens: string[]) { + setActiveTokens(tokens: string[]) { this._activeTokens = tokens; layerManager.invalidateLight(); } diff --git a/client/src/game/ui/initiative.vue b/client/src/game/ui/initiative.vue index 1194d0ccb..d48518983 100644 --- a/client/src/game/ui/initiative.vue +++ b/client/src/game/ui/initiative.vue @@ -100,6 +100,13 @@
Round {{ roundCounter }}
+
+ +
From 86f75e122ce0f5b167357d329e61b8e672ebab22 Mon Sep 17 00:00:00 2001 From: Kruptein Date: Wed, 15 May 2019 16:54:19 +0200 Subject: [PATCH 34/92] Fix a bug caused by labels without category --- CHANGELOG.md | 4 ++++ client/src/game/ui/labels.vue | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index fe3fc1ef1..c8164959c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -11,6 +11,10 @@ All notable changes to this project will be documented in this file. - Option to listen on a socket instead of HOST:PORT. +### Fixed + +- Fix a bug causing labels without category to throw errors. + ## [0.15.1] - 2019-05-15 ### Fixed diff --git a/client/src/game/ui/labels.vue b/client/src/game/ui/labels.vue index 226198922..c48be52fb 100644 --- a/client/src/game/ui/labels.vue +++ b/client/src/game/ui/labels.vue @@ -107,7 +107,7 @@ export default class LabelManager extends Vue { } get labels() { - const cat: {[category: string]: Label[]} = {}; + const cat: {[category: string]: Label[]} = {'': []}; for (const uuid of Object.keys(gameStore.labels)) { const label = gameStore.labels[uuid]; if (this.search.length && `${label.category.toLowerCase()}${label.name.toLowerCase()}`.search(this.search.toLowerCase()) < 0) continue; From f48c667f90189750d1105df96c87bb28954126b9 Mon Sep 17 00:00:00 2001 From: Kruptein Date: Thu, 16 May 2019 08:39:50 +0200 Subject: [PATCH 35/92] Only lock vision for owned tokens --- CHANGELOG.md | 2 ++ client/src/game/ui/initiative.vue | 7 +++++-- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index e6c336f50..68fb0e051 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -12,6 +12,8 @@ All notable changes to this project will be documented in this file. - Option to listen on a socket instead of HOST:PORT. - Vision tool to change active tokens. - Vision lock button to initiative to only show vision of current actor. + - This only applies to tokens the player owns for other tokens the normal vision is restored. + - This is purely client side and can thus be chosen by player/DM separately. ## [0.15.1] - 2019-05-15 diff --git a/client/src/game/ui/initiative.vue b/client/src/game/ui/initiative.vue index d48518983..6a05199f8 100644 --- a/client/src/game/ui/initiative.vue +++ b/client/src/game/ui/initiative.vue @@ -243,7 +243,10 @@ export default class Initiative extends Vue { else actor.effects[e].turns--; } } - gameStore.setActiveTokens([actor.uuid]); + if (this.visionLock) { + if (actorId !== null && gameStore.ownedtokens.includes(actorId)) gameStore.setActiveTokens([actorId]); + else gameStore.setActiveTokens([]); + } if (sync) socket.emit("Initiative.Turn.Update", actorId); } setRound(round: number, sync: boolean) { @@ -294,7 +297,7 @@ export default class Initiative extends Vue { this.visionLock = !this.visionLock; if (this.visionLock) { this._activeTokens = [...gameStore._activeTokens]; - if (this.currentActor !== null) gameStore.setActiveTokens([this.currentActor]); + if (this.currentActor !== null && gameStore.ownedtokens.includes(this.currentActor)) gameStore.setActiveTokens([this.currentActor]); } else { gameStore.setActiveTokens(this._activeTokens); } From 3e78af686989ad063b30d9786048db5d51bbe567 Mon Sep 17 00:00:00 2001 From: Kruptein Date: Thu, 16 May 2019 10:46:32 +0200 Subject: [PATCH 36/92] Make circle ci config more complex --- .circleci/config.yml | 90 ++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 87 insertions(+), 3 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index 013c7cd45..457f2158f 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -1,14 +1,59 @@ version: 2 jobs: - build: + checkout: + docker: + - image: circleci/python:3.6.2-node + + steps: + - checkout: + path: ~/PlanarAlly + + - save_cache: + key: repo-{{ .Environment.CIRCLE_SHA1 }} + paths: + - ~/PlanarAlly + + npm-build: + docker: + - image: circleci/python:3.6.2-node + + working_directory: ~/PlanarAlly/client + + steps: + - restore_cache: + key: repo-{{ .Environment.CIRCLE_SHA1 }} + name: Restoring repo cache + + - restore_cache: + key: npm-{{ checksum "package.json" }} + name: Restoring npm cache + + - run: + name: npm i + command: npm i + + - save_cache: + key: npm-{{ checksum "package.json "}} + paths: + - ./node_modules + + - run: + name: Build production files + command: npm run build + + windows: + branches: + only: + - master + docker: - image: cdrx/pyinstaller-windows:python3 working_directory: ~/PlanarAlly/server steps: - - checkout: - path: ~/PlanarAlly + - restore_cache: + key: repo-{{ .Environment.CIRCLE_SHA1 }} - run: name: Build Windows executable @@ -16,3 +61,42 @@ jobs: - store_artifacts: path: ./dist/windows + + docker: + branches: + only: + - master + - dev + - feature/CircleCI + + docker: + - image: circleci/python:3.6.2-node + + working_directory: ~/PlanarAlly + + steps: + - restore_cache: + key: repo-{{ .Environment.CIRCLE_SHA1 }} + + - run: + name: Build docker image + command: docker build . + + - run: + name: Push docker image + command: docker push + +workflows: + version: 2 + build: + jobs: + - checkout + - npm_build: + requires: + - checkout + - windows: + requires: + - npm_build + - docker: + requires: + - npm_build \ No newline at end of file From 922842c9b351ea026f686a13eeefb5773e4e6435 Mon Sep 17 00:00:00 2001 From: Kruptein Date: Thu, 16 May 2019 10:56:13 +0200 Subject: [PATCH 37/92] Fix invalid circleci config --- .circleci/config.yml | 58 ++++++++++++++++++++++---------------------- 1 file changed, 29 insertions(+), 29 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index 457f2158f..5d277b5c7 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -3,49 +3,45 @@ jobs: checkout: docker: - image: circleci/python:3.6.2-node - + steps: - checkout: path: ~/PlanarAlly - + - save_cache: key: repo-{{ .Environment.CIRCLE_SHA1 }} paths: - ~/PlanarAlly - + npm-build: docker: - image: circleci/python:3.6.2-node - + working_directory: ~/PlanarAlly/client - + steps: - restore_cache: key: repo-{{ .Environment.CIRCLE_SHA1 }} name: Restoring repo cache - + - restore_cache: key: npm-{{ checksum "package.json" }} name: Restoring npm cache - + - run: name: npm i command: npm i - + - save_cache: key: npm-{{ checksum "package.json "}} paths: - ./node_modules - + - run: name: Build production files command: npm run build windows: - branches: - only: - - master - docker: - image: cdrx/pyinstaller-windows:python3 @@ -63,25 +59,20 @@ jobs: path: ./dist/windows docker: - branches: - only: - - master - - dev - - feature/CircleCI - + docker: - image: circleci/python:3.6.2-node - + working_directory: ~/PlanarAlly steps: - restore_cache: key: repo-{{ .Environment.CIRCLE_SHA1 }} - + - run: name: Build docker image command: docker build . - + - run: name: Push docker image command: docker push @@ -90,13 +81,22 @@ workflows: version: 2 build: jobs: - - checkout + - checkout: + filters: + branches: + only: + - master + - dev + - feature/CircleCI - npm_build: - requires: - - checkout + requires: + - checkout - windows: - requires: - - npm_build + filters: + branches: + only: master + requires: + - npm_build - docker: - requires: - - npm_build \ No newline at end of file + requires: + - npm_build From ab3c930643940d971087dcf2b9b9deee8c864377 Mon Sep 17 00:00:00 2001 From: Kruptein Date: Thu, 16 May 2019 10:59:22 +0200 Subject: [PATCH 38/92] Fix python-node image --- .circleci/config.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index 5d277b5c7..7e34017a0 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -2,7 +2,7 @@ version: 2 jobs: checkout: docker: - - image: circleci/python:3.6.2-node + - image: circleci/python:3.6.8-node steps: - checkout: @@ -15,7 +15,7 @@ jobs: npm-build: docker: - - image: circleci/python:3.6.2-node + - image: circleci/python:3.6.8-node working_directory: ~/PlanarAlly/client @@ -61,7 +61,7 @@ jobs: docker: docker: - - image: circleci/python:3.6.2-node + - image: circleci/python:3.6.8-node working_directory: ~/PlanarAlly From fea247de15270a7cd3471d90079f922583dd3d07 Mon Sep 17 00:00:00 2001 From: Kruptein Date: Thu, 16 May 2019 11:01:08 +0200 Subject: [PATCH 39/92] Fix npm_build job name --- .circleci/config.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index 7e34017a0..8960954ef 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -13,7 +13,7 @@ jobs: paths: - ~/PlanarAlly - npm-build: + npm_build: docker: - image: circleci/python:3.6.8-node From 123eeb957e4f4c68b091672f92775e7afb2a7e0d Mon Sep 17 00:00:00 2001 From: Kruptein Date: Thu, 16 May 2019 11:17:20 +0200 Subject: [PATCH 40/92] Temporarily also build windows files on circleCI branch --- .circleci/config.yml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index 8960954ef..93736476f 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -94,7 +94,9 @@ workflows: - windows: filters: branches: - only: master + only: + - master + - feature/CircleCI requires: - npm_build - docker: From 343ca9d06451ff9c2e376099a0968e5dedefec4b Mon Sep 17 00:00:00 2001 From: Kruptein Date: Thu, 16 May 2019 11:55:27 +0200 Subject: [PATCH 41/92] Fix npm cache --- .circleci/config.yml | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index 93736476f..ac0c76cd9 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -33,7 +33,7 @@ jobs: command: npm i - save_cache: - key: npm-{{ checksum "package.json "}} + key: npm-{{ checksum "package.json" }} paths: - ./node_modules @@ -48,8 +48,10 @@ jobs: working_directory: ~/PlanarAlly/server steps: - - restore_cache: - key: repo-{{ .Environment.CIRCLE_SHA1 }} + # - restore_cache: + # key: repo-{{ .Environment.CIRCLE_SHA1 }} + - checkout: + path: ~/PlanarAlly - run: name: Build Windows executable From 0fe734fd7d4ed40ab6f8996e9fc0fc84db4b5b3d Mon Sep 17 00:00:00 2001 From: Kruptein Date: Thu, 16 May 2019 12:01:59 +0200 Subject: [PATCH 42/92] Remove docker step --- .circleci/config.yml | 24 +----------------------- 1 file changed, 1 insertion(+), 23 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index ac0c76cd9..6e440aa77 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -51,7 +51,7 @@ jobs: # - restore_cache: # key: repo-{{ .Environment.CIRCLE_SHA1 }} - checkout: - path: ~/PlanarAlly + path: ~/PlanarAlly - run: name: Build Windows executable @@ -60,25 +60,6 @@ jobs: - store_artifacts: path: ./dist/windows - docker: - - docker: - - image: circleci/python:3.6.8-node - - working_directory: ~/PlanarAlly - - steps: - - restore_cache: - key: repo-{{ .Environment.CIRCLE_SHA1 }} - - - run: - name: Build docker image - command: docker build . - - - run: - name: Push docker image - command: docker push - workflows: version: 2 build: @@ -101,6 +82,3 @@ workflows: - feature/CircleCI requires: - npm_build - - docker: - requires: - - npm_build From 35d4c456e1ec29b539b31d18b0ccea8c311ad0dc Mon Sep 17 00:00:00 2001 From: Kruptein Date: Thu, 16 May 2019 12:08:10 +0200 Subject: [PATCH 43/92] ls test --- .circleci/config.yml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/.circleci/config.yml b/.circleci/config.yml index 6e440aa77..631059ba2 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -27,6 +27,8 @@ jobs: - restore_cache: key: npm-{{ checksum "package.json" }} name: Restoring npm cache + + - run: ls /tmp - run: name: npm i @@ -52,6 +54,8 @@ jobs: # key: repo-{{ .Environment.CIRCLE_SHA1 }} - checkout: path: ~/PlanarAlly + + - run: ls /tmp - run: name: Build Windows executable From 33a5755eab8e742d2aa9418bdadc963b599929b6 Mon Sep 17 00:00:00 2001 From: Kruptein Date: Thu, 16 May 2019 12:12:21 +0200 Subject: [PATCH 44/92] Revert to cache for pyinstaller --- .circleci/config.yml | 12 +++--------- 1 file changed, 3 insertions(+), 9 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index 631059ba2..a12c1f062 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -27,8 +27,6 @@ jobs: - restore_cache: key: npm-{{ checksum "package.json" }} name: Restoring npm cache - - - run: ls /tmp - run: name: npm i @@ -50,16 +48,12 @@ jobs: working_directory: ~/PlanarAlly/server steps: - # - restore_cache: - # key: repo-{{ .Environment.CIRCLE_SHA1 }} - - checkout: - path: ~/PlanarAlly - - - run: ls /tmp + - restore_cache: + key: repo-{{ .Environment.CIRCLE_SHA1 }} - run: name: Build Windows executable - command: pyinstaller --clean -y --dist ./dist/windows --workpath /tmp *.spec + command: pyinstaller --clean -y --dist ./dist/windows --workpath /tmp/pyi *.spec - store_artifacts: path: ./dist/windows From f585866648092d0d6aeed459c9ba4e72ca0a85bc Mon Sep 17 00:00:00 2001 From: Kruptein Date: Thu, 16 May 2019 12:28:21 +0200 Subject: [PATCH 45/92] Revert to simple config again --- .circleci/config.yml | 61 ++++---------------------------------------- 1 file changed, 5 insertions(+), 56 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index a12c1f062..d55c68f24 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -1,59 +1,19 @@ version: 2 jobs: - checkout: - docker: - - image: circleci/python:3.6.8-node - - steps: - - checkout: - path: ~/PlanarAlly - - - save_cache: - key: repo-{{ .Environment.CIRCLE_SHA1 }} - paths: - - ~/PlanarAlly - - npm_build: - docker: - - image: circleci/python:3.6.8-node - - working_directory: ~/PlanarAlly/client - - steps: - - restore_cache: - key: repo-{{ .Environment.CIRCLE_SHA1 }} - name: Restoring repo cache - - - restore_cache: - key: npm-{{ checksum "package.json" }} - name: Restoring npm cache - - - run: - name: npm i - command: npm i - - - save_cache: - key: npm-{{ checksum "package.json" }} - paths: - - ./node_modules - - - run: - name: Build production files - command: npm run build - windows: docker: - image: cdrx/pyinstaller-windows:python3 + - image: circleci/python:3.6.8-node working_directory: ~/PlanarAlly/server steps: - - restore_cache: - key: repo-{{ .Environment.CIRCLE_SHA1 }} + - checkout: + path: ~/PlanarAlly - run: name: Build Windows executable - command: pyinstaller --clean -y --dist ./dist/windows --workpath /tmp/pyi *.spec + command: pyinstaller --clean -y --dist ./dist/windows --workpath /tmp *.spec - store_artifacts: path: ./dist/windows @@ -62,21 +22,10 @@ workflows: version: 2 build: jobs: - - checkout: - filters: - branches: - only: - - master - - dev - - feature/CircleCI - - npm_build: - requires: - - checkout - windows: filters: branches: only: - master + - dev - feature/CircleCI - requires: - - npm_build From 368f0af7842e938fd227eaf026c1e18faf79c35e Mon Sep 17 00:00:00 2001 From: Kruptein Date: Thu, 16 May 2019 13:31:45 +0200 Subject: [PATCH 46/92] Remove unused image and remove feature branch --- .circleci/config.yml | 2 -- 1 file changed, 2 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index d55c68f24..7b6aa4c92 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -3,7 +3,6 @@ jobs: windows: docker: - image: cdrx/pyinstaller-windows:python3 - - image: circleci/python:3.6.8-node working_directory: ~/PlanarAlly/server @@ -28,4 +27,3 @@ workflows: only: - master - dev - - feature/CircleCI From 490e5a47d170d84646ff94f89cf286f180d2dec6 Mon Sep 17 00:00:00 2001 From: Kruptein Date: Thu, 16 May 2019 14:03:43 +0200 Subject: [PATCH 47/92] Test release --- .circleci/config.yml | 39 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) diff --git a/.circleci/config.yml b/.circleci/config.yml index 7b6aa4c92..cc27dc7a1 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -16,6 +16,37 @@ jobs: - store_artifacts: path: ./dist/windows + + - persist_to_workspace: + root: ./dist/windows + paths: + - * + + - persist_to_workspace: + root: ./ + paths: + - VERSION + + + + release: + docker: + - image: cibuilds/github:0.12.1 + + working_directory: ~/PlanarAlly/server + + steps: + - attach_workspace: + at: /home/circleci/PlanarAlly/server/VERSION + + - attach_workspace: + at: /home/circleci/PlanarAlly/server/dist/windows + + - run: + name: "Publish release on github" + command: | + VERSION=$(cat VERSION) + ghr -t ${GITHUB_TOKEN} -u ${CIRCLE_PROJECT_USERNAME} -r ${CIRCLE_PROJECT_REPONAME} -c ${CIRCLE_SHA1} -delete ${VERSION} ./dist/windows/ workflows: version: 2 @@ -27,3 +58,11 @@ workflows: only: - master - dev + - release: + requires: + - windows + filters: + branches: + only: feature/CircleCI + tags: + only: /^\d+\.\d+\.\d+$/ From e4941cf6a928ed35d67a59f64c082ad7a172f603 Mon Sep 17 00:00:00 2001 From: Kruptein Date: Thu, 16 May 2019 14:06:30 +0200 Subject: [PATCH 48/92] Fix invalid config --- .circleci/config.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index cc27dc7a1..021341425 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -20,7 +20,7 @@ jobs: - persist_to_workspace: root: ./dist/windows paths: - - * + - '*' - persist_to_workspace: root: ./ @@ -36,7 +36,7 @@ jobs: working_directory: ~/PlanarAlly/server steps: - - attach_workspace: + - attach_workspace: at: /home/circleci/PlanarAlly/server/VERSION - attach_workspace: From 200c92c0f3fcc6e2280f7428b12a12526909e483 Mon Sep 17 00:00:00 2001 From: Kruptein Date: Thu, 16 May 2019 14:10:56 +0200 Subject: [PATCH 49/92] Temporarily disable tags --- .circleci/config.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index 021341425..711296990 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -64,5 +64,5 @@ workflows: filters: branches: only: feature/CircleCI - tags: - only: /^\d+\.\d+\.\d+$/ + # tags: + # only: /^\d+\.\d+\.\d+$/ From 565015716a534116d8e91fc591dc7eb925c62c5d Mon Sep 17 00:00:00 2001 From: Kruptein Date: Thu, 16 May 2019 14:14:23 +0200 Subject: [PATCH 50/92] Temp restore feature/CirleCI for testing --- .circleci/config.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.circleci/config.yml b/.circleci/config.yml index 711296990..e439fe5e0 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -58,6 +58,7 @@ workflows: only: - master - dev + - feature/CircleCI - release: requires: - windows From 8880c7205b114218765abe30e0caa38af3526b11 Mon Sep 17 00:00:00 2001 From: Kruptein Date: Thu, 16 May 2019 14:18:59 +0200 Subject: [PATCH 51/92] Fix persist/attach logic --- .circleci/config.yml | 11 ++--------- 1 file changed, 2 insertions(+), 9 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index e439fe5e0..26a7601d3 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -17,15 +17,11 @@ jobs: - store_artifacts: path: ./dist/windows - - persist_to_workspace: - root: ./dist/windows - paths: - - '*' - - persist_to_workspace: root: ./ paths: - VERSION + - ./dist/windows @@ -37,10 +33,7 @@ jobs: steps: - attach_workspace: - at: /home/circleci/PlanarAlly/server/VERSION - - - attach_workspace: - at: /home/circleci/PlanarAlly/server/dist/windows + at: /home/circleci/PlanarAlly/server - run: name: "Publish release on github" From 348ea1c9693c3dbf331e878aa61d2b3338e4b5ef Mon Sep 17 00:00:00 2001 From: Kruptein Date: Thu, 16 May 2019 14:22:08 +0200 Subject: [PATCH 52/92] LS PLS --- .circleci/config.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.circleci/config.yml b/.circleci/config.yml index 26a7601d3..326ec8fbe 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -35,6 +35,9 @@ jobs: - attach_workspace: at: /home/circleci/PlanarAlly/server + - run: + command: ls + - run: name: "Publish release on github" command: | From 524344b91686327b17eb506d91b1fee761b1448f Mon Sep 17 00:00:00 2001 From: Kruptein Date: Thu, 16 May 2019 14:27:52 +0200 Subject: [PATCH 53/92] tmp it up --- .circleci/config.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index 326ec8fbe..aef1610c9 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -29,11 +29,11 @@ jobs: docker: - image: cibuilds/github:0.12.1 - working_directory: ~/PlanarAlly/server + working_directory: /tmp/workspace steps: - attach_workspace: - at: /home/circleci/PlanarAlly/server + at: /tmp/workspace - run: command: ls From 6dbf645977d8d25accd208726b6cabd9f4498f42 Mon Sep 17 00:00:00 2001 From: Kruptein Date: Thu, 16 May 2019 14:38:11 +0200 Subject: [PATCH 54/92] Draft test --- .circleci/config.yml | 7 ++++--- server/VERSION | 2 +- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index aef1610c9..b149c8187 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -42,7 +42,7 @@ jobs: name: "Publish release on github" command: | VERSION=$(cat VERSION) - ghr -t ${GITHUB_TOKEN} -u ${CIRCLE_PROJECT_USERNAME} -r ${CIRCLE_PROJECT_REPONAME} -c ${CIRCLE_SHA1} -delete ${VERSION} ./dist/windows/ + ghr -t ${GITHUB_TOKEN} -u ${CIRCLE_PROJECT_USERNAME} -r ${CIRCLE_PROJECT_REPONAME} -c ${CIRCLE_SHA1} -draft ${VERSION} ./dist/windows/ workflows: version: 2 @@ -52,9 +52,10 @@ workflows: filters: branches: only: - - master - dev - feature/CircleCI + tags: + only: /^\d+\.\d+\.\d+[-a-zA-Z0-9]*$/ - release: requires: - windows @@ -62,4 +63,4 @@ workflows: branches: only: feature/CircleCI # tags: - # only: /^\d+\.\d+\.\d+$/ + # only: /^\d+\.\d+\.\d+[-a-zA-Z0-9]*$/ diff --git a/server/VERSION b/server/VERSION index 7092c7c46..52c527b9b 100644 --- a/server/VERSION +++ b/server/VERSION @@ -1 +1 @@ -0.15.0 \ No newline at end of file +0.15.2-circleci \ No newline at end of file From 4c87e2d3ff75a6b3d084837b26f20b586dc60166 Mon Sep 17 00:00:00 2001 From: Kruptein Date: Thu, 16 May 2019 14:49:29 +0200 Subject: [PATCH 55/92] Archiving circleci test --- .circleci/config.yml | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index b149c8187..e47b756ea 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -13,6 +13,10 @@ jobs: - run: name: Build Windows executable command: pyinstaller --clean -y --dist ./dist/windows --workpath /tmp *.spec + + - zip: + name: Zip artifacts + command: cd dist/windows && zip windows-$(cat VERSION).zip . && cd - - store_artifacts: path: ./dist/windows @@ -21,7 +25,7 @@ jobs: root: ./ paths: - VERSION - - ./dist/windows + - ./dist/windows/*.zip @@ -35,14 +39,11 @@ jobs: - attach_workspace: at: /tmp/workspace - - run: - command: ls - - run: name: "Publish release on github" command: | VERSION=$(cat VERSION) - ghr -t ${GITHUB_TOKEN} -u ${CIRCLE_PROJECT_USERNAME} -r ${CIRCLE_PROJECT_REPONAME} -c ${CIRCLE_SHA1} -draft ${VERSION} ./dist/windows/ + ghr -t ${GITHUB_TOKEN} -u ${CIRCLE_PROJECT_USERNAME} -r ${CIRCLE_PROJECT_REPONAME} -c ${CIRCLE_SHA1} -draft -delete ${VERSION} ./dist/windows/*.zip workflows: version: 2 From 3781c777b59841d4613812745c9b30f26c8139d7 Mon Sep 17 00:00:00 2001 From: Kruptein Date: Thu, 16 May 2019 14:50:39 +0200 Subject: [PATCH 56/92] Fix wrong step name --- .circleci/config.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index e47b756ea..89c6b9f94 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -14,7 +14,7 @@ jobs: name: Build Windows executable command: pyinstaller --clean -y --dist ./dist/windows --workpath /tmp *.spec - - zip: + - run: name: Zip artifacts command: cd dist/windows && zip windows-$(cat VERSION).zip . && cd - From a79b79ba0cf5e39b2f5f25ef4f4a256962898006 Mon Sep 17 00:00:00 2001 From: Kruptein Date: Thu, 16 May 2019 14:58:12 +0200 Subject: [PATCH 57/92] Zippity zip --- .circleci/config.yml | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index 89c6b9f94..026cf9976 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -13,10 +13,6 @@ jobs: - run: name: Build Windows executable command: pyinstaller --clean -y --dist ./dist/windows --workpath /tmp *.spec - - - run: - name: Zip artifacts - command: cd dist/windows && zip windows-$(cat VERSION).zip . && cd - - store_artifacts: path: ./dist/windows @@ -25,10 +21,8 @@ jobs: root: ./ paths: - VERSION - - ./dist/windows/*.zip + - ./dist/windows - - release: docker: - image: cibuilds/github:0.12.1 @@ -39,11 +33,19 @@ jobs: - attach_workspace: at: /tmp/workspace + - run: + name: Zip artifacts + command: | + VERSION=$(cat VERSION) + cd dist/windows + zip windows-$(cat VERSION).zip . + cd - + - run: name: "Publish release on github" command: | VERSION=$(cat VERSION) - ghr -t ${GITHUB_TOKEN} -u ${CIRCLE_PROJECT_USERNAME} -r ${CIRCLE_PROJECT_REPONAME} -c ${CIRCLE_SHA1} -draft -delete ${VERSION} ./dist/windows/*.zip + ghr -t ${GITHUB_TOKEN} -u ${CIRCLE_PROJECT_USERNAME} -r ${CIRCLE_PROJECT_REPONAME} -c ${CIRCLE_SHA1} -draft -delete ${VERSION} ./dist/windows/ workflows: version: 2 From 1d8f1abd3f6081b9b1c974dd6b876a6c33f7183f Mon Sep 17 00:00:00 2001 From: Kruptein Date: Thu, 16 May 2019 15:03:22 +0200 Subject: [PATCH 58/92] fix VERSIOn substitution --- .circleci/config.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index 026cf9976..fe23a2832 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -38,14 +38,14 @@ jobs: command: | VERSION=$(cat VERSION) cd dist/windows - zip windows-$(cat VERSION).zip . + zip windows-${VERSION}.zip . cd - - run: name: "Publish release on github" command: | VERSION=$(cat VERSION) - ghr -t ${GITHUB_TOKEN} -u ${CIRCLE_PROJECT_USERNAME} -r ${CIRCLE_PROJECT_REPONAME} -c ${CIRCLE_SHA1} -draft -delete ${VERSION} ./dist/windows/ + ghr -t ${GITHUB_TOKEN} -u ${CIRCLE_PROJECT_USERNAME} -r ${CIRCLE_PROJECT_REPONAME} -c ${CIRCLE_SHA1} -draft -delete ${VERSION} ./dist/windows/* workflows: version: 2 From fe8a4619c7d398174954e057b104c4ce4f689ca1 Mon Sep 17 00:00:00 2001 From: Kruptein Date: Thu, 16 May 2019 15:07:57 +0200 Subject: [PATCH 59/92] Fix zip command --- .circleci/config.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index fe23a2832..cad0b2f90 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -38,7 +38,7 @@ jobs: command: | VERSION=$(cat VERSION) cd dist/windows - zip windows-${VERSION}.zip . + zip windows-${VERSION}.zip * cd - - run: From b47b5f93607865dfd5f599aab839059435080465 Mon Sep 17 00:00:00 2001 From: Kruptein Date: Thu, 16 May 2019 15:13:59 +0200 Subject: [PATCH 60/92] drop the wildcard in ghr command --- .circleci/config.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index cad0b2f90..222be2b02 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -45,7 +45,7 @@ jobs: name: "Publish release on github" command: | VERSION=$(cat VERSION) - ghr -t ${GITHUB_TOKEN} -u ${CIRCLE_PROJECT_USERNAME} -r ${CIRCLE_PROJECT_REPONAME} -c ${CIRCLE_SHA1} -draft -delete ${VERSION} ./dist/windows/* + ghr -t ${GITHUB_TOKEN} -u ${CIRCLE_PROJECT_USERNAME} -r ${CIRCLE_PROJECT_REPONAME} -c ${CIRCLE_SHA1} -draft ${VERSION} ./dist/windows/ workflows: version: 2 From afa9916b84dab1a5c2b2d2fcd921dd3280f381d3 Mon Sep 17 00:00:00 2001 From: Kruptein Date: Thu, 16 May 2019 15:20:42 +0200 Subject: [PATCH 61/92] Fix zip recursion --- .circleci/config.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index 222be2b02..ca3e347fb 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -38,14 +38,14 @@ jobs: command: | VERSION=$(cat VERSION) cd dist/windows - zip windows-${VERSION}.zip * + zip -r windows-${VERSION}.zip * cd - - run: name: "Publish release on github" command: | VERSION=$(cat VERSION) - ghr -t ${GITHUB_TOKEN} -u ${CIRCLE_PROJECT_USERNAME} -r ${CIRCLE_PROJECT_REPONAME} -c ${CIRCLE_SHA1} -draft ${VERSION} ./dist/windows/ + ghr -t ${GITHUB_TOKEN} -u ${CIRCLE_PROJECT_USERNAME} -r ${CIRCLE_PROJECT_REPONAME} -c ${CIRCLE_SHA1} -draft -replace ${VERSION} ./dist/windows/windows-${VERSION}.zip workflows: version: 2 From 0a553cbf485d61b5abbb5e320aeb6e2d212db7a8 Mon Sep 17 00:00:00 2001 From: Kruptein Date: Thu, 16 May 2019 15:31:12 +0200 Subject: [PATCH 62/92] Cleanup circleci branch --- .circleci/config.yml | 9 ++++----- CHANGELOG.md | 2 ++ server/VERSION | 2 +- 3 files changed, 7 insertions(+), 6 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index ca3e347fb..bf1da90f1 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -45,7 +45,7 @@ jobs: name: "Publish release on github" command: | VERSION=$(cat VERSION) - ghr -t ${GITHUB_TOKEN} -u ${CIRCLE_PROJECT_USERNAME} -r ${CIRCLE_PROJECT_REPONAME} -c ${CIRCLE_SHA1} -draft -replace ${VERSION} ./dist/windows/windows-${VERSION}.zip + ghr -t ${GITHUB_TOKEN} -u ${CIRCLE_PROJECT_USERNAME} -r ${CIRCLE_PROJECT_REPONAME} -c ${CIRCLE_SHA1} -replace ${VERSION} ./dist/windows/windows-${VERSION}.zip workflows: version: 2 @@ -56,7 +56,6 @@ workflows: branches: only: - dev - - feature/CircleCI tags: only: /^\d+\.\d+\.\d+[-a-zA-Z0-9]*$/ - release: @@ -64,6 +63,6 @@ workflows: - windows filters: branches: - only: feature/CircleCI - # tags: - # only: /^\d+\.\d+\.\d+[-a-zA-Z0-9]*$/ + ignore: /.*/ + tags: + only: /^\d+\.\d+\.\d+[-a-zA-Z0-9]*$/ diff --git a/CHANGELOG.md b/CHANGELOG.md index c8164959c..5f9c90ab7 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -10,6 +10,8 @@ All notable changes to this project will be documented in this file. ### Added - Option to listen on a socket instead of HOST:PORT. +- Automatic build of windows executables on circle CI for master and dev branches. + - Tags on the master branch will also create/update a release with these files for ease of use. ### Fixed diff --git a/server/VERSION b/server/VERSION index 52c527b9b..8076af51c 100644 --- a/server/VERSION +++ b/server/VERSION @@ -1 +1 @@ -0.15.2-circleci \ No newline at end of file +0.15.1 \ No newline at end of file From 80857cfccc3b9063d1f12b8d86e60127b371d426 Mon Sep 17 00:00:00 2001 From: Kruptein Date: Thu, 16 May 2019 15:49:22 +0200 Subject: [PATCH 63/92] Fix filter issue with category-less filters --- client/src/game/ui/tools/filter.vue | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/client/src/game/ui/tools/filter.vue b/client/src/game/ui/tools/filter.vue index 49d4923a0..ffe0a57df 100644 --- a/client/src/game/ui/tools/filter.vue +++ b/client/src/game/ui/tools/filter.vue @@ -38,7 +38,7 @@ export default class FilterTool extends Tool { active = false; get labels() { - const cat: { [category: string]: [string, string][] } = {}; + const cat: { [category: string]: [string, string][] } = {'': []}; for (const uuid of Object.keys(gameStore.labels)) { const label = gameStore.labels[uuid]; if (!label.category) cat[""].push([label.uuid, label.name]); From 6d32859e03da8b76c0fd41966b8732610147cf44 Mon Sep 17 00:00:00 2001 From: Kruptein Date: Thu, 16 May 2019 15:51:47 +0200 Subject: [PATCH 64/92] Show 'no category' for empty category filters --- client/src/game/ui/tools/filter.vue | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/client/src/game/ui/tools/filter.vue b/client/src/game/ui/tools/filter.vue index ffe0a57df..1a8821814 100644 --- a/client/src/game/ui/tools/filter.vue +++ b/client/src/game/ui/tools/filter.vue @@ -8,7 +8,7 @@ Date: Thu, 16 May 2019 15:55:05 +0200 Subject: [PATCH 65/92] Only show vision and filter tools when usefull --- client/src/game/ui/tools/tools.vue | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/client/src/game/ui/tools/tools.vue b/client/src/game/ui/tools/tools.vue index d231100b3..dfbbd9b8b 100644 --- a/client/src/game/ui/tools/tools.vue +++ b/client/src/game/ui/tools/tools.vue @@ -7,6 +7,7 @@ :key="tool" :class="{'tool-selected': currentTool === tool}" :ref="tool + '-selector'" + v-show="toolVisible(tool)" @mousedown="currentTool = tool" > {{ tool }} @@ -91,6 +92,15 @@ export default class Tools extends Vue { return this.tools.filter(t => (!this.dmTools.includes(t) || this.IS_DM)); } + toolVisible(tool: string): boolean { + if (tool === 'Filter') { + return Object.keys(gameStore.labels).length > 0; + } else if (tool === 'Vision') { + return gameStore.ownedtokens.length > 1; + } + return true; + } + mousedown(event: MouseEvent) { if ((event.target).tagName !== "CANVAS") return; From 342755777238583a80655b3c0be79b0ce93fcf39 Mon Sep 17 00:00:00 2001 From: Kruptein Date: Thu, 16 May 2019 15:55:48 +0200 Subject: [PATCH 66/92] Update docs --- CHANGELOG.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 7bb1b291f..14e561940 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -17,6 +17,10 @@ All notable changes to this project will be documented in this file. - Automatic build of windows executables on circle CI for master and dev branches. - Tags on the master branch will also create/update a release with these files for ease of use. +### Changed + +- Filter tool is only visible if there are labels defined. + ### Fixed - Fix a bug causing labels without category to throw errors. From 607937612bf9eca725caeaa86e2f3604989e7c7e Mon Sep 17 00:00:00 2001 From: Kruptein Date: Thu, 16 May 2019 16:07:51 +0200 Subject: [PATCH 67/92] Add camera lock button to initiative --- CHANGELOG.md | 3 +++ client/src/game/ui/initiative.vue | 17 +++++++++++++++++ 2 files changed, 20 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 14e561940..ed8505c15 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -14,6 +14,9 @@ All notable changes to this project will be documented in this file. - Vision lock button to initiative to only show vision of current actor. - This only applies to tokens the player owns for other tokens the normal vision is restored. - This is purely client side and can thus be chosen by player/DM separately. +- Camera lock button to initiative to automatically center on current actor. + - It will center when an actor begins its turn and the client is owner of that actor. + - It does not prevent camera movement after the initial center action. - Automatic build of windows executables on circle CI for master and dev branches. - Tags on the master branch will also create/update a release with these files for ease of use. diff --git a/client/src/game/ui/initiative.vue b/client/src/game/ui/initiative.vue index 6a05199f8..3a50d130e 100644 --- a/client/src/game/ui/initiative.vue +++ b/client/src/game/ui/initiative.vue @@ -107,6 +107,13 @@ >
+
+ +
Date: Thu, 16 May 2019 16:24:26 +0200 Subject: [PATCH 68/92] Add Fake Player button to DM settings --- CHANGELOG.md | 3 ++ client/src/game/shapes/shape.ts | 2 +- client/src/game/store.ts | 8 +++++ client/src/game/ui/menu/menu.vue | 56 +++++++++++++++++++------------- 4 files changed, 46 insertions(+), 23 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index ed8505c15..5f8c9a68a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -19,6 +19,8 @@ All notable changes to this project will be documented in this file. - It does not prevent camera movement after the initial center action. - Automatic build of windows executables on circle CI for master and dev branches. - Tags on the master branch will also create/update a release with these files for ease of use. +- Fake player button to DM Settings to disable all DM functions except DM settings. + - You can control which player(s) you want to emulate with the vision tool. ### Changed @@ -27,6 +29,7 @@ All notable changes to this project will be documented in this file. ### Fixed - Fix a bug causing labels without category to throw errors. +- CSS bug with menu. ## [0.15.1] - 2019-05-15 diff --git a/client/src/game/shapes/shape.ts b/client/src/game/shapes/shape.ts index 76054f59b..14d9f1c0d 100644 --- a/client/src/game/shapes/shape.ts +++ b/client/src/game/shapes/shape.ts @@ -289,7 +289,7 @@ export abstract class Shape { ownedBy(username?: string) { if (username === undefined) username = gameStore.username; - return gameStore.IS_DM || this._owners.includes(username); + return gameStore.IS_DM || this._owners.includes(username) || (gameStore.FAKE_PLAYER && gameStore.activeTokens.includes(this.uuid)); } addOwner(owner: string) { diff --git a/client/src/game/store.ts b/client/src/game/store.ts index e4990ee85..ab9791ada 100644 --- a/client/src/game/store.ts +++ b/client/src/game/store.ts @@ -34,6 +34,7 @@ class GameStore extends VuexModule implements GameState { notes: Note[] = []; IS_DM = false; + FAKE_PLAYER = false; gridSize = 50; username = ""; roomName = ""; @@ -93,6 +94,13 @@ class GameStore extends VuexModule implements GameState { return this._activeTokens; } + @Mutation + setFakePlayer(value: boolean) { + this.FAKE_PLAYER = value; + this.IS_DM = !value; + layerManager.invalidate(); + } + @Mutation setZoomDisplay(zoom: number) { if (zoom === this.zoomDisplay) return; diff --git a/client/src/game/ui/menu/menu.vue b/client/src/game/ui/menu/menu.vue index 1d3793f7f..64f1665ad 100644 --- a/client/src/game/ui/menu/menu.vue +++ b/client/src/game/ui/menu/menu.vue @@ -40,8 +40,8 @@
- -
-
+ + @@ -166,7 +168,7 @@ import { gameStore } from "@/game/store"; "asset-node": AssetNode, }, computed: { - ...mapState("game", ["invitationCode", "IS_DM", "locations", "assets", "notes"]), + ...mapState("game", ["invitationCode", "locations", "assets", "notes"]), }, }) export default class MenuBar extends Vue { @@ -175,6 +177,16 @@ export default class MenuBar extends Vue { locations: false, }; + get IS_DM(): boolean { + return gameStore.IS_DM || gameStore.FAKE_PLAYER; + } + + get fakePlayer(): boolean { + return gameStore.FAKE_PLAYER; + } + set fakePlayer(value: boolean) { + gameStore.setFakePlayer(value); + } get useGrid(): boolean { return gameStore.useGrid; } @@ -247,8 +259,8 @@ export default class MenuBar extends Vue { gameStore.setVisionRangeMax({ value, sync: true }); } settingsClick(event: { target: HTMLElement }) { - if (event.target.classList.contains("accordion")) { - event.target.classList.toggle("accordion-active"); + if (event.target.classList.contains("menu-accordion")) { + event.target.classList.toggle("menu-accordion-active"); const next = event.target.nextElementSibling; if (next !== null) next.style.display = next.style.display === "" ? "block" : ""; } @@ -374,7 +386,7 @@ DIRECTORY.CSS changes padding: 0; } -.accordion { +.menu-accordion { background-color: #eee; color: #444; cursor: pointer; @@ -390,32 +402,32 @@ DIRECTORY.CSS changes width: stretch; } -.accordion-active, -.accordion:hover { +.menu-accordion-active, +.menu-accordion:hover { background-color: #82c8a0; } -.accordion-panel { +.menu-accordion-panel { background-color: white; display: none; overflow: hidden; min-height: 2em; } -.accordion-subpanel { +.menu-accordion-subpanel { display: flex; flex-direction: column; width: 100%; } -.accordion-subpanel > * { +.menu-accordion-subpanel > * { padding: 5px; display: flex; justify-content: space-evenly; align-items: center; } -.accordion-subpanel > *:hover { +.menu-accordion-subpanel > *:hover { background-color: #82c8a0; } From d8ea59ca023d012f419c2de2d6fa30a8542ed824 Mon Sep 17 00:00:00 2001 From: Kruptein Date: Thu, 16 May 2019 17:14:12 +0200 Subject: [PATCH 69/92] Fug making it impossible to remove trackers/auras. --- CHANGELOG.md | 1 + server/api/socket/shape.py | 45 ++++++++++++++++++++++++++------------ 2 files changed, 32 insertions(+), 14 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 5f8c9a68a..b736b6ec0 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -30,6 +30,7 @@ All notable changes to this project will be documented in this file. - Fix a bug causing labels without category to throw errors. - CSS bug with menu. +- Bug making it impossible to remove trackers/auras. ## [0.15.1] - 2019-05-15 diff --git a/server/api/socket/shape.py b/server/api/socket/shape.py index bed8ffeeb..761ade070 100644 --- a/server/api/socket/shape.py +++ b/server/api/socket/shape.py @@ -153,25 +153,42 @@ async def update_shape(sid, data): ShapeOwner.get(shape=shape, user=delta_owner).delete_instance(True) await send_client_initiatives(room, location, delta_owner) # Trackers - for tracker in data["shape"]["trackers"]: - tracker_db = Tracker.get_or_none(uuid=tracker["uuid"]) - reduced = reduce_data_to_model(Tracker, tracker) - reduced["shape"] = shape - if tracker_db: + old_trackers = {tracker.uuid for tracker in shape.trackers} + new_trackers = {tracker["uuid"] for tracker in data["shape"]["trackers"]} + for tracker_id in old_trackers | new_trackers: + remove = tracker_id in old_trackers - new_trackers + if not remove: + tracker = next(tr for tr in data["shape"]["trackers"] if tr["uuid"] == tracker_id) + reduced = reduce_data_to_model(Tracker, tracker) + reduced["shape"] = shape + if tracker_id in new_trackers - old_trackers: + Tracker.create(**reduced) + continue + tracker_db = Tracker.get(uuid=tracker_id) + if remove: + tracker_db.delete_instance(True) + else: update_model_from_dict(tracker_db, reduced) tracker_db.save() - else: - Tracker.create(**reduced) + # Auras - for aura in data["shape"]["auras"]: - aura_db = Aura.get_or_none(uuid=aura["uuid"]) - reduced = reduce_data_to_model(Aura, aura) - reduced["shape"] = shape - if aura_db: + old_auras = {aura.uuid for aura in shape.auras} + new_auras = {aura["uuid"] for aura in data["shape"]["auras"]} + for aura_id in old_auras | new_auras: + remove = aura_id in old_auras - new_auras + if not remove: + aura = next(au for au in data["shape"]["auras"] if au["uuid"] == aura_id) + reduced = reduce_data_to_model(Aura, aura) + reduced["shape"] = shape + if aura_id in new_auras - old_auras: + Aura.create(**reduced) + continue + aura_db = Aura.get_or_none(uuid=aura_id) + if remove: + aura_db.delete_instance(True) + else: update_model_from_dict(aura_db, reduced) aura_db.save() - else: - Aura.create(**reduced) # Labels for label in data["shape"]["labels"]: label_db = Label.get_or_none(uuid=label["uuid"]) From c36f760fa7b2b62315b0e6b260fa775e2dc39ccd Mon Sep 17 00:00:00 2001 From: Darragh Van Tichelen Date: Fri, 17 May 2019 17:15:09 +0200 Subject: [PATCH 70/92] Add pip install step to windows CI build --- .circleci/config.yml | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index bf1da90f1..59410799a 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -9,6 +9,19 @@ jobs: steps: - checkout: path: ~/PlanarAlly + + - restore_cache: + key: pip-{{ checksum "requirements.txt" }} + name: Restoring pip cache + + - run: + name: pip install + command: pip install -r requirements.txt + + - save_cache: + key: pip-{{ checksum "requirements.txt" }} + paths: + - ~/.cache/pip - run: name: Build Windows executable @@ -56,6 +69,7 @@ workflows: branches: only: - dev + - bugfix/windows-build tags: only: /^\d+\.\d+\.\d+[-a-zA-Z0-9]*$/ - release: @@ -63,6 +77,8 @@ workflows: - windows filters: branches: - ignore: /.*/ + # ignore: /.*/ + only: + - bugfix/windows-build tags: only: /^\d+\.\d+\.\d+[-a-zA-Z0-9]*$/ From e9cc07ebef612450452ee4c54e925272677c348e Mon Sep 17 00:00:00 2001 From: Darragh Van Tichelen Date: Fri, 17 May 2019 17:45:44 +0200 Subject: [PATCH 71/92] Cry --- .circleci/config.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index 59410799a..eee803c1b 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -16,7 +16,7 @@ jobs: - run: name: pip install - command: pip install -r requirements.txt + command: pip install -U setuptools && pip install -r requirements.txt - save_cache: key: pip-{{ checksum "requirements.txt" }} From 5d4a39884a4c54f6b82b1010ae01d038330994d9 Mon Sep 17 00:00:00 2001 From: Darragh Van Tichelen Date: Fri, 17 May 2019 20:38:35 +0200 Subject: [PATCH 72/92] Fix PA spec --- server/PA.spec | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/server/PA.spec b/server/PA.spec index 75a6e3777..177b248ee 100644 --- a/server/PA.spec +++ b/server/PA.spec @@ -16,11 +16,11 @@ block_cipher = None a = Analysis([_('planarserver.py')], pathex=[pa_dir], datas=[ - (_('server_config.cfg'), '.yX8sVdjciYgi'), + (_('server_config.cfg'), '.'), (_('static'), 'static'), (_('templates'), 'templates'), ], - hiddenimports=['engineio.async_aiohttp'], + hiddenimports=['engineio.async_drivers.aiohttp'], hookspath=None, runtime_hooks=None, excludes=None, From 5cd4f409a144b776d5f3942cc4062303c0d81d01 Mon Sep 17 00:00:00 2001 From: Darragh Van Tichelen Date: Fri, 17 May 2019 20:56:47 +0200 Subject: [PATCH 73/92] Test sqlite3 && pip cache --- .circleci/config.yml | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index eee803c1b..2374dc930 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -10,9 +10,13 @@ jobs: - checkout: path: ~/PlanarAlly - - restore_cache: - key: pip-{{ checksum "requirements.txt" }} - name: Restoring pip cache + # - restore_cache: + # key: pip-{{ checksum "requirements.txt" }} + # name: Restoring pip cache + + - run: + name: install sqlite3 + command: apt update && apt install --no-install-recommends -y sqlite3 - run: name: pip install @@ -21,7 +25,7 @@ jobs: - save_cache: key: pip-{{ checksum "requirements.txt" }} paths: - - ~/.cache/pip + - /wine/drive_c/users/root/Local\ Settings/Application\ Data/pip/Cache - run: name: Build Windows executable From 2c019aee22d8f55ce35e05283a1820c1f6875894 Mon Sep 17 00:00:00 2001 From: Darragh Van Tichelen Date: Sat, 18 May 2019 08:54:40 +0200 Subject: [PATCH 74/92] Test azure again --- azure-pipelines.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/azure-pipelines.yml b/azure-pipelines.yml index 51b8ab02b..2a2bcdd50 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -5,6 +5,8 @@ trigger: - master + - dev + - azure-pipelines jobs: - job: "Pyinstaller_Linux" From 7e913d7a6868d1592d30c9a7ce32e75c85774d12 Mon Sep 17 00:00:00 2001 From: Darragh Van Tichelen Date: Sat, 18 May 2019 09:05:07 +0200 Subject: [PATCH 75/92] workpath test --- azure-pipelines.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/azure-pipelines.yml b/azure-pipelines.yml index 2a2bcdd50..c3dfeaadd 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -50,7 +50,7 @@ jobs: displayName: "Install dependencies" workingDirectory: "server" - - script: pip install --no-use-pep517 pyinstaller + - script: pip install --no-use-pep517 pyinstaller --clean -y --workpath D:/ displayName: "Install pyinstaller" - script: pyinstaller --clean -y *.spec From 83a4c5964037adbf846a361b382b73438c2cb71c Mon Sep 17 00:00:00 2001 From: Darragh Van Tichelen Date: Sat, 18 May 2019 09:08:15 +0200 Subject: [PATCH 76/92] woepsie --- azure-pipelines.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/azure-pipelines.yml b/azure-pipelines.yml index c3dfeaadd..2e6ccf7a1 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -50,9 +50,9 @@ jobs: displayName: "Install dependencies" workingDirectory: "server" - - script: pip install --no-use-pep517 pyinstaller --clean -y --workpath D:/ + - script: pip install pyinstaller displayName: "Install pyinstaller" - - script: pyinstaller --clean -y *.spec + - script: pyinstaller --clean -y --workpath D:/ *.spec displayName: "Run pyinstaller" workingDirectory: "server" From b0f818fa1f7ecd02ce9f08dcb46cd56223d976cd Mon Sep 17 00:00:00 2001 From: Darragh Van Tichelen Date: Sat, 18 May 2019 09:12:04 +0200 Subject: [PATCH 77/92] more workpath tweaks --- azure-pipelines.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/azure-pipelines.yml b/azure-pipelines.yml index 2e6ccf7a1..0e8f16fd8 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -53,6 +53,6 @@ jobs: - script: pip install pyinstaller displayName: "Install pyinstaller" - - script: pyinstaller --clean -y --workpath D:/ *.spec + - script: pyinstaller --clean -y --workpath 'D:/' PA.spec displayName: "Run pyinstaller" workingDirectory: "server" From 7846bc3cd6aa3545862e5a276f6c67ef7c2f856f Mon Sep 17 00:00:00 2001 From: Darragh Van Tichelen Date: Sat, 18 May 2019 09:31:42 +0200 Subject: [PATCH 78/92] And again --- azure-pipelines.yml | 48 ++++++++++++++++++++++----------------------- 1 file changed, 24 insertions(+), 24 deletions(-) diff --git a/azure-pipelines.yml b/azure-pipelines.yml index 0e8f16fd8..eb55044c8 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -9,32 +9,32 @@ trigger: - azure-pipelines jobs: - - job: "Pyinstaller_Linux" - pool: - vmImage: "Ubuntu-16.04" + # - job: "Pyinstaller_Linux" + # pool: + # vmImage: "Ubuntu-16.04" - steps: - # - task: UsePythonVersion@0 - # inputs: - # versionSpec: "3.7" - # architecture: "x64" - - - script: | - sudo add-apt-repository ppa:deadsnakes/ppa - sudo apt-get update - sudo apt-get install python3.7 python3.7-dev - displayName: "Install python3.7" - - - script: pip install -r requirements.txt - displayName: "Install dependencies" - workingDirectory: "server" + # steps: + # # - task: UsePythonVersion@0 + # # inputs: + # # versionSpec: "3.7" + # # architecture: "x64" - - script: pip install --no-use-pep517 pyinstaller - displayName: "Install pyinstaller" + # - script: | + # sudo add-apt-repository ppa:deadsnakes/ppa + # sudo apt-get update + # sudo apt-get install python3.7 python3.7-dev + # displayName: "Install python3.7" - - script: pyinstaller --clean -y --dist ./dist/linux --workpath /tmp *.spec - displayName: "Run pyinstaller" - workingDirectory: "server" + # - script: pip install -r requirements.txt + # displayName: "Install dependencies" + # workingDirectory: "server" + + # - script: pip install --no-use-pep517 pyinstaller + # displayName: "Install pyinstaller" + + # - script: pyinstaller --clean -y --dist ./dist/linux --workpath /tmp *.spec + # displayName: "Run pyinstaller" + # workingDirectory: "server" - job: "Pyinstaller_Windows" pool: @@ -53,6 +53,6 @@ jobs: - script: pip install pyinstaller displayName: "Install pyinstaller" - - script: pyinstaller --clean -y --workpath 'D:/' PA.spec + - script: pyinstaller --clean -y --workpath D:\ PA.spec displayName: "Run pyinstaller" workingDirectory: "server" From b34e7d0ad1b8f0021345523cb29dfb147ec1e532 Mon Sep 17 00:00:00 2001 From: Darragh Van Tichelen Date: Sat, 18 May 2019 09:52:33 +0200 Subject: [PATCH 79/92] Zip & Upload? --- azure-pipelines.yml | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/azure-pipelines.yml b/azure-pipelines.yml index eb55044c8..a0629bf3b 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -56,3 +56,17 @@ jobs: - script: pyinstaller --clean -y --workpath D:\ PA.spec displayName: "Run pyinstaller" workingDirectory: "server" + + - task: ArchiveFiles@2 + inputs: + rootFolderOrFile: 'D:\' + includeRootFolder: false + archiveType: 'zip' + + - task: GitHubRelease@0 + inputs: + gitHubConnection: Kruptein + action: 'create' + assets: 'D:\*.zip' + assetsUploadMode: 'replace' + isDraft: true From 4eddbf44cab6c75d48041cd513baa440f7393e20 Mon Sep 17 00:00:00 2001 From: Darragh Van Tichelen Date: Sat, 18 May 2019 09:56:44 +0200 Subject: [PATCH 80/92] Fix archive step --- azure-pipelines.yml | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/azure-pipelines.yml b/azure-pipelines.yml index a0629bf3b..551f8e502 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -59,7 +59,7 @@ jobs: - task: ArchiveFiles@2 inputs: - rootFolderOrFile: 'D:\' + rootFolderOrFile: 'D:\PA\' includeRootFolder: false archiveType: 'zip' @@ -67,6 +67,5 @@ jobs: inputs: gitHubConnection: Kruptein action: 'create' - assets: 'D:\*.zip' assetsUploadMode: 'replace' isDraft: true From 3f7997ec8ac8ab14d1cc621aa120e30f9dc1a892 Mon Sep 17 00:00:00 2001 From: Darragh Van Tichelen Date: Sat, 18 May 2019 10:17:20 +0200 Subject: [PATCH 81/92] Tweaks --- azure-pipelines.yml | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/azure-pipelines.yml b/azure-pipelines.yml index 551f8e502..c50201e80 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -53,19 +53,22 @@ jobs: - script: pip install pyinstaller displayName: "Install pyinstaller" - - script: pyinstaller --clean -y --workpath D:\ PA.spec + - script: pyinstaller --clean -y --dist $(Build.ArtifactStagingDirectory)\windows --workpath D:\ PA.spec displayName: "Run pyinstaller" workingDirectory: "server" - task: ArchiveFiles@2 inputs: - rootFolderOrFile: 'D:\PA\' + rootFolderOrFile: $(Build.ArtifactStagingDirectory)\windows includeRootFolder: false archiveType: 'zip' + acrhiveFile: '$(Build.ArtifactStagingDirectory)\windows.zip' - task: GitHubRelease@0 inputs: gitHubConnection: Kruptein action: 'create' + assets: '$(Build.ArtifactStagingDirectory)\windows.zip' assetsUploadMode: 'replace' isDraft: true + addChangeLog: false From c21686794a3973415fbc94b08306aa8137485829 Mon Sep 17 00:00:00 2001 From: Darragh Van Tichelen Date: Sat, 18 May 2019 10:21:38 +0200 Subject: [PATCH 82/92] Fix typo --- azure-pipelines.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/azure-pipelines.yml b/azure-pipelines.yml index c50201e80..a4f789017 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -62,7 +62,7 @@ jobs: rootFolderOrFile: $(Build.ArtifactStagingDirectory)\windows includeRootFolder: false archiveType: 'zip' - acrhiveFile: '$(Build.ArtifactStagingDirectory)\windows.zip' + archiveFile: '$(Build.ArtifactStagingDirectory)\windows.zip' - task: GitHubRelease@0 inputs: From 9be70d429f4b13265924801554c46f3a5d6bcd59 Mon Sep 17 00:00:00 2001 From: Darragh Van Tichelen Date: Sat, 18 May 2019 10:39:20 +0200 Subject: [PATCH 83/92] Use azure pipeline, disable circleCI --- .circleci/config.yml | 21 +++++++++++---------- azure-pipelines.yml | 34 +++------------------------------- 2 files changed, 14 insertions(+), 41 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index 2374dc930..f35e5597f 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -71,18 +71,19 @@ workflows: - windows: filters: branches: - only: - - dev - - bugfix/windows-build - tags: - only: /^\d+\.\d+\.\d+[-a-zA-Z0-9]*$/ + ignore: /.*/ + # only: + # - dev + # - bugfix/windows-build + # tags: + # only: /^\d+\.\d+\.\d+[-a-zA-Z0-9]*$/ - release: requires: - windows filters: branches: - # ignore: /.*/ - only: - - bugfix/windows-build - tags: - only: /^\d+\.\d+\.\d+[-a-zA-Z0-9]*$/ + ignore: /.*/ + # only: + # - bugfix/windows-build + # tags: + # only: /^\d+\.\d+\.\d+[-a-zA-Z0-9]*$/ diff --git a/azure-pipelines.yml b/azure-pipelines.yml index a4f789017..99f625a9a 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -5,37 +5,9 @@ trigger: - master - - dev - - azure-pipelines + - bugfix/windows-build jobs: - # - job: "Pyinstaller_Linux" - # pool: - # vmImage: "Ubuntu-16.04" - - # steps: - # # - task: UsePythonVersion@0 - # # inputs: - # # versionSpec: "3.7" - # # architecture: "x64" - - # - script: | - # sudo add-apt-repository ppa:deadsnakes/ppa - # sudo apt-get update - # sudo apt-get install python3.7 python3.7-dev - # displayName: "Install python3.7" - - # - script: pip install -r requirements.txt - # displayName: "Install dependencies" - # workingDirectory: "server" - - # - script: pip install --no-use-pep517 pyinstaller - # displayName: "Install pyinstaller" - - # - script: pyinstaller --clean -y --dist ./dist/linux --workpath /tmp *.spec - # displayName: "Run pyinstaller" - # workingDirectory: "server" - - job: "Pyinstaller_Windows" pool: vmImage: "vs2017-win2016" @@ -62,13 +34,13 @@ jobs: rootFolderOrFile: $(Build.ArtifactStagingDirectory)\windows includeRootFolder: false archiveType: 'zip' - archiveFile: '$(Build.ArtifactStagingDirectory)\windows.zip' + archiveFile: '$(Build.ArtifactStagingDirectory)\planarally-windows.zip' - task: GitHubRelease@0 inputs: gitHubConnection: Kruptein action: 'create' - assets: '$(Build.ArtifactStagingDirectory)\windows.zip' + assets: '$(Build.ArtifactStagingDirectory)\planarally-windows.zip' assetsUploadMode: 'replace' isDraft: true addChangeLog: false From 192bd67a4ffc23270ae30919960842510189f023 Mon Sep 17 00:00:00 2001 From: Darragh Van Tichelen Date: Sat, 18 May 2019 14:49:20 +0200 Subject: [PATCH 84/92] Add environment information for pythonpath --- .env | 1 + 1 file changed, 1 insertion(+) create mode 100644 .env diff --git a/.env b/.env new file mode 100644 index 000000000..30540c28b --- /dev/null +++ b/.env @@ -0,0 +1 @@ +PYTHONPATH=./server/ \ No newline at end of file From 5a8466563681b76eee07f71814294d5f68257459 Mon Sep 17 00:00:00 2001 From: Darragh Van Tichelen Date: Sat, 18 May 2019 14:50:03 +0200 Subject: [PATCH 85/92] Remove unused column --- server/models/campaign.py | 2 -- server/save.py | 13 ++++++++++++- 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/server/models/campaign.py b/server/models/campaign.py index 35005b274..52af2be75 100644 --- a/server/models/campaign.py +++ b/server/models/campaign.py @@ -8,7 +8,6 @@ TextField, ) from playhouse.shortcuts import model_to_dict -from playhouse.sqlite_ext import JSONField from .base import BaseModel from .user import User @@ -190,7 +189,6 @@ class LocationUserOption(BaseModel): pan_y = IntegerField(default=0) zoom_factor = FloatField(default=1.0) active_layer = ForeignKeyField(Layer, backref="active_users", null=True) - active_filters = JSONField(default = {}) def __repr__(self): return f"" diff --git a/server/save.py b/server/save.py index 1be9ab412..e51cdfd7b 100644 --- a/server/save.py +++ b/server/save.py @@ -1,3 +1,4 @@ +import json import logging import os import secrets @@ -11,7 +12,7 @@ from models import ALL_MODELS, Constants from models.db import db -SAVE_VERSION = 13 +SAVE_VERSION = 14 logger: logging.Logger = logging.getLogger("PlanarAllyServer") logger.setLevel(logging.INFO) @@ -141,6 +142,16 @@ def upgrade(version): label.save() db.foreign_keys = True Constants.update(save_version=Constants.save_version + 1).execute() + elif version == 13: + from models import LocationUserOption, MultiLine, Polygon + + db.foreign_keys = False + migrator = SqliteMigrator(db) + + migrate(migrator.drop_column("location_user_option", "active_filters")) + + db.foreign_keys = True + Constants.update(save_version=Constants.save_version + 1).execute() else: raise Exception(f"No upgrade code for save format {version} was found.") From 39ab45aedcbb0fd25e9da45a6686f8b5ec1eb034 Mon Sep 17 00:00:00 2001 From: Darragh Van Tichelen Date: Sat, 18 May 2019 14:50:41 +0200 Subject: [PATCH 86/92] Change JSONFields to TextFields --- server/api/socket/shape.py | 6 ++---- server/models/shape.py | 36 ++++++++++++++++++++++++++++++------ 2 files changed, 32 insertions(+), 10 deletions(-) diff --git a/server/api/socket/shape.py b/server/api/socket/shape.py index 761ade070..f59c6d840 100644 --- a/server/api/socket/shape.py +++ b/server/api/socket/shape.py @@ -104,9 +104,7 @@ async def update_shape_position(sid, data): type_table = get_table(shape.type_) type_instance = type_table.get(uuid=shape.uuid) # no backrefs on these tables - update_model_from_dict( - type_instance, data["shape"], ignore_unknown=True - ) + type_instance.update_from_dict(data["shape"], ignore_unknown=True) type_instance.save() await sync_shape_update(layer, room, data, sid, shape) @@ -138,7 +136,7 @@ async def update_shape(sid, data): type_table = get_table(shape.type_) type_instance = type_table.get(uuid=shape.uuid) # no backrefs on these tables - update_model_from_dict(type_instance, data["shape"], ignore_unknown=True) + type_instance.update_from_dict(data["shape"], ignore_unknown=True) type_instance.save() # Owners old_owners = {owner.user.name for owner in shape.owners} diff --git a/server/models/shape.py b/server/models/shape.py index fca1a1126..2efa67391 100644 --- a/server/models/shape.py +++ b/server/models/shape.py @@ -1,6 +1,6 @@ +import json from peewee import BooleanField, FloatField, ForeignKeyField, IntegerField, TextField -from playhouse.shortcuts import model_to_dict -from playhouse.sqlite_ext import JSONField +from playhouse.shortcuts import model_to_dict, update_model_from_dict from .base import BaseModel from .campaign import Layer @@ -76,9 +76,8 @@ def as_dict(self, user: User, dm: bool): # Subtype type_table = get_table(self.type_) data.update( - **model_to_dict(type_table.get(uuid=self.uuid), exclude=[type_table.uuid]) + **type_table.get(uuid=self.uuid).as_dict(exclude=[type_table.uuid]) ) - return data @@ -134,6 +133,12 @@ class ShapeType(BaseModel): abstract = True uuid = TextField(primary_key=True) + def as_dict(self, *args, **kwargs): + return model_to_dict(self, *args, **kwargs) + + def update_from_dict(self, data, *args, **kwargs): + return update_model_from_dict(self, data, *args, **kwargs) + class BaseRect(ShapeType): abstract = True @@ -167,12 +172,31 @@ class Line(ShapeType): class MultiLine(ShapeType): abstract = False line_width = IntegerField() - points = JSONField() + points = TextField() + + + def as_dict(self, *args, **kwargs): + model = model_to_dict(self, *args, **kwargs) + model['points'] = json.loads(model['points']) + return model + + def update_from_dict(self, data, *args, **kwargs): + data["points"] = json.dumps(data["points"]) + return update_model_from_dict(self, data, *args, **kwargs) class Polygon(ShapeType): abstract = False - vertices = JSONField() + vertices = TextField() + + def as_dict(self, *args, **kwargs): + model = model_to_dict(self, *args, **kwargs) + model['vertices'] = json.loads(model['vertices']) + return model + + def update_from_dict(self, data, *args, **kwargs): + data["vertices"] = json.dumps(data["vertices"]) + return update_model_from_dict(self, data, *args, **kwargs) class Rect(BaseRect): From 7caea0f0470cdd61561228d4d480d5556f28aadd Mon Sep 17 00:00:00 2001 From: Darragh Van Tichelen Date: Sat, 18 May 2019 15:31:40 +0200 Subject: [PATCH 87/92] Only zip folder --- azure-pipelines.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/azure-pipelines.yml b/azure-pipelines.yml index 99f625a9a..39fe69fcd 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -31,7 +31,7 @@ jobs: - task: ArchiveFiles@2 inputs: - rootFolderOrFile: $(Build.ArtifactStagingDirectory)\windows + rootFolderOrFile: $(Build.ArtifactStagingDirectory)\windows\planarserver includeRootFolder: false archiveType: 'zip' archiveFile: '$(Build.ArtifactStagingDirectory)\planarally-windows.zip' From 0e70ba55dc6b21e42a4d44efde9b427b5b8f8745 Mon Sep 17 00:00:00 2001 From: Darragh Van Tichelen Date: Sat, 18 May 2019 15:39:54 +0200 Subject: [PATCH 88/92] Cleanup pipeline --- azure-pipelines.yml | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/azure-pipelines.yml b/azure-pipelines.yml index 39fe69fcd..e10534916 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -4,8 +4,8 @@ # https://docs.microsoft.com/azure/devops/pipelines/languages/python trigger: - - master - - bugfix/windows-build + tags: + - '*' jobs: - job: "Pyinstaller_Windows" @@ -42,5 +42,4 @@ jobs: action: 'create' assets: '$(Build.ArtifactStagingDirectory)\planarally-windows.zip' assetsUploadMode: 'replace' - isDraft: true addChangeLog: false From 5b7015ab00acda140db8a059463b75f536e3a4db Mon Sep 17 00:00:00 2001 From: Darragh Van Tichelen Date: Sat, 18 May 2019 15:41:32 +0200 Subject: [PATCH 89/92] Fix error in yml --- azure-pipelines.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/azure-pipelines.yml b/azure-pipelines.yml index e10534916..8018e5674 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -5,7 +5,8 @@ trigger: tags: - - '*' + include: + - '*' jobs: - job: "Pyinstaller_Windows" From ce1bd4bfa430dd86f8bbcfa834258719addab016 Mon Sep 17 00:00:00 2001 From: Darragh Van Tichelen Date: Sat, 18 May 2019 16:00:22 +0200 Subject: [PATCH 90/92] Update changelog --- CHANGELOG.md | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index b736b6ec0..2dedfef03 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -17,8 +17,8 @@ All notable changes to this project will be documented in this file. - Camera lock button to initiative to automatically center on current actor. - It will center when an actor begins its turn and the client is owner of that actor. - It does not prevent camera movement after the initial center action. -- Automatic build of windows executables on circle CI for master and dev branches. - - Tags on the master branch will also create/update a release with these files for ease of use. +- Automatic build of windows executables on azure pipelines for all tags + - These will also create a github release automatically - Fake player button to DM Settings to disable all DM functions except DM settings. - You can control which player(s) you want to emulate with the vision tool. @@ -31,6 +31,7 @@ All notable changes to this project will be documented in this file. - Fix a bug causing labels without category to throw errors. - CSS bug with menu. - Bug making it impossible to remove trackers/auras. +- Windows build being completely broken. ## [0.15.1] - 2019-05-15 From 8e6c8d17f7b43e06641fe197d1a3fe06ba41e66a Mon Sep 17 00:00:00 2001 From: Darragh Van Tichelen Date: Sun, 19 May 2019 09:21:13 +0200 Subject: [PATCH 91/92] Bump version to 0.16.0 --- CHANGELOG.md | 2 ++ client/package-lock.json | 2 +- client/package.json | 2 +- server/VERSION | 2 +- 4 files changed, 5 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 2dedfef03..feb9b17f1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,8 @@ All notable changes to this project will be documented in this file. ## Unreleased +## [0.16.0] - 2019-05-19 + ### Added - Option to listen on a socket instead of HOST:PORT. diff --git a/client/package-lock.json b/client/package-lock.json index c9b7c4e14..0bfe2bd71 100644 --- a/client/package-lock.json +++ b/client/package-lock.json @@ -1,6 +1,6 @@ { "name": "planarally-client", - "version": "0.15.1", + "version": "0.16.0", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/client/package.json b/client/package.json index e28d13db4..da648ddb1 100644 --- a/client/package.json +++ b/client/package.json @@ -1,6 +1,6 @@ { "name": "planarally-client", - "version": "0.15.1", + "version": "0.16.0", "description": "A companion tool for when you travel into the planes.", "scripts": { "serve": "vue-cli-service serve", diff --git a/server/VERSION b/server/VERSION index 8076af51c..d183d4ace 100644 --- a/server/VERSION +++ b/server/VERSION @@ -1 +1 @@ -0.15.1 \ No newline at end of file +0.16.0 \ No newline at end of file From fb8e5f238975733c4792ad49f018eb7401162efe Mon Sep 17 00:00:00 2001 From: Darragh Van Tichelen Date: Sun, 19 May 2019 09:22:50 +0200 Subject: [PATCH 92/92] Update production files --- server/static/css/app.00f303cf.css | 1 + server/static/css/app.880b3dbe.css | 1 - server/static/js/app-legacy.41dd580f.js | 2 -- server/static/js/app-legacy.41dd580f.js.map | 1 - server/static/js/app-legacy.b2080500.js | 2 ++ server/static/js/app-legacy.b2080500.js.map | 1 + server/static/js/app.41dd580f.js | 2 -- server/static/js/app.41dd580f.js.map | 1 - server/static/js/app.b2080500.js | 2 ++ server/static/js/app.b2080500.js.map | 1 + server/templates/index.html | 2 +- 11 files changed, 8 insertions(+), 8 deletions(-) create mode 100644 server/static/css/app.00f303cf.css delete mode 100644 server/static/css/app.880b3dbe.css delete mode 100644 server/static/js/app-legacy.41dd580f.js delete mode 100644 server/static/js/app-legacy.41dd580f.js.map create mode 100644 server/static/js/app-legacy.b2080500.js create mode 100644 server/static/js/app-legacy.b2080500.js.map delete mode 100644 server/static/js/app.41dd580f.js delete mode 100644 server/static/js/app.41dd580f.js.map create mode 100644 server/static/js/app.b2080500.js create mode 100644 server/static/js/app.b2080500.js.map diff --git a/server/static/css/app.00f303cf.css b/server/static/css/app.00f303cf.css new file mode 100644 index 000000000..b25c37f49 --- /dev/null +++ b/server/static/css/app.00f303cf.css @@ -0,0 +1 @@ +@import url(https://maxcdn.bootstrapcdn.com/font-awesome/4.6.1/css/font-awesome.min.css);@import url(https://fonts.googleapis.com/css?family=Open+Sans);#app,body,html{margin:0;padding:0;border:0;width:100%;height:100%;font-family:Open Sans,sans-serif;font-weight:200}#app{display:-webkit-box;display:-ms-flexbox;display:flex;background:url(/static/img/login_background.png) repeat fixed}.ContextMenu{position:fixed;z-index:11}.ContextMenu ul{border:1px solid #ff7052;border-radius:5px;background:#fff;padding:0;list-style:none;margin:0}.ContextMenu ul li{border-bottom:1px solid #ff7052;padding:5px;cursor:pointer}.ContextMenu ul li:hover{background-color:#ff7052}.ContextMenu ul li:last-child{border-bottom:none}.ContextMenu>ul>li{clear:left;position:relative}.ContextMenu>ul>li ul{display:none;position:absolute;left:100%;top:-1px}.ContextMenu>ul>li:hover ul{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.hide[data-v-12ed61ba]{display:none}.mask[data-v-12ed61ba]{position:fixed;z-index:9998;top:0;left:0;width:100%;height:100%}.dialog-mask[data-v-12ed61ba]{pointer-events:none}.modal-mask[data-v-12ed61ba]{background-color:rgba(0,0,0,.5);-webkit-transition:opacity .3s ease;transition:opacity .3s ease}.modal-container[data-v-12ed61ba]{pointer-events:auto;position:absolute;width:auto;height:auto;background-color:#fff;border-radius:2px;-webkit-box-shadow:0 2px 8px rgba(0,0,0,.33);box-shadow:0 2px 8px rgba(0,0,0,.33);font-family:Helvetica,Arial,sans-serif}.modal-enter[data-v-12ed61ba],.modal-leave-active[data-v-12ed61ba]{opacity:0}.modal-enter .modal-container[data-v-12ed61ba],.modal-leave-active .modal-container[data-v-12ed61ba]{-webkit-transform:scale(1.1);transform:scale(1.1)}.modal-header[data-v-1883e207]{background-color:#ff7052;padding:10px;font-size:20px;font-weight:700;cursor:move}.modal-body[data-v-1883e207]{padding:10px;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:end;-ms-flex-pack:end;justify-content:flex-end}button[data-v-1883e207]:first-of-type{margin-right:10px}.modal-header[data-v-0602c2e6]{background-color:#ff7052;padding:10px;font-size:20px;font-weight:700;cursor:move}.modal-body[data-v-0602c2e6]{padding:10px;padding-bottom:0;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}.modal-footer[data-v-0602c2e6]{padding-top:0;padding:10px;text-align:right}[v-cloak],[v-cloak] *{display:none}body,html{padding:0;margin:0;width:100%;height:100%;background:url(/static/img/login_background.png) repeat fixed;font-family:Open Sans,sans-serif}#AssetManager{width:100%;height:100%;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}#titlebar{padding:15px;margin:10px;font-size:30px;font-weight:700;background-color:#ff7052;color:#fff;text-align:center;border:1px solid #000;-webkit-box-shadow:2px 2px grey;box-shadow:2px 2px grey}#main{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;height:100%}#asset-details,#assets{background-color:#fff;border:1px solid #000;margin:10px;position:relative;padding-top:45px;padding-bottom:45px;-webkit-box-shadow:3px 3px grey;box-shadow:3px 3px grey}#assets{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1}#asset-details{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;padding:15px;max-width:50%;overflow:scroll}#asset-details img{width:100%}#breadcrumbs{position:absolute;left:0;top:0;display:-webkit-box;display:-ms-flexbox;display:flex;overflow:hidden;z-index:1;background-color:#ff7052;color:#fff;-webkit-box-align:center;-ms-flex-align:center;align-items:center;padding:5px;border-bottom-right-radius:10px}#breadcrumbs>div{position:relative;padding:10px;padding-left:20px;text-align:center}#breadcrumbs>div:first-child{padding-left:10px}#breadcrumbs div:last-child:after{content:none}#breadcrumbs div:after{content:"";position:absolute;display:inline-block;width:30px;height:30px;top:3px;right:-10px;background-color:transparent;border-top-right-radius:5px;-webkit-transform:scale(.707) rotate(45deg);transform:scale(.707) rotate(45deg);-webkit-box-shadow:1px -1px rgba(0,0,0,.25);box-shadow:1px -1px rgba(0,0,0,.25);z-index:1}#actionbar{position:absolute;right:0;top:0;padding:8px;border-bottom-left-radius:10px;background-color:#ff7052;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;color:#fff}#actionbar>div{margin:5px}#actionbar>div:hover{cursor:pointer}#explorer{position:relative;left:0;display:grid;grid-template-columns:repeat(auto-fill,minmax(105px,1fr));max-width:100%;max-height:100%;overflow:auto}.inode{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;padding:15px}.inode-selected,.inode:hover{cursor:pointer;background-color:#ff7052}.inode *{pointer-events:none}.title{word-break:break-all}#asset-detail-title{font-weight:700;font-size:30px;border-bottom:2px solid #000;margin-bottom:15px;text-align:center}[data-v-bc30fc14]{-ms-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box;margin:0;padding:0;border:0}form[data-v-bc30fc14]{position:relative;top:50%;width:250px;display:table;margin:-150px auto 0 auto;background:#fff;border-radius:4px}.legend[data-v-bc30fc14]{position:relative;text-align:center;width:100%;display:block;background:#ff7052;padding:15px;color:#fff;font-size:20px}.legend[data-v-bc30fc14]:after{content:"";opacity:.06;top:0;left:0;bottom:0;right:0;position:absolute}.input[data-v-bc30fc14]{position:relative;width:90%;margin:15px auto}.input span[data-v-bc30fc14]{position:absolute;display:block;color:#d4d4d4;left:10px;top:8px;font-size:20px}.input input[data-v-bc30fc14]{width:100%;padding:10px 5px 10px 40px;display:block;border:1px solid #ededed;border-radius:4px;-webkit-transition:.2s ease-out;transition:.2s ease-out;color:#a1a1a1}.input input[data-v-bc30fc14]:focus{padding:10px 5px 10px 10px;outline:0;border-color:#ff7052}.submit[data-v-bc30fc14]{width:45px;height:45px;display:block;margin:0 auto -15px auto;background:#fff;border-radius:100%;border:1px solid #ff7052;color:#ff7052;font-size:24px;cursor:pointer;-webkit-box-shadow:0 0 0 7px #fff;box-shadow:0 0 0 7px #fff;-webkit-transition:.2s ease-out;transition:.2s ease-out}.submit[data-v-bc30fc14]:focus,.submit[data-v-bc30fc14]:hover{background:#ff7052;color:#fff;outline:0}.feedback[data-v-bc30fc14]{position:absolute;bottom:-70px;width:100%;text-align:center;color:#fff;background:#c71585;padding:10px 0;font-size:12px}.feedback[data-v-bc30fc14]:before{bottom:100%;left:50%;border:solid transparent;content:"";height:0;width:0;position:absolute;pointer-events:none;border-color:rgba(46,204,113,0);border-bottom-color:#c71585;border-width:10px;margin-left:-10px}[data-v-61eb1455]{-ms-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box;margin:0;padding:0;border:0}a[data-v-61eb1455]{text-decoration:inherit;color:inherit;width:100%;display:block;text-align:center;border:1px solid #ff7052}a[data-v-61eb1455]:hover{background-color:#ff7052;color:#fff}a[data-v-61eb1455]:first-child{border-radius:10px 10px 0 0}a[data-v-61eb1455]:last-child{border-radius:0 0 10px 10px}a[data-v-61eb1455]:only-child{border-radius:10px}#formcontainer[data-v-61eb1455]{margin:auto}form[data-v-61eb1455]{background:#fff;border-radius:4px}.legend[data-v-61eb1455]{position:relative;text-align:center;width:100%;display:block;background:#ff7052;padding:15px;color:#fff;font-size:20px}.legend[data-v-61eb1455]:after{content:"";opacity:.06;top:0;left:0;bottom:0;right:0;position:absolute}#account-options[data-v-61eb1455]{display:-webkit-box;display:-ms-flexbox;display:flex;background:#fff;border-radius:4px;margin-top:50px;height:45px}#account-options form[data-v-61eb1455]{background:none;border-radius:0;width:50%}.input[data-v-61eb1455]{position:relative;width:90%;margin:15px auto}.input span[data-v-61eb1455]{position:absolute;display:block;color:#d4d4d4;left:10px;top:8px;font-size:20px}.input input[data-v-61eb1455]{width:100%;padding:10px 5px 10px 40px;display:block;border:1px solid #ededed;border-radius:4px;-webkit-transition:.2s ease-out;transition:.2s ease-out;color:#a1a1a1}.input input[data-v-61eb1455]:focus{outline:0;border-color:#ff7052}.submit[data-v-61eb1455]{width:45px;height:45px;display:block;margin:0 auto -15px auto;background:#fff;border-radius:100%;border:1px solid #ff7052;color:#ff7052;font-size:24px;cursor:pointer;-webkit-box-shadow:0 0 0 7px #fff;box-shadow:0 0 0 7px #fff;-webkit-transition:.2s ease-out;transition:.2s ease-out}.submit[data-v-61eb1455]:focus,.submit[data-v-61eb1455]:hover{background:#ff7052;color:#fff;outline:0}.feedback[data-v-61eb1455]{position:absolute;bottom:-70px;width:100%;text-align:center;color:#fff;background:#c71585;padding:10px 0;font-size:12px}.feedback[data-v-61eb1455]:before{bottom:100%;left:50%;border:solid transparent;content:"";height:0;width:0;position:absolute;pointer-events:none;border-color:rgba(46,204,113,0);border-bottom-color:#c71585;border-width:10px;margin-left:-10px}h4[data-v-61eb1455]{background-color:#fff;width:100%;text-align:center;border-bottom:1px solid #000;line-height:.1em}h4 span[data-v-61eb1455]{background:#fff;padding:0 10px}.modal-header[data-v-07fc8ff2]{background-color:#ff7052;padding:10px;font-size:20px;font-weight:700;cursor:move}.header-close[data-v-07fc8ff2]{position:absolute;top:5px;right:5px}.modal-body[data-v-07fc8ff2]{padding:10px}#initiative-list[data-v-07fc8ff2]{padding:0;-webkit-box-orient:vertical;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:end;-ms-flex-align:end;align-items:flex-end}#initiative-list[data-v-07fc8ff2],.initiative-actor[data-v-07fc8ff2]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-direction:normal}.initiative-actor[data-v-07fc8ff2]{-webkit-box-orient:horizontal;-ms-flex-direction:row;flex-direction:row;-webkit-box-pack:end;-ms-flex-pack:end;justify-content:flex-end;-webkit-box-align:center;-ms-flex-align:center;align-items:center;padding:2px 5px;margin-bottom:2px;border-radius:5px;border:2px solid transparent}.initiative-selected[data-v-07fc8ff2]{border:2px solid #82c8a0;background-color:#82c8a0}.initiative-actor:hover+.initiative-effect[data-v-07fc8ff2],.initiative-effect[data-v-07fc8ff2]:hover,.initiative-selected+.initiative-effect[data-v-07fc8ff2]{display:-webkit-box;display:-ms-flexbox;display:flex;border-color:rgba(130,200,160,.6);background-color:rgba(130,200,160,.6)}.initiative-actor[data-v-07fc8ff2]:hover{border:2px solid #82c8a0}.initiative-actor>[data-v-07fc8ff2]{width:30px;margin-left:2px}.initiative-effect[data-v-07fc8ff2]{display:none;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;width:-moz-fit-content;width:-webkit-fit-content;width:fit-content;margin-right:5px;margin-top:-2px;margin-bottom:5px;padding:2px;border:2px solid transparent;border-bottom-left-radius:5px;border-bottom-right-radius:5px;border-top:none}.initiative-effect>[data-v-07fc8ff2]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-pack:end;-ms-flex-pack:end;justify-content:flex-end}.initiative-effect>*>[data-v-07fc8ff2]{border:none;background-color:inherit;text-align:right;margin-left:20px;min-width:10px}.initiative-effect>*>[data-v-07fc8ff2]:first-child{margin-left:0}#initiative-bar[data-v-07fc8ff2]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;-webkit-box-align:center;-ms-flex-align:center;align-items:center;margin-right:10px;margin-left:10px;margin-top:10px;margin-bottom:-10px;padding:2px}.initiative-bar-button[data-v-07fc8ff2]{border:2px solid #82c8a0;border-radius:5px;padding:5px}.initiative-bar-button[data-v-07fc8ff2]:hover{color:#fff;background-color:#82c8a0;cursor:pointer}abbr[data-v-e477c214]{text-decoration:none}.scroll[data-v-e477c214]{max-height:20em;overflow-y:auto}.modal-header[data-v-e477c214]{background-color:#ff7052;padding:10px;font-size:20px;font-weight:700;cursor:move}.header-close[data-v-e477c214]{position:absolute;top:5px;right:5px}.modal-body[data-v-e477c214]{padding:10px;max-width:450px}.separator[data-v-e477c214]{line-height:.1em;margin:7px 0}.separator[data-v-e477c214]:after{position:absolute;left:10px;right:10px;border-bottom:1px solid #000;content:""}.spanrow[data-v-e477c214]{grid-column:start/end}.lower-opacity>[data-v-e477c214]{opacity:.3}.grid[data-v-e477c214]{display:grid;grid-template-columns:[start] 50px [name] 1fr [visible] 30px [remove] 30px [end];grid-row-gap:5px;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.grid>[data-v-e477c214]{text-align:center}.name[data-v-e477c214]{text-align:left!important}.row[data-v-e477c214]{display:contents}.row>[data-v-e477c214]{padding:5px;height:20px;border:1px solid transparent}.row:hover>[data-v-e477c214]{cursor:pointer;border-top:1px solid #ff7052;border-bottom:1px solid #ff7052;background-color:rgba(0,0,0,.2)}.row:hover>[data-v-e477c214]:first-child{border-left:1px solid #ff7052;border-top-left-radius:10px;border-bottom-left-radius:10px}.row:hover>[data-v-e477c214]:last-child{border-right:1px solid #ff7052;border-top-right-radius:10px;border-bottom-right-radius:10px}#no-labels[data-v-e477c214]{grid-column:start/end;font-style:italic;padding-left:50px}#addLabelButton[data-v-e477c214]{grid-column:visible/end}.outer[data-v-d32461a4]{padding:5px;border:1px solid #000;border-radius:3px;cursor:pointer;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.current-color[data-v-d32461a4]{width:13px;height:13px;background-color:#000;border:1px solid #000}.mask[data-v-d32461a4]{position:fixed;z-index:9998;top:0;left:0;width:100%;height:100%}.preview[data-v-6d718094]{position:fixed;z-index:50;left:200px;top:0}.asset-preview-image[data-v-6d718094]{width:100%;max-width:250px}.draggable[data-v-6d718094]{list-style:none;font-family:helvetica}.token[data-v-6d718094]{padding-top:5px;padding-bottom:5px;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start}.token img[data-v-6d718094]{margin-right:5px}.token svg[data-v-6d718094]{margin-left:auto}.folder>[data-v-6d718094]{display:none}.directory>.file[data-v-6d718094],.directory>.folder[data-v-6d718094]{display:block}.folder[data-v-6d718094]:hover{font-weight:700;cursor:pointer}.folder:hover>[data-v-6d718094]{font-weight:400}.folder>[data-v-13f3fb33]{display:none}.directory>.file[data-v-13f3fb33],.directory>.folder[data-v-13f3fb33]{display:block}.folder[data-v-13f3fb33]:hover{font-weight:700;cursor:pointer}.folder:hover>[data-v-13f3fb33]{font-weight:400}#menuContainer[data-v-13f3fb33]{position:absolute;z-index:20;top:0;left:0;height:100%;width:100%;pointer-events:none}#menu[data-v-13f3fb33]{height:100%;max-width:200px}#locations-menu[data-v-13f3fb33],#menu[data-v-13f3fb33]{position:absolute;top:0;left:0;z-index:21;background-color:#fa5a5a;overflow:auto;pointer-events:auto}#locations-menu[data-v-13f3fb33]{max-height:100px;width:100%}#locations-menu>div[data-v-13f3fb33]{display:-webkit-box;display:-ms-flexbox;display:flex;width:100%;height:100%}#locations-menu>div>div[data-v-13f3fb33]{background-color:#fff;text-align:center;line-height:100px;width:100px;border-right:1px solid #82c8a0}#locations-menu>div>div[data-v-13f3fb33]:hover{cursor:pointer;background-color:#82c8a0}.actionButton[data-v-13f3fb33]{position:absolute;right:0;margin:5px;margin-right:10px;padding:0}.menu-accordion[data-v-13f3fb33]{background-color:#eee;color:#444;cursor:pointer;padding:18px;text-align:left;border:none;outline:none;-webkit-transition:.4s;transition:.4s;border-top:1px solid #82c8a0;width:100%;width:-moz-available;width:-webkit-fill-available;width:stretch}.menu-accordion-active[data-v-13f3fb33],.menu-accordion[data-v-13f3fb33]:hover{background-color:#82c8a0}.menu-accordion-panel[data-v-13f3fb33]{background-color:#fff;display:none;overflow:hidden;min-height:2em}.menu-accordion-subpanel[data-v-13f3fb33]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;width:100%}.menu-accordion-subpanel>[data-v-13f3fb33]{padding:5px;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:space-evenly;-ms-flex-pack:space-evenly;justify-content:space-evenly;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.menu-accordion-subpanel>[data-v-13f3fb33]:hover{background-color:#82c8a0}#exitButton[data-v-13f3fb33]{position:fixed;bottom:0;width:100%}#radialmenu[data-v-13f3fb33]{position:absolute;z-index:20;width:0;height:0;pointer-events:auto}.rm-list-dm #rm-locations svg[data-v-13f3fb33]{margin-left:50px}.rm-list-dm #rm-settings svg[data-v-13f3fb33]{margin-bottom:50px}.rm-wrapper[data-v-13f3fb33]{position:relative;width:200px;height:200px;top:-100px;left:-100px}.rm-wrapper .rm-topper[data-v-13f3fb33]{pointer-events:none;text-align:center;line-height:50px;font-size:25px}.rm-wrapper .rm-toggler[data-v-13f3fb33],.rm-wrapper .rm-topper[data-v-13f3fb33]{display:block;position:absolute;width:50px;height:50px;left:50%;top:50%;margin-left:-25px;margin-top:-25px;background:#fa5a5a;color:#fff;border-radius:50%}.rm-wrapper .rm-toggler .rm-list[data-v-13f3fb33],.rm-wrapper .rm-topper .rm-list[data-v-13f3fb33]{opacity:.5;list-style:none;padding:0;width:200px;height:200px;overflow:hidden;display:block;border-radius:50%;-webkit-transform:rotate(180deg);transform:rotate(180deg);-webkit-box-shadow:0 0 10px 0 rgba(0,0,0,.2);box-shadow:0 0 10px 0 rgba(0,0,0,.2);margin:-75px 0 0 -75px}.rm-list-dm[data-v-13f3fb33]{-webkit-transform:rotate(135deg)!important;transform:rotate(135deg)!important}.rm-wrapper .rm-toggler:hover .rm-list[data-v-13f3fb33],.rm-wrapper .rm-topper:hover .rm-list[data-v-13f3fb33]{opacity:1}.rm-wrapper .rm-toggler .rm-list .rm-item[data-v-13f3fb33],.rm-wrapper .rm-topper .rm-list .rm-item[data-v-13f3fb33]{display:table;width:50%;height:50%;float:left;text-align:center;-webkit-box-shadow:inset 0 0 2px 0 rgba(0,0,0,.2);box-shadow:inset 0 0 2px 0 rgba(0,0,0,.2);background-color:#fff}.rm-wrapper .rm-toggler .rm-list .rm-item[data-v-13f3fb33]:hover,.rm-wrapper .rm-topper .rm-list .rm-item[data-v-13f3fb33]:hover{background-color:#82c8a0}.rm-wrapper .rm-toggler .rm-list .rm-item:hover a[data-v-13f3fb33],.rm-wrapper .rm-topper .rm-list .rm-item:hover a[data-v-13f3fb33]{color:#fff}.rm-wrapper .rm-toggler .rm-list .rm-item a[data-v-13f3fb33],.rm-wrapper .rm-topper .rm-list .rm-item a[data-v-13f3fb33]{display:table-cell;vertical-align:middle;-webkit-transform:rotate(-45deg);transform:rotate(-45deg);text-decoration:none;font-size:25px;color:#82c8a0;border:none;outline:none}.settings-enter-active[data-v-13f3fb33],.settings-leave-active[data-v-13f3fb33]{-webkit-transition:width .5s;transition:width .5s}.settings-enter[data-v-13f3fb33],.settings-leave-to[data-v-13f3fb33]{width:0}.settings-enter-to[data-v-13f3fb33],.settings-leave[data-v-13f3fb33]{width:200px}.locations-enter-active[data-v-13f3fb33],.locations-leave-active[data-v-13f3fb33]{-webkit-transition:height .5s;transition:height .5s}.locations-enter[data-v-13f3fb33],.locations-leave-to[data-v-13f3fb33]{height:0}.locations-enter-to[data-v-13f3fb33],.locations-leave[data-v-13f3fb33]{height:100px}.modal-header[data-v-7a3669fd]{background-color:#ff7052;padding:10px;font-size:20px;font-weight:700;cursor:move}.modal-header>input[data-v-7a3669fd]{background-color:inherit;border:none;font-weight:700;font-size:large}.header-close[data-v-7a3669fd]{position:absolute;top:5px;right:5px}.modal-body[data-v-7a3669fd]{padding:10px}.modal-body>textarea[data-v-7a3669fd]{width:100%;min-height:100px;max-height:500px}.modal-footer[data-v-7a3669fd]{padding-top:0;padding:10px;text-align:right}.modal-header[data-v-23de098e]{background-color:#ff7052;padding:10px;font-size:20px;font-weight:700;cursor:move}.header-close[data-v-23de098e]{position:absolute;top:5px;right:5px}.modal-body[data-v-23de098e]{padding:10px;max-width:450px}.grid[data-v-23de098e]{display:grid;grid-template-columns:[name] 1fr [numerator] 30px [slash] 5px [denominator] 30px [colour] 40px [visible] 30px [light] 30px [remove] 30px [end];grid-column-gap:5px}.colours[data-v-23de098e],.grid[data-v-23de098e]{-webkit-box-align:center;-ms-flex-align:center;align-items:center}.colours[data-v-23de098e]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}.header[data-v-23de098e]{line-height:.1em;margin:20px 0 15px}.header[data-v-23de098e]:after{position:absolute;right:5px;width:75%;border-bottom:1px solid #000;content:""}.spanrow[data-v-23de098e]{grid-column:1/end}#labels[data-v-23de098e]{-ms-flex-wrap:wrap;flex-wrap:wrap}.label[data-v-23de098e]{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;position:relative;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-align:center;-ms-flex-align:center;align-items:center;background-color:#fff;font-size:13px;margin:5px}.label:hover>.label-main[data-v-23de098e]:before{content:"\D7";position:absolute;color:red;font-size:20px;font-weight:700;cursor:pointer;top:-8px;right:-4px;pointer-events:auto}#label-add:hover>.label-main[data-v-23de098e]{pointer-events:auto;cursor:pointer;color:#fff;font-weight:700;background-color:#ff7052}#label-add:hover>.label-main[data-v-23de098e]:before{content:""}.label-user[data-v-23de098e]{border-top-left-radius:10px;border-bottom-left-radius:10px;background-color:#ff7052;border:1px solid #ff7052;padding:5px}.label-main[data-v-23de098e]{border:1px solid #ff7052;border-radius:10px;padding:5px;pointer-events:none}.label-user+.label-main[data-v-23de098e]{border-top-left-radius:0;border-bottom-left-radius:0}input[type=checkbox][data-v-23de098e]{width:16px;height:23px;margin:0 8px 0 8px;white-space:nowrap;display:inline-block}#selection-menu[data-v-674cf937]{position:absolute;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;top:75px;right:0;z-index:10;opacity:.5;border-top-left-radius:5px;border-bottom-left-radius:5px;border:1px solid #82c8a0;border-right:none;padding:10px 35px 10px 10px;background-color:#eee}#selection-menu[data-v-674cf937]:hover{background-color:#82c8a0;opacity:1}#selection-edit-button[data-v-674cf937]{position:absolute;right:10px;top:10px;cursor:pointer}#selection-auras[data-v-674cf937],#selection-trackers[data-v-674cf937]{display:grid;grid-template-columns:[name] 1fr [value] 1fr}.selection-aura-value[data-v-674cf937],.selection-tracker-value[data-v-674cf937]{justify-self:center;padding:2px}.selection-aura-value[data-v-674cf937]:hover,.selection-tracker-value[data-v-674cf937]:hover{cursor:pointer;background-color:rgba(20,20,20,.2)}#selection-name[data-v-674cf937]{font-size:20px;font-weight:700;margin-bottom:10px}.ContextMenu ul[data-v-759e5a8a]{border:1px solid #82c8a0}.ContextMenu ul li[data-v-759e5a8a]{border-bottom:1px solid #82c8a0}.ContextMenu ul li[data-v-759e5a8a]:hover{background-color:#82c8a0}canvas[data-v-73816298]{grid-column:label/end;justify-self:center}.modal-header[data-v-73816298]{background-color:#ff7052;padding:10px;font-size:20px;font-weight:700;cursor:move}.modal-body[data-v-73816298]{padding:10px;display:grid;grid-template-columns:[label] 1fr [value] 2fr [end];grid-row-gap:10px;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.modal-footer[data-v-73816298]{padding-top:0;padding:10px;text-align:right}.colours[data-v-73816298]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}.tool-detail{position:absolute;right:var(--detailRight);bottom:80px;z-index:11;border:1px solid #2b2b2b;background-color:#fff;display:grid;padding:10px;grid-template-columns:auto auto;grid-column-gap:5px;grid-row-gap:2px}.tool-detail:after{content:"";position:absolute;right:var(--detailArrow);bottom:0;width:0;height:0;border:14px solid transparent;border-top-color:#000;border-bottom:0;margin-left:-14px;margin-bottom:-14px}.tool-detail input{width:100%;-webkit-box-sizing:border-box;box-sizing:border-box}.option[data-v-639cd890]{padding:6px;border:1px solid #82c8a0;border-radius:0;-webkit-box-flex:1;-ms-flex:1 1;flex:1 1;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;font-size:13px;min-width:25px}.option-selected[data-v-639cd890],.option[data-v-639cd890]:hover{background-color:#82c8a0}.selectgroup[data-v-639cd890]{display:-webkit-box;display:-ms-flexbox;display:flex}.selectgroup>.option[data-v-639cd890]:first-of-type{border-top-left-radius:10px;border-bottom-left-radius:10px}.selectgroup>.option[data-v-639cd890]:last-of-type{border-top-right-radius:10px;border-bottom-right-radius:10px}.accordion[data-v-0bf2b7ba]{border:2px solid #ff7052;-webkit-user-select:none!important;-moz-user-select:none!important;-ms-user-select:none!important;user-select:none!important;-webkit-user-drag:none!important}#header[data-v-0bf2b7ba]{background-color:#ff7052;cursor:pointer;padding:.5em;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start;-webkit-box-align:center;-ms-flex-align:center;align-items:center}[type=checkbox][data-v-0bf2b7ba]{width:-webkit-min-content;width:-moz-min-content;width:min-content;margin-right:10px}#body[data-v-0bf2b7ba]{padding:.3em;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}#body[data-v-0bf2b7ba],.item[data-v-0bf2b7ba]{display:-webkit-box;display:-ms-flexbox;display:flex}.item[data-v-0bf2b7ba]{padding:.2em;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.item[data-v-0bf2b7ba]:hover{background-color:#ff7052;cursor:pointer}.accordion{margin-bottom:.2em}.accordion:last-of-type{margin-bottom:0}.tool-detail{display:block}#accordion-container[data-v-dca395d6]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch;overflow-y:auto;max-height:25em}.ContextMenu ul[data-v-44a31e42]{border:1px solid #82c8a0}.ContextMenu ul li[data-v-44a31e42]{border-bottom:1px solid #82c8a0}.ContextMenu ul li[data-v-44a31e42]:hover{background-color:#82c8a0}.token[data-v-46baf892]{margin-bottom:.5em;padding:.3em;border:2px solid #ff7052;background-color:rgba(255,112,82,.2);border-radius:1em;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.token>img[data-v-46baf892]{margin-right:.5em}.token[data-v-46baf892]:last-child{margin-bottom:0}.selected[data-v-46baf892]{background-color:#ff7052;background-color:rgba(255,112,82,.7)}.selected[data-v-46baf892]:hover{cursor:pointer;background-color:rgba(255,112,82,.2)}.token[data-v-46baf892]:not(.selected):hover{background-color:rgba(255,112,82,.7);cursor:pointer}#toolselect[data-v-b6e1f51c]{position:absolute;bottom:25px;right:25px;z-index:10}#toolselect [data-v-b6e1f51c]{-webkit-user-select:none!important;-moz-user-select:none!important;-ms-user-select:none!important;user-select:none!important;-webkit-user-drag:none!important}#toolselect>ul[data-v-b6e1f51c]{display:-webkit-box;display:-ms-flexbox;display:flex;list-style:none;padding:0;margin:0;border:1px solid #82c8a0;border-radius:7px}#toolselect>ul>li[data-v-b6e1f51c]{display:-webkit-box;display:-ms-flexbox;display:flex;background-color:#eee;border-right:1px solid #82c8a0}#toolselect>ul>li[data-v-b6e1f51c]:last-child{border-right:none;border-radius:0 4px 4px 0}#toolselect>ul>li[data-v-b6e1f51c]:first-child{border-radius:4px 0 0 4px}#toolselect>ul>li[data-v-b6e1f51c]:hover{background-color:#82c8a0}#toolselect>ul>li a[data-v-b6e1f51c]{display:-webkit-box;display:-ms-flexbox;display:flex;padding:10px;text-decoration:none}#toolselect .tool-selected[data-v-b6e1f51c]{background-color:#82c8a0}a,a:active,a:hover,a:visited{color:inherit}svg{cursor:pointer}.notAllowed,.notAllowed>*{cursor:not-allowed!important}#layers,#layers canvas{width:100%;height:100%;position:absolute;left:0;top:0;overflow:hidden}#main[data-v-05b88da7]{display:-webkit-box;display:-ms-flexbox;display:flex;width:100%;height:100%}#board[data-v-05b88da7]{position:relative;width:100%;height:100%}#layerselect[data-v-05b88da7]{position:absolute;bottom:25px;left:25px;z-index:10}#layerselect [data-v-05b88da7]{-webkit-user-select:none!important;-moz-user-select:none!important;-ms-user-select:none!important;user-select:none!important;-webkit-user-drag:none!important}#layerselect ul[data-v-05b88da7]{display:-webkit-box;display:-ms-flexbox;display:flex;list-style:none;padding:0;margin:0;border:1px solid #82c8a0;border-radius:6px}#layerselect li[data-v-05b88da7]{display:-webkit-box;display:-ms-flexbox;display:flex;background-color:#eee;border-right:1px solid #82c8a0}#layerselect li[data-v-05b88da7]:first-child{border-radius:4px 0 0 4px}#layerselect li[data-v-05b88da7]:last-child{border-right:none;border-radius:0 4px 4px 0}#layerselect li[data-v-05b88da7]:hover{background-color:#82c8a0}#layerselect li a[data-v-05b88da7]{display:-webkit-box;display:-ms-flexbox;display:flex;padding:10px;text-decoration:none}#layerselect .layer-selected[data-v-05b88da7]{background-color:#82c8a0}#zoomer[data-v-05b88da7]{position:absolute;top:15px;right:25px;z-index:11}#FPS[data-v-05b88da7]{position:absolute;top:0;right:75px;z-index:11;color:#fff} \ No newline at end of file diff --git a/server/static/css/app.880b3dbe.css b/server/static/css/app.880b3dbe.css deleted file mode 100644 index 753d7ac04..000000000 --- a/server/static/css/app.880b3dbe.css +++ /dev/null @@ -1 +0,0 @@ -@import url(https://maxcdn.bootstrapcdn.com/font-awesome/4.6.1/css/font-awesome.min.css);@import url(https://fonts.googleapis.com/css?family=Open+Sans);#app,body,html{margin:0;padding:0;border:0;width:100%;height:100%;font-family:Open Sans,sans-serif;font-weight:200}#app{display:-webkit-box;display:-ms-flexbox;display:flex;background:url(/static/img/login_background.png) repeat fixed}.ContextMenu{position:fixed;z-index:11}.ContextMenu ul{border:1px solid #ff7052;border-radius:5px;background:#fff;padding:0;list-style:none;margin:0}.ContextMenu ul li{border-bottom:1px solid #ff7052;padding:5px;cursor:pointer}.ContextMenu ul li:hover{background-color:#ff7052}.ContextMenu ul li:last-child{border-bottom:none}.ContextMenu>ul>li{clear:left;position:relative}.ContextMenu>ul>li ul{display:none;position:absolute;left:100%;top:-1px}.ContextMenu>ul>li:hover ul{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.hide[data-v-12ed61ba]{display:none}.mask[data-v-12ed61ba]{position:fixed;z-index:9998;top:0;left:0;width:100%;height:100%}.dialog-mask[data-v-12ed61ba]{pointer-events:none}.modal-mask[data-v-12ed61ba]{background-color:rgba(0,0,0,.5);-webkit-transition:opacity .3s ease;transition:opacity .3s ease}.modal-container[data-v-12ed61ba]{pointer-events:auto;position:absolute;width:auto;height:auto;background-color:#fff;border-radius:2px;-webkit-box-shadow:0 2px 8px rgba(0,0,0,.33);box-shadow:0 2px 8px rgba(0,0,0,.33);font-family:Helvetica,Arial,sans-serif}.modal-enter[data-v-12ed61ba],.modal-leave-active[data-v-12ed61ba]{opacity:0}.modal-enter .modal-container[data-v-12ed61ba],.modal-leave-active .modal-container[data-v-12ed61ba]{-webkit-transform:scale(1.1);transform:scale(1.1)}.modal-header[data-v-1883e207]{background-color:#ff7052;padding:10px;font-size:20px;font-weight:700;cursor:move}.modal-body[data-v-1883e207]{padding:10px;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:end;-ms-flex-pack:end;justify-content:flex-end}button[data-v-1883e207]:first-of-type{margin-right:10px}.modal-header[data-v-0602c2e6]{background-color:#ff7052;padding:10px;font-size:20px;font-weight:700;cursor:move}.modal-body[data-v-0602c2e6]{padding:10px;padding-bottom:0;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}.modal-footer[data-v-0602c2e6]{padding-top:0;padding:10px;text-align:right}[v-cloak],[v-cloak] *{display:none}body,html{padding:0;margin:0;width:100%;height:100%;background:url(/static/img/login_background.png) repeat fixed;font-family:Open Sans,sans-serif}#AssetManager{width:100%;height:100%;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}#titlebar{padding:15px;margin:10px;font-size:30px;font-weight:700;background-color:#ff7052;color:#fff;text-align:center;border:1px solid #000;-webkit-box-shadow:2px 2px grey;box-shadow:2px 2px grey}#main{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;height:100%}#asset-details,#assets{background-color:#fff;border:1px solid #000;margin:10px;position:relative;padding-top:45px;padding-bottom:45px;-webkit-box-shadow:3px 3px grey;box-shadow:3px 3px grey}#assets{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1}#asset-details{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;padding:15px;max-width:50%;overflow:scroll}#asset-details img{width:100%}#breadcrumbs{position:absolute;left:0;top:0;display:-webkit-box;display:-ms-flexbox;display:flex;overflow:hidden;z-index:1;background-color:#ff7052;color:#fff;-webkit-box-align:center;-ms-flex-align:center;align-items:center;padding:5px;border-bottom-right-radius:10px}#breadcrumbs>div{position:relative;padding:10px;padding-left:20px;text-align:center}#breadcrumbs>div:first-child{padding-left:10px}#breadcrumbs div:last-child:after{content:none}#breadcrumbs div:after{content:"";position:absolute;display:inline-block;width:30px;height:30px;top:3px;right:-10px;background-color:transparent;border-top-right-radius:5px;-webkit-transform:scale(.707) rotate(45deg);transform:scale(.707) rotate(45deg);-webkit-box-shadow:1px -1px rgba(0,0,0,.25);box-shadow:1px -1px rgba(0,0,0,.25);z-index:1}#actionbar{position:absolute;right:0;top:0;padding:8px;border-bottom-left-radius:10px;background-color:#ff7052;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;color:#fff}#actionbar>div{margin:5px}#actionbar>div:hover{cursor:pointer}#explorer{position:relative;left:0;display:grid;grid-template-columns:repeat(auto-fill,minmax(105px,1fr));max-width:100%;max-height:100%;overflow:auto}.inode{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;padding:15px}.inode-selected,.inode:hover{cursor:pointer;background-color:#ff7052}.inode *{pointer-events:none}.title{word-break:break-all}#asset-detail-title{font-weight:700;font-size:30px;border-bottom:2px solid #000;margin-bottom:15px;text-align:center}[data-v-bc30fc14]{-ms-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box;margin:0;padding:0;border:0}form[data-v-bc30fc14]{position:relative;top:50%;width:250px;display:table;margin:-150px auto 0 auto;background:#fff;border-radius:4px}.legend[data-v-bc30fc14]{position:relative;text-align:center;width:100%;display:block;background:#ff7052;padding:15px;color:#fff;font-size:20px}.legend[data-v-bc30fc14]:after{content:"";opacity:.06;top:0;left:0;bottom:0;right:0;position:absolute}.input[data-v-bc30fc14]{position:relative;width:90%;margin:15px auto}.input span[data-v-bc30fc14]{position:absolute;display:block;color:#d4d4d4;left:10px;top:8px;font-size:20px}.input input[data-v-bc30fc14]{width:100%;padding:10px 5px 10px 40px;display:block;border:1px solid #ededed;border-radius:4px;-webkit-transition:.2s ease-out;transition:.2s ease-out;color:#a1a1a1}.input input[data-v-bc30fc14]:focus{padding:10px 5px 10px 10px;outline:0;border-color:#ff7052}.submit[data-v-bc30fc14]{width:45px;height:45px;display:block;margin:0 auto -15px auto;background:#fff;border-radius:100%;border:1px solid #ff7052;color:#ff7052;font-size:24px;cursor:pointer;-webkit-box-shadow:0 0 0 7px #fff;box-shadow:0 0 0 7px #fff;-webkit-transition:.2s ease-out;transition:.2s ease-out}.submit[data-v-bc30fc14]:focus,.submit[data-v-bc30fc14]:hover{background:#ff7052;color:#fff;outline:0}.feedback[data-v-bc30fc14]{position:absolute;bottom:-70px;width:100%;text-align:center;color:#fff;background:#c71585;padding:10px 0;font-size:12px}.feedback[data-v-bc30fc14]:before{bottom:100%;left:50%;border:solid transparent;content:"";height:0;width:0;position:absolute;pointer-events:none;border-color:rgba(46,204,113,0);border-bottom-color:#c71585;border-width:10px;margin-left:-10px}[data-v-61eb1455]{-ms-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box;margin:0;padding:0;border:0}a[data-v-61eb1455]{text-decoration:inherit;color:inherit;width:100%;display:block;text-align:center;border:1px solid #ff7052}a[data-v-61eb1455]:hover{background-color:#ff7052;color:#fff}a[data-v-61eb1455]:first-child{border-radius:10px 10px 0 0}a[data-v-61eb1455]:last-child{border-radius:0 0 10px 10px}a[data-v-61eb1455]:only-child{border-radius:10px}#formcontainer[data-v-61eb1455]{margin:auto}form[data-v-61eb1455]{background:#fff;border-radius:4px}.legend[data-v-61eb1455]{position:relative;text-align:center;width:100%;display:block;background:#ff7052;padding:15px;color:#fff;font-size:20px}.legend[data-v-61eb1455]:after{content:"";opacity:.06;top:0;left:0;bottom:0;right:0;position:absolute}#account-options[data-v-61eb1455]{display:-webkit-box;display:-ms-flexbox;display:flex;background:#fff;border-radius:4px;margin-top:50px;height:45px}#account-options form[data-v-61eb1455]{background:none;border-radius:0;width:50%}.input[data-v-61eb1455]{position:relative;width:90%;margin:15px auto}.input span[data-v-61eb1455]{position:absolute;display:block;color:#d4d4d4;left:10px;top:8px;font-size:20px}.input input[data-v-61eb1455]{width:100%;padding:10px 5px 10px 40px;display:block;border:1px solid #ededed;border-radius:4px;-webkit-transition:.2s ease-out;transition:.2s ease-out;color:#a1a1a1}.input input[data-v-61eb1455]:focus{outline:0;border-color:#ff7052}.submit[data-v-61eb1455]{width:45px;height:45px;display:block;margin:0 auto -15px auto;background:#fff;border-radius:100%;border:1px solid #ff7052;color:#ff7052;font-size:24px;cursor:pointer;-webkit-box-shadow:0 0 0 7px #fff;box-shadow:0 0 0 7px #fff;-webkit-transition:.2s ease-out;transition:.2s ease-out}.submit[data-v-61eb1455]:focus,.submit[data-v-61eb1455]:hover{background:#ff7052;color:#fff;outline:0}.feedback[data-v-61eb1455]{position:absolute;bottom:-70px;width:100%;text-align:center;color:#fff;background:#c71585;padding:10px 0;font-size:12px}.feedback[data-v-61eb1455]:before{bottom:100%;left:50%;border:solid transparent;content:"";height:0;width:0;position:absolute;pointer-events:none;border-color:rgba(46,204,113,0);border-bottom-color:#c71585;border-width:10px;margin-left:-10px}h4[data-v-61eb1455]{background-color:#fff;width:100%;text-align:center;border-bottom:1px solid #000;line-height:.1em}h4 span[data-v-61eb1455]{background:#fff;padding:0 10px}.modal-header[data-v-af4dc61a]{background-color:#ff7052;padding:10px;font-size:20px;font-weight:700;cursor:move}.header-close[data-v-af4dc61a]{position:absolute;top:5px;right:5px}.modal-body[data-v-af4dc61a]{padding:10px}#initiative-list[data-v-af4dc61a]{padding:0;-webkit-box-orient:vertical;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:end;-ms-flex-align:end;align-items:flex-end}#initiative-list[data-v-af4dc61a],.initiative-actor[data-v-af4dc61a]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-direction:normal}.initiative-actor[data-v-af4dc61a]{-webkit-box-orient:horizontal;-ms-flex-direction:row;flex-direction:row;-webkit-box-pack:end;-ms-flex-pack:end;justify-content:flex-end;-webkit-box-align:center;-ms-flex-align:center;align-items:center;padding:2px 5px;margin-bottom:2px;border-radius:5px;border:2px solid transparent}.initiative-selected[data-v-af4dc61a]{border:2px solid #82c8a0;background-color:#82c8a0}.initiative-actor:hover+.initiative-effect[data-v-af4dc61a],.initiative-effect[data-v-af4dc61a]:hover,.initiative-selected+.initiative-effect[data-v-af4dc61a]{display:-webkit-box;display:-ms-flexbox;display:flex;border-color:rgba(130,200,160,.6);background-color:rgba(130,200,160,.6)}.initiative-actor[data-v-af4dc61a]:hover{border:2px solid #82c8a0}.initiative-actor>[data-v-af4dc61a]{width:30px;margin-left:2px}.initiative-effect[data-v-af4dc61a]{display:none;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;width:-moz-fit-content;width:-webkit-fit-content;width:fit-content;margin-right:5px;margin-top:-2px;margin-bottom:5px;padding:2px;border:2px solid transparent;border-bottom-left-radius:5px;border-bottom-right-radius:5px;border-top:none}.initiative-effect>[data-v-af4dc61a]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-pack:end;-ms-flex-pack:end;justify-content:flex-end}.initiative-effect>*>[data-v-af4dc61a]{border:none;background-color:inherit;text-align:right;margin-left:20px;min-width:10px}.initiative-effect>*>[data-v-af4dc61a]:first-child{margin-left:0}#initiative-bar[data-v-af4dc61a]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;-webkit-box-align:center;-ms-flex-align:center;align-items:center;margin-right:10px;margin-left:10px;margin-top:10px;margin-bottom:-10px;padding:2px}.initiative-bar-button[data-v-af4dc61a]{border:2px solid #82c8a0;border-radius:5px;padding:5px}.initiative-bar-button[data-v-af4dc61a]:hover{color:#fff;background-color:#82c8a0;cursor:pointer}abbr[data-v-4697341e]{text-decoration:none}.scroll[data-v-4697341e]{max-height:20em;overflow-y:auto}.modal-header[data-v-4697341e]{background-color:#ff7052;padding:10px;font-size:20px;font-weight:700;cursor:move}.header-close[data-v-4697341e]{position:absolute;top:5px;right:5px}.modal-body[data-v-4697341e]{padding:10px;max-width:450px}.separator[data-v-4697341e]{line-height:.1em;margin:7px 0}.separator[data-v-4697341e]:after{position:absolute;left:10px;right:10px;border-bottom:1px solid #000;content:""}.spanrow[data-v-4697341e]{grid-column:start/end}.lower-opacity>[data-v-4697341e]{opacity:.3}.grid[data-v-4697341e]{display:grid;grid-template-columns:[start] 50px [name] 1fr [visible] 30px [remove] 30px [end];grid-row-gap:5px;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.grid>[data-v-4697341e]{text-align:center}.name[data-v-4697341e]{text-align:left!important}.row[data-v-4697341e]{display:contents}.row>[data-v-4697341e]{padding:5px;height:20px;border:1px solid transparent}.row:hover>[data-v-4697341e]{cursor:pointer;border-top:1px solid #ff7052;border-bottom:1px solid #ff7052;background-color:rgba(0,0,0,.2)}.row:hover>[data-v-4697341e]:first-child{border-left:1px solid #ff7052;border-top-left-radius:10px;border-bottom-left-radius:10px}.row:hover>[data-v-4697341e]:last-child{border-right:1px solid #ff7052;border-top-right-radius:10px;border-bottom-right-radius:10px}#no-labels[data-v-4697341e]{grid-column:start/end;font-style:italic;padding-left:50px}#addLabelButton[data-v-4697341e]{grid-column:visible/end}.outer[data-v-d32461a4]{padding:5px;border:1px solid #000;border-radius:3px;cursor:pointer;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.current-color[data-v-d32461a4]{width:13px;height:13px;background-color:#000;border:1px solid #000}.mask[data-v-d32461a4]{position:fixed;z-index:9998;top:0;left:0;width:100%;height:100%}.preview[data-v-6d718094]{position:fixed;z-index:50;left:200px;top:0}.asset-preview-image[data-v-6d718094]{width:100%;max-width:250px}.draggable[data-v-6d718094]{list-style:none;font-family:helvetica}.token[data-v-6d718094]{padding-top:5px;padding-bottom:5px;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start}.token img[data-v-6d718094]{margin-right:5px}.token svg[data-v-6d718094]{margin-left:auto}.folder>[data-v-6d718094]{display:none}.directory>.file[data-v-6d718094],.directory>.folder[data-v-6d718094]{display:block}.folder[data-v-6d718094]:hover{font-weight:700;cursor:pointer}.folder:hover>[data-v-6d718094]{font-weight:400}.folder>[data-v-aaf3f05e]{display:none}.directory>.file[data-v-aaf3f05e],.directory>.folder[data-v-aaf3f05e]{display:block}.folder[data-v-aaf3f05e]:hover{font-weight:700;cursor:pointer}.folder:hover>[data-v-aaf3f05e]{font-weight:400}#menuContainer[data-v-aaf3f05e]{position:absolute;z-index:20;top:0;left:0;height:100%;width:100%;pointer-events:none}#menu[data-v-aaf3f05e]{height:100%;max-width:200px}#locations-menu[data-v-aaf3f05e],#menu[data-v-aaf3f05e]{position:absolute;top:0;left:0;z-index:21;background-color:#fa5a5a;overflow:auto;pointer-events:auto}#locations-menu[data-v-aaf3f05e]{max-height:100px;width:100%}#locations-menu>div[data-v-aaf3f05e]{display:-webkit-box;display:-ms-flexbox;display:flex;width:100%;height:100%}#locations-menu>div>div[data-v-aaf3f05e]{background-color:#fff;text-align:center;line-height:100px;width:100px;border-right:1px solid #82c8a0}#locations-menu>div>div[data-v-aaf3f05e]:hover{cursor:pointer;background-color:#82c8a0}.actionButton[data-v-aaf3f05e]{position:absolute;right:0;margin:5px;margin-right:10px;padding:0}.accordion[data-v-aaf3f05e]{background-color:#eee;color:#444;cursor:pointer;padding:18px;text-align:left;border:none;outline:none;-webkit-transition:.4s;transition:.4s;border-top:1px solid #82c8a0;width:100%;width:-moz-available;width:-webkit-fill-available;width:stretch}.accordion-active[data-v-aaf3f05e],.accordion[data-v-aaf3f05e]:hover{background-color:#82c8a0}.accordion-panel[data-v-aaf3f05e]{background-color:#fff;display:none;overflow:hidden;min-height:2em}.accordion-subpanel[data-v-aaf3f05e]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;width:100%}.accordion-subpanel>[data-v-aaf3f05e]{padding:5px;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:space-evenly;-ms-flex-pack:space-evenly;justify-content:space-evenly;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.accordion-subpanel>[data-v-aaf3f05e]:hover{background-color:#82c8a0}#exitButton[data-v-aaf3f05e]{position:fixed;bottom:0;width:100%}#radialmenu[data-v-aaf3f05e]{position:absolute;z-index:20;width:0;height:0;pointer-events:auto}.rm-list-dm #rm-locations svg[data-v-aaf3f05e]{margin-left:50px}.rm-list-dm #rm-settings svg[data-v-aaf3f05e]{margin-bottom:50px}.rm-wrapper[data-v-aaf3f05e]{position:relative;width:200px;height:200px;top:-100px;left:-100px}.rm-wrapper .rm-topper[data-v-aaf3f05e]{pointer-events:none;text-align:center;line-height:50px;font-size:25px}.rm-wrapper .rm-toggler[data-v-aaf3f05e],.rm-wrapper .rm-topper[data-v-aaf3f05e]{display:block;position:absolute;width:50px;height:50px;left:50%;top:50%;margin-left:-25px;margin-top:-25px;background:#fa5a5a;color:#fff;border-radius:50%}.rm-wrapper .rm-toggler .rm-list[data-v-aaf3f05e],.rm-wrapper .rm-topper .rm-list[data-v-aaf3f05e]{opacity:.5;list-style:none;padding:0;width:200px;height:200px;overflow:hidden;display:block;border-radius:50%;-webkit-transform:rotate(180deg);transform:rotate(180deg);-webkit-box-shadow:0 0 10px 0 rgba(0,0,0,.2);box-shadow:0 0 10px 0 rgba(0,0,0,.2);margin:-75px 0 0 -75px}.rm-list-dm[data-v-aaf3f05e]{-webkit-transform:rotate(135deg)!important;transform:rotate(135deg)!important}.rm-wrapper .rm-toggler:hover .rm-list[data-v-aaf3f05e],.rm-wrapper .rm-topper:hover .rm-list[data-v-aaf3f05e]{opacity:1}.rm-wrapper .rm-toggler .rm-list .rm-item[data-v-aaf3f05e],.rm-wrapper .rm-topper .rm-list .rm-item[data-v-aaf3f05e]{display:table;width:50%;height:50%;float:left;text-align:center;-webkit-box-shadow:inset 0 0 2px 0 rgba(0,0,0,.2);box-shadow:inset 0 0 2px 0 rgba(0,0,0,.2);background-color:#fff}.rm-wrapper .rm-toggler .rm-list .rm-item[data-v-aaf3f05e]:hover,.rm-wrapper .rm-topper .rm-list .rm-item[data-v-aaf3f05e]:hover{background-color:#82c8a0}.rm-wrapper .rm-toggler .rm-list .rm-item:hover a[data-v-aaf3f05e],.rm-wrapper .rm-topper .rm-list .rm-item:hover a[data-v-aaf3f05e]{color:#fff}.rm-wrapper .rm-toggler .rm-list .rm-item a[data-v-aaf3f05e],.rm-wrapper .rm-topper .rm-list .rm-item a[data-v-aaf3f05e]{display:table-cell;vertical-align:middle;-webkit-transform:rotate(-45deg);transform:rotate(-45deg);text-decoration:none;font-size:25px;color:#82c8a0;border:none;outline:none}.settings-enter-active[data-v-aaf3f05e],.settings-leave-active[data-v-aaf3f05e]{-webkit-transition:width .5s;transition:width .5s}.settings-enter[data-v-aaf3f05e],.settings-leave-to[data-v-aaf3f05e]{width:0}.settings-enter-to[data-v-aaf3f05e],.settings-leave[data-v-aaf3f05e]{width:200px}.locations-enter-active[data-v-aaf3f05e],.locations-leave-active[data-v-aaf3f05e]{-webkit-transition:height .5s;transition:height .5s}.locations-enter[data-v-aaf3f05e],.locations-leave-to[data-v-aaf3f05e]{height:0}.locations-enter-to[data-v-aaf3f05e],.locations-leave[data-v-aaf3f05e]{height:100px}.modal-header[data-v-7a3669fd]{background-color:#ff7052;padding:10px;font-size:20px;font-weight:700;cursor:move}.modal-header>input[data-v-7a3669fd]{background-color:inherit;border:none;font-weight:700;font-size:large}.header-close[data-v-7a3669fd]{position:absolute;top:5px;right:5px}.modal-body[data-v-7a3669fd]{padding:10px}.modal-body>textarea[data-v-7a3669fd]{width:100%;min-height:100px;max-height:500px}.modal-footer[data-v-7a3669fd]{padding-top:0;padding:10px;text-align:right}.modal-header[data-v-23de098e]{background-color:#ff7052;padding:10px;font-size:20px;font-weight:700;cursor:move}.header-close[data-v-23de098e]{position:absolute;top:5px;right:5px}.modal-body[data-v-23de098e]{padding:10px;max-width:450px}.grid[data-v-23de098e]{display:grid;grid-template-columns:[name] 1fr [numerator] 30px [slash] 5px [denominator] 30px [colour] 40px [visible] 30px [light] 30px [remove] 30px [end];grid-column-gap:5px}.colours[data-v-23de098e],.grid[data-v-23de098e]{-webkit-box-align:center;-ms-flex-align:center;align-items:center}.colours[data-v-23de098e]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}.header[data-v-23de098e]{line-height:.1em;margin:20px 0 15px}.header[data-v-23de098e]:after{position:absolute;right:5px;width:75%;border-bottom:1px solid #000;content:""}.spanrow[data-v-23de098e]{grid-column:1/end}#labels[data-v-23de098e]{-ms-flex-wrap:wrap;flex-wrap:wrap}.label[data-v-23de098e]{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;position:relative;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-align:center;-ms-flex-align:center;align-items:center;background-color:#fff;font-size:13px;margin:5px}.label:hover>.label-main[data-v-23de098e]:before{content:"\D7";position:absolute;color:red;font-size:20px;font-weight:700;cursor:pointer;top:-8px;right:-4px;pointer-events:auto}#label-add:hover>.label-main[data-v-23de098e]{pointer-events:auto;cursor:pointer;color:#fff;font-weight:700;background-color:#ff7052}#label-add:hover>.label-main[data-v-23de098e]:before{content:""}.label-user[data-v-23de098e]{border-top-left-radius:10px;border-bottom-left-radius:10px;background-color:#ff7052;border:1px solid #ff7052;padding:5px}.label-main[data-v-23de098e]{border:1px solid #ff7052;border-radius:10px;padding:5px;pointer-events:none}.label-user+.label-main[data-v-23de098e]{border-top-left-radius:0;border-bottom-left-radius:0}input[type=checkbox][data-v-23de098e]{width:16px;height:23px;margin:0 8px 0 8px;white-space:nowrap;display:inline-block}#selection-menu[data-v-674cf937]{position:absolute;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;top:75px;right:0;z-index:10;opacity:.5;border-top-left-radius:5px;border-bottom-left-radius:5px;border:1px solid #82c8a0;border-right:none;padding:10px 35px 10px 10px;background-color:#eee}#selection-menu[data-v-674cf937]:hover{background-color:#82c8a0;opacity:1}#selection-edit-button[data-v-674cf937]{position:absolute;right:10px;top:10px;cursor:pointer}#selection-auras[data-v-674cf937],#selection-trackers[data-v-674cf937]{display:grid;grid-template-columns:[name] 1fr [value] 1fr}.selection-aura-value[data-v-674cf937],.selection-tracker-value[data-v-674cf937]{justify-self:center;padding:2px}.selection-aura-value[data-v-674cf937]:hover,.selection-tracker-value[data-v-674cf937]:hover{cursor:pointer;background-color:rgba(20,20,20,.2)}#selection-name[data-v-674cf937]{font-size:20px;font-weight:700;margin-bottom:10px}.ContextMenu ul[data-v-759e5a8a]{border:1px solid #82c8a0}.ContextMenu ul li[data-v-759e5a8a]{border-bottom:1px solid #82c8a0}.ContextMenu ul li[data-v-759e5a8a]:hover{background-color:#82c8a0}canvas[data-v-73816298]{grid-column:label/end;justify-self:center}.modal-header[data-v-73816298]{background-color:#ff7052;padding:10px;font-size:20px;font-weight:700;cursor:move}.modal-body[data-v-73816298]{padding:10px;display:grid;grid-template-columns:[label] 1fr [value] 2fr [end];grid-row-gap:10px;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.modal-footer[data-v-73816298]{padding-top:0;padding:10px;text-align:right}.colours[data-v-73816298]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}.tool-detail{position:absolute;right:var(--detailRight);bottom:80px;z-index:11;border:1px solid #2b2b2b;background-color:#fff;display:grid;padding:10px;grid-template-columns:auto auto;grid-column-gap:5px;grid-row-gap:2px}.tool-detail:after{content:"";position:absolute;right:var(--detailArrow);bottom:0;width:0;height:0;border:14px solid transparent;border-top-color:#000;border-bottom:0;margin-left:-14px;margin-bottom:-14px}.tool-detail input{width:100%;-webkit-box-sizing:border-box;box-sizing:border-box}.option[data-v-639cd890]{padding:6px;border:1px solid #82c8a0;border-radius:0;-webkit-box-flex:1;-ms-flex:1 1;flex:1 1;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;font-size:13px;min-width:25px}.option-selected[data-v-639cd890],.option[data-v-639cd890]:hover{background-color:#82c8a0}.selectgroup[data-v-639cd890]{display:-webkit-box;display:-ms-flexbox;display:flex}.selectgroup>.option[data-v-639cd890]:first-of-type{border-top-left-radius:10px;border-bottom-left-radius:10px}.selectgroup>.option[data-v-639cd890]:last-of-type{border-top-right-radius:10px;border-bottom-right-radius:10px}.accordion[data-v-0bf2b7ba]{border:2px solid #ff7052;-webkit-user-select:none!important;-moz-user-select:none!important;-ms-user-select:none!important;user-select:none!important;-webkit-user-drag:none!important}#header[data-v-0bf2b7ba]{background-color:#ff7052;cursor:pointer;padding:.5em;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start;-webkit-box-align:center;-ms-flex-align:center;align-items:center}[type=checkbox][data-v-0bf2b7ba]{width:-webkit-min-content;width:-moz-min-content;width:min-content;margin-right:10px}#body[data-v-0bf2b7ba]{padding:.3em;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}#body[data-v-0bf2b7ba],.item[data-v-0bf2b7ba]{display:-webkit-box;display:-ms-flexbox;display:flex}.item[data-v-0bf2b7ba]{padding:.2em;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.item[data-v-0bf2b7ba]:hover{background-color:#ff7052;cursor:pointer}.accordion{margin-bottom:.2em}.accordion:last-of-type{margin-bottom:0}.tool-detail{display:block}#accordion-container[data-v-847e7ec4]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch;overflow-y:auto;max-height:25em}.ContextMenu ul[data-v-44a31e42]{border:1px solid #82c8a0}.ContextMenu ul li[data-v-44a31e42]{border-bottom:1px solid #82c8a0}.ContextMenu ul li[data-v-44a31e42]:hover{background-color:#82c8a0}#toolselect[data-v-cf33581e]{position:absolute;bottom:25px;right:25px;z-index:10}#toolselect [data-v-cf33581e]{-webkit-user-select:none!important;-moz-user-select:none!important;-ms-user-select:none!important;user-select:none!important;-webkit-user-drag:none!important}#toolselect>ul[data-v-cf33581e]{display:-webkit-box;display:-ms-flexbox;display:flex;list-style:none;padding:0;margin:0;border:1px solid #82c8a0;border-radius:7px}#toolselect>ul>li[data-v-cf33581e]{display:-webkit-box;display:-ms-flexbox;display:flex;background-color:#eee;border-right:1px solid #82c8a0}#toolselect>ul>li[data-v-cf33581e]:last-child{border-right:none;border-radius:0 4px 4px 0}#toolselect>ul>li[data-v-cf33581e]:first-child{border-radius:4px 0 0 4px}#toolselect>ul>li[data-v-cf33581e]:hover{background-color:#82c8a0}#toolselect>ul>li a[data-v-cf33581e]{display:-webkit-box;display:-ms-flexbox;display:flex;padding:10px;text-decoration:none}#toolselect .tool-selected[data-v-cf33581e]{background-color:#82c8a0}a,a:active,a:hover,a:visited{color:inherit}svg{cursor:pointer}.notAllowed,.notAllowed>*{cursor:not-allowed!important}#layers,#layers canvas{width:100%;height:100%;position:absolute;left:0;top:0;overflow:hidden}#main[data-v-05b88da7]{display:-webkit-box;display:-ms-flexbox;display:flex;width:100%;height:100%}#board[data-v-05b88da7]{position:relative;width:100%;height:100%}#layerselect[data-v-05b88da7]{position:absolute;bottom:25px;left:25px;z-index:10}#layerselect [data-v-05b88da7]{-webkit-user-select:none!important;-moz-user-select:none!important;-ms-user-select:none!important;user-select:none!important;-webkit-user-drag:none!important}#layerselect ul[data-v-05b88da7]{display:-webkit-box;display:-ms-flexbox;display:flex;list-style:none;padding:0;margin:0;border:1px solid #82c8a0;border-radius:6px}#layerselect li[data-v-05b88da7]{display:-webkit-box;display:-ms-flexbox;display:flex;background-color:#eee;border-right:1px solid #82c8a0}#layerselect li[data-v-05b88da7]:first-child{border-radius:4px 0 0 4px}#layerselect li[data-v-05b88da7]:last-child{border-right:none;border-radius:0 4px 4px 0}#layerselect li[data-v-05b88da7]:hover{background-color:#82c8a0}#layerselect li a[data-v-05b88da7]{display:-webkit-box;display:-ms-flexbox;display:flex;padding:10px;text-decoration:none}#layerselect .layer-selected[data-v-05b88da7]{background-color:#82c8a0}#zoomer[data-v-05b88da7]{position:absolute;top:15px;right:25px;z-index:11}#FPS[data-v-05b88da7]{position:absolute;top:0;right:75px;z-index:11;color:#fff} \ No newline at end of file diff --git a/server/static/js/app-legacy.41dd580f.js b/server/static/js/app-legacy.41dd580f.js deleted file mode 100644 index b07349894..000000000 --- a/server/static/js/app-legacy.41dd580f.js +++ /dev/null @@ -1,2 +0,0 @@ -(function(e){function t(t){for(var s,r,a=t[0],l=t[1],c=t[2],d=0,h=[];de.fillText(t.text,t.x,t.y)),e.restore()}contains(e){return!1}center(e){}visibleInCanvas(e){return this.getBoundingBox().visibleInCanvas(e)}snapToGrid(){}resizeToGrid(){}resize(e,t){}getMaxHeight(e){const t=this.getLines(e),i=30;return i*t.length}getMaxWidth(e){const t=this.getLines(e),i=t.map(t=>e.measureText(t.text).width);return Math.max(...i)}getLines(e){const t=this.text.split("\n"),i=[],s=e.canvas.width,n=30,o=0;let r=0;for(const a of t){let t="";const l=a.split(" ");for(const a of l){const l=t+a+" ",c=e.measureText(l),u=c.width;u>s?(e.fillText(t,o,r),i.push({text:t,x:o,y:r}),t=a+" ",r+=n):t=l}i.push({text:t,x:o,y:r}),r+=n}return i}}t.Text=r},"01be":function(e,t,i){"use strict";var s=i("919a"),n=i.n(s);n.a},"033f":function(e,t,i){"use strict";i.r(t);var s=i("a1f4"),n=i("a68b");for(var o in n)"default"!==o&&function(e){i.d(t,e,function(){return n[e]})}(o);i("7997");var r=i("2877"),a=Object(r["a"])(n["default"],s["a"],s["b"],!1,null,"759e5a8a",null);a.options.__file="shapecontext.vue",t["default"]=a.exports},"034f":function(e,t,i){"use strict";var s=i("64a9"),n=i.n(s);n.a},"0584":function(e,t,i){"use strict";var s=i("de21"),n=i.n(s);n.a},"0634":function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0});const s=i("9ab4"),n=s.__importDefault(i("66cb")),o=s.__importDefault(i("a026")),r=s.__importDefault(i("65d9")),a=i("c345a"),l=i("60a3");let c=class extends o.default{constructor(){super(...arguments),this.display=!1,this.left=0,this.top=0,this.transparent=!1}mounted(){this.transparent=0===this.$refs.chromePicker.val.rgba.a,this.setPosition()}open(){this.display||this.disabled||(this.setPosition(),this.display=!0,this.$nextTick(()=>this.$children[0].$el.focus()))}updateColor(e){this.transparent=0===e.rgba.a;const t=n.default(e.rgba).toRgbString();this.$emit("update:color",t),this.$emit("input",t)}closePicker(){this.display=!1,this.$emit("change",this.color)}setPosition(){const e=this.$el.getBoundingClientRect();e.right+224>window.innerWidth?this.left=e.left-224:this.left=e.right,e.bottom+242>window.innerHeight?this.top=e.top-242:this.top=e.bottom}};s.__decorate([l.Prop(String)],c.prototype,"color",void 0),s.__decorate([l.Prop(Boolean)],c.prototype,"disabled",void 0),c=s.__decorate([r.default({components:{"chrome-picker":a.Chrome}})],c),t.default=c},"07f5":function(e,t,i){"use strict";i.r(t);var s=i("412c"),n=i("d588");for(var o in n)"default"!==o&&function(e){i.d(t,e,function(){return n[e]})}(o);i("561b"),i("b62e");var r=i("2877"),a=Object(r["a"])(n["default"],s["a"],s["b"],!1,null,"05b88da7",null);a.options.__file="game.vue",t["default"]=a.exports},"0a75":function(e,t,i){},"0b13":function(e,t,i){},"0bc6":function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0});const s=i("9ab4"),n=s.__importDefault(i("8055"));function o(e){t.socket.io.opts.query=`user=${e.params.creator}&room=${e.params.room}`,t.socket.connect()}t.socket=n.default(location.protocol+"//"+location.host+"/planarally",{autoConnect:!1}),t.createConnection=o},"0cf7":function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0});const s=i("9ab4"),n=s.__importDefault(i("a026")),o=s.__importDefault(i("65d9")),r=s.__importDefault(i("4aec")),a=s.__importDefault(i("a535")),l=s.__importDefault(i("cec2")),c=i("5338"),u=i("2d5b"),d=i("4a5b");let h=class extends n.default{constructor(){super(...arguments),this.path=[],this.draggingSelection=!1}get folders(){return u.assetStore.folders}get files(){return u.assetStore.files}get selected(){return u.assetStore.selected}get idMap(){return u.assetStore.idMap}get currentFolder(){return this.path.length?this.path[this.path.length-1]:u.assetStore.root}get parentFolder(){let e=this.path[this.path.length-2];return void 0===e&&(e=u.assetStore.root),e}get firstSelectedFile(){for(const e of u.assetStore.selected)if(u.assetStore.idMap.get(e).file_hash)return u.assetStore.idMap.get(e);return null}changeDirectory(e){e<0?this.path.pop():this.path.push(e),u.assetStore.clearSelected(),c.socket.emit("Folder.Get",this.currentFolder)}createDirectory(){const e=window.prompt("New folder name");null!==e&&c.socket.emit("Folder.Create",{name:e,parent:this.currentFolder})}moveInode(e,t){u.assetStore.files.includes(e)?u.assetStore.files.splice(u.assetStore.files.indexOf(e),1):u.assetStore.folders.splice(u.assetStore.folders.indexOf(e),1),u.assetStore.idMap.delete(e),c.socket.emit("Inode.Move",{inode:e,target:t})}select(e,t){if(e.shiftKey&&u.assetStore.selected.length>0){const e=[...u.assetStore.files,...u.assetStore.folders],i=e.indexOf(u.assetStore.selected[u.assetStore.selected.length-1]),s=e.indexOf(t);for(let t=i;t!==s;i0&&this.upload(e.dataTransfer.files,t);this.draggingSelection=!1}prepareUpload(){document.getElementById("files").click()}upload(e,t){const i=document.getElementById("files").files;if(void 0===e){if(!i)return;e=i}void 0===t&&(t=this.currentFolder);const s=1e5;for(const n of e){const e=d.uuidv4(),i=Math.ceil(n.size/s);for(let o=0;o{c.socket.emit("Asset.Upload",{name:n.name,directory:t,data:r.result,slice:o,totalSlices:i,uuid:e})})}}}};h=s.__decorate([o.default({components:{Prompt:l.default,ConfirmDialog:a.default,AssetContextMenu:r.default},beforeRouteEnter(e,t,i){c.socket.connect(),i()},beforeRouteLeave(e,t,i){c.socket.disconnect(),i()}})],h),t.default=h},"0ddd":function(e,t,i){"use strict";i.r(t);var s=i("8f54"),n=i("4bc3");for(var o in n)"default"!==o&&function(e){i.d(t,e,function(){return n[e]})}(o);i("9dd4");var r=i("2877"),a=Object(r["a"])(n["default"],s["a"],s["b"],!1,null,"6d718094",null);a.options.__file="asset_node.vue",t["default"]=a.exports},1:function(e,t){},"104d":function(e,t,i){"use strict";var s=i("5722"),n=i.n(s);n.a},1077:function(e,t,i){"use strict";i.r(t);var s=i("f994"),n=i("1eee");for(var o in n)"default"!==o&&function(e){i.d(t,e,function(){return n[e]})}(o);i("3cd3");var r=i("2877"),a=Object(r["a"])(n["default"],s["a"],s["b"],!1,null,"bc30fc14",null);a.options.__file="login.vue",t["default"]=a.exports},1216:function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0});const s=i("6f92"),n=i("92b1"),o=i("98ef"),r=i("4aee");function a(e,t){const i=s.layerManager.getLayer("draw");if(void 0===i)return;const o=i.ctx;o.lineJoin="round",o.lineJoin="round",o.beginPath(),o.strokeStyle=void 0===t?`rgb(${255*Math.random()}, ${255*Math.random()}, ${255*Math.random()})`:t,o.moveTo(n.g2lx(e[0][0]),n.g2ly(e[0][1]));for(const s of e)o.lineTo(n.g2lx(s[0]),n.g2ly(s[1]));o.closePath(),o.stroke()}function l(e,t){const i=s.layerManager.getLayer("draw");if(void 0===i)return;const n=i.ctx;n.lineJoin="round",n.lineJoin="round",n.beginPath(),n.strokeStyle=void 0===t?`rgb(${255*Math.random()}, ${255*Math.random()}, ${255*Math.random()})`:t,n.moveTo(e[0][0],e[0][1]);for(const s of e)n.lineTo(s[0],s[1]);n.closePath(),n.stroke()}function c(e,t){return t?e:n.g2lx(e)}function u(e,t){return t?e:n.g2ly(e)}t.drawPolygon=a,t.drawPolygonL=l;let d=0,h=0;function f(e,t,i,s,n){e.beginPath(),e.strokeStyle=s?"rgba(255, 0, 0, 0.30)":"rgba(0, 0, 0, 0.30)",e.moveTo(c(t[0],n),u(t[1],n)),e.lineTo(c(i[0],n),u(i[1],n)),e.closePath(),e.stroke()}function p(e,t=!0,i=!0,n=0){d=0,h=0;let a=0;const l=s.layerManager.getLayer("draw");if(void 0===l)return;const p=l.ctx;i&&p.clearRect(0,0,2e3,1e3),p.lineJoin="round",p.lineJoin="round";const g=new o.EdgeIterator(e);while(g.valid)g.next(),g.collect();g.collect();do{const e=g.edge.first.vertices[r.ccw(g.edge.second)].point,t=g.edge.first.vertices[r.cw(g.edge.second)].point;if(n>0){if(e[0]===-1/0||t[0]===-1/0){g.next();continue}h++,g.edge.first.constraints[g.edge.second]?(d++,2===n&&console.log(`Edge: (*) ${e} > ${t}`)):2===n&&console.log(`Edge: ${e} > ${t}`)}do{g.next(),g.collect()}while(g.valid)}while(null!==g.pos);for(const s of e.triangles){if(s.isInfinite())continue;a++;const e=[];p.fillStyle="red",void 0!==s.vertices[0]&&(e.push(s.vertices[0].point),p.beginPath(),p.arc(c(s.vertices[0].point[0],t),u(s.vertices[0].point[1],t),5,0,2*Math.PI),p.closePath(),p.fill()),void 0!==s.vertices[1]&&(e.push(s.vertices[1].point),p.arc(c(s.vertices[1].point[0],t),u(s.vertices[1].point[1],t),5,0,2*Math.PI),p.closePath(),p.fill()),void 0!==s.vertices[2]&&(e.push(s.vertices[2].point),p.arc(c(s.vertices[2].point[0],t),u(s.vertices[2].point[1],t),5,0,2*Math.PI),p.closePath(),p.fill()),2===n&&console.log("[T] ",...e,s.constraints),p.moveTo(c(s.vertices[0].point[0],t),u(s.vertices[0].point[1],t)),void 0!==s.vertices[0]&&void 0!==s.vertices[1]&&f(p,s.vertices[0].point,s.vertices[1].point,s.constraints[2],t),void 0!==s.vertices[1]&&void 0!==s.vertices[2]&&f(p,s.vertices[1].point,s.vertices[2].point,s.constraints[0],t),void 0!==s.vertices[2]&&void 0!==s.vertices[0]&&f(p,s.vertices[2].point,s.vertices[0].point,s.constraints[1],t)}n>0&&(console.log(`Edges: ${d}/${h}`),console.log(`Faces: ${a}`))}window.DP=a,window.DPL=l,window.DPT=p},1289:function(e,t,i){"use strict";i.r(t);var s=i("df64"),n=i("d677");for(var o in n)"default"!==o&&function(e){i.d(t,e,function(){return n[e]})}(o);i("8790");var r=i("2877"),a=Object(r["a"])(n["default"],s["a"],s["b"],!1,null,"0bf2b7ba",null);a.options.__file="accordion.vue",t["default"]=a.exports},"12d3":function(e,t,i){"use strict";var s=i("a260"),n=i.n(s);n.a},1327:function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0});const s=i("9ab4"),n=s.__importStar(i("66cb")),o=i("4a5b"),r=i("4709"),a=i("f10f"),l=i("92b1");class c extends r.Circle{constructor(e,t,i,s,n,o,r){super(e,t,n,o,r),this.type="circulartoken",this.text=i,this.font=s}asDict(){return Object.assign(this.getBaseDict(),{radius:this.r,text:this.text,font:this.font})}fromDict(e){super.fromDict(e),this.r=e.radius,this.text=e.text,this.font=e.font}draw(e){super.draw(e),e.font=this.font,e.save();const t=l.g2l(this.center());e.textAlign="center",e.textBaseline="middle";const i=o.calcFontScale(e,this.text,l.g2lz(this.r),l.g2lz(this.r)),s=0;e.transform(i,s,-s,i,t.x,t.y),e.fillStyle=n.mostReadable(this.fillColour,["#000","#fff"]).toHexString(),e.fillText(this.text,0,0),e.restore()}getInitiativeRepr(){return{uuid:this.uuid,visible:!a.gameStore.IS_DM,group:!1,source:""===this.name||"Unknown shape"===this.name?this.text:this.name,has_img:!1,effects:[],index:1/0}}}t.CircularToken=c},1625:function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0});const s=i("8f0a"),n=i("6f92"),o=i("b2ed"),r=i("0180"),a=i("f10f"),l=i("92b1");class c{constructor(){this.shown=!1;const e=new s.GlobalPoint(0,0);this.annotationText=new r.Text(e,"","bold 20px serif",0,"rgba(230, 230, 230, 1)"),this.annotationRect=new o.Rect(e,0,0,"rgba(0, 0, 0, 0.6)")}setActiveText(e){if(void 0===this.layer){if(!n.layerManager.hasLayer("draw"))return void console.warn("There is no draw layer to draw annotations on!");this.layer=n.layerManager.getLayer("draw"),this.layer.addShape(this.annotationRect,!1),this.layer.addShape(this.annotationText,!1)}this.shown=""!==e,this.annotationText.refPoint=l.l2g(new s.LocalPoint(this.layer.canvas.width/2,50)),this.annotationText.text=e;const t=this.shown?this.annotationText.getMaxWidth(this.layer.ctx)+10:0,i=this.shown?this.annotationText.getMaxHeight(this.layer.ctx)+10:0;this.annotationRect.refPoint=l.l2g(new s.LocalPoint(this.layer.canvas.width/2-t/2,30)),this.annotationRect.w=t/a.gameStore.zoomFactor,this.annotationRect.h=i/a.gameStore.zoomFactor,this.layer.invalidate(!0)}}t.AnnotationManager=c},"19f9":function(e,t,i){"use strict";i.r(t);var s=i("45bf"),n=i("8cd4");for(var o in n)"default"!==o&&function(e){i.d(t,e,function(){return n[e]})}(o);i("c242");var r=i("2877"),a=Object(r["a"])(n["default"],s["a"],s["b"],!1,null,"aaf3f05e",null);a.options.__file="menu.vue",t["default"]=a.exports},"1c76":function(e,t,i){"use strict";i.r(t);var s=i("2c88"),n=i("300e");for(var o in n)"default"!==o&&function(e){i.d(t,e,function(){return n[e]})}(o);i("7f1e");var r=i("2877"),a=Object(r["a"])(n["default"],s["a"],s["b"],!1,null,null,null);a.options.__file="contextmenu.vue",t["default"]=a.exports},"1dd6":function(e,t,i){"use strict";i.r(t);var s=i("5ae5"),n=i.n(s);for(var o in s)"default"!==o&&function(e){i.d(t,e,function(){return s[e]})}(o);t["default"]=n.a},"1eee":function(e,t,i){"use strict";i.r(t);var s=i("d30b"),n=i.n(s);for(var o in s)"default"!==o&&function(e){i.d(t,e,function(){return s[e]})}(o);t["default"]=n.a},"206a":function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0});const s=i("8f0a"),n=i("6f92"),o=i("6c30"),r=i("4709"),a=i("1327"),l=i("5e7c"),c=i("574e"),u=i("b2ed"),d=i("0180"),h=i("e4ea");function f(e){let t;const i=new s.GlobalPoint(e.x,e.y);if("rect"===e.type_){const s=e;t=new u.Rect(i,s.width,s.height,s.fill_colour,s.stroke_colour,s.uuid)}else if("circle"===e.type_){const s=e;t=new r.Circle(i,s.radius,s.fill_colour,s.stroke_colour,s.uuid)}else if("circulartoken"===e.type_){const s=e;t=new a.CircularToken(i,s.radius,s.text,s.font,s.fill_colour,s.stroke_colour,s.uuid)}else if("line"===e.type_){const n=e;t=new l.Line(i,new s.GlobalPoint(n.x2,n.y2),n.line_width,n.stroke_colour,n.uuid)}else if("multiline"===e.type_){const n=e;t=new c.MultiLine(i,n.points.map(e=>new s.GlobalPoint(e.x,e.y)),n.line_width,n.stroke_colour,n.uuid)}else if("polygon"===e.type_){const n=e;t=new h.Polygon(i,n.vertices.map(e=>new s.GlobalPoint(e.x,e.y)),n.fill_colour,n.stroke_colour,n.uuid)}else if("text"===e.type_){const s=e;t=new d.Text(i,s.text,s.font,s.angle,s.fill_colour,s.stroke_colour,s.uuid)}else{if("assetrect"!==e.type_)return;{const s=e,r=new Image(s.width,s.height);s.src.startsWith("http")?r.src=new URL(s.src).pathname:r.src=s.src,t=new o.Asset(r,i,s.width,s.height,s.uuid),r.onload=(()=>{n.layerManager.getLayer(e.layer).invalidate(!1)})}}return t.fromDict(e),t}t.createShapeFromDict=f},"223d":function(e,t,i){"use strict";var s=i("e756"),n=i.n(s);n.a},"22bd":function(e,t,i){"use strict";var s=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("SelectContext",{ref:"selectcontext"})},n=[];i.d(t,"a",function(){return s}),i.d(t,"b",function(){return n})},2469:function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0});const s=i("9ab4"),n=s.__importDefault(i("66cb")),o=i("4a5b"),r=i("0bc6"),a=i("f312"),l=i("8f0a"),c=i("6f92"),u=i("f10f"),d=i("92b1");class h{constructor(e,t,i,s){this.fillColour="#000",this.strokeColour="rgba(0,0,0,0)",this.name="Unknown shape",this.nameVisible=!0,this.trackers=[],this.auras=[],this.labels=[],this._owners=[],this.visionObstruction=!1,this.movementObstruction=!1,this.isToken=!1,this.showHighlight=!1,this.annotation="",this.globalCompositeOperation="source-over",this.options=new Map,this._refPoint=e,this.uuid=s||o.uuidv4(),void 0!==t&&(this.fillColour=t),void 0!==i&&(this.strokeColour=i)}get refPoint(){return this._refPoint}set refPoint(e){this._refPoint=e}visibleInCanvas(e){return!1}getPointIndex(e,t=0){for(const[i,s]of this.points.entries())if(Math.abs(e.x-s[0])<=t&&Math.abs(e.y-s[1])<=t)return i;return-1}getPointOrientation(e){const t=l.GlobalPoint.fromArray(this.points[(this.points.length+e-1)%this.points.length]),i=l.GlobalPoint.fromArray(this.points[e]),s=l.GlobalPoint.fromArray(this.points[(e+1)%this.points.length]),n=s.subtract(t),o=t.add(n.multiply(.5));return i.subtract(o).normalize()}invalidate(e){const t=c.layerManager.getLayer(this.layer);t&&t.invalidate(e)}checkVisionSources(e=!0){const t=this,i=u.gameStore.visionBlockers.indexOf(this.uuid);let s=!1;this.visionObstruction&&-1===i?(u.gameStore.visionBlockers.push(this.uuid),s=!0):!this.visionObstruction&&i>=0&&(u.gameStore.visionBlockers.splice(i,1),s=!0),s&&e&&u.gameStore.recalculateVision(),this.auras.forEach(e=>{const i=u.gameStore.visionSources,s=i.findIndex(t=>t.aura===e.uuid);e.visionSource&&-1===s?i.push({shape:t.uuid,aura:e.uuid}):!e.visionSource&&s>=0&&i.splice(s,1)});for(let n=u.gameStore.visionSources.length-1;n>=0;n--){const e=u.gameStore.visionSources[n];e.shape===t.uuid&&(t.auras.some(t=>t.uuid===e.aura&&t.visionSource)||u.gameStore.visionSources.splice(n,1))}}setMovementBlock(e,t=!0){this.movementObstruction=e||!1;const i=u.gameStore.movementblockers.indexOf(this.uuid);let s=!1;this.movementObstruction&&-1===i?(u.gameStore.movementblockers.push(this.uuid),s=!0):!this.movementObstruction&&i>=0&&(u.gameStore.movementblockers.splice(i,1),s=!0),s&&t&&u.gameStore.recalculateMovement()}setIsToken(e){if(this.isToken=e,this.ownedBy()){const e=u.gameStore.ownedtokens.indexOf(this.uuid);this.isToken&&-1===e?u.gameStore.ownedtokens.push(this.uuid):!this.isToken&&e>=0&&u.gameStore.ownedtokens.splice(e,1)}}getBaseDict(){return{type_:this.type,uuid:this.uuid,x:this.refPoint.x,y:this.refPoint.y,layer:this.layer,draw_operator:this.globalCompositeOperation,movement_obstruction:this.movementObstruction,vision_obstruction:this.visionObstruction,auras:a.aurasToServer(this.auras),trackers:this.trackers,labels:this.labels,owners:this._owners,fill_colour:this.fillColour,stroke_colour:this.strokeColour,name:this.name,name_visible:this.nameVisible,annotation:this.annotation,is_token:this.isToken,options:JSON.stringify([...this.options])}}fromDict(e){this.layer=e.layer,this.globalCompositeOperation=e.draw_operator,this.movementObstruction=e.movement_obstruction,this.visionObstruction=e.vision_obstruction,this.auras=a.aurasFromServer(e.auras),this.trackers=e.trackers,this.labels=e.labels,this._owners=e.owners,this.isToken=e.is_token,this.nameVisible=e.name_visible,e.annotation&&(this.annotation=e.annotation),e.name&&(this.name=e.name),e.options&&(this.options=new Map(JSON.parse(e.options)))}draw(e){if(void 0!==this.globalCompositeOperation?e.globalCompositeOperation=this.globalCompositeOperation:e.globalCompositeOperation="source-over",this.showHighlight){const t=this.getBoundingBox();e.strokeStyle="red",e.strokeRect(d.g2lx(t.topLeft.x)-5,d.g2ly(t.topLeft.y)-5,d.g2lz(t.w)+10,d.g2lz(t.h)+10)}}drawAuras(e){for(const i of this.auras){if(0===i.value&&0===i.dim)return;e.beginPath();const s=d.g2l(this.center()),o=d.g2lr(i.value+i.dim);if(0===i.dim)e.fillStyle=i.colour;else{const t=e.createRadialGradient(s.x,s.y,d.g2lr(i.value),s.x,s.y,d.g2lr(i.value+i.dim)),o=n.default(i.colour);e.fillStyle=t,t.addColorStop(0,i.colour),t.addColorStop(1,o.setAlpha(0).toRgbString())}if(i.visionSource&&void 0!==i.lastPath)try{e.fill(i.lastPath)}catch(t){e.arc(s.x,s.y,o,0,2*Math.PI),e.fill(),console.warn(t)}else e.arc(s.x,s.y,o,0,2*Math.PI),e.fill()}}getInitiativeRepr(){return{uuid:this.uuid,visible:!u.gameStore.IS_DM,group:!1,source:this.name,has_img:!1,effects:[],index:1/0}}moveLayer(e,t){const i=c.layerManager.getLayer(this.layer),s=c.layerManager.getLayer(e);void 0!==i&&void 0!==s&&(this.layer=e,i.shapes.splice(i.shapes.indexOf(this),1),s.shapes.push(this),i.invalidate(!0),s.invalidate(!1),t&&r.socket.emit("Shape.Layer.Change",{uuid:this.uuid,layer:e}))}get owners(){return Object.freeze(this._owners.slice())}ownedBy(e){return void 0===e&&(e=u.gameStore.username),u.gameStore.IS_DM||this._owners.includes(e)}addOwner(e){this._owners.includes(e)||this._owners.push(e)}updateOwner(e,t){const i=this._owners.findIndex(t=>t===e);i>=0?this._owners.splice(i,1,t):this.addOwner(t)}removeOwner(e){const t=this._owners.findIndex(t=>t===e);this._owners.splice(t,1)}}t.Shape=h},"255e":function(e,t,i){"use strict";i.r(t);var s=i("851c"),n=i.n(s);for(var o in s)"default"!==o&&function(e){i.d(t,e,function(){return s[e]})}(o);t["default"]=n.a},2686:function(e,t,i){"use strict";var s=function(){var e=this,t=e.$createElement,i=e._self._c||t;return null!==e.note?i("modal",{attrs:{visible:e.visible,mask:!1},on:{close:function(t){e.visible=!1}},scopedSlots:e._u([{key:"header",fn:function(t){return i("div",{staticClass:"modal-header",attrs:{draggable:"true"},on:{dragstart:t.dragStart,dragend:t.dragEnd}},[i("span",{on:{click:function(t){e.$refs.title.select()}}},[i("i",{staticClass:"fas fa-pencil-alt",staticStyle:{"font-size":"15px"}})]),i("input",{directives:[{name:"model",rawName:"v-model",value:e.note.title,expression:"note.title"}],ref:"title",domProps:{value:e.note.title},on:{change:e.updateNote,input:function(t){t.target.composing||e.$set(e.note,"title",t.target.value)}}}),i("div",{staticClass:"header-close",on:{click:function(t){e.visible=!1}}},[i("i",{staticClass:"far fa-window-close"})])])}}])},[i("div",{staticClass:"modal-body"},[i("textarea",{directives:[{name:"model",rawName:"v-model",value:e.note.text,expression:"note.text"}],ref:"textarea",style:{height:e.calcHeight()},domProps:{value:e.note.text},on:{change:e.updateNote,input:function(t){t.target.composing||e.$set(e.note,"text",t.target.value)}}})]),i("div",{staticClass:"modal-footer"},[i("button",{on:{click:e.removeNote}},[i("i",{staticClass:"far fa-trash-alt"}),e._v(" Remove\n ")])])]):e._e()},n=[];i.d(t,"a",function(){return s}),i.d(t,"b",function(){return n})},"26a5":function(e,t,i){"use strict";var s=i("f2d0"),n=i.n(s);n.a},2756:function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0});const s=i("9ab4"),n=s.__importDefault(i("65d9")),o=s.__importDefault(i("496c")),r=s.__importDefault(i("ea6a")),a=i("4a5b"),l=i("0bc6"),c=i("8f0a"),u=i("6f92"),d=i("b2ed"),h=i("f10f"),f=i("2838"),p=i("92b1"),g=i("5a5c");var v;(function(e){e[e["Noop"]=0]="Noop",e[e["Resize"]=1]="Resize",e[e["Drag"]=2]="Drag",e[e["GroupSelect"]=3]="GroupSelect"})(v=t.SelectOperations||(t.SelectOperations={}));const m=new c.GlobalPoint(-1e3,-1e3);let y=class extends r.default{constructor(){super(...arguments),this.name="Select",this.showContextMenu=!1,this.active=!1,this.mode=v.Noop,this.resizePoint=0,this.deltaChanged=!1,this.dragRay=new c.Ray(new c.LocalPoint(0,0),new c.Vector(0,0)),this.selectionStartPoint=m,this.selectionHelper=new d.Rect(m,0,0)}created(){this.selectionHelper.globalCompositeOperation="source-over"}onMouseDown(e){const t=u.layerManager.getLayer();if(void 0===t)return void console.log("No active layer!");this.selectionHelper.owners.includes(h.gameStore.username)||this.selectionHelper.addOwner(h.gameStore.username);const i=g.getMouse(e),s=p.l2g(i);let n,o=!1;n=t.selection.length?t.shapes.concat(t.selection):t.shapes;for(let r=n.length-1;r>=0;r--){const e=n[r];if(this.resizePoint=e.getPointIndex(s,p.l2gz(3)),this.resizePoint>=0){t.selection=[e],a.getRef("selectionInfo").shape=e,this.mode=v.Resize,t.invalidate(!0),o=!0;break}if(e.contains(s)){const s=e;-1===t.selection.indexOf(s)&&(t.selection=[s],a.getRef("selectionInfo").shape=s),this.mode=v.Drag;const n=p.g2l(s.refPoint);this.dragRay=new c.Ray(n,i.subtract(n)),t.invalidate(!0),o=!0;break}}if(!o){this.mode=v.GroupSelect;for(const e of t.selection)a.getRef("selectionInfo").shape=e;this.selectionStartPoint=s,this.selectionHelper.refPoint=this.selectionStartPoint,this.selectionHelper.w=0,this.selectionHelper.h=0,t.selection=[this.selectionHelper],t.invalidate(!0)}this.active=!0}onMouseMove(e){const t=u.layerManager.getLayer();if(void 0===t)return void console.log("No active layer!");const i=g.getMouse(e),s=p.l2g(i);if(this.deltaChanged=!1,this.mode===v.GroupSelect){const e=s;this.selectionHelper.w=Math.abs(e.x-this.selectionStartPoint.x),this.selectionHelper.h=Math.abs(e.y-this.selectionStartPoint.y),this.selectionHelper.refPoint=new c.GlobalPoint(Math.min(this.selectionStartPoint.x,e.x),Math.min(this.selectionStartPoint.y,e.y)),t.invalidate(!0)}else if(t.selection.length){const n=p.g2l(t.selection[t.selection.length-1].refPoint),o=n.add(this.dragRay.direction);let r=i.subtract(o).multiply(1/h.gameStore.zoomFactor);const a=r;if(this.mode===v.Drag){if("tokens"===t.name&&(!e.shiftKey||!h.gameStore.IS_DM))for(const e of t.selection)e.ownedBy()&&e.uuid!==this.selectionHelper.uuid&&(r=f.calculateDelta(r,e),r!==a&&(this.deltaChanged=!0));for(const e of t.selection)e.ownedBy()&&(e.refPoint=e.refPoint.add(r),e!==this.selectionHelper&&(e.visionObstruction&&h.gameStore.recalculateVision(!0),l.socket.emit("Shape.Update",{shape:e.asDict(),redraw:!0,temporary:!0})));t.invalidate(!1)}else if(this.mode===v.Resize)for(const e of t.selection)e.ownedBy()&&(e.resize(this.resizePoint,i),e!==this.selectionHelper&&(e.visionObstruction&&h.gameStore.recalculateVision(!0),l.socket.emit("Shape.Update",{shape:e.asDict(),redraw:!0,temporary:!0})),t.invalidate(!1),this.updateCursor(t,s));else this.updateCursor(t,s)}else document.body.style.cursor="default"}onMouseUp(e){if(!this.active)return;if(void 0===u.layerManager.getLayer())return void console.log("No active layer!");const t=u.layerManager.getLayer();this.mode===v.GroupSelect?(t.clearSelection(),t.shapes.forEach(e=>{if(!e.ownedBy())return;if(e===this.selectionHelper)return;const i=e.getBoundingBox();e.ownedBy()&&this.selectionHelper.refPoint.x<=i.topRight.x&&this.selectionHelper.refPoint.x+this.selectionHelper.w>=i.topLeft.x&&this.selectionHelper.refPoint.y<=i.botLeft.y&&this.selectionHelper.refPoint.y+this.selectionHelper.h>=i.topLeft.y&&t.selection.push(e)}),t.selection.length>0&&t.selection.push(this.selectionHelper),t.invalidate(!0)):t.selection.length&&t.selection.forEach(i=>{if(i.ownedBy()){if(this.mode===v.Drag){if(this.dragRay.origin.x===p.g2lx(i.refPoint.x)&&this.dragRay.origin.y===p.g2ly(i.refPoint.y))return;!h.gameStore.useGrid||e.altKey||this.deltaChanged||i.snapToGrid(),i!==this.selectionHelper&&(i.visionObstruction&&h.gameStore.recalculateVision(),i.movementObstruction&&h.gameStore.recalculateMovement(),l.socket.emit("Shape.Update",{shape:i.asDict(),redraw:!0,temporary:!1})),t.invalidate(!1)}this.mode===v.Resize&&(h.gameStore.useGrid&&!e.altKey&&i.resizeToGrid(),i!==this.selectionHelper&&(i.visionObstruction&&h.gameStore.recalculateVision(),i.movementObstruction&&h.gameStore.recalculateMovement(),l.socket.emit("Shape.Update",{shape:i.asDict(),redraw:!0,temporary:!1})),t.invalidate(!1))}}),this.mode=v.Noop,this.active=!1}onContextMenu(e){if(void 0===u.layerManager.getLayer())return void console.log("No active layer!");const t=u.layerManager.getLayer(),i=g.getMouse(e),s=p.l2g(i);for(const n of t.selection)if(n.contains(s)&&n!==this.selectionHelper)return t.selection=[n],a.getRef("selectionInfo").shape=n,t.invalidate(!0),void this.$parent.$refs.shapecontext.open(e,n);this.$refs.selectcontext.open(e)}updateCursor(e,t){for(const i of e.selection){const e=i.getPointIndex(t,p.l2gz(3));if(e<0)document.body.style.cursor="default";else{let t=i.getPointOrientation(e).angle();t<0&&(t+=360);const s=22.5;(t>=315+s||t=135+s&&t<225-s)&&(document.body.style.cursor="ew-resize"),(t>=45+s&&t<135-s||t>=225+s&&t<315-s)&&(document.body.style.cursor="ns-resize"),(t>=s&&t<90-s||t>=180+s&&t<270-s)&&(document.body.style.cursor="nwse-resize"),(t>=90+s&&t<180-s||t>=270+s&&t<360-s)&&(document.body.style.cursor="nesw-resize")}}}};y=s.__decorate([n.default({components:{SelectContext:o.default}})],y),t.default=y},2838:function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0});const s=i("8f0a"),n=i("6f92"),o=i("f10f"),r=i("d6be"),a=i("98ef"),l=i("4aee");function c(e,t,i){if(0===e.x&&0===e.y)return e;if("bvh"===o.gameStore.visionMode){void 0===i&&(i=[]);const r=t.getBoundingBox(),a=r.offset(e);let l=!1;for(const t of o.gameStore.movementblockers){if(i.includes(t))continue;const o=n.layerManager.UUIDMap.get(t),c=o.getBoundingBox();let u=c.intersectsWithInner(a);if(!u){const t=s.Ray.fromPoints(r.topLeft.add(e.normalize()),a.topLeft),i=t.direction.inverse(),n=[i.x<0,i.y<0];u=c.intersectP(t,i,n).hit}if(u){const n=c.center(),o=r.center(),a=o.subtract(n),u=new s.Vector(1,0),d=new s.Vector(0,1);let h=a.dot(u),f=a.dot(d);h>c.w/2&&(h=c.w/2),h<-c.w/2&&(h=-c.w/2),f>c.h/2&&(f=c.h/2),f<-c.h/2&&(f=-c.h/2);const p=n.add(u.multiply(h)).add(d.multiply(f));p.x===r.topLeft.x||p.x===r.topRight.x?e=new s.Vector(0,e.y):p.y===r.topLeft.y||p.y===r.botLeft.y?e=new s.Vector(e.x,0):p.xr.topRight.x?e=new s.Vector(p.x-r.topRight.x,e.y):p.yr.botLeft.y&&(e=new s.Vector(e.x,p.y-r.botLeft.y)),l=!0,i.push(t);break}}return l&&(e=c(e,t,i)),e}{const i=r.PA_CDT.movement.locate(t.center().asArray(),null).loc;for(const s of t.points){const t=r.PA_CDT.movement.locate(s,i),n=t.loc;null!==n&&(e=u(s,n,e))}return e}}function u(e,t,i,n=[]){const o=new s.GlobalPoint(e[0],e[1]),r=o.add(i).asArray();if(t.contains(r))return i;n.push(t);for(let c=0;c<3;c++){if(n.includes(t.neighbours[c]))continue;const d=t.vertices[l.cw(c)].point,h=t.vertices[l.ccw(c)].point,f=l.intersection(e,r,d,h);if(null===f)continue;if(!t.isConstrained(c))return u(e,t.neighbours[c],i,n);if(f[0]===o.x&&f[1]===o.y){l.orientation;const t=l.orientation(e,r,h);if(t===a.Sign.LEFT_TURN)continue;if(t===a.Sign.ZERO)continue}let p=new s.GlobalPoint(f[0],f[1]).subtract(o).multiply(.8);p.length()<1&&(p=new s.Vector(0,0)),p.length()!["__files"].includes(e)).sort(a.alphSort)}get files(){return this.asset.__files?this.asset.__files.concat().sort((e,t)=>e.name.toLowerCase()>t.name.toLowerCase()?1:-1):[]}toggle(e){for(let t=0;tthis.$children[0].$el.focus())}close(){this.visible=!1,this.shape=null}getLayers(){return c.layerManager.layers.filter(e=>e.selectable&&(u.gameStore.IS_DM||e.playerEditable))}getActiveLayer(){return c.layerManager.getLayer()}getInitiativeWord(){return null===this.shape?"":a.getRef("initiative").contains(this.shape.uuid)?"Show":"Add"}setLayer(e){null!==this.shape&&(this.shape.moveLayer(e,!0),this.close())}moveToBack(){if(null===this.shape)return;const e=this.getActiveLayer();e.moveShapeOrder(this.shape,0,!0),this.close()}moveToFront(){if(null===this.shape)return;const e=this.getActiveLayer();e.moveShapeOrder(this.shape,e.shapes.length-1,!0),this.close()}addInitiative(){if(null===this.shape)return;const e=a.getRef("initiative");e.contains(this.shape.uuid)||e.addInitiative(this.shape.getInitiativeRepr()),e.visible=!0,this.close()}openEditDialog(){l.EventBus.$emit("EditDialog.Open",this.shape),this.close()}};d=s.__decorate([o.default({components:{ContextMenu:r.default}})],d),t.default=d},3481:function(e,t,i){"use strict";i.r(t);var s=i("47e6"),n=i.n(s);for(var o in s)"default"!==o&&function(e){i.d(t,e,function(){return s[e]})}(o);t["default"]=n.a},"38c9":function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0});const s=i("bab4"),n=i("f10f");class o extends s.Layer{invalidate(){this.valid=!1}draw(e){this.valid||this.drawGrid()}drawGrid(){const e=this.ctx;this.clear(),e.beginPath();const t=n.gameStore.gridSize;for(let i=0;i1,expression:"showUI && layers.length>1"}],attrs:{id:"layerselect"}},[i("ul",e._l(e.layers,function(t){return i("li",{key:t.name,class:{"layer-selected":t===e.selectedLayer},on:{mousedown:function(i){e.selectLayer(t)}}},[i("a",{attrs:{href:"#"}},[e._v(e._s(t))])])}))])],2),i("selection-info",{directives:[{name:"show",rawName:"v-show",value:e.showUI,expression:"showUI"}],ref:"selectionInfo"}),i("initiative-dialog",{ref:"initiative",attrs:{id:"initiativedialog"}}),i("note-dialog",{ref:"note"}),i("label-dialog",{ref:"labels"}),i("zoom-slider",{directives:[{name:"show",rawName:"v-show",value:e.showUI,expression:"showUI"}],attrs:{id:"zoomer",height:6,width:200,min:0,max:1,interval:.1,"dot-width":8,"dot-height":20,"tooltip-dir":"bottom",tooltip:"hover",formatter:e.zoomDisplay.toFixed(1),"slider-style":{"border-radius":"15%"},"bg-style":{"background-color":"#fff","box-shadow":"0.5px 0.5px 3px 1px rgba(0, 0, 0, .36)"},"process-style":{"background-color":"#fff"}},model:{value:e.zoomDisplay,callback:function(t){e.zoomDisplay=t},expression:"zoomDisplay"}}),i("prompt-dialog",{ref:"prompt"}),i("confirm-dialog",{ref:"confirm"})],1)},n=[];i.d(t,"a",function(){return s}),i.d(t,"b",function(){return n})},4185:function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0});const s=i("8f0a"),n=i("bab4"),o=i("6f92"),r=i("d1ec"),a=i("4709"),l=i("f10f"),c=i("92b1"),u=i("5a5c"),d=i("cee3");class h extends n.Layer{constructor(e,t){super(e,t),this.isVisionLayer=!0,this.preFogShapes=[],this.virtualCanvas=document.createElement("canvas"),this.virtualCanvas.width=window.innerWidth,this.virtualCanvas.height=window.innerHeight,this.vCtx=this.virtualCanvas.getContext("2d")}addShape(e,t,i,s=!0){super.addShape(e,t,i,s),e.options.has("preFogShape")&&e.options.get("preFogShape")&&this.preFogShapes.push(e)}removeShape(e,t,i){if(e.options.has("preFogShape")&&e.options.get("preFogShape")){const t=this.preFogShapes.findIndex(t=>t.uuid===e.uuid);this.preFogShapes.splice(t,1)}super.removeShape(e,t,i)}draw(){if(!this.valid){const e=this.ctx;if(r.Settings.skipLightFOW)return e.clearRect(0,0,this.canvas.width,this.canvas.height),void(this.valid=!0);const t=e.globalCompositeOperation;e.clearRect(0,0,this.canvas.width,this.canvas.height),e.fillStyle="rgba(0, 0, 0, 1)";const i=o.layerManager.getLayer("draw").ctx;(r.Settings.drawAngleLines||r.Settings.drawFirstLightHit)&&i.clearRect(0,0,i.canvas.width,i.canvas.height),l.gameStore.fullFOW&&o.layerManager.hasLayer("tokens")&&o.layerManager.getLayer("tokens").shapes.forEach(t=>{if(!t.ownedBy()||!t.isToken)return;const i=t.getBoundingBox(),s=c.g2l(t.center()),n=.8*c.g2lz(i.w);e.beginPath(),e.arc(s.x,s.y,n,0,2*Math.PI);const o=e.createRadialGradient(s.x,s.y,n/2,s.x,s.y,n);o.addColorStop(0,"rgba(0, 0, 0, 1)"),o.addColorStop(1,"rgba(0, 0, 0, 0)"),e.fillStyle=o,e.fill()}),this.vCtx.clearRect(0,0,window.innerWidth,window.innerHeight);for(const n of l.gameStore.visionSources){const t=o.layerManager.UUIDMap.get(n.shape);if(void 0===t)continue;const u=t.auras.find(e=>e.uuid===n.aura);if(void 0===u)continue;const h=c.getUnitDistance(u.value+u.dim),f=t.center(),p=c.g2l(f),g=new a.Circle(f,h);if(g.visibleInCanvas(e.canvas))if("bvh"===l.gameStore.visionMode){let t=-1;const n=new Path2D;let o;n.moveTo(p.x,p.y);for(let a=0;a<2*Math.PI;a+=r.Settings.angleSteps/180*Math.PI){const d=new s.GlobalPoint(f.x+h*Math.cos(a),f.y+h*Math.sin(a));r.Settings.drawAngleLines&&(i.beginPath(),i.moveTo(c.g2lx(f.x),c.g2ly(f.y)),i.lineTo(c.g2lx(d.x),c.g2ly(d.y)),i.stroke());const g=s.Ray.fromPoints(f,d),v=l.gameStore.BV.intersect(g);if(0===a&&(o=v.hit?v.intersect:d),v.hit)-1!==t&&(n.arc(p.x,p.y,c.g2lr(u.value+u.dim),t,a),t=-1),n.lineTo(c.g2lx(v.intersect.x),c.g2ly(v.intersect.y));else if(-1===t){t=a;const i=c.g2l(d);e.lineTo(i.x,i.y)}}if(-1===t?n.lineTo(c.g2lx(o.x),c.g2ly(o.y)):n.arc(p.x,p.y,c.g2lr(u.value+u.dim),t,2*Math.PI),l.gameStore.fullFOW){if(u.dim>0){const t=e.createRadialGradient(p.x,p.y,c.g2lr(u.value),p.x,p.y,c.g2lr(u.value+u.dim));t.addColorStop(0,"rgba(0, 0, 0, 1)"),t.addColorStop(1,"rgba(0, 0, 0, 0)"),e.fillStyle=t}else e.fillStyle="rgba(0, 0, 0, 1)";e.fill(n)}u.lastPath=n}else{this.vCtx.globalCompositeOperation="source-over",this.vCtx.fillStyle="rgba(0, 0, 0, 1)";const t=d.computeVisibility(f,"vision");this.vCtx.beginPath(),this.vCtx.moveTo(c.g2lx(t[0][0]),c.g2ly(t[0][1]));for(const e of t)this.vCtx.lineTo(c.g2lx(e[0]),c.g2ly(e[1]));if(this.vCtx.closePath(),this.vCtx.fill(),u.dim>0){const e=this.vCtx.createRadialGradient(p.x,p.y,c.g2lr(u.value),p.x,p.y,c.g2lr(u.value+u.dim));e.addColorStop(0,"rgba(0, 0, 0, 1)"),e.addColorStop(1,"rgba(0, 0, 0, 0)"),this.vCtx.fillStyle=e}else this.vCtx.fillStyle="rgba(0, 0, 0, 1)";this.vCtx.globalCompositeOperation="source-in",this.vCtx.beginPath(),this.vCtx.arc(p.x,p.y,c.g2lr(u.value+u.dim),0,2*Math.PI),this.vCtx.fill(),e.drawImage(this.virtualCanvas,0,0)}}l.gameStore.fowLOS&&(e.globalCompositeOperation="source-in",e.drawImage(o.layerManager.getLayer("fow-players").canvas,0,0));for(const s of this.preFogShapes){if(!s.visibleInCanvas(this.canvas))continue;const t=s.globalCompositeOperation;l.gameStore.fullFOW||("source-over"===s.globalCompositeOperation?s.globalCompositeOperation="destination-out":"destination-out"===s.globalCompositeOperation&&(s.globalCompositeOperation="source-over")),s.draw(e),s.globalCompositeOperation=t}l.gameStore.fullFOW&&(e.globalCompositeOperation="source-out",e.fillStyle=u.getFogColour(),e.fillRect(0,0,e.canvas.width,e.canvas.height)),super.draw(!1),e.globalCompositeOperation=t}}}t.FOWLayer=h},4486:function(e,t,i){"use strict";i.r(t);var s=i("a097"),n=i.n(s);for(var o in s)"default"!==o&&function(e){i.d(t,e,function(){return s[e]})}(o);t["default"]=n.a},"45bf":function(e,t,i){"use strict";var s=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{attrs:{id:"menuContainer"}},[i("div",{ref:"rm",style:{left:e.visible.settings?"200px":"0",top:e.visible.locations?"100px":"0"},attrs:{id:"radialmenu"}},[i("div",{staticClass:"rm-wrapper"},[i("div",{staticClass:"rm-toggler"},[i("ul",{staticClass:"rm-list",class:{"rm-list-dm":e.IS_DM}},[e.IS_DM?i("li",{staticClass:"rm-item",attrs:{id:"rm-locations"},on:{click:function(t){e.visible.locations=!e.visible.locations}}},[e._m(0)]):e._e(),i("li",{staticClass:"rm-item",attrs:{id:"rm-settings"},on:{click:function(t){e.visible.settings=!e.visible.settings}}},[e._m(1)])])]),e._m(2)])]),i("transition",{attrs:{name:"settings"},on:{enter:function(t){e.$refs.rm.style.transition="left 500ms"}}},[e.visible.settings?i("div",{ref:"settings",attrs:{id:"menu"},on:{click:e.settingsClick}},[i("div",{staticStyle:{width:"200px",height:"90%","overflow-y":"auto","overflow-x":"hidden"}},[e.IS_DM?[i("button",{staticClass:"accordion"},[e._v("Assets")]),i("div",{staticClass:"accordion-panel"},[i("a",{staticClass:"actionButton",attrs:{href:"/assets",target:"blank",title:"Open asset manager"}},[i("i",{staticClass:"fas fa-external-link-alt"})]),i("div",{staticClass:"directory",attrs:{id:"menu-tokens"}},[i("asset-node",{attrs:{asset:e.assets}}),e.assets?e._e():i("div",[e._v("No assets")])],1)]),i("button",{staticClass:"accordion"},[e._v("Notes")]),i("div",{staticClass:"accordion-panel"},[i("div",{staticClass:"accordion-subpanel",attrs:{id:"menu-notes"}},[i("a",{staticClass:"actionButton",on:{click:e.createNote}},[i("i",{staticClass:"far fa-plus-square"})]),e._l(e.notes,function(t){return i("div",{key:t.uuid,staticStyle:{cursor:"pointer"},on:{click:function(i){e.openNote(t)}}},[e._v(e._s(t.title||"[?]"))])}),e.notes.length?e._e():i("div",[e._v("No notes")])],2)]),i("button",{staticClass:"accordion"},[e._v("DM Options")]),i("div",{staticClass:"accordion-panel"},[i("div",{staticClass:"accordion-subpanel"},[i("label",{attrs:{for:"useGridInput"}},[e._v("Use grid:")]),i("input",{directives:[{name:"model",rawName:"v-model",value:e.useGrid,expression:"useGrid"}],attrs:{id:"useGridInput",type:"checkbox",checked:"checked"},domProps:{checked:Array.isArray(e.useGrid)?e._i(e.useGrid,null)>-1:e.useGrid},on:{change:function(t){var i=e.useGrid,s=t.target,n=!!s.checked;if(Array.isArray(i)){var o=null,r=e._i(i,o);s.checked?r<0&&(e.useGrid=i.concat([o])):r>-1&&(e.useGrid=i.slice(0,r).concat(i.slice(r+1)))}else e.useGrid=n}}}),i("label",{attrs:{for:"useFOWInput"}},[e._v("Fill entire canvas with FOW:")]),i("input",{directives:[{name:"model",rawName:"v-model",value:e.fullFOW,expression:"fullFOW"}],attrs:{id:"useFOWInput",type:"checkbox"},domProps:{checked:Array.isArray(e.fullFOW)?e._i(e.fullFOW,null)>-1:e.fullFOW},on:{change:function(t){var i=e.fullFOW,s=t.target,n=!!s.checked;if(Array.isArray(i)){var o=null,r=e._i(i,o);s.checked?r<0&&(e.fullFOW=i.concat([o])):r>-1&&(e.fullFOW=i.slice(0,r).concat(i.slice(r+1)))}else e.fullFOW=n}}}),i("label",{attrs:{for:"fowOpacity"}},[e._v("FOW opacity:")]),i("input",{directives:[{name:"model",rawName:"v-model.number",value:e.fowOpacity,expression:"fowOpacity",modifiers:{number:!0}}],attrs:{id:"fowOpacity",type:"number",min:"0",max:"1",step:"0.1"},domProps:{value:e.fowOpacity},on:{input:function(t){t.target.composing||(e.fowOpacity=e._n(t.target.value))},blur:function(t){e.$forceUpdate()}}}),i("label",{attrs:{for:"fowLOS"}},[e._v("Only show lights in LoS:")]),i("input",{directives:[{name:"model",rawName:"v-model",value:e.fowLOS,expression:"fowLOS"}],attrs:{id:"fowLOS",type:"checkbox"},domProps:{checked:Array.isArray(e.fowLOS)?e._i(e.fowLOS,null)>-1:e.fowLOS},on:{change:function(t){var i=e.fowLOS,s=t.target,n=!!s.checked;if(Array.isArray(i)){var o=null,r=e._i(i,o);s.checked?r<0&&(e.fowLOS=i.concat([o])):r>-1&&(e.fowLOS=i.slice(0,r).concat(i.slice(r+1)))}else e.fowLOS=n}}}),i("label",{attrs:{for:"unitSizeInput"}},[e._v("Unit Size (in ft.):")]),i("input",{directives:[{name:"model",rawName:"v-model.number",value:e.unitSize,expression:"unitSize",modifiers:{number:!0}}],attrs:{id:"unitSizeInput",type:"number"},domProps:{value:e.unitSize},on:{input:function(t){t.target.composing||(e.unitSize=e._n(t.target.value))},blur:function(t){e.$forceUpdate()}}}),i("label",{attrs:{for:"gridSizeInput"}},[e._v("Grid Size (in pixels):")]),i("input",{directives:[{name:"model",rawName:"v-model.number",value:e.gridSize,expression:"gridSize",modifiers:{number:!0}}],attrs:{id:"gridSizeInput",type:"number",min:"0"},domProps:{value:e.gridSize},on:{input:function(t){t.target.composing||(e.gridSize=e._n(t.target.value))},blur:function(t){e.$forceUpdate()}}}),i("label",{attrs:{for:"visionMode"}},[e._v("Vision Mode:")]),i("select",{attrs:{id:"visionMode"},on:{change:e.changeVisionMode}},[i("option",{domProps:{selected:"bvh"===e.$store.state.game.visionMode}},[e._v("BVH")]),i("option",{domProps:{selected:"triangle"===e.$store.state.game.visionMode}},[e._v("Triangle")])]),i("label",{attrs:{for:"vmininp"}},[e._v("Minimal full vision (ft):")]),i("input",{directives:[{name:"model",rawName:"v-model.lazy.number",value:e.visionRangeMin,expression:"visionRangeMin",modifiers:{lazy:!0,number:!0}}],attrs:{id:"vmininp",type:"number",min:"0"},domProps:{value:e.visionRangeMin},on:{change:function(t){e.visionRangeMin=e._n(t.target.value)},blur:function(t){e.$forceUpdate()}}}),i("label",{attrs:{for:"vmaxinp"}},[e._v("Maximal vision (ft):")]),i("input",{directives:[{name:"model",rawName:"v-model.lazy.number",value:e.visionRangeMax,expression:"visionRangeMax",modifiers:{lazy:!0,number:!0}}],attrs:{id:"vmaxinp",type:"number",min:"0"},domProps:{value:e.visionRangeMax},on:{change:function(t){e.visionRangeMax=e._n(t.target.value)},blur:function(t){e.$forceUpdate()}}}),i("label",{attrs:{for:"invitation"}},[e._v("Invitation Code:")]),i("input",{attrs:{id:"invitation",type:"text",readonly:"readonly"},domProps:{value:e.invitationCode}})])])]:e._e(),i("button",{staticClass:"accordion"},[e._v("Client Options")]),i("div",{staticClass:"accordion-panel"},[i("div",{staticClass:"accordion-subpanel"},[i("label",{attrs:{for:"gridColour"}},[e._v("Grid Colour:")]),i("color-picker",{attrs:{id:"gridColour",color:e.gridColour},on:{"update:color":function(t){e.gridColour=t}}}),i("label",{attrs:{for:"fowColour"}},[e._v("FOW Colour:")]),i("color-picker",{attrs:{id:"fowColour",color:e.fowColour},on:{"update:color":function(t){e.fowColour=t}}}),i("label",{attrs:{for:"rulerColour"}},[e._v("Ruler Colour:")]),i("color-picker",{attrs:{id:"rulerColour",color:e.rulerColour},on:{"update:color":function(t){e.rulerColour=t}}})],1)])],2),i("router-link",{staticClass:"accordion",staticStyle:{"text-decoration":"none",display:"inline-block",position:"absolute",bottom:"0"},attrs:{to:"/dashboard"}},[e._v("Exit")])],1):e._e()]),i("transition",{attrs:{name:"locations"},on:{enter:function(t){e.$refs.rm.style.transition="top 500ms"}}},[e.IS_DM&&e.visible.locations?i("div",{attrs:{id:"locations-menu"}},[i("div",[e._l(e.locations,function(t){return i("div",{key:t,on:{click:function(i){e.changeLocation(t)}}},[e._v(e._s(t))])}),i("div",{on:{click:e.createLocation}},[i("i",{staticClass:"fas fa-plus"})])],2)]):e._e()]),i("img",{attrs:{id:"dragImage"}})],1)},n=[function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("a",{attrs:{href:"#"}},[i("i",{staticClass:"far fa-compass"})])},function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("a",{attrs:{href:"#"}},[i("i",{staticClass:"fas fa-cog"})])},function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("span",{staticClass:"rm-topper"},[i("i",{staticClass:"icon-share-alt"})])}];i.d(t,"a",function(){return s}),i.d(t,"b",function(){return n})},"45fb":function(e,t,i){"use strict";var s=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("Modal",{attrs:{visible:e.visible,mask:!1},on:{close:function(t){e.visible=!1}},scopedSlots:e._u([{key:"header",fn:function(t){return i("div",{staticClass:"modal-header",attrs:{draggable:"true"},on:{dragstart:t.dragStart,dragend:t.dragEnd}},[i("div",[e._v("Edit asset")]),i("div",{staticClass:"header-close",on:{click:function(t){e.visible=!1}}},[i("i",{staticClass:"far fa-window-close"})])])}}])},[i("div",{staticClass:"modal-body"},[i("div",{staticClass:"grid"},[i("label",{attrs:{for:"shapeselectiondialog-name"}},[e._v("Name")]),i("input",{directives:[{name:"model",rawName:"v-model",value:e.shape.name,expression:"shape.name"}],staticStyle:{"grid-column":"numerator / remove"},attrs:{type:"text",id:"shapeselectiondialog-name",disabled:!e.owned},domProps:{value:e.shape.name},on:{change:function(t){e.updateShape(!1)},input:function(t){t.target.composing||e.$set(e.shape,"name",t.target.value)}}}),i("div",{style:{opacity:e.shape.nameVisible?1:.3,textAlign:"center"},attrs:{disabled:!e.owned},on:{click:function(t){e.shape.nameVisible=!e.shape.nameVisible,e.updateShape(!1)}}},[i("i",{staticClass:"fas fa-eye"})]),i("label",{attrs:{for:"shapeselectiondialog-istoken"}},[e._v("Is a token")]),i("input",{staticClass:"styled-checkbox",staticStyle:{"grid-column-start":"remove"},attrs:{type:"checkbox",id:"shapeselectiondialog-istoken",disabled:!e.owned},domProps:{checked:e.shape.isToken},on:{click:e.setToken}}),i("label",{attrs:{for:"shapeselectiondialog-visionblocker"}},[e._v("Blocks vision/light")]),i("input",{directives:[{name:"model",rawName:"v-model",value:e.shape.visionObstruction,expression:"shape.visionObstruction"}],staticStyle:{"grid-column-start":"remove"},attrs:{type:"checkbox",id:"shapeselectiondialog-visionblocker",disabled:!e.owned},domProps:{checked:Array.isArray(e.shape.visionObstruction)?e._i(e.shape.visionObstruction,null)>-1:e.shape.visionObstruction},on:{change:[function(t){var i=e.shape.visionObstruction,s=t.target,n=!!s.checked;if(Array.isArray(i)){var o=null,r=e._i(i,o);s.checked?r<0&&e.$set(e.shape,"visionObstruction",i.concat([o])):r>-1&&e.$set(e.shape,"visionObstruction",i.slice(0,r).concat(i.slice(r+1)))}else e.$set(e.shape,"visionObstruction",n)},e.setVisionBlocker]}}),i("label",{attrs:{for:"shapeselectiondialog-moveblocker"}},[e._v("Blocks movement")]),i("input",{staticStyle:{"grid-column-start":"remove"},attrs:{type:"checkbox",id:"shapeselectiondialog-moveblocker",disabled:!e.owned},domProps:{checked:e.shape.movementObstruction},on:{click:e.setMovementBlocker}}),i("label",{attrs:{for:"shapeselectiondialog-strokecolour"}},[e._v("Border colour")]),i("color-picker",{staticStyle:{"grid-column-start":"remove"},attrs:{color:e.shape.strokeColour,disabled:!e.owned},on:{"update:color":function(t){e.$set(e.shape,"strokeColour",t)},input:function(t){e.updateShape(!0,!0)},change:function(t){e.updateShape(!0)}}}),i("label",{attrs:{for:"shapeselectiondialog-fillcolour"}},[e._v("Fill colour")]),i("color-picker",{staticStyle:{"grid-column-start":"remove"},attrs:{color:e.shape.fillColour,disabled:!e.owned},on:{"update:color":function(t){e.$set(e.shape,"fillColour",t)},input:function(t){e.updateShape(!0,!0)},change:function(t){e.updateShape(!0)}}}),i("div",{staticClass:"spanrow header"},[e._v("Access")]),e._l(e.shape.owners,function(t){return[i("input",{key:t,staticStyle:{"grid-column-start":"name"},attrs:{type:"text",placeholder:"name",disabled:!e.owned},domProps:{value:t},on:{change:function(i){e.updateOwner(i,t)}}}),""!==t?i("div",{key:"remove-"+t,style:{opacity:e.owned?1:.3,textAlign:"center",gridColumnStart:"remove"},attrs:{disabled:!e.owned},on:{click:function(i){e.removeOwner(t)}}},[i("i",{staticClass:"fas fa-trash-alt"})]):e._e()]}),i("div",{staticClass:"spanrow header"},[e._v("Trackers")]),e._l(e.shape.trackers,function(t){return[i("input",{directives:[{name:"model",rawName:"v-model",value:t.name,expression:"tracker.name"}],key:"name-"+t.uuid,staticStyle:{"grid-column-start":"name"},attrs:{type:"text",placeholder:"name",disabled:!e.owned},domProps:{value:t.name},on:{change:function(t){e.updateShape(!1)},input:function(i){i.target.composing||e.$set(t,"name",i.target.value)}}}),i("input",{directives:[{name:"model",rawName:"v-model.number",value:t.value,expression:"tracker.value",modifiers:{number:!0}}],key:"value-"+t.uuid,attrs:{type:"text",title:"Current value",disabled:!e.owned},domProps:{value:t.value},on:{change:function(t){e.updateShape(!1)},input:function(i){i.target.composing||e.$set(t,"value",e._n(i.target.value))},blur:function(t){e.$forceUpdate()}}}),i("span",{key:"fspan-"+t.uuid},[e._v("/")]),i("input",{directives:[{name:"model",rawName:"v-model.number",value:t.maxvalue,expression:"tracker.maxvalue",modifiers:{number:!0}}],key:"maxvalue-"+t.uuid,attrs:{type:"text",title:"Current value",disabled:!e.owned},domProps:{value:t.maxvalue},on:{change:function(t){e.updateShape(!1)},input:function(i){i.target.composing||e.$set(t,"maxvalue",e._n(i.target.value))},blur:function(t){e.$forceUpdate()}}}),i("span",{key:"sspan-"+t.uuid}),i("div",{key:"visibility-"+t.uuid,style:{opacity:t.visible?1:.3,textAlign:"center"},attrs:{disabled:!e.owned},on:{click:function(i){t.visible=!t.visible,e.updateShape(!1)}}},[i("i",{staticClass:"fas fa-eye"})]),i("span",{key:"tspan-"+t.uuid}),""!==t.name||0!==t.value?i("div",{key:"remove-"+t.uuid,style:{opacity:e.owned?1:.3,textAlign:"center"},attrs:{disabled:!e.owned},on:{click:function(i){e.removeTracker(t.uuid)}}},[i("i",{staticClass:"fas fa-trash-alt"})]):e._e()]}),i("div",{staticClass:"spanrow header"},[e._v("Auras")]),e._l(e.shape.auras,function(t){return[i("input",{directives:[{name:"model",rawName:"v-model",value:t.name,expression:"aura.name"}],key:"name-"+t.uuid,staticStyle:{"grid-column-start":"name"},attrs:{type:"text",placeholder:"name",disabled:!e.owned},domProps:{value:t.name},on:{change:function(t){e.updateShape(!1)},input:function(i){i.target.composing||e.$set(t,"name",i.target.value)}}}),i("input",{directives:[{name:"model",rawName:"v-model.number",value:t.value,expression:"aura.value",modifiers:{number:!0}}],key:"value-"+t.uuid,attrs:{type:"text",title:"Current value",disabled:!e.owned},domProps:{value:t.value},on:{change:function(t){e.updateShape(!0)},input:function(i){i.target.composing||e.$set(t,"value",e._n(i.target.value))},blur:function(t){e.$forceUpdate()}}}),i("span",{key:"fspan-"+t.uuid},[e._v("/")]),i("input",{directives:[{name:"model",rawName:"v-model.number",value:t.dim,expression:"aura.dim",modifiers:{number:!0}}],key:"dimvalue-"+t.uuid,attrs:{type:"text",title:"Dim value",disabled:!e.owned},domProps:{value:t.dim},on:{change:function(t){e.updateShape(!0)},input:function(i){i.target.composing||e.$set(t,"dim",e._n(i.target.value))},blur:function(t){e.$forceUpdate()}}}),i("color-picker",{key:"colour-"+t.uuid,attrs:{color:t.colour,disabled:!e.owned},on:{"update:color":function(i){e.$set(t,"colour",i)},input:function(i){e.updateAuraColour(t,i)},change:function(t){e.updateShape(!0)}}}),i("div",{key:"visibility-"+t.uuid,style:{opacity:t.visible?1:.3,textAlign:"center"},attrs:{disabled:!e.owned},on:{click:function(i){t.visible=!t.visible,e.updateShape(!0)}}},[i("i",{staticClass:"fas fa-eye"})]),i("div",{key:"visionsource-"+t.uuid,style:{opacity:t.visionSource?1:.3,textAlign:"center"},attrs:{disabled:!e.owned},on:{click:function(i){e.updateAuraVisionSource(t)}}},[i("i",{staticClass:"fas fa-lightbulb"})]),""!==t.name||0!==t.value?i("div",{key:"remove-"+t.uuid,style:{opacity:e.owned?1:.3,textAlign:"center"},attrs:{disabled:!e.owned},on:{click:function(i){e.removeAura(t.uuid)}}},[i("i",{staticClass:"fas fa-trash-alt"})]):e._e()]}),i("div",{staticClass:"spanrow header"},[e._v("Labels")]),i("div",{staticClass:"spanrow",attrs:{id:"labels"}},[e._l(e.shape.labels,function(t){return i("div",{key:t.uuid,staticClass:"label"},[t.category?[i("div",{staticClass:"label-user"},[e._v(e._s(t.category))]),i("div",{staticClass:"label-main",on:{click:function(i){e.removeLabel(t.uuid)}}},[e._v(e._s(t.name))])]:e._e(),t.category?e._e():[i("div",{staticClass:"label-main",on:{click:function(i){e.removeLabel(t.uuid)}}},[e._v(e._s(t.name))])]],2)}),e.owned?i("div",{staticClass:"label",attrs:{id:"label-add"}},[i("div",{staticClass:"label-main",on:{click:e.openLabelManager}},[e._v("+")])]):e._e()],2),i("div",{staticClass:"spanrow header"},[e._v("Annotation")]),i("textarea",{staticClass:"spanrow",attrs:{disabled:!e.owned},domProps:{value:e.shape.annotation},on:{change:e.updateAnnotation}})],2)])])},n=[];i.d(t,"a",function(){return s}),i.d(t,"b",function(){return n})},4709:function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0});const s=i("8f0a"),n=i("8db6"),o=i("2469"),r=i("f10f"),a=i("2838"),l=i("92b1"),c=i("5a5c");class u extends o.Shape{constructor(e,t,i,s,n){super(e,i,s,n),this.type="circle",this.r=t||1}asDict(){return Object.assign(this.getBaseDict(),{radius:this.r})}fromDict(e){super.fromDict(e),this.r=e.radius}getBoundingBox(){return new n.BoundingRect(new s.GlobalPoint(this.refPoint.x-this.r,this.refPoint.y-this.r),2*this.r,2*this.r)}get points(){return this.getBoundingBox().points}draw(e){super.draw(e),e.beginPath(),"fog"===this.fillColour?e.fillStyle=c.getFogColour():e.fillStyle=this.fillColour;const t=l.g2l(this.refPoint);e.arc(t.x,t.y,l.g2lz(this.r),0,2*Math.PI),e.fill(),"rgba(0, 0, 0, 0)"!==this.strokeColour&&(e.beginPath(),e.lineWidth=l.g2lz(5),e.strokeStyle=this.strokeColour,e.arc(t.x,t.y,l.g2lz(this.r),0,2*Math.PI),e.stroke())}contains(e){return Math.pow(e.x-this.refPoint.x,2)+Math.pow(e.y-this.refPoint.y,2){const t=16*Math.random()|0,i="x"===e?t:3&t|8;return i.toString(16)})}function o(e){return e.charAt(0).toUpperCase()+e.slice(1)}function r(e,t){return e.toLowerCase()t(e)?i[1].push(e):i[0].push(e)),i}function u(e,t,i,s){const n=.2*Number(e.font.split("px")[0]),o=e.measureText(t).width;return Math.min(i/o,s/n)}function d(e){return encodeURIComponent(e).replace(/[!'()*]/g,e=>{return"%"+e.charCodeAt(0).toString(16)})}t.uuidv4=n,t.capitalize=o,t.alphSort=r,t.getHTMLFont=a,t.getHTMLTextWidth=l,t.partition=c,t.calcFontScale=u,t.fixedEncodeURIComponent=d;class h{constructor(){this.keys=[],this.values=[]}get length(){return this.keys.length}get(e){return this.values[this.keys.indexOf(e)]}getIndexValue(e){return this.values[e]}getIndexKey(e){return this.keys[e]}set(e,t){this.keys.push(e),this.values.push(t)}has(e){return this.indexOf(e)>=0}indexOf(e){return this.keys.indexOf(e)}remove(e){const t=this.indexOf(e);this.keys.splice(t,1),this.values.splice(t,1)}}function f(){return s.app.$children[0].$refs.activeComponent}function p(e){const t=s.app.$children[0].$refs.activeComponent;return t.$refs[e]}t.OrderedMap=h,t.getComponent=f,t.getRef=p},"4aec":function(e,t,i){"use strict";i.r(t);var s=i("a755"),n=i("f51a");for(var o in n)"default"!==o&&function(e){i.d(t,e,function(){return n[e]})}(o);var r=i("2877"),a=Object(r["a"])(n["default"],s["a"],s["b"],!1,null,null,null);a.options.__file="contextMenu.vue",t["default"]=a.exports},"4aee":function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0});const s=i("98ef");function n(e){return(e+2)%3}function o(e){return(e+1)%3}function r(e,t){const i=new s.EdgeCirculator(e,null);if(i.valid)do{const n=3-i.t.indexV(e)-i.ri,o=i.t.vertices[n];if(!o.infinite){if(o===t)return{includes:!0,vi:t,fr:i.t,i:i.ri};{const n=c(e.point,t.point,o.point);if(n===s.Sign.COLLINEAR&&a(e.point,o.point,t.point))return{includes:!0,vi:o,fr:i.t,i:i.ri}}}}while(i.next());return{includes:!1}}function a(e,t,i){let n,o;return l(0,e,i)===s.Sign.EQUAL?(n=l(1,e,t),o=l(1,t,i)):(n=l(0,e,t),o=l(0,t,i)),n===s.Sign.SMALLER&&o===s.Sign.SMALLER||n===s.Sign.LARGER&&o===s.Sign.LARGER}function l(e,t,i){return t[e]i[e]?s.Sign.LARGER:s.Sign.EQUAL}function c(e,t,i){const n=e[0],o=e[1],r=t[0],a=t[1],l=i[0],c=i[1],d=r-n,h=a-o,f=l-n,p=c-o,g=u(d,h,f,p);let v=Math.abs(d),m=Math.abs(h);const y=Math.abs(f),b=Math.abs(p);if(vm&&([v,m]=[m,v]),v<2e-162&&0===v)return s.Sign.ZERO;if(m<1e153){const e=Number.EPSILON*v*m;if(g>e)return s.Sign.POSITIVE;if(g<-e)return s.Sign.NEGATIVE}return s.Sign.ZERO}function u(e,t,i,s){return e*s-t*i}function d(e,t,i){return u(t[0]-e[0],t[1]-e[1],i[0]-e[0],i[1]-e[1])<0}function h(e,t,i){if(!e.isInfinite())return f(e.vertices[0].point,e.vertices[1].point,e.vertices[2].point,t,i);throw new Error("SSS")}function f(e,t,i,n,o){const r=m(e,t,i,n);if(r!==s.Sign.ON_ORIENTED_BOUNDARY||!o)return r;const a=[e,t,i,n];a.sort((e,t)=>e[0]-t[0]||e[1]-t[1]);for(const l of a.reverse()){if(l===n)return s.Sign.ON_NEGATIVE_SIDE;let o=c(e,t,n);if(l===i&&o!==s.Sign.COLLINEAR)return o;if(o=c(e,n,i),l===t&&o!==s.Sign.COLLINEAR)return o;if(o=c(n,t,i),l===e&&o!==s.Sign.COLLINEAR)return o}return s.Sign.ON_NEGATIVE_SIDE}function p(e,t){return e[0]===t[0]&&e[1]===t[1]}function g(e,t){return e[0]y&&([m,y]=[y,m]),m<1e-73&&0===m)return s.Sign.ON_ORIENTED_BOUNDARY;if(y<1e76){const e=Number.EPSILON*m*y*(y*y);if(v>e)return s.Sign.ON_POSITIVE_SIDE;if(v<-e)return s.Sign.ON_NEGATIVE_SIDE}return s.Sign.ZERO}function y(e,t,i,n){switch(c(e,t,i)){case s.Sign.LEFT_TURN:return c(i,n,t)!==s.Sign.RIGHT_TURN;case s.Sign.RIGHT_TURN:return c(i,n,t)!==s.Sign.LEFT_TURN;case s.Sign.COLLINEAR:return!0}}function b(e,t,i,n){switch(c(e,t,i)){case s.Sign.LEFT_TURN:return c(e,t,n)!==s.Sign.LEFT_TURN;case s.Sign.RIGHT_TURN:return c(e,t,n)!==s.Sign.RIGHT_TURN;case s.Sign.COLLINEAR:return!0}}function _(e,t,i,s){const n=x(e,t,i,s);switch(n.intersectionType){case w.POINT:return n.point;case w.NO_INTERSECTION:return null}throw new Error("sdfgighowen")}var w;function S(e,t){if(e[0]===t[0])return[1,0,-e[0]];if(e[1]===t[1])return[0,1,-e[1]];const i=t[0]-e[0],s=t[1]-e[1];return[-s,i,-i*e[1]+s*e[0]]}function x(e,t,i,s){if(!C(e,t,i,s))return{intersectionType:w.NO_INTERSECTION,point:null};const n=S(e,t),o=S(i,s),r=M(n,o);switch(r.intersectionType){case w.POINT:return r}throw new Error("gzseuihgpib")}function M(e,t){const i=e[0]*t[1]-t[0]*e[1],s=e[1]*t[2]-t[1]*e[2],n=t[0]*e[2]-e[0]*t[2];return{intersectionType:w.POINT,point:[s/i,n/i]}}function C(e,t,i,n){if(g(e,t)){if(g(i,n)){if(g(t,i)||g(n,e))return!1}else if(g(t,n)||g(i,e))return!1}else if(g(i,n)){if(g(e,i)||g(n,t))return!1}else if(g(e,n)||g(i,t))return!1;if(g(e,t))if(g(i,n))switch(v(e,i)){case s.Sign.SMALLER:switch(v(t,i)){case s.Sign.SMALLER:return!1;case s.Sign.EQUAL:return!0;default:switch(v(t,n)){case s.Sign.SMALLER:return y(e,t,i,n);case s.Sign.EQUAL:return!0;default:return b(e,t,i,n)}}case s.Sign.EQUAL:return!0;default:switch(v(n,e)){case s.Sign.SMALLER:return!1;case s.Sign.EQUAL:return!0;default:switch(v(n,t)){case s.Sign.SMALLER:return y(i,n,e,t);case s.Sign.EQUAL:return!0;default:return b(i,n,e,t)}}}else switch(v(e,n)){case s.Sign.SMALLER:switch(v(t,n)){case s.Sign.SMALLER:return!1;case s.Sign.EQUAL:return!0;default:switch(v(t,i)){case s.Sign.SMALLER:return y(e,t,n,i);case s.Sign.EQUAL:return!0;default:return b(e,t,n,i)}}case s.Sign.EQUAL:return!0;default:switch(v(i,e)){case s.Sign.SMALLER:return!1;case s.Sign.EQUAL:return!0;default:switch(v(i,t)){case s.Sign.SMALLER:return y(n,i,e,t);case s.Sign.EQUAL:return!0;default:return b(n,i,e,t)}}}else if(g(i,n))switch(v(t,i)){case s.Sign.SMALLER:switch(v(e,i)){case s.Sign.SMALLER:return!1;case s.Sign.EQUAL:return!0;default:switch(v(e,n)){case s.Sign.SMALLER:return y(t,e,i,n);case s.Sign.EQUAL:return!0;default:return b(t,e,i,n)}}case s.Sign.EQUAL:return!0;default:switch(v(n,t)){case s.Sign.SMALLER:return!1;case s.Sign.EQUAL:return!0;default:switch(v(n,e)){case s.Sign.SMALLER:return y(i,n,t,e);case s.Sign.EQUAL:return!0;default:return b(i,n,t,e)}}}else switch(v(t,n)){case s.Sign.SMALLER:switch(v(e,n)){case s.Sign.SMALLER:return!1;case s.Sign.EQUAL:return!0;default:switch(v(e,i)){case s.Sign.SMALLER:return y(t,e,n,i);case s.Sign.EQUAL:return!0;default:return b(t,e,n,i)}}case s.Sign.EQUAL:return!0;default:switch(v(i,t)){case s.Sign.SMALLER:return!1;case s.Sign.EQUAL:return!0;default:switch(v(i,e)){case s.Sign.SMALLER:return y(n,i,t,e);case s.Sign.EQUAL:return!0;default:return b(n,i,t,e)}}}}function L(e){if(e!==e)return e;if(e===-1/0)return-Number.MAX_VALUE;if(e===1/0)return 1/0;if(e===+Number.MAX_VALUE)return 1/0;let t=e*(e<0?1-Number.EPSILON/2:1+Number.EPSILON);t===e&&(t=Number.MIN_VALUE*Number.EPSILON>0?e+Number.MIN_VALUE*Number.EPSILON:e+Number.MIN_VALUE),t===1/0&&(t=+Number.MAX_VALUE);const i=e+(t-e)/2;ewindow.innerWidth-100&&(t=window.innerWidth-100),i<0&&(i=0),i>window.innerHeight-100&&(i=window.innerHeight-100),this.$refs.container.style.left=t+"px",this.$refs.container.style.top=i+"px",this.$refs.container.style.display="block"}dragOver(e){this.dragging&&(this.$refs.container.style.display="none")}};s.__decorate([r.Prop(Boolean)],a.prototype,"visible",void 0),s.__decorate([r.Prop({type:Boolean,default:!0})],a.prototype,"mask",void 0),a=s.__decorate([o.default],a),t.default=a},5338:function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0});const s=i("9ab4"),n=s.__importDefault(i("8055")),o=i("2d5b");t.socket=n.default(location.protocol+"//"+location.host+"/pa_assetmgmt",{autoConnect:!1}),t.socket.on("connect",()=>{console.log("Connected")}),t.socket.on("disconnect",()=>{console.log("Disconnected")}),t.socket.on("redirect",e=>{console.log("redirecting"),window.location.href=e}),t.socket.on("Folder.Root.Set",e=>{o.assetStore.setRoot(e)}),t.socket.on("Folder.Set",e=>{if(o.assetStore.clear(),e.children)for(const t of e.children)o.assetStore.idMap.set(t.id,t),t.file_hash?o.assetStore.files.push(t.id):o.assetStore.folders.push(t.id)}),t.socket.on("Folder.Create",e=>{o.assetStore.folders.push(e.id),o.assetStore.idMap.set(e.id,e)}),t.socket.on("Asset.Upload.Finish",e=>{o.assetStore.idMap.set(e.id,e),o.assetStore.files.push(e.id)})},5394:function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0});const s=i("9ab4"),n=s.__importDefault(i("65d9")),o=s.__importDefault(i("1289")),r=s.__importDefault(i("ea6a")),a=i("0bc6"),l=i("6f92"),c=i("f10f");let u=class extends r.default{constructor(){super(...arguments),this.name="Filter",this.active=!1}get labels(){const e={};for(const t of Object.keys(c.gameStore.labels)){const i=c.gameStore.labels[t];i.category?(i.category in e||(e[i.category]=[]),e[i.category].push([i.uuid,i.name]),e[i.category].sort((e,t)=>e[1].localeCompare(t[1]))):e[""].push([i.uuid,i.name])}return e}get initalValues(){const e={};for(const t of Object.keys(this.labels))e[t]=c.gameStore.labelFilters.filter(e=>this.labels[t].map(e=>e[0]).includes(e));return e}get categories(){return Object.keys(this.labels).sort()}isFilter(e){return c.gameStore.labelFilters.includes(e)}toggleFilter(e){const t=c.gameStore.labelFilters.indexOf(e);t>=0?c.gameStore.labelFilters.splice(t,1):c.gameStore.labelFilters.push(e),l.layerManager.invalidate()}toggleUnlabeled(){c.gameStore.toggleUnlabeledFilter(),l.layerManager.invalidate()}updateSelection(e){if(e.title in this.labels){for(const[t,i]of this.labels[e.title]){const i=c.gameStore.labelFilters.indexOf(t),s=e.selection.includes(t);i>=0&&!s?(c.gameStore.labelFilters.splice(i,1),a.socket.emit("Labels.Filter.Remove",t)):i<0&&s&&(c.gameStore.labelFilters.push(t),a.socket.emit("Labels.Filter.Add",t))}l.layerManager.invalidate()}}};u=s.__decorate([n.default({components:{accordion:o.default}})],u),t.default=u},"53ec":function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0});const s=i("9ab4"),n=s.__importDefault(i("a026")),o=s.__importDefault(i("65d9")),r=i("60a3");let a=class extends n.default{constructor(){super(...arguments),this.selected=[],this.active=!1}mounted(){this.selected=this.initialValues,this.updateCategory()}toggleDisplay(e){this.active=!this.active}toggleCategory(){const e=this.$refs.overall;e.checked?this.selected=this.items.map(e=>e[0]):this.selected=[],this.$emit("selectionupdate",{title:this.title,selection:this.selected})}updateCategory(){const e=this.$refs.overall;0===this.selected.length?(e.checked=!1,e.indeterminate=!1):this.selected.length===this.items.length?(e.checked=!0,e.indeterminate=!1):(e.checked=!1,e.indeterminate=!0)}toggleSelection(e){const t=this.selected.indexOf(e);-1===t?this.selected.push(e):this.selected.splice(t,1),this.updateCategory(),this.$emit("selectionupdate",{title:this.title,selection:this.selected})}};s.__decorate([r.Prop(String)],a.prototype,"title",void 0),s.__decorate([r.Prop({default:!0,type:Boolean})],a.prototype,"showArrow",void 0),s.__decorate([r.Prop({default:()=>[]})],a.prototype,"items",void 0),s.__decorate([r.Prop({default:()=>[]})],a.prototype,"initialValues",void 0),a=s.__decorate([o.default],a),t.default=a},"561b":function(e,t,i){"use strict";var s=i("a450"),n=i.n(s);n.a},5722:function(e,t,i){},"574e":function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0});const s=i("8f0a"),n=i("8db6"),o=i("2469"),r=i("92b1"),a=i("5a5c");class l extends o.Shape{constructor(e,t,i,s,n){super(e,"rgba(0, 0, 0, 0)",s||"#000",n),this.type="multiline",this._points=[],this._points=t||[],this.lineWidth=i||3}get refPoint(){return this._refPoint}set refPoint(e){const t=e.subtract(this._refPoint);this._refPoint=e;for(let i=0;i({x:e.x,y:e.y}))})}fromDict(e){super.fromDict(e),this._points=e.points.map(e=>new s.GlobalPoint(e.x,e.y))}get points(){return this._points.map(e=>[e.x,e.y])}getBoundingBox(){let e=this.refPoint.x,t=this.refPoint.x,i=this.refPoint.y,o=this.refPoint.y;for(const s of this._points)s.xt&&(t=s.x),s.yo&&(o=s.y);return new n.BoundingRect(new s.GlobalPoint(e,i),t-e,o-i)}draw(e){super.draw(e),e.beginPath(),e.lineCap="round",e.lineJoin="round",e.moveTo(r.g2lx(this.refPoint.x),r.g2ly(this.refPoint.y));for(const t of this._points)e.lineTo(r.g2lx(t.x),r.g2ly(t.y));"fog"===this.strokeColour?e.strokeStyle=a.getFogColour():e.strokeStyle=this.strokeColour,e.lineWidth=r.g2lz(this.lineWidth),e.stroke()}contains(e){return this.getBoundingBox().contains(e)}center(e){return this.getBoundingBox().center()}visibleInCanvas(e){return this.getBoundingBox().visibleInCanvas(e)}snapToGrid(){}resizeToGrid(){}resize(e,t){0===e?this._refPoint=r.l2g(t):this._points[e-1]=r.l2g(t)}}t.MultiLine=l},"59d8":function(e,t,i){"use strict";i.r(t);var s=i("e5ca"),n=i("6f8d");for(var o in n)"default"!==o&&function(e){i.d(t,e,function(){return n[e]})}(o);i("a7b3");var r=i("2877"),a=Object(r["a"])(n["default"],s["a"],s["b"],!1,null,"639cd890",null);a.options.__file="draw.vue",t["default"]=a.exports},"59f0":function(e,t,i){"use strict";var s=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("modal",{attrs:{visible:e.visible,mask:!1},on:{close:function(t){e.visible=!1}},scopedSlots:e._u([{key:"header",fn:function(t){return i("div",{staticClass:"modal-header",attrs:{draggable:"true"},on:{dragstart:t.dragStart,dragend:t.dragEnd}},[i("div",[e._v("Initiative")]),i("div",{staticClass:"header-close",on:{click:function(t){e.visible=!1}}},[i("i",{staticClass:"far fa-window-close"})])])}}])},[i("div",{staticClass:"modal-body"},[i("draggable",{attrs:{id:"initiative-list",options:{setData:e.fakeSetData,disabled:!e.$store.state.game.IS_DM}},on:{change:e.updateOrder},model:{value:e.data,callback:function(t){e.data=t},expression:"data"}},[e._l(e.data,function(t){return[i("div",{key:t.uuid,staticStyle:{display:"flex","flex-direction":"column","align-items":"flex-end"}},[i("div",{staticClass:"initiative-actor",class:{"initiative-selected":e.currentActor===t.uuid},style:{cursor:e.$store.state.game.IS_DM&&"move"},on:{mouseenter:function(i){e.toggleHighlight(t,!0)},mouseleave:function(i){e.toggleHighlight(t,!1)}}},[t.has_img?[i("img",{attrs:{src:t.source,width:"30px",height:"30px"}})]:[i("span",{staticStyle:{width:"auto"}},[e._v(e._s(t.source))])],i("input",{directives:[{name:"model",rawName:"v-model.lazy.number",value:t.initiative,expression:"actor.initiative",modifiers:{lazy:!0,number:!0}}],class:{notAllowed:!e.owns(t)},attrs:{type:"text",placeholder:"value",disabled:!e.owns(t)},domProps:{value:t.initiative},on:{change:[function(i){e.$set(t,"initiative",e._n(i.target.value))},function(i){e.syncInitiative(t)}],blur:function(t){e.$forceUpdate()}}}),i("div",{staticClass:"initiative-effects-icon",class:{notAllowed:!e.owns(t)},staticStyle:{opacity:"0.6"},on:{click:function(i){e.createEffect(t,e.getDefaultEffect(),!0)}}},[i("i",{staticClass:"fas fa-stopwatch"}),t.effects?[e._v(e._s(t.effects.length))]:[e._v("0")]],2),i("div",{class:{notAllowed:!e.owns(t)},style:{opacity:t.visible?"1.0":"0.3"},on:{click:function(i){e.toggleOption(t,"visible")}}},[i("i",{staticClass:"fas fa-eye"})]),i("div",{class:{notAllowed:!e.owns(t)},style:{opacity:t.group?"1.0":"0.3"},on:{click:function(i){e.toggleOption(t,"group")}}},[i("i",{staticClass:"fas fa-users"})]),i("div",{class:{notAllowed:!e.owns(t)},style:{opacity:e.owns(t)?"1.0":"0.3"},on:{click:function(i){e.removeInitiative(t.uuid,!0,!0)}}},[i("i",{staticClass:"fas fa-trash-alt"})])],2),t.effects?i("div",{staticClass:"initiative-effect"},e._l(t.effects,function(s){return i("div",{key:s.uuid},[i("input",{directives:[{name:"model",rawName:"v-model",value:s.name,expression:"effect.name"}],attrs:{type:"text",size:s.name.length||1},domProps:{value:s.name},on:{change:function(i){e.updateEffect(t.uuid,s,!0)},input:function(t){t.target.composing||e.$set(s,"name",t.target.value)}}}),i("input",{directives:[{name:"model",rawName:"v-model",value:s.turns,expression:"effect.turns"}],attrs:{type:"text",size:s.turns.toString().length||1},domProps:{value:s.turns},on:{change:function(i){e.updateEffect(t.uuid,s,!0)},input:function(t){t.target.composing||e.$set(s,"turns",t.target.value)}}})])})):e._e()])]})],2),i("div",{attrs:{id:"initiative-bar"}},[i("div",{attrs:{id:"initiative-round"}},[e._v("Round "+e._s(e.roundCounter))]),i("div",{staticStyle:{display:"flex"}}),i("div",{staticClass:"initiative-bar-button",class:{notAllowed:!e.$store.state.game.IS_DM},on:{click:function(t){e.setRound(0,!0),e.updateTurn(e.data[0].uuid,!0)}}},[i("i",{staticClass:"fas fa-sync-alt"})]),i("div",{staticClass:"initiative-bar-button",class:{notAllowed:!e.$store.state.game.IS_DM},on:{click:e.nextTurn}},[i("i",{staticClass:"fas fa-chevron-right"})])])],1)])},n=[];i.d(t,"a",function(){return s}),i.d(t,"b",function(){return n})},"5a5c":function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0});const s=i("9ab4"),n=s.__importDefault(i("66cb")),o=i("8f0a"),r=i("f10f");function a(e){return new o.LocalPoint(e.pageX,e.pageY)}function l(e=!1){const t=n.default(r.gameStore.fowColour);return r.gameStore.IS_DM?t.setAlpha(e?1:r.gameStore.fowOpacity):t.setAlpha(1),t.toRgbString()}function c(e){return 1/(-5/3+28/15*Math.exp(1.83*e))}function u(e){return Math.log(15/28*(1/e+5/3))/1.83}t.getMouse=a,t.getFogColour=l,t.zoomValue=c,t.zoomDisplay=u},"5a81":function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0});const s=i("9ab4"),n=s.__importStar(i("66cb")),o=s.__importDefault(i("a026")),r=s.__importDefault(i("65d9")),a=i("2f62"),l=s.__importDefault(i("3b36")),c=s.__importDefault(i("d65f")),u=i("4a5b"),d=i("8f0a"),h=i("6f92"),f=i("1327"),p=i("f10f"),g=i("92b1"),v=i("60a3");let m=class extends o.default{constructor(){super(...arguments),this.x=0,this.y=0,this.visible=!1,this.text="X",this.fillColour="rgba(255, 255, 255, 1)",this.borderColour="rgba(0, 0, 0, 1)"}mounted(){this.updatePreview()}onTextChange(e,t){this.updatePreview()}onFillChange(e,t){this.updatePreview()}onBorderChange(e,t){this.updatePreview()}open(e,t){this.visible=!0,this.x=e,this.y=t}submit(){const e=h.layerManager.getLayer();if(void 0===e)return;const t=new f.CircularToken(g.l2g(new d.LocalPoint(this.x,this.y)),g.getUnitDistance(p.gameStore.unitSize/2),this.text,"10px serif",this.fillColour,this.borderColour);t.addOwner(p.gameStore.username),e.addShape(t,!0),e.invalidate(!1),this.visible=!1}updatePreview(){const e=this.$refs.canvas.getContext("2d");e.clearRect(0,0,e.canvas.width,e.canvas.height),e.beginPath();const t={x:e.canvas.width/2,y:e.canvas.height/2},i=.9*Math.min(t.x,t.y);e.fillStyle=this.fillColour,e.arc(t.x,t.y,i,0,2*Math.PI),e.fill(),"rgba(0, 0, 0, 0)"!==this.borderColour&&(e.beginPath(),e.lineWidth=5,e.strokeStyle=this.borderColour,e.arc(t.x,t.y,i,0,2*Math.PI),e.stroke()),e.save(),e.textAlign="center",e.textBaseline="middle";const s=u.calcFontScale(e,this.text,i,i),o=0;e.transform(s,o,-o,s,t.x,t.y),e.fillStyle=n.mostReadable(this.fillColour,["#000","#fff"]).toHexString(),e.fillText(this.text,0,0),e.restore()}};s.__decorate([v.Watch("text")],m.prototype,"onTextChange",null),s.__decorate([v.Watch("fillColour")],m.prototype,"onFillChange",null),s.__decorate([v.Watch("borderColour")],m.prototype,"onBorderChange",null),m=s.__decorate([r.default({components:{Modal:c.default,"color-picker":l.default},computed:Object.assign({},a.mapState("game",["unitSize"]))})],m),t.default=m},"5ae5":function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0});const s=i("9ab4"),n=s.__importDefault(i("a026")),o=s.__importDefault(i("65d9")),r=s.__importDefault(i("d65f")),a=i("4a5b"),l=i("f10f");let c=class extends n.default{constructor(){super(...arguments),this.visible=!1,this.note=null}open(e){this.visible=!0,this.note=e}calcHeight(){if(this.$refs.textarea){const e=this.$refs.textarea;return e.style.height="auto",e.style.height=e.scrollHeight+"px",e.scrollHeight+"px"}return"100px"}updateNote(){this.note&&l.gameStore.updateNote({note:this.note,sync:!0})}removeNote(){a.getRef("confirm").open("Are you sure you wish to remove this?").then(e=>{e&&this.note&&(l.gameStore.removeNote({note:this.note,sync:!0}),this.visible=!1)},()=>{})}};c=s.__decorate([o.default({components:{Modal:r.default}})],c),t.default=c},"5b69":function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0});const s=i("9ab4"),n=s.__importDefault(i("65d9")),o=i("60a3"),r=s.__importDefault(i("3b36")),a=s.__importDefault(i("ea6a")),l=i("0bc6"),c=i("8f0a"),u=i("6f92"),d=i("4709"),h=i("5e7c"),f=i("574e"),p=i("e4ea"),g=i("b2ed"),v=i("f10f"),m=i("92b1"),y=i("5a5c");let b=class extends a.default{constructor(){super(...arguments),this.name="Draw",this.active=!1,this.startPoint=null,this.shape=null,this.brushHelper=null,this.ruler=null,this.fillColour="rgba(0, 0, 0, 1)",this.borderColour="rgba(255, 255, 255, 0)",this.shapeSelect="square",this.shapes=["square","circle","draw-polygon","paint-brush"],this.modeSelect="normal",this.modes=["normal","reveal","hide"],this.brushSize=m.getUnitDistance(v.gameStore.unitSize)}get helperSize(){return"paint-brush"===this.shapeSelect?this.brushSize/2:m.getUnitDistance(this.unitSize)/8}get IS_DM(){return v.gameStore.IS_DM}get unitSize(){return v.gameStore.unitSize}get useGrid(){return v.gameStore.useGrid}onFillChange(){this.brushHelper&&(this.brushHelper.fillColour=this.fillColour)}onModeUpdate(e,t){this.onModeChange(e,t)}setupBrush(){null!==this.brushHelper&&("reveal"===this.modeSelect||"hide"===this.modeSelect?(this.brushHelper.options.set("preFogShape",!0),this.brushHelper.options.set("skipDraw",!0),this.brushHelper.fillColour="rgba(0, 0, 0, 1)","reveal"===this.modeSelect?this.brushHelper.globalCompositeOperation="source-over":"hide"===this.modeSelect&&(this.brushHelper.globalCompositeOperation="destination-out")):(this.brushHelper.options.delete("preFogShape"),this.brushHelper.options.delete("skipDraw"),this.brushHelper.globalCompositeOperation="source-over",this.brushHelper.fillColour=this.fillColour))}onModeChange(e,t){if(null===this.brushHelper)return;const i=u.layerManager.getLayer("fow"),s=u.layerManager.getLayer();void 0!==i&&void 0!==s&&(this.setupBrush(),"normal"!==e&&"normal"===t?(s.removeShape(this.brushHelper,!1),i.addShape(this.brushHelper,!1)):"normal"===e&&"normal"!==t&&(s.addShape(this.brushHelper,!1),i.removeShape(this.brushHelper,!1)))}getLayer(){return"normal"===this.modeSelect?u.layerManager.getLayer():u.layerManager.getLayer("fow")}onMouseDown(e){const t=this.getLayer();if(void 0!==t){if(this.active)null!==this.shape&&this.shape instanceof p.Polygon&&this.shape._vertices.push(m.l2g(y.getMouse(e)));else{switch(this.startPoint=m.l2g(y.getMouse(e)),this.active=!0,this.shapeSelect){case"square":this.shape=new g.Rect(this.startPoint.clone(),0,0,this.fillColour,this.borderColour);break;case"circle":this.shape=new d.Circle(this.startPoint.clone(),this.helperSize,this.fillColour,this.borderColour);break;case"paint-brush":this.shape=new f.MultiLine(this.startPoint.clone(),[],this.brushSize),this.shape.fillColour=this.fillColour;break;case"draw-polygon":this.shape=new p.Polygon(this.startPoint.clone(),[],this.fillColour,this.borderColour);break;default:return}"normal"!==this.modeSelect&&(this.shape.options.set("preFogShape",!0),this.shape.options.set("skipDraw",!0),this.shape.fillColour="rgba(0, 0, 0, 1)"),"reveal"===this.modeSelect?this.shape.globalCompositeOperation="source-over":"hide"===this.modeSelect&&(this.shape.globalCompositeOperation="destination-out"),this.shape.addOwner(v.gameStore.username),"fow"===t.name&&"normal"===this.modeSelect&&(this.shape.visionObstruction=!0,this.shape.movementObstruction=!0),t.addShape(this.shape,!0,!1,!1),this.pushBrushBack()}if(null!==this.shape&&this.shape instanceof p.Polygon){const i=m.l2g(y.getMouse(e));null===this.ruler?(this.ruler=new h.Line(i,i,3,"black"),t.addShape(this.ruler,!1)):(this.ruler.refPoint=i,this.ruler.endPoint=i),this.shape.visionObstruction&&v.gameStore.recalculateVision(!0),t.invalidate(!1),l.socket.emit("Shape.Update",{shape:this.shape.asDict(),redraw:!0,temporary:!0})}}else console.log("No active layer!")}onMouseMove(e){const t=m.l2g(y.getMouse(e)),i=this.getLayer();if(void 0!==i){if(null!==this.brushHelper&&(this.brushHelper.r=this.helperSize,this.brushHelper.refPoint=t,this.active||i.invalidate(!1)),this.active&&null!==this.startPoint&&null!==this.shape){switch(this.shapeSelect){case"square":this.shape.w=Math.abs(t.x-this.startPoint.x),this.shape.h=Math.abs(t.y-this.startPoint.y),this.shape.refPoint=new c.GlobalPoint(Math.min(this.startPoint.x,t.x),Math.min(this.startPoint.y,t.y));break;case"circle":this.shape.r=t.subtract(this.startPoint).length();break;case"paint-brush":this.shape._points.push(t);break;case"draw-polygon":this.ruler.endPoint=t;break}this.shape instanceof p.Polygon||(l.socket.emit("Shape.Update",{shape:this.shape.asDict(),redraw:!0,temporary:!0}),this.shape.visionObstruction&&v.gameStore.recalculateVision(!0)),i.invalidate(!1)}}else console.log("No active layer!")}onMouseUp(e){!this.active||null===this.shape||this.shape instanceof p.Polygon||(!e.altKey&&this.useGrid&&this.shape.resizeToGrid(),this.finaliseShape())}onContextMenu(e){if(!this.active||null===this.shape||!(this.shape instanceof p.Polygon))return;const t=this.getLayer();void 0!==t?(t.removeShape(this.ruler,!1),this.ruler=null,this.finaliseShape()):console.log("No active layer!")}finaliseShape(){null!==this.shape&&(this.shape.visionObstruction&&v.gameStore.recalculateVision(),this.shape.movementObstruction&&v.gameStore.recalculateMovement(),l.socket.emit("Shape.Update",{shape:this.shape.asDict(),redraw:!0,temporary:!1}),this.active=!1)}onSelect(){const e=this.getLayer();void 0!==e&&(this.brushHelper=new d.Circle(new c.GlobalPoint(-1e3,-1e3),this.brushSize/2,this.fillColour),this.setupBrush(),e.addShape(this.brushHelper,!1))}onDeselect(){const e=this.getLayer();null!==this.brushHelper&&void 0!==e&&e.removeShape(this.brushHelper,!1),this.active&&void 0!==e&&null!==this.shape&&(e.removeShape(this.shape,!0,!1),this.shape=null,this.active=!1,e.invalidate(!1))}pushBrushBack(){const e=this.getLayer();void 0!==e?(null!==this.brushHelper&&e.removeShape(this.brushHelper,!1),this.brushHelper=new d.Circle(new c.GlobalPoint(-1e3,-1e3),this.brushSize/2,this.fillColour),this.setupBrush(),e.addShape(this.brushHelper,!1)):console.log("No active layer!")}};s.__decorate([o.Watch("fillColour")],b.prototype,"onFillChange",null),s.__decorate([o.Watch("modeSelect")],b.prototype,"onModeUpdate",null),b=s.__decorate([n.default({components:{"color-picker":r.default}})],b),t.default=b},"5e7c":function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0});const s=i("8f0a"),n=i("8db6"),o=i("2469"),r=i("92b1");class a extends o.Shape{constructor(e,t,i,s,n){super(e,"rgba(0, 0, 0, 0)",s||"#000",n),this.type="line",this.endPoint=t,this.lineWidth=void 0===i?1:i}asDict(){return Object.assign(this.getBaseDict(),{x2:this.endPoint.x,y2:this.endPoint.y,line_width:this.lineWidth})}get points(){return[[this.refPoint.x,this.refPoint.y],[this.endPoint.x,this.endPoint.y]]}getBoundingBox(){return new n.BoundingRect(new s.GlobalPoint(Math.min(this.refPoint.x,this.endPoint.x),Math.min(this.refPoint.y,this.endPoint.y)),Math.abs(this.refPoint.x-this.endPoint.x),Math.abs(this.refPoint.y-this.endPoint.y))}draw(e){super.draw(e),e.strokeStyle=this.strokeColour,e.beginPath(),e.moveTo(r.g2lx(this.refPoint.x),r.g2ly(this.refPoint.y)),e.lineTo(r.g2lx(this.endPoint.x),r.g2ly(this.endPoint.y)),e.lineWidth=this.lineWidth,e.stroke()}contains(e){return!1}center(e){}visibleInCanvas(e){return this.getBoundingBox().visibleInCanvas(e)}snapToGrid(){}resizeToGrid(){}resize(e,t){0===e?this.refPoint=r.l2g(t):this.endPoint=r.l2g(t)}}t.Line=a},"5f86":function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0});const s=i("9ab4"),n=s.__importDefault(i("bc3a")),o=s.__importDefault(i("a026")),r=s.__importDefault(i("8c4f"));o.default.use(r.default);const a=s.__importDefault(i("e914")),l=s.__importDefault(i("1077")),c=s.__importDefault(i("cad7")),u=s.__importDefault(i("47f7")),d=s.__importDefault(i("c6b4")),h=s.__importDefault(i("07f5")),f=s.__importDefault(i("ce87")),p=i("cc67");t.router=new r.default({mode:"history",base:"/",routes:[{path:"/",redirect:"/dashboard"},{path:"/_load",name:"load",component:u.default},{path:"/assets",component:a.default,meta:{auth:!0}},{path:"/auth",component:{template:""},children:[{path:"login",component:l.default},{path:"logout",component:c.default}]},{path:"/invite/:code",component:f.default,meta:{auth:!0}},{path:"/dashboard",component:d.default,meta:{auth:!0}},{path:"/game/:creator/:room",component:h.default,meta:{auth:!0}}]}),t.router.beforeEach((e,i,s)=>{p.coreStore.initialized||"/_load"===e.path?e.matched.some(e=>e.meta.auth)&&!p.coreStore.authenticated?s({path:"/auth/login",query:{redirect:e.path}}):s():(s({path:"/_load"}),n.default.get("/api/auth").then(i=>{i.data.auth&&(p.coreStore.setAuthenticated(!0),p.coreStore.setUsername(i.data.username)),p.coreStore.setInitialized(!0),t.router.push(e.path)}).catch(()=>{console.error("Authentication check could not be fulfilled.")}))})},"5fa9":function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0});const s=i("9ab4"),n=s.__importDefault(i("a026")),o=s.__importDefault(i("65d9"));let r=class extends n.default{constructor(){super(...arguments),this.name="",this.selected=!1,this.active=!1}get detailRight(){const e=this.$parent.$refs[this.name+"-selector"][0].getBoundingClientRect(),t=e.left+e.width/2;return`${window.innerWidth-Math.min(window.innerWidth-25,t+75)}px`}get detailArrow(){const e=this.$parent.$refs[this.name+"-selector"][0].getBoundingClientRect(),t=e.left+e.width/2,i=Math.min(window.innerWidth-25,t+75);return`${i-t-14}px`}created(){this.$parent.$on("mousedown",(e,t)=>{t===this.name&&this.onMouseDown(e)}),this.$parent.$on("mouseup",(e,t)=>{t===this.name&&this.onMouseUp(e)}),this.$parent.$on("mousemove",(e,t)=>{t===this.name&&this.onMouseMove(e)}),this.$parent.$on("contextmenu",(e,t)=>{t===this.name&&this.onContextMenu(e)}),this.$parent.$on("tools-select-change",(e,t)=>{t===this.name?(this.selected=!1,this.onDeselect()):e===this.name&&(this.selected=!0,this.onSelect())})}onSelect(){}onDeselect(){}onMouseDown(e){}onMouseUp(e){}onMouseMove(e){}onContextMenu(e){}};r=s.__decorate([o.default],r),t.default=r},"602f":function(e,t,i){},6100:function(e,t,i){"use strict";i.r(t);var s=i("f3c9"),n=i("e94f");for(var o in n)"default"!==o&&function(e){i.d(t,e,function(){return n[e]})}(o);i("a5a4");var r=i("2877"),a=Object(r["a"])(n["default"],s["a"],s["b"],!1,null,"cf33581e",null);a.options.__file="tools.vue",t["default"]=a.exports},6465:function(e,t,i){"use strict";i.r(t);var s=i("5fa9"),n=i.n(s);for(var o in s)"default"!==o&&function(e){i.d(t,e,function(){return s[e]})}(o);t["default"]=n.a},"64a9":function(e,t,i){},6542:function(e,t,i){},"6c30":function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0});const s=i("c266"),n=i("f10f"),o=i("92b1");class r extends s.BaseRect{constructor(e,t,i,s,n){super(t,i,s,void 0,void 0,n),this.type="assetrect",this.src="",this.img=e}asDict(){return Object.assign(this.getBaseDict(),{src:this.src})}fromDict(e){super.fromDict(e),this.src=e.src}draw(e){super.draw(e);try{e.drawImage(this.img,o.g2lx(this.refPoint.x),o.g2ly(this.refPoint.y),o.g2lz(this.w),o.g2lz(this.h))}catch(t){console.warn(`Shape ${this.uuid} could not load the image ${this.src}`)}}getInitiativeRepr(){return{uuid:this.uuid,visible:!n.gameStore.IS_DM,group:!1,source:this.src,has_img:!0,effects:[],index:1/0}}}t.Asset=r},"6e4a":function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0});const s=i("98ef"),n=i("4aee");class o{constructor(){this.tds=new s.TDS}insertConstraint(e,t){const i=this.insert(e),s=this.insert(t);i!==s&&this.insertConstraintV(i,s)}insertConstraintV(e,t){const i=[[e,t]];while(i.length>0){const e=i.pop(),t=n.edgeInfo(e[0],e[1]);if(t.includes){this.markConstraint(t.fr,t.i),t.vi!==e[1]&&i.push([t.vi,e[1]]);continue}const s=this.findIntersectedFaces(e[0],e[1]);s.found?s.vi!==e[0]&&s.vi!==e[1]?(i.push([e[0],s.vi]),i.push([s.vi,e[1]])):i.push(e):(this.triangulateHole(s.intersectedFaces,s.listAB,s.listBA),s.vi!==e[1]&&i.push([s.vi,e[1]]))}}triangulateHole(e,t,i){const s=[];this.triangulateHole2(e,t,i,s),this.propagatingFlipE(s)}triangulateHole2(e,t,i,s){if(t.length>0){this.triangulateHalfHole(t,s),this.triangulateHalfHole(i,s);const n=t[0][0],o=i[0][0];n.neighbours[2]=o,o.neighbours[2]=n,n.constraints[2]=!0,o.constraints[2]=!0;while(e.length>0)this.tds.deleteTriangle(e.shift())}}triangulateHalfHole(e,t){let i,o,r=0;const a=()=>e[r],l=()=>e[i],c=a()[0].vertices[n.ccw(a()[1])];let u,d,h,f,p,g;i=r,++i;do{d=a()[0],p=a()[1],null!==d.neighbours[p]&&(u=d.neighbours[p],f=n.cw(u.indexV(d.vertices[n.cw(p)])),d=u.neighbours[f],p=this.tds.mirrorIndex(u,f)),h=l()[0],g=l()[1],null!==h.neighbours[g]&&(u=h.neighbours[g],f=n.cw(u.indexV(h.vertices[n.cw(g)])),h=u.neighbours[f],g=this.tds.mirrorIndex(u,f));const v=d.vertices[n.ccw(p)],m=d.vertices[n.cw(p)],y=h.vertices[n.cw(g)],b=n.orientation(v.point,m.point,y.point);switch(b){case s.Sign.RIGHT_TURN:{const s=this.tds.createTriangle(v,y,m,null,null,null);t.push([s,2]),s.neighbours[1]=d,s.neighbours[0]=h,d.neighbours[p]=s,h.neighbours[g]=s,d.isConstrained(p)&&(s.constraints[1]=!0),h.isConstrained(g)&&(s.constraints[0]=!0),v.triangle=s,m.triangle=s,y.triangle=s,o=r+1,e.splice(r,0,[s,2]),e.splice(Math.max(o,i),1),e.splice(Math.min(o,i),1),i=r,v!==c?--r:++i;break}case s.Sign.LEFT_TURN:case s.Sign.COLLINEAR:++r,++i;break}}while(i0){t=r[0][0],a=r[0][1],l=t.neighbours[a],c=this.tds.mirrorIndex(t,a),u=[t,a],r.splice(r.findIndex(e=>e[0]===u[0]&&e[1]===u[1]),1),d[0]=[t,n.cw(a)],d[1]=[t,n.ccw(a)],d[2]=[l,n.cw(c)],d[3]=[l,n.ccw(c)];for(const e of d){const t=e[0],i=e[1];s=[t.neighbours[i],this.tds.mirrorIndex(t,i)],this.lessEdge(e,s)?r.splice(r.findIndex(t=>t[0]===e[0]&&t[1]===e[1]),1):r.splice(r.findIndex(e=>e[0]===s[0]&&e[1]===s[1]),1)}this.flip(t,a);for(const e of d){const t=e[0],i=e[1];this.isFlipable(t,i)&&(s=[t.neighbours[i],this.tds.mirrorIndex(t,i)],this.lessEdge(e,s)?r.push(e):r.push(s))}}}flip(e,t){const i=e.neighbours[t],s=this.tds.mirrorIndex(e,t),o=e.neighbours[n.cw(t)],r=this.tds.mirrorIndex(e,n.cw(t)),a=e.neighbours[n.ccw(t)],l=this.tds.mirrorIndex(e,n.ccw(t)),c=i.neighbours[n.cw(s)],u=this.tds.mirrorIndex(i,n.cw(s)),d=i.neighbours[n.ccw(s)],h=this.tds.mirrorIndex(i,n.ccw(s));this.tds.flip(e,t),e.constraints[e.indexT(i)]=!1,i.constraints[i.indexT(e)]=!1,o.neighbours[r].constraints[this.tds.mirrorIndex(o,r)]=o.constraints[r],a.neighbours[l].constraints[this.tds.mirrorIndex(a,l)]=a.constraints[l],c.neighbours[u].constraints[this.tds.mirrorIndex(c,u)]=c.constraints[u],d.neighbours[h].constraints[this.tds.mirrorIndex(d,h)]=d.constraints[h]}isFlipable(e,t,i=!0){const o=e.neighbours[t];return!e.isInfinite()&&!o.isInfinite()&&(!e.constraints[t]&&n.sideOfOrientedCircle(o,e.vertices[t].point,i)===s.Sign.ON_POSITIVE_SIDE)}insertb(e,t,i,o){let r,a,l=!1;i===s.LocateType.EDGE&&t.isConstrained(o)&&(l=!0,r=t.vertices[n.ccw(o)],a=t.vertices[n.cw(o)]);const c=this.insertc(e,t,i,o);return l?this.updateConstraintsIncident(c,r,a):i!==s.LocateType.VERTEX&&this.clearConstraintsIncident(c),2===this.tds.dimension&&this.updateConstraintsOpposite(c),c}updateConstraintsIncident(e,t,i){if(0!==this.tds.dimension)if(1===this.tds.dimension){const t=new s.EdgeCirculator(e,null);do{t.t.constraints[2]=!0}while(t.next())}else{const o=new s.FaceCirculator(e,null);do{const s=o.t.indexV(e),r=n.cw(s),a=n.ccw(s);o.t.vertices[r]===t||o.t.vertices[r]===i?(o.t.constraints[a]=!0,o.t.constraints[r]=!1):(o.t.constraints[a]=!1,o.t.constraints[r]=!0)}while(o.next())}}clearConstraintsIncident(e){const t=new s.EdgeCirculator(e,null);if(t.valid)do{const e=t.t,i=t.ri;e.constraints[i]=!1,2===this.tds.dimension&&(e.neighbours[i].constraints[this.tds.mirrorIndex(e,i)]=!1)}while(t.next())}insertc(e,t,i,n){if(1===this.tds.vertices.length)return this.insertFirst(e);if(2===this.tds.vertices.length)return i===s.LocateType.VERTEX?this.tds.finiteVertex:this.insertSecond(e);switch(i){case s.LocateType.VERTEX:return t.vertices[n];case s.LocateType.OUTSIDE_AFFINE_HULL:return this.insertOutsideAffineHull(e);case s.LocateType.OUTSIDE_CONVEX_HULL:return this.insertOutsideConvexHull(e,t);case s.LocateType.EDGE:return this.insertInEdge(e,t,n);case s.LocateType.FACE:return this.insertInFace(e,t)}throw new Error("qwe")}insertInEdge(e,t,i){const s=this.tds.insertInEdge(t,i);return s.point=e,s}insertInFace(e,t){const i=this.tds.insertInFace(t);return i.point=e,i}insertFirst(e){const t=this.tds.insertDimUp();return t.point=e,t}insertSecond(e){const t=this.tds.insertDimUp(this.tds._infinite,!0);return t.point=e,t}insertOutsideAffineHull(e){let t=!1;if(1===this.tds.dimension){const i=this.tds.finiteEdge.first,o=n.orientation(i.vertices[0].point,i.vertices[1].point,e);t=o===s.Sign.COUNTERCLOCKWISE}const i=this.tds.insertDimUp(this.tds._infinite,t);return i.point=e,i}insertOutsideConvexHull(e,t){let i;if(1===this.tds.dimension)throw new Error("sdfasdasd");return i=this.insertOutsideConvexHull2(e,t),i.point=e,i}insertOutsideConvexHull2(e,t){let i=t.indexV(this.tds._infinite);const o=[],r=[];let a=new s.FaceCirculator(this.tds._infinite,t),l=!1;while(!l){a.prev(),i=a.t.indexV(this.tds._infinite);const t=a.t.vertices[n.ccw(i)].point,r=a.t.vertices[n.cw(i)].point;n.orientation(e,t,r)===s.Sign.LEFT_TURN?o.push(a.t):l=!0}a=new s.FaceCirculator(this.tds._infinite,t),l=!1;while(!l){a.next(),i=a.t.indexV(this.tds._infinite);const t=a.t.vertices[n.ccw(i)].point,o=a.t.vertices[n.cw(i)].point;n.orientation(e,t,o)===s.Sign.LEFT_TURN?r.push(a.t):l=!0}const c=this.tds.insertInFace(t);let u;c.point=e;while(o.length>0)u=o[0],i=n.ccw(u.indexV(this.tds._infinite)),this.tds.flip(u,i),o.shift();while(r.length>0)u=r[0],i=n.cw(u.indexV(this.tds._infinite)),this.tds.flip(u,i),r.shift();a=new s.FaceCirculator(c,null);while(!a.t.isInfinite())a.next();return this.tds._infinite.triangle=a.t,c}locate(e,t){let i=0,o=0;if(this.tds.dimension<0)return i=s.LocateType.OUTSIDE_AFFINE_HULL,o=4,{loc:null,lt:i,li:o};if(0===this.tds.dimension)return i=n.xyEqual(e,this.tds.finiteVertex.triangle.vertices[0].point)?s.LocateType.VERTEX:s.LocateType.OUTSIDE_AFFINE_HULL,o=4,{loc:null,lt:i,li:o};if(1===this.tds.dimension)return this.marchLocate1D(e);if(null===t){const e=this.tds._infinite.triangle;t=e.neighbours[e.indexV(this.tds._infinite)]}else t.isInfinite()&&(t=t.neighbours[t.indexV(this.tds._infinite)]);return this.marchLocate2D(t,e)}marchLocate1D(e){const t=this.tds._infinite.triangle,i=t.indexV(this.tds._infinite),o=t.neighbours[i],r=n.orientation(o.vertices[0].point,o.vertices[1].point,e);if(r===s.Sign.RIGHT_TURN||r===s.Sign.LEFT_TURN)return{loc:new s.Triangle,lt:s.LocateType.OUTSIDE_AFFINE_HULL,li:4};const a=o.indexT(t);if(n.collinearBetween(e,o.vertices[1-a].point,o.vertices[a].point))return{loc:t,lt:s.LocateType.OUTSIDE_CONVEX_HULL,li:i};if(n.xyEqual(e,o.vertices[1-a].point))return{loc:o,lt:s.LocateType.VERTEX,li:1-a};throw new Error("sdfsdf")}marchLocate2D(e,t){let i,o,r=null,a=!0;while(1){if(e.isInfinite())return{loc:e,lt:s.LocateType.OUTSIDE_CONVEX_HULL,li:e.indexV(this.tds._infinite)};const l=0,c=e.vertices[0].point,u=e.vertices[1].point,d=e.vertices[2].point;let h,f,p;if(a){if(r=e,a=!1,h=n.orientation(c,u,t),h===s.Sign.NEGATIVE){e=e.neighbours[2];continue}if(f=n.orientation(u,d,t),f===s.Sign.NEGATIVE){e=e.neighbours[0];continue}if(p=n.orientation(d,c,t),p===s.Sign.NEGATIVE){e=e.neighbours[1];continue}}else if(l)if(e.neighbours[0]===r){if(r=e,h=n.orientation(c,u,t),h===s.Sign.NEGATIVE){e=e.neighbours[2];continue}if(p=n.orientation(d,c,t),p===s.Sign.NEGATIVE){e=e.neighbours[1];continue}f=s.Sign.POSITIVE}else if(e.neighbours[1]===r){if(r=e,f=n.orientation(u,d,t),f===s.Sign.NEGATIVE){e=e.neighbours[0];continue}if(h=n.orientation(c,u,t),h===s.Sign.NEGATIVE){e=e.neighbours[2];continue}p=s.Sign.POSITIVE}else{if(r=e,p=n.orientation(d,c,t),p===s.Sign.NEGATIVE){e=e.neighbours[1];continue}if(f=n.orientation(u,d,t),f===s.Sign.NEGATIVE){e=e.neighbours[0];continue}h=s.Sign.POSITIVE}else if(e.neighbours[0]===r){if(r=e,p=n.orientation(d,c,t),p===s.Sign.NEGATIVE){e=e.neighbours[1];continue}if(h=n.orientation(c,u,t),h===s.Sign.NEGATIVE){e=e.neighbours[2];continue}f=s.Sign.POSITIVE}else if(e.neighbours[1]===r){if(r=e,h=n.orientation(c,u,t),h===s.Sign.NEGATIVE){e=e.neighbours[2];continue}if(f=n.orientation(u,d,t),f===s.Sign.NEGATIVE){e=e.neighbours[0];continue}p=s.Sign.POSITIVE}else{if(r=e,f=n.orientation(u,d,t),f===s.Sign.NEGATIVE){e=e.neighbours[0];continue}if(p=n.orientation(d,c,t),p===s.Sign.NEGATIVE){e=e.neighbours[1];continue}h=s.Sign.POSITIVE}const g=(h===s.Sign.COLLINEAR?1:0)+(f===s.Sign.COLLINEAR?1:0)+(p===s.Sign.COLLINEAR?1:0);switch(g){case 0:i=s.LocateType.FACE,o=4;break;case 1:i=s.LocateType.EDGE,o=h===s.Sign.COLLINEAR?2:f===s.Sign.COLLINEAR?0:1;break;case 2:i=s.LocateType.VERTEX,o=h!==s.Sign.COLLINEAR?2:f!==s.Sign.COLLINEAR?0:1;break}if(void 0===i||void 0===o)throw new Error("ert");return{loc:e,lt:i,li:o}}}iLocate(e,t){if(this.tds.dimension<2)return t;if(null===t){const e=this.tds._infinite.triangle;t=e.neighbours[e.indexV(this.tds._infinite)]}else t.isInfinite()&&(t=t.neighbours[t.indexV(this.tds._infinite)]);let i=null,s=t,o=!0,r=2500;while(1){if(!r--)return s;if(s.isInfinite())return s;const t=s.vertices[0].point,a=s.vertices[1].point,l=s.vertices[2].point;if(o){if(i=s,o=!1,n.hasInexactNegativeOrientation(t,a,e)){s=s.neighbours[2];continue}if(n.hasInexactNegativeOrientation(a,l,e)){s=s.neighbours[0];continue}if(n.hasInexactNegativeOrientation(l,t,e)){s=s.neighbours[1];continue}}else if(s.neighbours[0]===i){if(i=s,n.hasInexactNegativeOrientation(t,a,e)){s=s.neighbours[2];continue}if(n.hasInexactNegativeOrientation(l,t,e)){s=s.neighbours[1];continue}}else if(s.neighbours[1]===i){if(i=s,n.hasInexactNegativeOrientation(t,a,e)){s=s.neighbours[2];continue}if(n.hasInexactNegativeOrientation(a,l,e)){s=s.neighbours[0];continue}}else{if(i=s,n.hasInexactNegativeOrientation(l,t,e)){s=s.neighbours[1];continue}if(n.hasInexactNegativeOrientation(a,l,e)){s=s.neighbours[0];continue}}break}return s}}t.CDT=o},"6f8d":function(e,t,i){"use strict";i.r(t);var s=i("5b69"),n=i.n(s);for(var o in s)"default"!==o&&function(e){i.d(t,e,function(){return s[e]})}(o);t["default"]=n.a},"6f92":function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0});const s=i("8f0a"),n=i("6c30"),o=i("f10f"),r=i("92b1");class a{constructor(){this.layers=[],this.width=window.innerWidth,this.height=window.innerHeight,this.UUIDMap=new Map,this.interval=30,this.drawLoop=(()=>{for(let e=this.layers.length-1;e>=0;e--)this.layers[e].draw();requestAnimationFrame(this.drawLoop)}),requestAnimationFrame(this.drawLoop)}reset(){this.layers=[],this.UUIDMap=new Map}setWidth(e){this.width=e;for(const t of this.layers)t.canvas.width=e,t.width=e}setHeight(e){this.height=e;for(const t of this.layers)t.canvas.height=e,t.height=e}addLayer(e){this.layers.push(e),(o.gameStore.IS_DM||e.playerEditable)&&e.selectable&&o.gameStore.addLayer(e.name)}hasLayer(e){return this.layers.some(t=>t.name===e)}getLayer(e){e=void 0===e?o.gameStore.selectedLayer:e;for(const t of this.layers)if(t.name===e)return t}selectLayer(e,t=!0){let i=!1;for(const s of this.layers)s.selectable&&(i&&"fow"!==s.name?s.ctx.globalAlpha=.3:s.ctx.globalAlpha=1,e===s.name&&(o.gameStore.selectLayer({name:e,sync:t}),i=!0),s.clearSelection(),s.invalidate(!0))}getGridLayer(){return this.getLayer("grid")}hasSelection(){const e=this.getSelection();return void 0!==e&&e.length>0}getSelection(){const e=this.getLayer();if(void 0!==e)return e.selection}invalidate(){for(let e=this.layers.length-1;e>=0;e--)this.layers[e].invalidate(!0)}invalidateLight(){for(let e=this.layers.length-1;e>=0;e--)this.layers[e].isVisionLayer&&this.layers[e].invalidate(!0)}dropAsset(e){const t=this.getLayer();if(void 0===t||null===e||null===e.dataTransfer)return;const i=document.createElement("img");i.src=e.dataTransfer.getData("text/plain");const a=new n.Asset(i,new s.GlobalPoint(r.l2gx(e.clientX),r.l2gy(e.clientY)),r.l2gz(i.width),r.l2gz(i.height));if(a.src=new URL(i.src).pathname,o.gameStore.useGrid){const e=o.gameStore.gridSize;a.refPoint=new s.GlobalPoint(Math.round(a.refPoint.x/e)*e,Math.round(a.refPoint.y/e)*e),a.w=Math.max(Math.round(a.w/e)*e,e),a.h=Math.max(Math.round(a.h/e)*e,e)}t.addShape(a,!0)}}t.layerManager=new a,window.lm=t.layerManager},7018:function(e,t,i){"use strict";i.r(t);var s=i("ebb9"),n=i.n(s);for(var o in s)"default"!==o&&function(e){i.d(t,e,function(){return s[e]})}(o);t["default"]=n.a},7420:function(e,t,i){"use strict";i.r(t);var s=i("d320"),n=i("778b");for(var o in n)"default"!==o&&function(e){i.d(t,e,function(){return n[e]})}(o);i("c969");var r=i("2877"),a=Object(r["a"])(n["default"],s["a"],s["b"],!1,null,"73816298",null);a.options.__file="createtoken_modal.vue",t["default"]=a.exports},"76b3":function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0});class s{constructor(e,t){this.children=[],this.nPrimitives=e,this.bbox=t}}t.BoundingNode=s;class n extends s{constructor(e,t,i){super(t,i),this.firstPrimOffset=e}}t.LeafNode=n;class o extends s{constructor(e,t,i){super(0,t.bbox.union(i.bbox)),this.dimension=e,this.children.push(t),this.children.push(i)}}t.InteriorNode=o},"778b":function(e,t,i){"use strict";i.r(t);var s=i("5a81"),n=i.n(s);for(var o in s)"default"!==o&&function(e){i.d(t,e,function(){return s[e]})}(o);t["default"]=n.a},"77a6":function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0});const s=i("4a5b"),n=i("0bc6"),o=i("2b48"),r=i("af17"),a=i("8f0a"),l=i("6f92"),c=i("206a"),u=i("f10f"),d=i("2838");function h(e){if(e.target instanceof HTMLInputElement||e.target instanceof HTMLTextAreaElement);else if("Delete"===e.key||"Del"===e.key||"Backspace"===e.key){if(void 0===l.layerManager.getLayer)return void console.log("No active layer selected for delete operation");const e=l.layerManager.getLayer();for(let t=e.selection.length-1;t>=0;t--){const i=e.selection[t];s.getRef("tools").$refs.selectTool.selectionHelper.uuid!==i.uuid?(e.removeShape(i,!0,!1),r.EventBus.$emit("SelectionInfo.Shape.Set",null),r.EventBus.$emit("Initiative.Remove",i.uuid)):e.selection.splice(t,1)}}}function f(e){if(e.target instanceof HTMLInputElement||e.target instanceof HTMLTextAreaElement)65===e.keyCode&&e.ctrlKey&&e.target.select();else if(e.keyCode>=37&&e.keyCode<=40){const t=Math.round(u.gameStore.gridSize);let i=t*(e.keyCode%2),r=t*(e.keyCode%2?0:1);if(l.layerManager.hasSelection()){const t=l.layerManager.getSelection();i*=e.keyCode<=38?-1:1,r*=e.keyCode<=38?-1:1;let o=new a.Vector(i,r);if(!e.shiftKey||!u.gameStore.IS_DM)for(const e of t)s.getRef("tools").$refs.selectTool.selectionHelper.uuid!==e.uuid&&(o=d.calculateDelta(o,e));for(const e of t)s.getRef("tools").$refs.selectTool.selectionHelper.uuid!==e.uuid&&(e.refPoint=e.refPoint.add(o),n.socket.emit("Shape.Position.Update",{shape:e.asDict(),redraw:!0,temporary:!1}));u.gameStore.recalculateVision(),l.layerManager.getLayer().invalidate(!1)}else u.gameStore.increasePanX(i*(e.keyCode<=38?1:-1)),u.gameStore.increasePanY(r*(e.keyCode<=38?1:-1)),l.layerManager.invalidate(),o.sendClientOptions()}else if(68===e.keyCode){const e=l.layerManager.getLayer();e&&(e.clearSelection(),e.invalidate(!0))}else if("u"===e.key&&e.ctrlKey)e.preventDefault(),e.stopPropagation(),u.gameStore.toggleUI();else if("c"===e.key&&e.ctrlKey){const e=l.layerManager.getLayer();if(!e)return;if(!e.selection)return;const t=[];for(const i of e.selection)s.getRef("tools").$refs.selectTool.selectionHelper.uuid!==i.uuid&&t.push(i.asDict());u.gameStore.setClipboard(t)}else if("v"===e.key&&e.ctrlKey){const e=l.layerManager.getLayer();if(!e)return;if(!u.gameStore.clipboard)return;e.selection=[];for(const t of u.gameStore.clipboard){t.x+=10,t.y+=10,t.uuid=s.uuidv4();const i=t.trackers;t.trackers=[];for(const e of i){const i=Object.assign({},e,{uuid:s.uuidv4()});t.trackers.push(i)}const n=t.auras;t.auras=[];for(const e of n){const i=Object.assign({},e,{uuid:s.uuidv4()});t.auras.push(i)}const o=c.createShapeFromDict(t);void 0!==o&&(e.addShape(o,!0),e.selection.push(o))}1===e.selection.length?r.EventBus.$emit("SelectionInfo.Shape.Set",e.selection[0]):r.EventBus.$emit("SelectionInfo.Shape.Set",null),e.invalidate(!1)}}t.onKeyUp=h,t.onKeyDown=f},"78c7":function(e,t,i){"use strict";var s=i("9227"),n=i.n(s);n.a},7997:function(e,t,i){"use strict";var s=i("39a7"),n=i.n(s);n.a},"7aaa":function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0});const s=i("9ab4"),n=s.__importDefault(i("a026")),o=s.__importDefault(i("033f")),r=s.__importDefault(i("7420")),a=s.__importDefault(i("59d8")),l=s.__importDefault(i("bea6")),c=s.__importDefault(i("dec1")),u=s.__importDefault(i("4899")),d=s.__importDefault(i("c277")),h=i("6f92"),f=i("9cb7"),p=i("f10f"),g=i("d5df"),v=i("92b1"),m=i("5a5c"),y=s.__importDefault(i("65d9"));let b=class extends n.default{constructor(){super(...arguments),this.currentTool="Select",this.tools=["Select","Pan","Draw","Ruler","Map","Filter"],this.dmTools=["Map"]}get IS_DM(){return p.gameStore.IS_DM}get currentToolComponent(){return`${this.currentTool.toLowerCase()}-tool`}get visibleTools(){return this.tools.filter(e=>!this.dmTools.includes(e)||this.IS_DM)}mousedown(e){if("CANVAS"!==e.target.tagName)return;let t=this.currentTool;if(1===e.button)t="Pan";else if(0!==e.button)return;this.$emit("mousedown",e,t)}mouseup(e){if("CANVAS"!==e.target.tagName)return;let t=this.currentTool;if(1===e.button)t="Pan";else if(0!==e.button)return;this.$emit("mouseup",e,t)}mousemove(e){if("CANVAS"!==e.target.tagName)return;let t=this.currentTool;if(0!==(4&e.buttons))t="Pan";else if((1&e.button)>1)return;this.$emit("mousemove",e,t);let i=!1;for(const s of p.gameStore.annotations)if(h.layerManager.UUIDMap.has(s)&&h.layerManager.hasLayer("draw")){const t=h.layerManager.UUIDMap.get(s);t.contains(v.l2g(m.getMouse(e)))&&(i=!0,f.gameManager.annotationManager.setActiveText(t.annotation))}!i&&f.gameManager.annotationManager.shown&&f.gameManager.annotationManager.setActiveText("")}mouseleave(e){0!==(1&e.buttons)&&this.$emit("mouseup",e,this.currentTool)}contextmenu(e){"CANVAS"===e.target.tagName&&2===e.button&&"CANVAS"===e.target.tagName&&this.$emit("contextmenu",e,this.currentTool)}};b=s.__decorate([y.default({components:{"select-tool":d.default,"pan-tool":u.default,"draw-tool":a.default,"ruler-tool":g.RulerTool,"map-tool":c.default,"filter-tool":l.default,"shape-menu":o.default,"createtoken-dialog":r.default},watch:{currentTool(e,t){this.$emit("tools-select-change",e,t)}}})],b),t.default=b},"7ba5":function(e,t,i){"use strict";i.r(t);var s=i("fbdd"),n=i.n(s);for(var o in s)"default"!==o&&function(e){i.d(t,e,function(){return s[e]})}(o);t["default"]=n.a},"7e15":function(e,t,i){"use strict";i.r(t);var s=i("52a8"),n=i.n(s);for(var o in s)"default"!==o&&function(e){i.d(t,e,function(){return s[e]})}(o);t["default"]=n.a},"7f1e":function(e,t,i){"use strict";var s=i("fe11"),n=i.n(s);n.a},"851c":function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0});const s=i("9ab4"),n=s.__importDefault(i("a026")),o=s.__importDefault(i("65d9")),r=s.__importDefault(i("d65f"));let a=class extends n.default{constructor(){super(...arguments),this.visible=!1,this.question="",this.answer="",this.title="",this.resolve=(e=>{}),this.reject=(()=>{})}submit(){this.resolve(this.answer),this.close()}close(){this.reject(),this.visible=!1,this.question="",this.answer="",this.title=""}prompt(e,t){return this.question=e,this.title=t,this.visible=!0,this.$nextTick(()=>{this.$refs.answer.focus()}),new Promise((e,t)=>{this.resolve=e,this.reject=t})}};a=s.__decorate([o.default({components:{Modal:r.default}})],a),t.default=a},8790:function(e,t,i){"use strict";var s=i("a912"),n=i.n(s);n.a},"88af":function(e,t,i){"use strict";var s=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",[e._v(e._s(e.message))])},n=[];i.d(t,"a",function(){return s}),i.d(t,"b",function(){return n})},"8cd4":function(e,t,i){"use strict";i.r(t);var s=i("9587"),n=i.n(s);for(var o in s)"default"!==o&&function(e){i.d(t,e,function(){return s[e]})}(o);t["default"]=n.a},"8db6":function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0});const s=i("8f0a"),n=i("92b1");class o{constructor(e,t,i){this.w=t,this.h=i,this.topLeft=e,this.topRight=new s.GlobalPoint(e.x+t,e.y),this.botRight=new s.GlobalPoint(e.x+t,e.y+i),this.botLeft=new s.GlobalPoint(e.x,e.y+i)}contains(e){return this.topLeft.x<=e.x&&this.topRight.x>=e.x&&this.topLeft.y<=e.y&&this.botLeft.y>=e.y}get points(){return 0===this.w||0===this.h?[[this.topLeft.x,this.topLeft.y]]:[[this.topLeft.x,this.topLeft.y],[this.botLeft.x,this.botLeft.y],[this.botRight.x,this.botRight.y],[this.topRight.x,this.topRight.y]]}offset(e){return new o(this.topLeft.add(e),this.w,this.h)}union(e){const t=Math.min(this.topLeft.x,e.topLeft.x),i=Math.max(this.topRight.x,e.topRight.x),n=Math.min(this.topLeft.y,e.topLeft.y),r=Math.max(this.botLeft.y,e.botLeft.y);return new o(new s.GlobalPoint(t,n),i-t,r-n)}getDiagCorner(e){return e?this.botRight:this.topLeft}intersectsWith(e){return!(e.topLeft.x>this.topRight.x||e.topRight.xthis.botLeft.y||e.botLeft.y=this.topRight.x||e.topRight.x<=this.topLeft.x||e.topLeft.y>=this.botLeft.y||e.botLeft.y<=this.topLeft.y)}intersectP(e,t,i){let s=t.x*(this.getDiagCorner(i[0]).x-e.origin.x),n=t.x*(this.getDiagCorner(!i[0]).x-e.origin.x);const o=t.y*(this.getDiagCorner(i[1]).y-e.origin.y),r=t.y*(this.getDiagCorner(!i[1]).y-e.origin.y);return s>r||o>n?{hit:!1,min:s,max:n}:(o>s&&(s=o),r0,min:s,max:n})}center(){return this.topLeft.add(new s.Vector(this.w/2,this.h/2))}getMaxExtent(){return this.w>this.h?0:1}visibleInCanvas(e){const t=!(n.g2lx(this.topLeft.x)>e.width||n.g2ly(this.topLeft.y)>e.height||n.g2lx(this.topRight.x)<0||n.g2ly(this.botRight.y)<0);return!!t}}t.BoundingRect=o},"8e60":function(e,t,i){"use strict";var s=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{attrs:{id:"formcontainer"}},[e.owned||e.joined?i("form",[i("fieldset",[i("legend",{staticClass:"legend"},[e._v("Your sessions")]),i("div",{staticClass:"input"},[e._l(e.owned,function(t,s){return i("router-link",{key:"o-"+s,attrs:{to:"/game/"+t[1]+"/"+t[0]}},[e._v(e._s(t[0]))])}),e._l(e.joined,function(t,s){return i("router-link",{key:"j-"+s,attrs:{to:"/game/"+t[1]+"/"+t[0]}},[e._v(e._s(t[1])+"/"+e._s(t[0]))])})],2),0===e.owned.length?i("div",{staticClass:"input"},[e._v("No active sessions")]):e._e()])]):e._e(),e._m(0),i("form",{on:{submit:function(t){return t.preventDefault(),e.createRoom(t)}}},[i("fieldset",[e.owned||e.joined?i("div",{staticClass:"input"},[e._v("Create a new session")]):i("legend",{staticClass:"legend"},[e._v("Create a session")]),i("div",{staticClass:"input"},[i("input",{directives:[{name:"model",rawName:"v-model",value:e.newSessionName,expression:"newSessionName"}],attrs:{type:"text",name:"room_name",placeholder:"Session Name"},domProps:{value:e.newSessionName},on:{input:function(t){t.target.composing||(e.newSessionName=t.target.value)}}}),e._m(1)]),e._m(2)])]),i("div",{attrs:{id:"account-options"}},[i("form",{on:{submit:function(e){e.preventDefault()}}},[i("router-link",{staticClass:"submit",attrs:{tag:"button",title:"Account Settings",to:"/account"}},[i("i",{staticClass:"fas fa-cog"})])],1),i("form",{on:{submit:function(e){e.preventDefault()}}},[i("router-link",{staticClass:"submit",attrs:{tag:"button",title:"Logout",to:"/auth/logout"}},[i("i",{staticClass:"fas fa-sign-out-alt"})])],1)])])},n=[function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("h4",[i("span",[e._v("OR")])])},function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("span",[i("i",{staticClass:"fab fa-d-and-d"})])},function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("button",{staticClass:"submit",attrs:{type:"submit",title:"Create"}},[i("i",{staticClass:"fas fa-arrow-right"})])}];i.d(t,"a",function(){return s}),i.d(t,"b",function(){return n})},"8f0a":function(e,t,i){"use strict";function s(e,t){const i=e.x-t.x,s=e.y-t.y;return Math.sqrt(i*i+s*s)}Object.defineProperty(t,"__esModule",{value:!0}),t.getPointDistance=s;class n{constructor(e,t){this.x=e,this.y=t}static fromArray(e){return new n(e[0],e[1])}add(e){return new n(this.x+e.x,this.y+e.y)}subtract(e){return new a(this.x-e.x,this.y-e.y)}clone(){return new n(this.x,this.y)}get(e){return 0===e?this.x:this.y}asArray(){return[this.x,this.y]}}t.Point=n;class o extends n{add(e){return super.add(e)}subtract(e){return super.subtract(e)}clone(){return super.clone()}static fromArray(e){return new o(e[0],e[1])}}t.GlobalPoint=o;class r extends n{add(e){return super.add(e)}subtract(e){return super.subtract(e)}clone(){return super.clone()}}t.LocalPoint=r;class a{constructor(e,t){this.x=e,this.y=t}dot(e){return this.x*e.x+this.y*e.y}inverse(){return new a(0===this.x?0:1/this.x,0===this.y?0:1/this.y)}length(){return Math.sqrt(Math.pow(this.x,2)+Math.pow(this.y,2))}normalize(){const e=this.length();return new a(this.x/e,this.y/e)}reverse(){return new a(-this.x,-this.y)}multiply(e){return new a(this.x*e,this.y*e)}angle(){return 180*Math.atan2(this.y,this.x)/Math.PI}}t.Vector=a;class l{constructor(e,t,i){this.direction=t,this.origin=e,void 0===i&&(i=1/0),this.tMax=i}static fromPoints(e,t){const i=new a(t.x-e.x,t.y-e.y);let s;return s=Math.abs(i.x)>.01?(t.x-e.x)/i.x:(t.y-e.y)/i.y,new l(e,i,s)}get(e){return new n(this.origin.x+e*this.direction.x,this.origin.y+e*this.direction.y)}getDistance(e,t){return Math.sqrt(Math.pow(t-e,2)*(Math.pow(this.direction.x,2)+Math.pow(this.direction.y,2)))}getT(e,t){return e+Math.sqrt(Math.pow(t,2)/(Math.pow(this.direction.x,2)+Math.pow(this.direction.y,2)))}}t.Ray=l},"8f54":function(e,t,i){"use strict";var s=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("ul",[e._l(e.folders,function(t){return i("li",{key:t,staticClass:"folder",on:{click:function(t){return t.stopPropagation(),e.toggle(t)}}},[e._v("\n "+e._s(t)+"\n "),i("asset-node",{attrs:{asset:e.asset[t]}})],1)}),e._l(e.files,function(t){return i("li",{key:t.name,staticClass:"file draggable token",attrs:{draggable:"true"},on:{mouseover:function(i){e.showImage=t.hash},mouseout:function(t){e.showImage=null},dragstart:function(i){e.dragStart(i,"/static/assets/"+t.hash)}}},[e._v("\n "+e._s(t.name)+"\n "),e.showImage==t.hash?i("div",{staticClass:"preview"},[i("img",{staticClass:"asset-preview-image",attrs:{src:"/static/assets/"+t.hash}})]):e._e()])})],2)},n=[];i.d(t,"a",function(){return s}),i.d(t,"b",function(){return n})},9104:function(e,t,i){"use strict";var s=i("afd3"),n=i.n(s);n.a},"919a":function(e,t,i){},"91df":function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0});const s=i("9ab4"),n=s.__importDefault(i("a026")),o=s.__importDefault(i("65d9")),r=s.__importDefault(i("6f79"));i("fe80");const a=i("2ef0"),l=s.__importDefault(i("a535")),c=s.__importDefault(i("cec2")),u=s.__importDefault(i("f5fe")),d=s.__importDefault(i("f74c")),h=s.__importDefault(i("19f9")),f=s.__importDefault(i("f551")),p=s.__importDefault(i("f086")),g=s.__importDefault(i("6100")),v=i("0bc6"),m=i("77a6"),y=i("bb17"),b=i("6f92"),_=i("f10f"),w=i("92b1"),S=i("8f0a");let x=class extends n.default{constructor(){super(...arguments),this.ready={manager:!1,tools:!1}}get showUI(){return _.gameStore.showUI}get IS_DM(){return _.gameStore.IS_DM}get layers(){return _.gameStore.layers}get selectedLayer(){return _.gameStore.selectedLayer}get zoomDisplay(){return _.gameStore.zoomDisplay}set zoomDisplay(e){_.gameStore.updateZoom({newZoomDisplay:e,zoomLocation:w.l2g(new S.LocalPoint(window.innerWidth/2,window.innerHeight/2))})}mounted(){window.addEventListener("resize",this.resizeWindow),window.addEventListener("keyup",m.onKeyUp),window.addEventListener("keydown",m.onKeyDown),this.ready.manager=!0}destroyed(){window.removeEventListener("resize",this.resizeWindow),window.removeEventListener("keyup",m.onKeyUp),window.removeEventListener("keydown",m.onKeyDown),this.ready.manager=!1}zoom(e){a.throttle(y.scrollZoom)(e)}resizeWindow(){b.layerManager.setWidth(window.innerWidth),b.layerManager.setHeight(window.innerHeight),b.layerManager.invalidate()}mousedown(e){this.$refs.tools.mousedown(e)}mouseup(e){this.$refs.tools.mouseup(e)}mousemove(e){this.$refs.tools.mousemove(e)}mouseleave(e){this.$refs.tools.mouseleave(e)}contextmenu(e){this.$refs.tools.contextmenu(e)}selectLayer(e){b.layerManager.selectLayer(e)}drop(e){if(null!==e&&null!==e.dataTransfer)if(e.dataTransfer.files.length>0)this.$refs.confirm.open("Uploading files should be done through the asset manager.","Ok","").then(()=>{},()=>{});else{if(""===e.dataTransfer.getData("text/plain"))return;b.layerManager.dropAsset(e)}}};x=s.__decorate([o.default({components:{"tool-bar":g.default,"selection-info":p.default,"prompt-dialog":c.default,"confirm-dialog":l.default,"menu-bar":h.default,"initiative-dialog":u.default,"zoom-slider":r.default,"note-dialog":f.default,"label-dialog":d.default},beforeRouteEnter(e,t,i){v.createConnection(e),i()},beforeRouteLeave(e,t,i){v.socket.disconnect(),i()}})],x),t.default=x},9227:function(e,t,i){},"92b1":function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0});const s=i("8f0a"),n=i("f10f");function o(e){const t=n.gameStore.zoomFactor,i=n.gameStore.panX,o=n.gameStore.panY;return new s.LocalPoint((e.x+i)*t,(e.y+o)*t)}function r(e){return o(new s.GlobalPoint(e,0)).x}function a(e){return o(new s.GlobalPoint(0,e)).y}function l(e){return e*n.gameStore.zoomFactor}function c(e){return e/n.gameStore.unitSize*n.gameStore.gridSize}function u(e){return l(c(e))}function d(e){const t=n.gameStore.zoomFactor,i=n.gameStore.panX,o=n.gameStore.panY;return e instanceof s.LocalPoint?new s.GlobalPoint(e.x/t-i,e.y/t-o):new s.Ray(d(e.origin),e.direction.multiply(1/t),e.tMax)}function h(e){return d(new s.LocalPoint(e,0)).x}function f(e){return d(new s.LocalPoint(0,e)).y}function p(e){return e/n.gameStore.zoomFactor}function g(e){return p(c(e))}t.g2l=o,t.g2lx=r,t.g2ly=a,t.g2lz=l,t.getUnitDistance=c,t.g2lr=u,t.l2g=d,t.l2gx=h,t.l2gy=f,t.l2gz=p,t.l2gr=g,window.g2lx=r,window.g2ly=a},9587:function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0});const s=i("9ab4"),n=s.__importDefault(i("a026")),o=s.__importDefault(i("65d9")),r=i("2f62"),a=s.__importDefault(i("3b36")),l=s.__importDefault(i("0ddd")),c=i("4a5b"),u=i("0bc6"),d=i("6f92"),h=i("f10f");let f=class extends n.default{constructor(){super(...arguments),this.visible={settings:!1,locations:!1}}get useGrid(){return h.gameStore.useGrid}set useGrid(e){h.gameStore.setUseGrid({useGrid:e,sync:!0})}get fullFOW(){return h.gameStore.fullFOW}set fullFOW(e){h.gameStore.setFullFOW({fullFOW:e,sync:!0})}get fowOpacity(){return h.gameStore.fowOpacity}set fowOpacity(e){"number"===typeof e&&h.gameStore.setFOWOpacity({fowOpacity:e,sync:!0})}get fowLOS(){return h.gameStore.fowLOS}set fowLOS(e){h.gameStore.setLineOfSight({fowLOS:e,sync:!0})}get unitSize(){return h.gameStore.unitSize}set unitSize(e){"number"===typeof e&&h.gameStore.setUnitSize({unitSize:e,sync:!0})}get gridSize(){return h.gameStore.gridSize}set gridSize(e){"number"===typeof e&&h.gameStore.setGridSize({gridSize:e,sync:!0})}get gridColour(){return h.gameStore.gridColour}set gridColour(e){h.gameStore.setGridColour({colour:e,sync:!0})}get fowColour(){return h.gameStore.fowColour}set fowColour(e){h.gameStore.setFOWColour({colour:e,sync:!0})}get rulerColour(){return h.gameStore.rulerColour}set rulerColour(e){h.gameStore.setRulerColour({colour:e,sync:!0})}get visionRangeMin(){return h.gameStore.visionRangeMin}set visionRangeMin(e){"number"===typeof e&&h.gameStore.setVisionRangeMin({value:e,sync:!0})}get visionRangeMax(){return h.gameStore.visionRangeMax}set visionRangeMax(e){"number"===typeof e&&h.gameStore.setVisionRangeMax({value:e,sync:!0})}settingsClick(e){if(e.target.classList.contains("accordion")){e.target.classList.toggle("accordion-active");const t=e.target.nextElementSibling;null!==t&&(t.style.display=""===t.style.display?"block":"")}}changeLocation(e){u.socket.emit("Location.Change",e)}createLocation(){c.getRef("prompt").prompt("New location name:","Create new location").then(e=>{u.socket.emit("Location.New",e)},()=>{})}createNote(){const e={title:"New note",text:"",uuid:c.uuidv4()};h.gameStore.newNote({note:e,sync:!0}),this.openNote(e)}openNote(e){c.getRef("note").open(e)}changeVisionMode(e){const t=e.target.value.toLowerCase();"bvh"!==t&&"triangle"!==t||(h.gameStore.setVisionMode({mode:t,sync:!0}),h.gameStore.recalculateVision(),h.gameStore.recalculateMovement(),d.layerManager.invalidate())}};f=s.__decorate([o.default({components:{"color-picker":a.default,"asset-node":l.default},computed:Object.assign({},r.mapState("game",["invitationCode","IS_DM","locations","assets","notes"]))})],f),t.default=f},"979e":function(e,t,i){"use strict";i.r(t);var s=i("0634"),n=i.n(s);for(var o in s)"default"!==o&&function(e){i.d(t,e,function(){return s[e]})}(o);t["default"]=n.a},9845:function(e,t,i){"use strict";var s=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("ContextMenu",{attrs:{visible:e.visible,left:e.x+"px",top:e.y+"px"},on:{close:e.close}},[e.IS_DM?i("li",{on:{click:e.bringPlayers}},[e._v("Bring players")]):e._e(),i("li",{on:{click:e.createToken}},[e._v("Create basic token")]),i("li",{on:{click:e.showInitiative}},[e._v("Show initiative")])])},n=[];i.d(t,"a",function(){return s}),i.d(t,"b",function(){return n})},"98ef":function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0});const s=i("4aee");let n;var o,r;function a(){return[t.INFINITE,t.INFINITE]}t.INFINITE=-Infinity,function(e){e[e["NEGATIVE"]=-1]="NEGATIVE",e[e["ZERO"]=0]="ZERO",e[e["POSITIVE"]=1]="POSITIVE",e[e["RIGHT_TURN"]=-1]="RIGHT_TURN",e[e["LEFT_TURN"]=1]="LEFT_TURN",e[e["SMALLER"]=-1]="SMALLER",e[e["EQUAL"]=0]="EQUAL",e[e["LARGER"]=1]="LARGER",e[e["CLOCKWISE"]=-1]="CLOCKWISE",e[e["COUNTERCLOCKWISE"]=1]="COUNTERCLOCKWISE",e[e["COLLINEAR"]=0]="COLLINEAR",e[e["COPLANAR"]=0]="COPLANAR",e[e["DEGENERATE"]=0]="DEGENERATE",e[e["ON_NEGATIVE_SIDE"]=-1]="ON_NEGATIVE_SIDE",e[e["ON_ORIENTED_BOUNDARY"]=0]="ON_ORIENTED_BOUNDARY",e[e["ON_POSITIVE_SIDE"]=1]="ON_POSITIVE_SIDE"}(o=t.Sign||(t.Sign={})),function(e){e[e["UNDEFINED"]=-1]="UNDEFINED",e[e["VERTEX_VERTEX"]=0]="VERTEX_VERTEX",e[e["VERTEX_EDGE"]=1]="VERTEX_EDGE",e[e["EDGE_VERTEX"]=2]="EDGE_VERTEX",e[e["EDGE_EDGE"]=3]="EDGE_EDGE"}(r||(r={}));class l{constructor(...e){this.vertices=[],this.neighbours=[null,null,null],this.constraints=[!1,!1,!1],this.uid=l._counter++,this.vertices=e}from(e){return this.vertices=e.vertices.slice(0,e.vertices.length),this.neighbours=e.neighbours.slice(0,e.neighbours.length),this.constraints=e.constraints.slice(0,e.constraints.length),this}get dimension(){return this.vertices.length-1}addVertex(e){void 0===e&&console.log("UNDEFINED HIERE"),this.vertices.push(e),e.triangle=this}isConstrained(e){return this.constraints[e]}reorient(){this.vertices=[this.vertices[1],this.vertices[0],this.vertices[2]].slice(0,this.vertices.length),this.neighbours=[this.neighbours[1],this.neighbours[0],this.neighbours[2]],this.constraints=[this.constraints[1],this.constraints[0],this.constraints[2]]}indexV(e){return this.vertices.indexOf(e)}indexT(e){return this.neighbours.indexOf(e)}isInfinite(e){return void 0===e?this.vertices.includes(n):this.vertices[s.ccw(e)].infinite||this.vertices[s.cw(e)].infinite}contains(e){const t=-this.vertices[1].point[1]*this.vertices[2].point[0]+this.vertices[0].point[1]*(-this.vertices[1].point[0]+this.vertices[2].point[0])+this.vertices[0].point[0]*(this.vertices[1].point[1]-this.vertices[2].point[1])+this.vertices[1].point[0]*this.vertices[2].point[1],i=t<0?-1:1,s=(this.vertices[0].point[1]*this.vertices[2].point[0]-this.vertices[0].point[0]*this.vertices[2].point[1]+(this.vertices[2].point[1]-this.vertices[0].point[1])*e[0]+(this.vertices[0].point[0]-this.vertices[2].point[0])*e[1])*i;if(s<0)return!1;const n=(this.vertices[0].point[0]*this.vertices[1].point[1]-this.vertices[0].point[1]*this.vertices[1].point[0]+(this.vertices[0].point[1]-this.vertices[1].point[1])*e[0]+(this.vertices[1].point[0]-this.vertices[0].point[0])*e[1])*i;return n>0&&s+nt!==e)}setAdjacency(e,t,i,s){e.neighbours[t]=i,i.neighbours[s]=e}get finiteVertex(){return this.vertices[1]}get infiniteVertex(){const e=new c(a());return e.infinite=!0,e}get finiteEdge(){if(this.dimension<1)throw new Error("aspo");const e=new d(this);while(e.valid)e.next();return e.collect()}insertDimUp(e=new c,t=!0){const i=this.createVertex();let s,n;switch(this.dimension++,this.dimension){case 0:s=this.triangles[0],n=new l(i),this.triangles.push(n),this.setAdjacency(s,0,n,0),i.triangle=n;break;case 1:case 2:{const o=[],r=this.triangles.slice(0,this.triangles.length);for(const t of r){const s=(new l).from(t);this.triangles.push(s),t.vertices[this.dimension]=i,s.vertices[this.dimension]=e,this.setAdjacency(t,this.dimension,s,this.dimension),t.vertices.includes(e)&&o.push(s)}for(const e of r){const t=e.neighbours[this.dimension];for(let i=0;ie.center.center().get(r)0){if(i=!0,s=e.tMax=d.min,n=d.max,0===o||t)break;r=a[--o]}else c[u.dimension]?(a[o++]=r+1,r=u.secondChildOffset):(a[o++]=u.secondChildOffset,r++);else{if(0===o)break;r=a[--o]}}return{hit:i,intersect:e.get(s),tMin:s,tMax:n}}compact(){this.offset=0,null!==this.root&&this.flatten(this.root)}flatten(e){const t=this.offset,i=this.offset++;if(0===e.nPrimitives){this.flatten(e.children[0]);const i=this.flatten(e.children[1]);this.nodes[t]={bbox:e.bbox,dimension:e.dimension,nPrimitives:0,secondChildOffset:i}}else this.nodes[t]={bbox:e.bbox,primitivesOffset:e.firstPrimOffset,nPrimitives:e.nPrimitives};return i}createLeaf(e,t,i,s){const n=this.orderedPrims.length;for(let o=e;o1?i("li",[e._v("Layer\n "),i("ul",e._l(e.getLayers(),function(t){return i("li",{key:t.name,style:[e.getActiveLayer().name===t.name?{"background-color":"#82c8a0"}:{}],on:{click:function(i){e.setLayer(t.name)}}},[e._v(e._s(t.name))])}))]):e._e(),i("li",{on:{click:e.moveToBack}},[e._v("Move to back")]),i("li",{on:{click:e.moveToFront}},[e._v("Move to front")]),i("li",{on:{click:e.addInitiative}},[e._v(e._s(e.getInitiativeWord())+" initiative")]),i("li",{on:{click:e.openEditDialog}},[e._v("Show properties")])]):e._e()},n=[];i.d(t,"a",function(){return s}),i.d(t,"b",function(){return n})},a260:function(e,t,i){},a280:function(e,t,i){"use strict";var s=function(){var e=this,t=e.$createElement,i=e._self._c||t;return e.selected?i("div",{staticClass:"tool-detail",style:{"--detailRight":e.detailRight,"--detailArrow":e.detailArrow}},[i("div",{attrs:{id:"accordion-container"}},e._l(e.categories,function(t){return i("accordion",{key:t,attrs:{title:t,showArrow:!1,items:e.labels[t],initialValues:e.initalValues[t]},on:{selectionupdate:e.updateSelection}})}))]):e._e()},n=[];i.d(t,"a",function(){return s}),i.d(t,"b",function(){return n})},a450:function(e,t,i){},a474:function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0});const s=i("9ab4"),n=s.__importDefault(i("bc3a")),o=s.__importDefault(i("a026")),r=s.__importDefault(i("65d9")),a=i("cc67");r.default.registerHooks(["beforeRouteEnter"]);let l=class extends o.default{constructor(){super(...arguments),this.owned=[],this.joined=[],this.error="",this.newSessionName=""}beforeRouteEnter(e,t,i){n.default.get("/api/rooms").then(e=>{i(t=>{t.owned=e.data.owned,t.joined=e.data.joined})}).catch(e=>{i(t=>{t.error=e.message})})}createRoom(e){n.default.post("/api/rooms",{name:this.newSessionName}).then(e=>{this.$router.push(`/game/${a.coreStore.username}/${this.newSessionName}`)}).catch(e=>{this.error=e.message})}};l=s.__decorate([r.default],l),t.default=l},a535:function(e,t,i){"use strict";i.r(t);var s=i("e06e"),n=i("f30c");for(var o in n)"default"!==o&&function(e){i.d(t,e,function(){return n[e]})}(o);i("223d");var r=i("2877"),a=Object(r["a"])(n["default"],s["a"],s["b"],!1,null,"1883e207",null);a.options.__file="confirm.vue",t["default"]=a.exports},a5a4:function(e,t,i){"use strict";var s=i("0b13"),n=i.n(s);n.a},a68b:function(e,t,i){"use strict";i.r(t);var s=i("308b"),n=i.n(s);for(var o in s)"default"!==o&&function(e){i.d(t,e,function(){return s[e]})}(o);t["default"]=n.a},a755:function(e,t,i){"use strict";var s=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("ContextMenu",{attrs:{visible:e.visible,left:e.left+"px",top:e.top+"px"},on:{close:e.close}},[i("li",{on:{click:e.rename}},[e._v("Rename")]),i("li",{on:{click:e.remove}},[e._v("Remove")])])},n=[];i.d(t,"a",function(){return s}),i.d(t,"b",function(){return n})},a7b3:function(e,t,i){"use strict";var s=i("6542"),n=i.n(s);n.a},a912:function(e,t,i){},a9a6:function(e,t,i){"use strict";var s=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("Modal",{attrs:{visible:e.visible,mask:!1},on:{close:function(t){e.visible=!1}},scopedSlots:e._u([{key:"header",fn:function(t){return i("div",{staticClass:"modal-header",attrs:{draggable:"true"},on:{dragstart:t.dragStart,dragend:t.dragEnd}},[i("div",[e._v("Label manager")]),i("div",{staticClass:"header-close",on:{click:function(t){e.visible=!1}}},[i("i",{staticClass:"far fa-window-close"})])])}}])},[i("div",{staticClass:"modal-body"},[i("div",{staticClass:"grid"},[i("div",{staticClass:"header"},[i("abbr",{attrs:{title:"Category"}},[e._v("Cat.")])]),i("div",{staticClass:"header name"},[e._v("Name")]),i("div",{staticClass:"header"},[i("abbr",{attrs:{title:"Visible"}},[e._v("Vis.")])]),i("div",{staticClass:"header"},[i("abbr",{attrs:{title:"Delete"}},[e._v("Del.")])]),i("div",{staticClass:"separator spanrow",staticStyle:{margin:"0 0 7px"}}),i("input",{directives:[{name:"model",rawName:"v-model",value:e.search,expression:"search"}],ref:"search",staticClass:"spanrow",attrs:{type:"text",placeholder:"search"},domProps:{value:e.search},on:{input:function(t){t.target.composing||(e.search=t.target.value)}}})]),i("div",{staticClass:"grid scroll"},[e._l(e.categories,function(t){return[e._l(e.labels[t],function(t){return[i("div",{key:"row-"+t.uuid,staticClass:"row",on:{click:function(i){e.selectLabel(t.uuid)}}},[t.category?[i("div",{key:"cat-"+t.uuid},[e._v(e._s(t.category))]),i("div",{key:"name-"+t.uuid,staticClass:"name"},[e._v(e._s(t.name))])]:e._e(),t.category?e._e():[i("div",{key:"cat-"+t.uuid}),i("div",{key:"name-"+t.uuid,staticClass:"name"},[e._v(e._s(t.name))])],i("div",{key:"visible-"+t.uuid,class:{"lower-opacity":!t.visible},style:{textAlign:"center"},on:{click:function(i){i.stopPropagation(),e.toggleVisibility(t)}}},[i("i",{staticClass:"fas fa-eye"})]),i("div",{key:"delete-"+t.uuid,on:{click:function(i){i.stopPropagation(),e.deleteLabel(t.uuid)}}},[i("i",{staticClass:"fas fa-trash-alt"})])],2)]})]}),0===e.labels.length?[i("div",{attrs:{id:"no-labels"}},[e._v("No labels exist yet")])]:e._e()],2),i("div",{staticClass:"grid"},[i("div",{staticClass:"separator spanrow"}),i("input",{directives:[{name:"model",rawName:"v-model.trim",value:e.newCategory,expression:"newCategory",modifiers:{trim:!0}}],attrs:{type:"text"},domProps:{value:e.newCategory},on:{input:function(t){t.target.composing||(e.newCategory=t.target.value.trim())},blur:function(t){e.$forceUpdate()}}}),i("input",{directives:[{name:"model",rawName:"v-model.trim",value:e.newName,expression:"newName",modifiers:{trim:!0}}],attrs:{type:"text"},domProps:{value:e.newName},on:{input:function(t){t.target.composing||(e.newName=t.target.value.trim())},blur:function(t){e.$forceUpdate()}}}),i("button",{attrs:{id:"addLabelButton"},on:{click:function(t){return t.stopPropagation(),e.addLabel(t)}}},[e._v("Add")])])])])},n=[];i.d(t,"a",function(){return s}),i.d(t,"b",function(){return n})},aa69:function(e,t,i){"use strict";i.r(t);var s=i("0cf7"),n=i.n(s);for(var o in s)"default"!==o&&function(e){i.d(t,e,function(){return s[e]})}(o);t["default"]=n.a},af17:function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0});const s=i("9ab4"),n=s.__importDefault(i("a026"));t.EventBus=new n.default},afd3:function(e,t,i){},b0ac:function(e,t,i){"use strict";i.r(t);var s=i("a474"),n=i.n(s);for(var o in s)"default"!==o&&function(e){i.d(t,e,function(){return s[e]})}(o);t["default"]=n.a},b0c0:function(e,t,i){},b2ed:function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0});const s=i("c266"),n=i("f10f"),o=i("92b1"),r=i("5a5c");class a extends s.BaseRect{constructor(e,t,i,s,n,o){super(e,t,i,s,n,o),this.type="rect"}asDict(){return super.getBaseDict()}draw(e){super.draw(e),"fog"===this.fillColour?e.fillStyle=r.getFogColour():e.fillStyle=this.fillColour;const t=n.gameStore.zoomFactor,i=o.g2l(this.refPoint);e.fillRect(i.x,i.y,this.w*t,this.h*t),"rgba(0, 0, 0, 0)"!==this.strokeColour&&(e.strokeStyle=this.strokeColour,e.lineWidth=5,e.strokeRect(i.x,i.y,this.w*t,this.h*t))}}t.Rect=a},b62e:function(e,t,i){"use strict";var s=i("3eaf"),n=i.n(s);n.a},b6bc:function(e,t,i){"use strict";i.r(t);var s=i("5394"),n=i.n(s);for(var o in s)"default"!==o&&function(e){i.d(t,e,function(){return s[e]})}(o);t["default"]=n.a},b809:function(e,t,i){"use strict";i.r(t);var s=i("ca56"),n=i.n(s);for(var o in s)"default"!==o&&function(e){i.d(t,e,function(){return s[e]})}(o);t["default"]=n.a},b906:function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0});const s=i("8f0a"),n=i("bab4"),o=i("6f92"),r=i("d1ec"),a=i("f10f"),l=i("92b1"),c=i("cee3");class u extends n.Layer{constructor(){super(...arguments),this.isVisionLayer=!0}draw(){if(!this.valid){const t=this.ctx;if(!a.gameStore.fowLOS||r.Settings.skipPlayerFOW)return t.clearRect(0,0,this.canvas.width,this.canvas.height),void(this.valid=!0);t.clearRect(0,0,this.canvas.width,this.canvas.height);const i=t.globalCompositeOperation;t.fillStyle="rgba(0, 0, 0, 1)",a.gameStore.IS_DM||super.draw(!a.gameStore.fullFOW);const n=t.canvas.width+t.canvas.height;for(const u of a.gameStore.ownedtokens){const i=o.layerManager.UUIDMap.get(u);if(void 0===i)continue;const d=i.center(),h=l.g2l(d);if("bvh"===a.gameStore.visionMode){t.beginPath();let e=-1;for(let i=0;i<2*Math.PI;i+=r.Settings.angleSteps/2/180*Math.PI){const o=Math.cos(i),r=Math.sin(i),c=new s.Ray(d,new s.Vector(o,r)),u=a.gameStore.BV.intersect(c);u.hit?(-1!==e&&(t.arc(h.x,h.y,n,e,i),e=-1),t.lineTo(l.g2lx(u.intersect.x),l.g2ly(u.intersect.y))):-1===e&&(t.lineTo(h.x+n*o,h.y+n*r),e=i)}-1!==e?t.arc(h.x,h.y,n,e,2*Math.PI):t.closePath(),t.fill()}else{{const e=t.createRadialGradient(h.x,h.y,l.g2lr(a.gameStore.visionRangeMin),h.x,h.y,l.g2lr(a.gameStore.visionRangeMax));e.addColorStop(0,"rgba(0, 0, 0, 1)"),e.addColorStop(1,"rgba(0, 0, 0, 0)"),t.fillStyle=e}try{const s=c.computeVisibility(i.center(),"vision");t.beginPath(),t.moveTo(l.g2lx(s[0][0]),l.g2ly(s[0][1]));for(const e of s)t.lineTo(l.g2lx(e[0]),l.g2ly(e[1]));t.closePath(),t.fill()}catch(e){}}}a.gameStore.IS_DM&&super.draw(!a.gameStore.fullFOW),t.globalCompositeOperation=i}}}t.FOWPlayersLayer=u},bab4:function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0});const s=i("0bc6"),n=i("af17"),o=i("6f92"),r=i("206a"),a=i("f10f"),l=i("92b1");class c{constructor(e,t){this.selectable=!1,this.playerEditable=!1,this.isVisionLayer=!1,this.valid=!1,this.shapes=[],this.selection=[],this.selectionColor="#CC0000",this.selectionWidth=2,this.canvas=e,this.name=t,this.width=e.width,this.height=e.height,this.ctx=e.getContext("2d")}invalidate(e){this.valid=!1,e||o.layerManager.invalidateLight()}addShape(e,t,i,n=!0){void 0===i&&(i=!1),e.layer=this.name,this.shapes.push(e),o.layerManager.UUIDMap.set(e.uuid,e),e.checkVisionSources(n),e.setMovementBlock(e.movementObstruction,n),e.ownedBy(a.gameStore.username)&&e.isToken&&a.gameStore.ownedtokens.push(e.uuid),e.annotation.length&&a.gameStore.annotations.push(e.uuid),t&&s.socket.emit("Shape.Add",{shape:e.asDict(),temporary:i}),n&&this.invalidate(!t)}setShapes(e){for(const t of e){const e=r.createShapeFromDict(t);if(void 0===e)return void console.log(`Shape with unknown type ${t.type_} could not be added`);this.addShape(e,!1,!1,!1)}this.clearSelection(),this.invalidate(!1)}removeShape(e,t,i){void 0===i&&(i=!1),this.shapes.splice(this.shapes.indexOf(e),1),t&&s.socket.emit("Shape.Remove",{shape:e.asDict(),temporary:i});const n=a.gameStore.visionSources.findIndex(t=>t.shape===e.uuid),r=a.gameStore.visionBlockers.findIndex(t=>t===e.uuid),l=a.gameStore.movementblockers.findIndex(t=>t===e.uuid),c=a.gameStore.annotations.findIndex(t=>t===e.uuid);n>=0&&a.gameStore.visionSources.splice(n,1),r>=0&&a.gameStore.visionBlockers.splice(r,1),l>=0&&a.gameStore.movementblockers.splice(l,1),c>=0&&a.gameStore.annotations.splice(c,1);const u=a.gameStore.annotations.indexOf(e.uuid);u>=0&&a.gameStore.annotations.splice(u,1);const d=a.gameStore.ownedtokens.indexOf(e.uuid);d>=0&&a.gameStore.ownedtokens.splice(d,1),o.layerManager.UUIDMap.delete(e.uuid);const h=this.selection.indexOf(e);h>=0&&this.selection.splice(h,1),r>=0&&a.gameStore.recalculateVision(),l>=0&&a.gameStore.recalculateMovement(),this.invalidate(!t)}clear(){this.ctx.clearRect(0,0,this.width,this.height)}clearSelection(){this.selection=[],n.EventBus.$emit("SelectionInfo.Shape.Set",null)}draw(e){if(!this.valid){const t=this.ctx,i=t.globalCompositeOperation;e=void 0===e||e,e&&this.clear();const s=this;if(this.shapes.forEach(e=>{e.options.has("skipDraw")&&e.options.get("skipDraw")||void 0!==o.layerManager.getLayer()&&e.visibleInCanvas(s.canvas)&&("fow"===s.name&&e.visionObstruction&&o.layerManager.getLayer().name!==s.name||e.drawAuras(t))}),this.shapes.forEach(e=>{e.options.has("skipDraw")&&e.options.get("skipDraw")||0===e.labels.length&&a.gameStore.filterNoLabel||e.labels.length&&a.gameStore.labelFilters.length&&!e.labels.some(e=>a.gameStore.labelFilters.includes(e.uuid))||void 0!==o.layerManager.getLayer()&&e.visibleInCanvas(s.canvas)&&("fow"===s.name&&e.visionObstruction&&o.layerManager.getLayer().name!==s.name||e.draw(t))}),null!=this.selection){t.fillStyle=this.selectionColor,t.strokeStyle=this.selectionColor,t.lineWidth=this.selectionWidth;const e=a.gameStore.zoomFactor;this.selection.forEach(i=>{t.globalCompositeOperation=i.globalCompositeOperation;const s=i.getBoundingBox();t.strokeRect(l.g2lx(s.topLeft.x),l.g2ly(s.topLeft.y),s.w*e,s.h*e);for(const e of i.points)t.beginPath(),t.arc(l.g2lx(e[0]),l.g2ly(e[1]),3,0,2*Math.PI),t.fill();t.beginPath(),t.moveTo(l.g2lx(i.points[0][0]),l.g2ly(i.points[0][1]));for(let e=1;e<=i.points.length;e++){const s=i.points[e%i.points.length];t.lineTo(l.g2lx(s[0]),l.g2ly(s[1]))}t.stroke()})}t.globalCompositeOperation=i,this.valid=!0}}moveShapeOrder(e,t,i){const n=this.shapes.indexOf(e);n!==t&&(this.shapes.splice(n,1),this.shapes.splice(t,0,e),i&&s.socket.emit("Shape.Order.Set",{shape:e.asDict(),index:t}),this.invalidate(!0))}}t.Layer=c},bb17:function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0});const s=i("f10f"),n=i("92b1"),o=i("5a5c");function r(e){if(!e.target||!e.target.tagName||"CANVAS"!==e.target.tagName)return;let t;t=-1*Math.sign(e.deltaY),s.gameStore.updateZoom({newZoomDisplay:s.gameStore.zoomDisplay-.1*t,zoomLocation:n.l2g(o.getMouse(e))})}t.scrollZoom=r},bea6:function(e,t,i){"use strict";i.r(t);var s=i("a280"),n=i("b6bc");for(var o in n)"default"!==o&&function(e){i.d(t,e,function(){return n[e]})}(o);i("e3f5"),i("e037");var r=i("2877"),a=Object(r["a"])(n["default"],s["a"],s["b"],!1,null,"847e7ec4",null);a.options.__file="filter.vue",t["default"]=a.exports},bf44:function(e,t,i){},c1e0:function(e,t,i){},c242:function(e,t,i){"use strict";var s=i("bf44"),n=i.n(s);n.a},c266:function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0});const s=i("8f0a"),n=i("8db6"),o=i("2469"),r=i("f10f"),a=i("2838"),l=i("92b1");class c extends o.Shape{constructor(e,t,i,s,n,o){super(e,s,n,o),this.w=t,this.h=i}getBaseDict(){return Object.assign(super.getBaseDict(),{width:this.w,height:this.h})}getBoundingBox(){return new n.BoundingRect(this.refPoint,this.w,this.h)}get points(){if(0===this.w||0===this.h)return[[this.refPoint.x,this.refPoint.y]];const e=this.refPoint.add(new s.Vector(0,this.h)),t=this.refPoint.add(new s.Vector(this.w,this.h)),i=this.refPoint.add(new s.Vector(this.w,0));return[[this.refPoint.x,this.refPoint.y],[e.x,e.y],[t.x,t.y],[i.x,i.y]]}contains(e){return this.refPoint.x<=e.x&&this.refPoint.x+this.w>=e.x&&this.refPoint.y<=e.y&&this.refPoint.y+this.h>=e.y}center(e){if(void 0===e)return this.refPoint.add(new s.Vector(this.w/2,this.h/2));this.refPoint=new s.GlobalPoint(e.x-this.w/2,e.y-this.h/2)}visibleInCanvas(e){if(super.visibleInCanvas(e))return!0;const t=!(l.g2lx(this.refPoint.x)>e.width||l.g2ly(this.refPoint.y)>e.height||l.g2lx(this.refPoint.x+this.w)<0||l.g2ly(this.refPoint.y+this.h)<0);return!!t}snapToGrid(){const e=r.gameStore.gridSize,t=this.center(),i=t.x,n=t.y;let o,l;o=this.w/e%2===0?Math.round(i/e)*e-this.w/2:(Math.round((i+e/2)/e)-.5)*e-this.w/2,l=this.h/e%2===0?Math.round(n/e)*e-this.h/2:(Math.round((n+e/2)/e)-.5)*e-this.h/2;const c=a.calculateDelta(new s.Vector(o-this.refPoint.x,l-this.refPoint.y),this);this.refPoint=this.refPoint.add(c),this.invalidate(!1)}resizeToGrid(){const e=r.gameStore.gridSize;this.refPoint=new s.GlobalPoint(Math.round(this.refPoint.x/e)*e,Math.round(this.refPoint.y/e)*e),this.w=Math.max(Math.round(this.w/e)*e,e),this.h=Math.max(Math.round(this.h/e)*e,e),this.invalidate(!1)}resize(e,t){const i=r.gameStore.zoomFactor;switch(e){case 0:this.w=l.g2lx(this.refPoint.x)+this.w*i-t.x,this.h=l.g2ly(this.refPoint.y)+this.h*i-t.y,this.refPoint=l.l2g(t);break;case 1:this.w=l.g2lx(this.refPoint.x)+this.w*i-t.x,this.h=t.y-l.g2ly(this.refPoint.y),this.refPoint=new s.GlobalPoint(l.l2gx(t.x),this.refPoint.y);break;case 2:this.w=t.x-l.g2lx(this.refPoint.x),this.h=t.y-l.g2ly(this.refPoint.y);break;case 3:this.w=t.x-l.g2lx(this.refPoint.x),this.h=l.g2ly(this.refPoint.y)+this.h*i-t.y,this.refPoint=new s.GlobalPoint(this.refPoint.x,l.l2gy(t.y));break}this.w/=i,this.h/=i,this.w<0&&(this.refPoint=this.refPoint.add(new s.Vector(this.w,0)),this.w=Math.abs(this.w)),this.h<0&&(this.refPoint=this.refPoint.add(new s.Vector(0,this.h)),this.h=Math.abs(this.h))}}t.BaseRect=c},c277:function(e,t,i){"use strict";i.r(t);var s=i("22bd"),n=i("e27a");for(var o in n)"default"!==o&&function(e){i.d(t,e,function(){return n[e]})}(o);var r=i("2877"),a=Object(r["a"])(n["default"],s["a"],s["b"],!1,null,null,null);a.options.__file="select.vue",t["default"]=a.exports},c31c:function(e,t,i){},c6b4:function(e,t,i){"use strict";i.r(t);var s=i("8e60"),n=i("b0ac");for(var o in n)"default"!==o&&function(e){i.d(t,e,function(){return n[e]})}(o);i("d767");var r=i("2877"),a=Object(r["a"])(n["default"],s["a"],s["b"],!1,null,"61eb1455",null);a.options.__file="main.vue",t["default"]=a.exports},c969:function(e,t,i){"use strict";var s=i("3a20"),n=i.n(s);n.a},c9a2:function(e,t,i){"use strict";var s=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{attrs:{id:"AssetManager"}},[i("div",{attrs:{id:"titlebar"}},[e._v("Asset Manager")]),i("div",{attrs:{id:"main"}},[i("div",{attrs:{id:"assets"},on:{dragover:function(t){return t.preventDefault(),e.moveDrag(t)},drop:function(t){t.preventDefault(),t.stopPropagation(),e.stopDrag(t,e.currentFolder)}}},[i("div",{attrs:{id:"breadcrumbs"}},[i("div",[e._v("/")]),e._l(e.path,function(t){return i("div",{key:t},[e._v(e._s(e.idMap.get(t).name))])})],2),i("div",{attrs:{id:"actionbar"}},[i("input",{attrs:{id:"files",type:"file",multiple:"",hidden:""},on:{change:function(t){e.upload()}}}),i("div",{attrs:{title:"Create folder"},on:{click:e.createDirectory}},[i("i",{staticClass:"fas fa-plus-square"})]),i("div",{attrs:{title:"Upload files"},on:{click:e.prepareUpload}},[i("i",{staticClass:"fas fa-upload"})])]),i("div",{attrs:{id:"explorer"}},[e.path.length?i("div",{staticClass:"inode folder",on:{dblclick:function(t){e.changeDirectory(-1)},dragover:function(t){return t.preventDefault(),e.moveDrag(t)},dragleave:function(t){return t.preventDefault(),e.leaveDrag(t)},drop:function(t){t.preventDefault(),t.stopPropagation(),e.stopDrag(t,e.parentFolder)}}},[i("i",{staticClass:"fas fa-folder",staticStyle:{"font-size":"50px"}}),i("div",{staticClass:"title"},[e._v("..")])]):e._e(),e._l(e.folders,function(t){return i("div",{key:t,staticClass:"inode folder",class:{"inode-selected":e.selected.includes(t)},attrs:{draggable:"true"},on:{click:function(i){e.select(i,t)},dblclick:function(i){e.changeDirectory(t)},contextmenu:function(i){i.preventDefault(),e.$refs.cm.open(i,t)},dragstart:function(i){e.startDrag(i,t)},dragover:function(t){return t.preventDefault(),e.moveDrag(t)},dragleave:function(t){return t.preventDefault(),e.leaveDrag(t)},drop:function(i){i.preventDefault(),i.stopPropagation(),e.stopDrag(i,t)}}},[i("i",{staticClass:"fas fa-folder",staticStyle:{"font-size":"50px"}}),i("div",{staticClass:"title"},[e._v(e._s(e.idMap.get(t).name))])])}),e._l(e.files,function(t){return i("div",{key:t,staticClass:"inode file",class:{"inode-selected":e.selected.includes(t)},attrs:{draggable:"true"},on:{click:function(i){e.select(i,t)},contextmenu:function(i){i.preventDefault(),e.$refs.cm.open(i,t)},dragstart:function(i){e.startDrag(i,t)}}},[i("img",{attrs:{src:"/static/assets/"+e.idMap.get(t).file_hash,width:"50"}}),i("div",{staticClass:"title"},[e._v(e._s(e.idMap.get(t).name))])])})],2)]),e.firstSelectedFile?i("div",{attrs:{id:"asset-details"}},[i("div",{attrs:{id:"asset-detail-title"}},[e._v(e._s(e.firstSelectedFile.name))]),i("img",{attrs:{src:"/static/assets/"+e.firstSelectedFile.file_hash}})]):e._e()]),i("AssetContextMenu",{ref:"cm"}),i("Prompt",{ref:"prompt"}),i("ConfirmDialog",{ref:"confirm"})],1)},n=[];i.d(t,"a",function(){return s}),i.d(t,"b",function(){return n})},ca56:function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0});const s=i("9ab4"),n=s.__importDefault(i("a026")),o=s.__importDefault(i("65d9")),r=s.__importDefault(i("1c76")),a=i("0bc6"),l=i("af17"),c=i("f10f"),u=i("92b1");let d=class extends n.default{constructor(){super(...arguments),this.visible=!1,this.x=0,this.y=0}get IS_DM(){return c.gameStore.IS_DM}open(e){this.visible=!0,this.x=e.pageX,this.y=e.pageY,this.$nextTick(()=>this.$children[0].$el.focus())}close(){this.visible=!1}bringPlayers(){c.gameStore.IS_DM&&(a.socket.emit("Players.Bring",{x:u.l2gx(this.x),y:u.l2gy(this.y)}),this.close())}createToken(){this.$parent.$parent.$refs.createtokendialog.open(this.x,this.y),this.close()}showInitiative(){l.EventBus.$emit("Initiative.Show"),this.close()}};d=s.__decorate([o.default({components:{ContextMenu:r.default}})],d),t.default=d},cad7:function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0});const s=i("9ab4"),n=s.__importDefault(i("bc3a")),o=s.__importDefault(i("a026")),r=s.__importDefault(i("65d9")),a=i("cc67");r.default.registerHooks(["beforeRouteEnter"]);let l=class extends o.default{beforeRouteEnter(e,t,i){n.default.post("/api/logout").then(()=>{a.coreStore.setAuthenticated(!1),a.coreStore.setUsername(""),i({path:"/auth/login"})})}};l=s.__decorate([r.default({})],l),t.default=l},cc67:function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0});const s=i("9ab4"),n=i("6fc5"),o=i("3a0b");let r=class extends n.VuexModule{constructor(){super(...arguments),this.authenticated=!1,this.initialized=!1,this.username=""}setAuthenticated(e){this.authenticated=e}setInitialized(e){this.initialized=e}setUsername(e){this.username=e}};s.__decorate([n.Mutation],r.prototype,"setAuthenticated",null),s.__decorate([n.Mutation],r.prototype,"setInitialized",null),s.__decorate([n.Mutation],r.prototype,"setUsername",null),r=s.__decorate([n.Module({dynamic:!0,store:o.rootStore,name:"core"})],r),t.coreStore=n.getModule(r)},cd49:function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0});const s=i("9ab4"),n=s.__importDefault(i("a026")),o=s.__importDefault(i("3dfd")),r=i("5f86"),a=i("3a0b");n.default.config.productionTip=!1,n.default.config.devtools=!0,n.default.config.performance=!0,t.app=new n.default({router:r.router,store:a.rootStore,render:e=>e(o.default)}).$mount("#app"),window.app=t.app},cde6:function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0});const s=i("9ab4"),n=s.__importDefault(i("a026")),o=s.__importDefault(i("65d9"));let r=class extends n.default{};r=s.__decorate([o.default({props:["visible","left","top"]})],r),t.default=r},ce87:function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0});const s=i("9ab4"),n=s.__importDefault(i("bc3a")),o=s.__importDefault(i("a026")),r=s.__importDefault(i("65d9"));let a=class extends o.default{beforeRouteEnter(e,t,i){n.default.post("/api/invite",{code:e.params.code}).then(e=>{i({path:e.data.sessionUrl})}).catch(e=>{console.error("Invitation code could not be redeemed"),i({path:"/dashboard"})})}};a=s.__decorate([r.default({template:""})],a),t.default=a},cec2:function(e,t,i){"use strict";i.r(t);var s=i("eb57"),n=i("255e");for(var o in n)"default"!==o&&function(e){i.d(t,e,function(){return n[e]})}(o);i("0584");var r=i("2877"),a=Object(r["a"])(n["default"],s["a"],s["b"],!1,null,"0602c2e6",null);a.options.__file="prompt.vue",t["default"]=a.exports},cee3:function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0});const s=i("f10f"),n=i("1216"),o=i("d6be"),r=i("98ef"),a=i("4aee");function l(e,t,i){void 0===i&&(i=s.gameStore.drawTEContour);const r=[e.x,e.y],a=[],l=o.PA_CDT[t].locate(r,null).loc;return null===l?(console.error("Triangle not found"),[]):(a.push(l.vertices[1].point),l.isConstrained(0)||c(r,l.vertices[2].point,l.vertices[1].point,l,0,a),a.push(l.vertices[2].point),l.isConstrained(1)||c(r,l.vertices[0].point,l.vertices[2].point,l,1,a),a.push(l.vertices[0].point),l.isConstrained(2)||c(r,l.vertices[1].point,l.vertices[0].point,l,2,a),i&&n.drawPolygon(a,"red"),a)}function c(e,t,i,s,n,o){const l=s.neighbours[n],d=l.indexT(s),h=a.ccw(d),f=a.cw(d),p=l.vertices[d],g=l.vertices[f],v=l.vertices[h],m=[l,h],y=[l,f],b=a.orientation(e,i,p.point),_=a.orientation(e,t,p.point);if(b===r.Sign.COUNTERCLOCKWISE)if(m[0].isConstrained(m[1]))i!==g.point&&o.push(u(e,i,p.point,g.point)),_===r.Sign.COUNTERCLOCKWISE&&o.push(u(e,t,p.point,g.point));else{if(_===r.Sign.COUNTERCLOCKWISE)return c(e,t,i,l,h,o);c(e,p.point,i,l,h,o)}if(b!==r.Sign.CLOCKWISE&&_!==r.Sign.COUNTERCLOCKWISE&&o.push(p.point),_===r.Sign.CLOCKWISE)return y[0].isConstrained(y[1])?(b===r.Sign.CLOCKWISE&&o.push(u(e,i,p.point,v.point)),void(t!==v.point&&o.push(u(e,t,p.point,v.point)))):b===r.Sign.CLOCKWISE?c(e,t,i,l,f,o):c(e,t,p.point,l,f,o)}function u(e,t,i,s){const n=(s[1]-i[1])*(t[0]-e[0])-(s[0]-i[0])*(t[1]-e[1]),o=((s[0]-i[0])*(e[1]-i[1])-(s[1]-i[1])*(e[0]-i[0]))/n,r=e[0]+o*(t[0]-e[0]),a=e[1]+o*(t[1]-e[1]);return[r,a]}t.computeVisibility=l},cf8f:function(e,t,i){"use strict";var s=function(){var e=this,t=e.$createElement,i=e._self._c||t;return e.selected?i("div",{staticClass:"tool-detail",style:{"--detailRight":e.detailRight,"--detailArrow":e.detailArrow}},[i("div",[e._v("#X")]),i("input",{directives:[{name:"model",rawName:"v-model",value:e.xCount,expression:"xCount"}],attrs:{type:"text"},domProps:{value:e.xCount},on:{input:function(t){t.target.composing||(e.xCount=t.target.value)}}}),i("div",[e._v("#Y")]),i("input",{directives:[{name:"model",rawName:"v-model",value:e.yCount,expression:"yCount"}],attrs:{type:"text"},domProps:{value:e.yCount},on:{input:function(t){t.target.composing||(e.yCount=t.target.value)}}})]):e._e()},n=[];i.d(t,"a",function(){return s}),i.d(t,"b",function(){return n})},d065:function(e,t,i){"use strict";i.r(t);var s=i("45fb"),n=i("f8b3");for(var o in n)"default"!==o&&function(e){i.d(t,e,function(){return n[e]})}(o);i("514b");var r=i("2877"),a=Object(r["a"])(n["default"],s["a"],s["b"],!1,null,"23de098e",null);a.options.__file="edit_dialog.vue",t["default"]=a.exports},d1ec:function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0});class s{}s.angleSteps=4,s.drawAngleLines=!1,s.drawFirstLightHit=!1,s.skipPlayerFOW=!1,s.skipLightFOW=!1,s.tempFill="fog",t.Settings=s},d30b:function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0});const s=i("9ab4"),n=s.__importDefault(i("bc3a")),o=s.__importDefault(i("a026")),r=s.__importDefault(i("65d9")),a=i("cc67");let l=class extends o.default{constructor(){super(...arguments),this.username="",this.password="",this.error=""}login(){n.default.post("/api/login",{username:this.username,password:this.password}).then(e=>{a.coreStore.setUsername(this.username),a.coreStore.setAuthenticated(!0),this.$router.push(this.$route.query.redirect||"/")}).catch(e=>{e.response?this.error=e.response.statusText:this.error="Unknown error occured"})}register(){n.default.post("/api/register",{username:this.username,password:this.password}).then(e=>{a.coreStore.setUsername(this.username),a.coreStore.setAuthenticated(!0),this.$router.push(this.$route.query.redirect||"/")}).catch(e=>{e.response?this.error=e.response.statusText:this.error="Unknown error occured"})}focusin(e){if(e.target&&e.target.nextElementSibling){const t=e.target.nextElementSibling;t.style.opacity="0"}}focusout(e){if(e.target&&e.target.nextElementSibling){const t=e.target.nextElementSibling;t.style.opacity="1"}}};l=s.__decorate([r.default],l),t.default=l},d320:function(e,t,i){"use strict";var s=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("modal",{attrs:{visible:e.visible},on:{close:function(t){e.visible=!1}},scopedSlots:e._u([{key:"header",fn:function(t){return i("div",{staticClass:"modal-header",attrs:{draggable:"true"},on:{dragstart:t.dragStart,dragend:t.dragEnd}},[e._v("Create basic token")])}}])},[i("div",{staticClass:"modal-body"},[i("label",{attrs:{for:"createtokendialog-text"}},[e._v("Text")]),i("input",{directives:[{name:"model",rawName:"v-model",value:e.text,expression:"text"}],attrs:{type:"text",id:"createtokendialog-name"},domProps:{value:e.text},on:{input:function(t){t.target.composing||(e.text=t.target.value)}}}),i("label",[e._v("Colours")]),i("div",{staticClass:"colours"},[i("span",[e._v("Fill:")]),i("color-picker",{attrs:{color:e.fillColour},on:{"update:color":function(t){e.fillColour=t}}}),i("span",[e._v("Border:")]),i("color-picker",{attrs:{color:e.borderColour},on:{"update:color":function(t){e.borderColour=t}}})],1),i("canvas",{ref:"canvas",attrs:{width:"100px",height:"100px"}})]),i("div",{staticClass:"modal-footer"},[i("button",{on:{click:e.submit}},[e._v("Submit")])])])},n=[];i.d(t,"a",function(){return s}),i.d(t,"b",function(){return n})},d323:function(e,t,i){"use strict";var s=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div")},n=[];i.d(t,"a",function(){return s}),i.d(t,"b",function(){return n})},d445:function(e,t,i){"use strict";var s=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("transition",{attrs:{name:"modal"}},[i("div",{directives:[{name:"show",rawName:"v-show",value:e.visible,expression:"visible"}],staticClass:"mask",class:{"modal-mask":e.mask,"dialog-mask":!e.mask},on:{click:e.close,dragover:function(t){return t.preventDefault(),e.dragOver(t)}}},[i("div",{ref:"container",staticClass:"modal-container",on:{click:function(e){e.stopPropagation()}}},[e._t("header",null,{dragStart:e.dragStart,dragEnd:e.dragEnd}),e._t("default")],2)])])},n=[];i.d(t,"a",function(){return s}),i.d(t,"b",function(){return n})},d588:function(e,t,i){"use strict";i.r(t);var s=i("91df"),n=i.n(s);for(var o in s)"default"!==o&&function(e){i.d(t,e,function(){return s[e]})}(o);t["default"]=n.a},d5df:function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0});const s=i("9ab4"),n=s.__importDefault(i("65d9")),o=s.__importDefault(i("ea6a")),r=i("0bc6"),a=i("8f0a"),l=i("6f92"),c=i("5e7c"),u=i("0180"),d=i("f10f"),h=i("92b1"),f=i("5a5c");let p=class extends o.default{constructor(){super(...arguments),this.name="Ruler",this.active=!1,this.startPoint=null,this.ruler=null,this.text=null}onMouseDown(e){const t=l.layerManager.getLayer("draw");void 0!==t?(this.active=!0,this.startPoint=h.l2g(f.getMouse(e)),this.ruler=new c.Line(this.startPoint,this.startPoint,3,d.gameStore.rulerColour),this.text=new u.Text(this.startPoint.clone(),"","bold 20px serif"),this.ruler.addOwner(d.gameStore.username),this.text.addOwner(d.gameStore.username),t.addShape(this.ruler,!0,!0),t.addShape(this.text,!0,!0)):console.log("No draw layer!")}onMouseMove(e){if(!this.active||null===this.ruler||null===this.startPoint||null===this.text)return;const t=l.layerManager.getLayer("draw");if(void 0===t)return void console.log("No draw layer!");const i=h.l2g(f.getMouse(e));this.ruler.endPoint=i,r.socket.emit("Shape.Update",{shape:this.ruler.asDict(),redraw:!0,temporary:!0});const s=Math.sign(i.x-this.startPoint.x)*Math.sign(i.y-this.startPoint.y),n=Math.abs(i.x-this.startPoint.x),o=Math.abs(i.y-this.startPoint.y),c=Math.round(Math.sqrt(Math.pow(n,2)+Math.pow(o,2))*d.gameStore.unitSize/d.gameStore.gridSize)+" ft",u=Math.atan2(s*o,n),p=Math.min(this.startPoint.x,i.x)+n/2,g=Math.min(this.startPoint.y,i.y)+o/2;this.text.refPoint=new a.GlobalPoint(p,g),this.text.text=c,this.text.angle=u,r.socket.emit("Shape.Update",{shape:this.text.asDict(),redraw:!0,temporary:!0}),t.invalidate(!0)}onMouseUp(e){if(!this.active||null===this.ruler||null===this.startPoint||null===this.text)return;const t=l.layerManager.getLayer("draw");void 0!==t?(this.active=!1,t.removeShape(this.ruler,!0,!0),t.removeShape(this.text,!0,!0),t.invalidate(!0),this.ruler=this.startPoint=this.text=null):console.log("No active layer!")}};p=s.__decorate([n.default],p),t.RulerTool=p},d65f:function(e,t,i){"use strict";i.r(t);var s=i("d445"),n=i("7e15");for(var o in n)"default"!==o&&function(e){i.d(t,e,function(){return n[e]})}(o);i("26a5");var r=i("2877"),a=Object(r["a"])(n["default"],s["a"],s["b"],!1,null,"12ed61ba",null);a.options.__file="modal.vue",t["default"]=a.exports},d677:function(e,t,i){"use strict";i.r(t);var s=i("53ec"),n=i.n(s);for(var o in s)"default"!==o&&function(e){i.d(t,e,function(){return s[e]})}(o);t["default"]=n.a},d6be:function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0});const s=i("6f92"),n=i("f10f"),o=i("6e4a");function r(e,i=!1){const r=new o.CDT;let a;a="vision"===e?n.gameStore.visionBlockers:n.gameStore.movementblockers;for(const t of a){const e=s.layerManager.UUIDMap.get(t);if(!i||e.visibleInCanvas(s.layerManager.getLayer().canvas))for(let t=0;t{this.shape=e,this.visible=!0}),d.EventBus.$on("EditDialog.AddLabel",e=>{this.visible&&(this.shape.labels.push(f.gameStore.labels[e]),this.updateShape(!0))})}beforeDestroy(){d.EventBus.$off("EditDialog.Open"),d.EventBus.$off("EditDialog.AddLabel")}updated(){this.addEmpty()}addEmpty(){""!==this.shape.owners[this.shape.owners.length-1]&&this.shape.addOwner(""),this.shape.trackers.length&&""===this.shape.trackers[this.shape.trackers.length-1].name&&0===this.shape.trackers[this.shape.trackers.length-1].value||this.shape.trackers.push({uuid:c.uuidv4(),name:"",value:0,maxvalue:0,visible:!1}),this.shape.auras.length&&""===this.shape.auras[this.shape.auras.length-1].name&&0===this.shape.auras[this.shape.auras.length-1].value||this.shape.auras.push({uuid:c.uuidv4(),name:"",value:0,dim:0,visionSource:!1,colour:"rgba(0,0,0,0)",visible:!1})}updateShape(e,t=!1){this.owned&&(u.socket.emit("Shape.Update",{shape:this.shape.asDict(),redraw:e,temporary:t}),e&&h.layerManager.invalidate(),this.addEmpty())}setToken(e){this.owned&&(this.shape.setIsToken(e.target.checked),this.updateShape(!0))}setVisionBlocker(e){this.owned&&(this.shape.checkVisionSources(),this.updateShape(!0))}setMovementBlocker(e){this.owned&&(this.shape.setMovementBlock(e.target.checked),this.updateShape(!1))}updateAnnotation(e){if(!this.owned)return;const t=""!==this.shape.annotation;this.shape.annotation=e.target.value,""===this.shape.annotation||t?""===this.shape.annotation&&t&&(f.gameStore.annotations.splice(f.gameStore.annotations.findIndex(e=>e===this.shape.uuid)),h.layerManager.hasLayer("draw")&&h.layerManager.getLayer("draw").invalidate(!0)):(f.gameStore.annotations.push(this.shape.uuid),h.layerManager.hasLayer("draw")&&h.layerManager.getLayer("draw").invalidate(!0)),this.updateShape(!1)}updateOwner(e,t){this.owned&&(this.shape.updateOwner(t,e.target.value),this.updateShape(f.gameStore.fowLOS))}removeOwner(e){this.owned&&(this.shape.removeOwner(e),this.updateShape(f.gameStore.fowLOS))}removeTracker(e){this.owned&&(this.shape.trackers=this.shape.trackers.filter(t=>t.uuid!==e),this.updateShape(!1))}removeAura(e){this.owned&&(this.shape.auras=this.shape.auras.filter(t=>t.uuid!==e),this.shape.checkVisionSources(),this.updateShape(!0))}updateAuraVisionSource(e){if(!this.owned)return;e.visionSource=!e.visionSource;const t=f.gameStore.visionSources.findIndex(t=>t.aura===e.uuid);e.visionSource&&-1===t?f.gameStore.visionSources.push({shape:this.shape.uuid,aura:e.uuid}):!e.visionSource&&t>=0&&f.gameStore.visionSources.splice(t,1),this.updateShape(!0)}updateAuraColour(e,t){if(!this.owned)return;const i=h.layerManager.getLayer(this.shape.layer);void 0!==i&&i.invalidate(!e.visionSource)}openLabelManager(){d.EventBus.$emit("LabelManager.Open")}removeLabel(e){this.owned&&(this.shape.labels=this.shape.labels.filter(t=>t.uuid!==e),this.updateShape(!0))}};s.__decorate([r.Prop()],p.prototype,"shape",void 0),p=s.__decorate([o.default({components:{Modal:l.default,"color-picker":a.default}})],p),t.default=p},da03:function(e,t,i){},dc37:function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0});const s=i("9ab4"),n=s.__importDefault(i("a026")),o=s.__importDefault(i("65d9")),r=s.__importDefault(i("d65f"));let a=class extends n.default{constructor(){super(...arguments),this.visible=!1,this.yes="Yes",this.no="No",this.title="",this.resolve=(e=>{}),this.reject=(()=>{})}confirm(){this.resolve(!0),this.close()}deny(){this.resolve(!1),this.close()}close(){this.reject(),this.visible=!1,this.title=""}open(e,t="yes",i="no"){return this.yes=t,this.no=i,this.title=e,this.visible=!0,this.$nextTick(()=>{this.$refs.confirm.focus()}),new Promise((e,t)=>{this.resolve=e,this.reject=t})}};a=s.__decorate([o.default({components:{Modal:r.default}})],a),t.default=a},de21:function(e,t,i){},deb9:function(e,t,i){"use strict";var s=i("c1e0"),n=i.n(s);n.a},dec1:function(e,t,i){"use strict";i.r(t);var s=i("cf8f"),n=i("3481");for(var o in n)"default"!==o&&function(e){i.d(t,e,function(){return n[e]})}(o);var r=i("2877"),a=Object(r["a"])(n["default"],s["a"],s["b"],!1,null,null,null);a.options.__file="map.vue",t["default"]=a.exports},df64:function(e,t,i){"use strict";var s=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{staticClass:"accordion"},[i("div",{attrs:{id:"header"},on:{click:function(t){return t.preventDefault(),e.toggleDisplay(t)}}},[i("input",{ref:"overall",attrs:{type:"checkbox"},on:{click:function(t){return t.stopPropagation(),e.toggleCategory(t)}}}),i("strong",[e._v(e._s(e.title))]),e.showArrow?[i("span",{directives:[{name:"show",rawName:"v-show",value:e.showArrow&&!e.active,expression:"showArrow && !active"}],staticClass:"down-Arrow"},[e._v("▼")]),i("span",{directives:[{name:"show",rawName:"v-show",value:e.showArrow&&e.active,expression:"showArrow && active"}],staticClass:"up-Arrow"},[e._v("▲")])]:e._e()],2),i("div",{directives:[{name:"show",rawName:"v-show",value:e.active,expression:"active"}],attrs:{id:"body"}},e._l(e.items,function(t){return i("div",{key:t[0],staticClass:"item",on:{click:function(i){e.toggleSelection(t[0])}}},[i("input",{attrs:{type:"checkbox"},domProps:{checked:e.selected.includes(t[0])},on:{click:function(e){e.preventDefault()}}}),e._v(" "+e._s(t[1])+"\n ")])}))])},n=[];i.d(t,"a",function(){return s}),i.d(t,"b",function(){return n})},e037:function(e,t,i){"use strict";var s=i("da03"),n=i.n(s);n.a},e06e:function(e,t,i){"use strict";var s=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("modal",{attrs:{visible:e.visible},on:{close:e.close},scopedSlots:e._u([{key:"header",fn:function(t){return i("div",{staticClass:"modal-header",attrs:{draggable:"true"},on:{dragstart:t.dragStart,dragend:t.dragEnd}},[e._v(e._s(e.title))])}}])},[i("div",{staticClass:"modal-body"},[i("button",{ref:"confirm",on:{click:e.confirm}},[e._v(e._s(e.yes))]),e.no?i("button",{on:{click:e.deny}},[e._v(e._s(e.no))]):e._e()])])},n=[];i.d(t,"a",function(){return s}),i.d(t,"b",function(){return n})},e0e9:function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0});const s=i("9ab4"),n=s.__importDefault(i("a026")),o=s.__importDefault(i("65d9")),r=s.__importDefault(i("1c76")),a=i("5338"),l=i("2d5b"),c=i("4a5b");let u=class extends n.default{constructor(){super(...arguments),this.visible=!1,this.left=0,this.top=0}open(e,t){l.assetStore.selected.includes(t)||c.getComponent().select(e,t),this.visible=!0,this.left=e.pageX,this.top=e.pageY,this.$nextTick(()=>{this.$children[0].$el.focus()})}close(){this.visible=!1}rename(){if(1!==l.assetStore.selected.length)return;const e=l.assetStore.idMap.get(l.assetStore.selected[0]);c.getRef("prompt").prompt("New name:",`Renaming ${e.name}`).then(t=>{a.socket.emit("Asset.Rename",{asset:e.id,name:t}),e.name=t,c.getComponent().$forceUpdate()},()=>{}),this.close()}remove(){0!==l.assetStore.selected.length&&(c.getRef("confirm").open("Are you sure you wish to remove this?").then(e=>{if(e){for(const e of l.assetStore.selected)a.socket.emit("Asset.Remove",e),l.assetStore.files.includes(e)?l.assetStore.files.splice(l.assetStore.files.indexOf(e),1):l.assetStore.folders.splice(l.assetStore.folders.indexOf(e),1);l.assetStore.clearSelected()}},()=>{}),this.close())}};u=s.__decorate([o.default({components:{ContextMenu:r.default}})],u),t.default=u},e27a:function(e,t,i){"use strict";i.r(t);var s=i("2756"),n=i.n(s);for(var o in s)"default"!==o&&function(e){i.d(t,e,function(){return s[e]})}(o);t["default"]=n.a},e3f5:function(e,t,i){"use strict";var s=i("a126"),n=i.n(s);n.a},e4b0:function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0});const s=i("9ab4"),n=s.__importDefault(i("a026")),o=s.__importDefault(i("65d9")),r=s.__importDefault(i("d65f")),a=i("4a5b"),l=i("0bc6"),c=i("af17"),u=i("f10f");let d=class extends n.default{constructor(){super(...arguments),this.visible=!1,this.newCategory="",this.newName="",this.search=""}mounted(){c.EventBus.$on("LabelManager.Open",()=>{this.visible=!0,this.newCategory="",this.newName="",this.$nextTick(()=>this.$refs.search.focus())})}beforeDestroy(){c.EventBus.$off("LabelManager.Open")}get labels(){const e={};for(const t of Object.keys(u.gameStore.labels)){const i=u.gameStore.labels[t];this.search.length&&`${i.category.toLowerCase()}${i.name.toLowerCase()}`.search(this.search.toLowerCase())<0||i.user===u.gameStore.username&&(i.category?(i.category in e||(e[i.category]=[]),e[i.category].push(i),e[i.category].sort((e,t)=>e.name.localeCompare(t.name))):e[""].push(i))}return e}get categories(){return Object.keys(this.labels).sort()}selectLabel(e){c.EventBus.$emit("EditDialog.AddLabel",e),this.visible=!1}toggleVisibility(e){e.visible=!e.visible,l.socket.emit("Label.Visibility.Set",{uuid:e.uuid,visible:e.visible})}addLabel(){if(""===this.newName)return;const e={uuid:a.uuidv4(),category:this.newCategory,name:this.newName,visible:!1,user:u.gameStore.username};u.gameStore.addLabel(e),l.socket.emit("Label.Add",e),this.newCategory="",this.newName=""}deleteLabel(e){u.gameStore.deleteLabel({uuid:e,user:u.gameStore.username}),l.socket.emit("Label.Delete",e)}};d=s.__decorate([o.default({components:{Modal:r.default}})],d),t.default=d},e4ea:function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0});const s=i("8f0a"),n=i("92b1"),o=i("5a5c"),r=i("8db6"),a=i("2469");class l extends a.Shape{constructor(e,t=[],i,s,n){super(e,i,s,n),this.type="polygon",this._vertices=[],this._vertices=t}get refPoint(){return this._refPoint}set refPoint(e){const t=e.subtract(this._refPoint);this._refPoint=e;for(let i=0;i({x:e.x,y:e.y}))})}fromDict(e){super.fromDict(e),this._vertices=e.vertices.map(e=>new s.GlobalPoint(e.x,e.y))}get points(){return this.vertices.map(e=>[e.x,e.y])}draw(e){super.draw(e),e.lineCap="round",e.lineJoin="round","fog"===this.strokeColour?e.strokeStyle=o.getFogColour():2===this.vertices.length?e.strokeStyle=this.fillColour:e.strokeStyle=this.strokeColour,"fog"===this.fillColour?e.fillStyle=o.getFogColour():e.fillStyle=this.fillColour,e.lineWidth=n.g2lz(2),e.beginPath(),e.moveTo(n.g2lx(this.vertices[0].x),n.g2ly(this.vertices[0].y));for(let t=1;t<=this.vertices.length;t++){const i=this.vertices[t%this.vertices.length];e.lineTo(n.g2lx(i.x),n.g2ly(i.y))}e.fill(),e.stroke()}contains(e){return this.getBoundingBox().contains(e)}center(e){return this.getBoundingBox().center()}visibleInCanvas(e){return this.getBoundingBox().visibleInCanvas(e)}snapToGrid(){}resizeToGrid(){}resize(e,t){0===e?this._refPoint=n.l2g(t):this._vertices[e-1]=n.l2g(t)}getBoundingBox(){let e=this.refPoint.x,t=this.refPoint.x,i=this.refPoint.y,n=this.refPoint.y;for(const s of this._vertices)s.xt&&(t=s.x),s.yn&&(n=s.y);return new r.BoundingRect(new s.GlobalPoint(e,i),t-e,n-i)}}t.Polygon=l},e5ca:function(e,t,i){"use strict";var s=function(){var e=this,t=e.$createElement,i=e._self._c||t;return e.selected?i("div",{staticClass:"tool-detail",style:{"--detailRight":e.detailRight,"--detailArrow":e.detailArrow}},[i("div",{directives:[{name:"show",rawName:"v-show",value:e.IS_DM,expression:"IS_DM"}]},[e._v("Mode")]),i("div",{directives:[{name:"show",rawName:"v-show",value:e.IS_DM,expression:"IS_DM"}],staticClass:"selectgroup"},e._l(e.modes,function(t){return i("div",{key:t,staticClass:"option",class:{"option-selected":e.modeSelect===t},on:{click:function(i){e.modeSelect=t}}},[e._v(e._s(t))])})),i("div",[e._v("Shape")]),i("div",{staticClass:"selectgroup"},e._l(e.shapes,function(t){return i("div",{key:t,staticClass:"option",class:{"option-selected":e.shapeSelect===t},on:{click:function(i){e.shapeSelect=t}}},[i("i",{staticClass:"fas",class:"fa-"+t})])})),i("div",[e._v("Colours")]),i("div",{staticClass:"selectgroup"},[i("color-picker",{staticClass:"option",attrs:{color:e.fillColour},on:{"update:color":function(t){e.fillColour=t}}}),i("color-picker",{staticClass:"option",attrs:{color:e.borderColour},on:{"update:color":function(t){e.borderColour=t}}})],1),i("div",{directives:[{name:"show",rawName:"v-show",value:"paint-brush"===e.shapeSelect,expression:"shapeSelect === 'paint-brush'"}]},[e._v("Brush size")]),i("input",{directives:[{name:"model",rawName:"v-model",value:e.brushSize,expression:"brushSize"},{name:"show",rawName:"v-show",value:"paint-brush"===e.shapeSelect,expression:"shapeSelect === 'paint-brush'"}],staticStyle:{"max-width":"100px"},attrs:{type:"text"},domProps:{value:e.brushSize},on:{input:function(t){t.target.composing||(e.brushSize=t.target.value)}}})]):e._e()},n=[];i.d(t,"a",function(){return s}),i.d(t,"b",function(){return n})},e756:function(e,t,i){},e7db:function(e,t,i){"use strict";var s=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{staticClass:"outer",on:{click:function(t){return t.target!==t.currentTarget?null:e.open(t)}}},[i("div",{staticClass:"current-color",style:e.transparent?"background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAMCAIAAADZF8uwAAAAGUlEQVQYV2M4gwH+YwCGIasIUwhT25BVBADtzYNYrHvv4gAAAABJRU5ErkJggg==)":"background-color:"+e.color,on:{click:function(t){return t.target!==t.currentTarget?null:e.open(t)}}}),i("div",{directives:[{name:"show",rawName:"v-show",value:e.display,expression:"display"}],staticClass:"mask",on:{click:function(t){return t.target!==t.currentTarget?null:e.closePicker(t)}}}),i("chrome-picker",{directives:[{name:"show",rawName:"v-show",value:e.display,expression:"display"}],ref:"chromePicker",style:{position:"fixed",left:e.left+"px",top:e.top+"px","z-index":9999},attrs:{value:e.color,tabindex:"-1"},on:{input:e.updateColor}})],1)},n=[];i.d(t,"a",function(){return s}),i.d(t,"b",function(){return n})},e914:function(e,t,i){"use strict";i.r(t);var s=i("c9a2"),n=i("aa69");for(var o in n)"default"!==o&&function(e){i.d(t,e,function(){return n[e]})}(o);i("78c7");var r=i("2877"),a=Object(r["a"])(n["default"],s["a"],s["b"],!1,null,null,null);a.options.__file="manager.vue",t["default"]=a.exports},e94f:function(e,t,i){"use strict";i.r(t);var s=i("7aaa"),n=i.n(s);for(var o in s)"default"!==o&&function(e){i.d(t,e,function(){return s[e]})}(o);t["default"]=n.a},ea6a:function(e,t,i){"use strict";i.r(t);var s=i("d323"),n=i("6465");for(var o in n)"default"!==o&&function(e){i.d(t,e,function(){return n[e]})}(o);i("12d3");var r=i("2877"),a=Object(r["a"])(n["default"],s["a"],s["b"],!1,null,null,null);a.options.__file="tool.vue",t["default"]=a.exports},eb57:function(e,t,i){"use strict";var s=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("Modal",{attrs:{visible:e.visible},on:{close:e.close},scopedSlots:e._u([{key:"header",fn:function(t){return i("div",{staticClass:"modal-header",attrs:{draggable:"true"},on:{dragstart:t.dragStart,dragend:t.dragEnd}},[e._v(e._s(e.title))])}}])},[i("div",{staticClass:"modal-body"},[e._v("\n "+e._s(e.question)+"\n "),i("input",{directives:[{name:"model",rawName:"v-model",value:e.answer,expression:"answer"}],ref:"answer",attrs:{type:"text"},domProps:{value:e.answer},on:{keyup:function(t){return"button"in t||!e._k(t.keyCode,"enter",13,t.key,"Enter")?e.submit(t):null},input:function(t){t.target.composing||(e.answer=t.target.value)}}})]),i("div",{staticClass:"modal-footer"},[i("button",{on:{click:e.submit}},[e._v("Submit")])])])},n=[];i.d(t,"a",function(){return s}),i.d(t,"b",function(){return n})},ebb9:function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0});const s=i("9ab4"),n=s.__importDefault(i("a026")),o=s.__importDefault(i("65d9")),r=s.__importDefault(i("1516"));n.default.component("draggable",r.default);const a=s.__importDefault(i("d65f")),l=i("4a5b"),c=i("0bc6"),u=i("af17"),d=i("6f92"),h=i("f10f");let f=class extends n.default{constructor(){super(...arguments),this.visible=!1,this.data=[],this.currentActor=null,this.roundCounter=0}mounted(){u.EventBus.$on("Initiative.Clear",this.clear),u.EventBus.$on("Initiative.Remove",e=>this.removeInitiative(e)),u.EventBus.$on("Initiative.Show",()=>this.visible=!0),c.socket.on("Initiative.Set",e=>{this.data=e}),c.socket.on("Initiative.Turn.Set",e=>this.setTurn(e)),c.socket.on("Initiative.Turn.Update",e=>this.updateTurn(e,!1)),c.socket.on("Initiative.Round.Update",e=>this.setRound(e,!1)),c.socket.on("Initiative.Effect.New",e=>{const t=this.getActor(e.actor);void 0!==t&&this.createEffect(t,e.effect,!1)}),c.socket.on("Initiative.Effect.Update",e=>this.updateEffect(e.actor,e.effect,!1))}beforeDestroy(){u.EventBus.$off("Initiative.Clear"),u.EventBus.$off("Initiative.Remove"),u.EventBus.$off("Initiative.Show")}clear(){this.data=[],this.currentActor=null}getActor(e){return this.data.find(t=>t.uuid===e)}contains(e){return this.data.some(t=>t.uuid===e)}owns(e){if(h.gameStore.IS_DM)return!0;const t=d.layerManager.UUIDMap.get(e.uuid);return void 0!==t&&t.owners.includes(h.gameStore.username)}getDefaultEffect(){return{uuid:l.uuidv4(),name:"New Effect",turns:10}}fakeSetData(e){e.setData("Hack","")}syncInitiative(e){c.socket.emit("Initiative.Update",e)}addInitiative(e){const t=this.data.findIndex(t=>t.uuid===e.uuid);t>=0||(void 0===e.initiative&&(e.initiative=0),this.syncInitiative(e))}removeInitiative(e){const t=this.data.findIndex(t=>t.uuid===e);if(t<0||this.data[t].group)return;this.syncInitiative({uuid:e});const i=d.layerManager.UUIDMap.get(e);void 0!==i&&i.showHighlight&&(i.showHighlight=!1,d.layerManager.getLayer(i.layer).invalidate(!0))}updateOrder(){h.gameStore.IS_DM&&c.socket.emit("Initiative.Set",this.data.map(e=>e.uuid))}updateTurn(e,t){if(!h.gameStore.IS_DM&&t)return;this.currentActor=e;const i=this.data.find(t=>t.uuid===e);if(void 0!==i){if(i.effects)for(let e=i.effects.length-1;e>=0;e--)i.effects[e].turns<=0?i.effects.splice(e,1):i.effects[e].turns--;t&&c.socket.emit("Initiative.Turn.Update",e)}}setRound(e,t){!h.gameStore.IS_DM&&t||(this.roundCounter=e,t&&c.socket.emit("Initiative.Round.Update",e))}setTurn(e){this.currentActor=e}nextTurn(){if(!h.gameStore.IS_DM)return;const e=this.data,t=e[(e.findIndex(e=>e.uuid===this.currentActor)+1)%e.length];this.data[0].uuid===t.uuid&&this.setRound(this.roundCounter+1,!0),this.updateTurn(t.uuid,!0)}toggleHighlight(e,t){const i=d.layerManager.UUIDMap.get(e.uuid);void 0!==i&&(i.showHighlight=t,d.layerManager.getLayer(i.layer).invalidate(!0))}toggleOption(e,t){this.owns(e)&&(e[t]=!e[t],this.syncInitiative(e))}createEffect(e,t,i){this.owns(e)&&(e.effects.push(t),i&&c.socket.emit("Initiative.Effect.New",{actor:e.uuid,effect:t}))}syncEffect(e,t){this.owns(e)&&c.socket.emit("Initiative.Effect.Update",{actor:e.uuid,effect:t})}updateEffect(e,t,i){const s=this.data.find(t=>t.uuid===e);if(void 0===s)return;const n=s.effects.findIndex(e=>e.uuid===t.uuid);void 0!==n&&(s.effects[n]=t,i?this.syncEffect(s,t):this.$forceUpdate())}};f=s.__decorate([o.default({components:{Modal:a.default,draggable:r.default}})],f),t.default=f},ee96:function(e,t,i){},f086:function(e,t,i){"use strict";i.r(t);var s=i("a112"),n=i("7ba5");for(var o in n)"default"!==o&&function(e){i.d(t,e,function(){return n[e]})}(o);i("01be");var r=i("2877"),a=Object(r["a"])(n["default"],s["a"],s["b"],!1,null,"674cf937",null);a.options.__file="selection_info.vue",t["default"]=a.exports},f10f:function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0});const s=i("9ab4"),n=s.__importDefault(i("a026")),o=i("6fc5"),r=i("0bc6"),a=i("2b48"),l=i("6f92"),c=i("92b1"),u=i("5a5c"),d=i("99e3"),h=i("d6be"),f=i("3a0b");let p=class extends o.VuexModule{constructor(){super(...arguments),this.layers=[],this.selectedLayerIndex=-1,this.boardInitialized=!1,this.locations=[],this.assets={},this.notes=[],this.IS_DM=!1,this.gridSize=50,this.username="",this.roomName="",this.roomCreator="",this.invitationCode="",this.gridColour="rgba(0, 0, 0, 1)",this.fowColour="rgba(0, 0, 0, 1)",this.rulerColour="rgba(255, 0, 0, 1)",this.panX=0,this.panY=0,this.zoomDisplay=.5,this.unitSize=5,this.useGrid=!0,this.fullFOW=!1,this.fowOpacity=.3,this.fowLOS=!1,this.locationName="",this.visionSources=[],this.visionBlockers=[],this.annotations=[],this.movementblockers=[],this.ownedtokens=[],this.BV=Object.freeze(new d.BoundingVolume([])),this.visionMode="bvh",this.drawTEContour=!1,this.visionRangeMin=1640,this.visionRangeMax=3281,this.clipboard=[],this.labels={},this.filterNoLabel=!1,this.labelFilters=[],this.showUI=!0}get selectedLayer(){return this.layers[this.selectedLayerIndex]}get zoomFactor(){return u.zoomValue(this.zoomDisplay)}setZoomDisplay(e){e!==this.zoomDisplay&&(e<0&&(e=0),e>1&&(e=1),this.zoomDisplay=e,l.layerManager.invalidate())}setVisionMode(e){this.visionMode=e.mode,e.sync&&r.socket.emit("Location.Options.Set",{vision_mode:e.mode})}setBoardInitialized(e){this.boardInitialized=e}toggleUnlabeledFilter(){this.filterNoLabel=!this.filterNoLabel}addLabel(e){n.default.set(this.labels,e.uuid,e)}setLabelFilters(e){this.labelFilters=e}setLabelVisibility(e){e.uuid in this.labels&&(this.labels[e.uuid].visible=e.visible)}deleteLabel(e){if(!(e.uuid in this.labels))return;const t=this.labels[e.uuid],i=new Set;for(const s of l.layerManager.UUIDMap.values()){const e=s.labels.indexOf(t);e>=0&&(s.labels.splice(e,1),i.add(s.layer))}for(const s of i)l.layerManager.getLayer(s).invalidate(!1);n.default.delete(this.labels,e.uuid)}setDM(e){this.IS_DM=e}setUsername(e){this.username=e}setRoomName(e){this.roomName=e}setRoomCreator(e){this.roomCreator=e}setInvitationCode(e){this.invitationCode=e}addLayer(e){this.layers.push(e),-1===this.selectedLayerIndex&&(this.selectedLayerIndex=this.layers.indexOf(e))}selectLayer(e){const t=this.layers.indexOf(e.name);t>=0&&(this.selectedLayerIndex=t),e.sync&&r.socket.emit("Client.ActiveLayer.Set",e.name)}newNote(e){this.notes.push(e.note),e.sync&&r.socket.emit("Note.New",e.note)}setAssets(e){this.assets=e}setLocations(e){this.locations=e}resetLayerInfo(){this.layers=[],this.selectedLayerIndex=-1}recalculateVision(e=!1){this.boardInitialized&&("triangle"===this.visionMode?h.triangulate("vision",e):this.BV=Object.freeze(new d.BoundingVolume(this.visionBlockers)))}recalculateMovement(e=!1){this.boardInitialized&&"triangle"===this.visionMode&&h.triangulate("movement",e)}updateZoom(e){if(e.newZoomDisplay===this.zoomDisplay)return;e.newZoomDisplay<0&&(e.newZoomDisplay=0),e.newZoomDisplay>1&&(e.newZoomDisplay=1);const t=c.g2l(e.zoomLocation);this.zoomDisplay=e.newZoomDisplay;const i=c.l2g(t),s=i.subtract(e.zoomLocation);this.panX+=s.x,this.panY+=s.y,l.layerManager.invalidate(),a.sendClientOptions()}setGridColour(e){this.gridColour=e.colour,l.layerManager.getGridLayer().drawGrid(),e.sync&&r.socket.emit("Client.Options.Set",{gridColour:e.colour})}setFOWColour(e){this.fowColour=e.colour,l.layerManager.invalidate(),e.sync&&r.socket.emit("Client.Options.Set",{fowColour:e.colour})}setRulerColour(e){this.rulerColour=e.colour,e.sync&&r.socket.emit("Client.Options.Set",{rulerColour:e.colour})}setPanX(e){this.panX=e}setPanY(e){this.panY=e}increasePanX(e){this.panX+=e}increasePanY(e){this.panY+=e}setUnitSize(e){this.unitSize!==e.unitSize&&e.unitSize>0&&e.unitSize<1/0&&(this.unitSize=e.unitSize,l.layerManager.invalidate(),e.sync&&r.socket.emit("Location.Options.Set",{unit_size:e.unitSize}))}setUseGrid(e){if(this.useGrid!==e.useGrid){this.useGrid=e.useGrid;const t=l.layerManager.getGridLayer();e.useGrid?t.canvas.style.display="block":t.canvas.style.display="none",e.sync&&r.socket.emit("Location.Options.Set",{use_grid:e.useGrid})}}setGridSize(e){if(this.gridSize!==e.gridSize&&e.gridSize>0){this.gridSize=e.gridSize;const t=l.layerManager.getGridLayer();void 0!==t&&t.drawGrid(),e.sync&&r.socket.emit("Gridsize.Set",e.gridSize)}}setVisionRangeMin(e){this.visionRangeMin=e.value,l.layerManager.invalidateLight(),e.sync&&r.socket.emit("Location.Options.Set",{vision_min_range:e.value})}setVisionRangeMax(e){this.visionRangeMax=Math.max(e.value,this.visionRangeMin),l.layerManager.invalidateLight(),e.sync&&r.socket.emit("Location.Options.Set",{vision_max_range:this.visionRangeMax})}setFullFOW(e){this.fullFOW!==e.fullFOW&&(this.fullFOW=e.fullFOW,l.layerManager.invalidateLight(),e.sync&&r.socket.emit("Location.Options.Set",{full_fow:e.fullFOW}))}setFOWOpacity(e){this.fowOpacity=e.fowOpacity,l.layerManager.invalidateLight(),e.sync&&r.socket.emit("Location.Options.Set",{fow_opacity:e.fowOpacity})}setLineOfSight(e){this.fowLOS!==e.fowLOS&&(this.fowLOS=e.fowLOS,l.layerManager.invalidate(),e.sync&&r.socket.emit("Location.Options.Set",{fow_los:e.fowLOS}))}setLocationName(e){this.locationName=e}updateNote(e){const t=this.notes.find(t=>t.uuid===e.note.uuid);void 0!==t&&(t.title=e.note.title,t.text=e.note.text,e.sync&&r.socket.emit("Note.Update",t))}removeNote(e){this.notes=this.notes.filter(t=>t.uuid!==e.note.uuid),e.sync&&r.socket.emit("Note.Remove",e.note.uuid)}toggleUI(){this.showUI=!this.showUI}setClipboard(e){this.clipboard=e}clear(){this.context.state.visionSources=[],this.context.state.visionBlockers=[],this.context.state.ownedtokens=[],this.context.state.annotations=[],this.context.state.movementblockers=[],this.context.state.notes=[],this.context.commit("recalculateVision"),this.context.commit("recalculateMovement")}};s.__decorate([o.Mutation],p.prototype,"setZoomDisplay",null),s.__decorate([o.Mutation],p.prototype,"setVisionMode",null),s.__decorate([o.Mutation],p.prototype,"setBoardInitialized",null),s.__decorate([o.Mutation],p.prototype,"toggleUnlabeledFilter",null),s.__decorate([o.Mutation],p.prototype,"addLabel",null),s.__decorate([o.Mutation],p.prototype,"setLabelFilters",null),s.__decorate([o.Mutation],p.prototype,"setLabelVisibility",null),s.__decorate([o.Mutation],p.prototype,"deleteLabel",null),s.__decorate([o.Mutation],p.prototype,"setDM",null),s.__decorate([o.Mutation],p.prototype,"setUsername",null),s.__decorate([o.Mutation],p.prototype,"setRoomName",null),s.__decorate([o.Mutation],p.prototype,"setRoomCreator",null),s.__decorate([o.Mutation],p.prototype,"setInvitationCode",null),s.__decorate([o.Mutation],p.prototype,"addLayer",null),s.__decorate([o.Mutation],p.prototype,"selectLayer",null),s.__decorate([o.Mutation],p.prototype,"newNote",null),s.__decorate([o.Mutation],p.prototype,"setAssets",null),s.__decorate([o.Mutation],p.prototype,"setLocations",null),s.__decorate([o.Mutation],p.prototype,"resetLayerInfo",null),s.__decorate([o.Mutation],p.prototype,"recalculateVision",null),s.__decorate([o.Mutation],p.prototype,"recalculateMovement",null),s.__decorate([o.Mutation],p.prototype,"updateZoom",null),s.__decorate([o.Mutation],p.prototype,"setGridColour",null),s.__decorate([o.Mutation],p.prototype,"setFOWColour",null),s.__decorate([o.Mutation],p.prototype,"setRulerColour",null),s.__decorate([o.Mutation],p.prototype,"setPanX",null),s.__decorate([o.Mutation],p.prototype,"setPanY",null),s.__decorate([o.Mutation],p.prototype,"increasePanX",null),s.__decorate([o.Mutation],p.prototype,"increasePanY",null),s.__decorate([o.Mutation],p.prototype,"setUnitSize",null),s.__decorate([o.Mutation],p.prototype,"setUseGrid",null),s.__decorate([o.Mutation],p.prototype,"setGridSize",null),s.__decorate([o.Mutation],p.prototype,"setVisionRangeMin",null),s.__decorate([o.Mutation],p.prototype,"setVisionRangeMax",null),s.__decorate([o.Mutation],p.prototype,"setFullFOW",null),s.__decorate([o.Mutation],p.prototype,"setFOWOpacity",null),s.__decorate([o.Mutation],p.prototype,"setLineOfSight",null),s.__decorate([o.Mutation],p.prototype,"setLocationName",null),s.__decorate([o.Mutation],p.prototype,"updateNote",null),s.__decorate([o.Mutation],p.prototype,"removeNote",null),s.__decorate([o.Mutation],p.prototype,"toggleUI",null),s.__decorate([o.Mutation],p.prototype,"setClipboard",null),s.__decorate([o.Action],p.prototype,"clear",null),p=s.__decorate([o.Module({dynamic:!0,store:f.rootStore,name:"game",namespaced:!0})],p),t.gameStore=o.getModule(p)},f19c:function(e,t,i){"use strict";var s=i("602f"),n=i.n(s);n.a},f2d0:function(e,t,i){},f30c:function(e,t,i){"use strict";i.r(t);var s=i("dc37"),n=i.n(s);for(var o in s)"default"!==o&&function(e){i.d(t,e,function(){return s[e]})}(o);t["default"]=n.a},f312:function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.aurasFromServer=(e=>{const t=[];for(const i of e)t.push({uuid:i.uuid,visionSource:i.vision_source,visible:i.visible,name:i.name,value:i.value,dim:i.dim,colour:i.colour});return t}),t.aurasToServer=(e=>{const t=[];for(const i of e)t.push({uuid:i.uuid,vision_source:i.visionSource,visible:i.visible,name:i.name,value:i.value,dim:i.dim,colour:i.colour});return t})},f3c9:function(e,t,i){"use strict";var s=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",[i("div",{attrs:{id:"toolselect"}},[i("ul",e._l(e.visibleTools,function(t){return i("li",{key:t,ref:t+"-selector",refInFor:!0,class:{"tool-selected":e.currentTool===t},on:{mousedown:function(i){e.currentTool=t}}},[i("a",{attrs:{href:"#"}},[e._v(e._s(t))])])}))]),i("div",[[i("select-tool",{directives:[{name:"show",rawName:"v-show",value:"Select"===e.currentTool,expression:"currentTool === 'Select'"}],ref:"selectTool"}),i("pan-tool",{directives:[{name:"show",rawName:"v-show",value:"Pan"===e.currentTool,expression:"currentTool === 'Pan'"}]}),i("keep-alive",[i("draw-tool",{directives:[{name:"show",rawName:"v-show",value:"Draw"===e.currentTool,expression:"currentTool === 'Draw'"}]})],1),i("ruler-tool",{directives:[{name:"show",rawName:"v-show",value:"Ruler"===e.currentTool,expression:"currentTool === 'Ruler'"}]}),i("map-tool",{directives:[{name:"show",rawName:"v-show",value:"Map"===e.currentTool,expression:"currentTool === 'Map'"}]}),i("filter-tool",{directives:[{name:"show",rawName:"v-show",value:"Filter"===e.currentTool,expression:"currentTool === 'Filter'"}]}),i("shape-menu",{ref:"shapecontext"}),i("createtoken-dialog",{ref:"createtokendialog"})]],2)])},n=[];i.d(t,"a",function(){return s}),i.d(t,"b",function(){return n})},f51a:function(e,t,i){"use strict";i.r(t);var s=i("e0e9"),n=i.n(s);for(var o in s)"default"!==o&&function(e){i.d(t,e,function(){return s[e]})}(o);t["default"]=n.a},f551:function(e,t,i){"use strict";i.r(t);var s=i("2686"),n=i("1dd6");for(var o in n)"default"!==o&&function(e){i.d(t,e,function(){return n[e]})}(o);i("28b6");var r=i("2877"),a=Object(r["a"])(n["default"],s["a"],s["b"],!1,null,"7a3669fd",null);a.options.__file="note.vue",t["default"]=a.exports},f5fe:function(e,t,i){"use strict";i.r(t);var s=i("59f0"),n=i("7018");for(var o in n)"default"!==o&&function(e){i.d(t,e,function(){return n[e]})}(o);i("deb9");var r=i("2877"),a=Object(r["a"])(n["default"],s["a"],s["b"],!1,null,"af4dc61a",null);a.options.__file="initiative.vue",t["default"]=a.exports},f692:function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0});const s=i("4185"),n=i("b906"),o=i("38c9"),r=i("bab4"),a=i("6f92"),l=i("f10f");function c(e){const t=document.createElement("canvas");let i;t.style.zIndex=a.layerManager.layers.length.toString(),t.width=window.innerWidth,t.height=window.innerHeight,i="grid"===e.type_?new o.GridLayer(t,e.name):"fow"===e.type_?new s.FOWLayer(t,e.name):"fow-players"===e.type_?new n.FOWPlayersLayer(t,e.name):new r.Layer(t,e.name),i.selectable=e.selectable,i.playerEditable=e.player_editable,a.layerManager.addLayer(i);const c=document.getElementById("layers");null!==c?("fow-players"!==e.name&&c.appendChild(t),"grid"===e.type_&&e.size&&l.gameStore.setGridSize({gridSize:e.size,sync:!1}),i.setShapes(e.shapes)):console.warn("Layers div is missing, this will prevent the main game board from loading!")}t.createLayer=c},f74c:function(e,t,i){"use strict";i.r(t);var s=i("a9a6"),n=i("29a2");for(var o in n)"default"!==o&&function(e){i.d(t,e,function(){return n[e]})}(o);i("9104");var r=i("2877"),a=Object(r["a"])(n["default"],s["a"],s["b"],!1,null,"4697341e",null);a.options.__file="labels.vue",t["default"]=a.exports},f8b3:function(e,t,i){"use strict";i.r(t);var s=i("d8ee"),n=i.n(s);for(var o in s)"default"!==o&&function(e){i.d(t,e,function(){return s[e]})}(o);t["default"]=n.a},f994:function(e,t,i){"use strict";var s=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("form",{on:{focusin:e.focusin,focusout:e.focusout,submit:function(t){return t.preventDefault(),e.login(t)}}},[i("fieldset",[i("legend",{staticClass:"legend"},[e._v("PlanarAlly")]),i("div",{staticClass:"input"},[i("input",{directives:[{name:"model",rawName:"v-model",value:e.username,expression:"username"}],attrs:{type:"text",name:"username",placeholder:"Username",autocomplete:"username",required:""},domProps:{value:e.username},on:{input:function(t){t.target.composing||(e.username=t.target.value)}}}),e._m(0)]),i("div",{staticClass:"input"},[i("input",{directives:[{name:"model",rawName:"v-model",value:e.password,expression:"password"}],attrs:{type:"password",name:"password",placeholder:"Password",autocomplete:"current-password",required:""},domProps:{value:e.password},on:{input:function(t){t.target.composing||(e.password=t.target.value)}}}),e._m(1)]),i("div",{staticStyle:{display:"flex"}},[i("button",{staticStyle:{visibility:"hidden",display:"none"},attrs:{type:"submit",name:"login"}}),i("button",{staticClass:"submit",attrs:{type:"button",name:"register",title:"Register"},on:{click:e.register}},[i("i",{staticClass:"fas fa-plus"})]),e._m(2)])]),e.error?i("div",{staticClass:"feedback"},[i("p",{staticClass:"error"},[i("strong",[e._v("Error:")]),e._v("\n "+e._s(e.error)+"\n ")])]):e._e()])},n=[function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("span",[i("i",{staticClass:"fas fa-user-circle"})])},function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("span",[i("i",{staticClass:"fas fa-lock"})])},function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("button",{staticClass:"submit",attrs:{type:"submit",name:"login",title:"Login"}},[i("i",{staticClass:"fas fa-arrow-right"})])}];i.d(t,"a",function(){return s}),i.d(t,"b",function(){return n})},fbdd:function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0});const s=i("9ab4"),n=s.__importDefault(i("a026")),o=s.__importDefault(i("65d9")),r=s.__importDefault(i("d065")),a=i("4a5b"),l=i("0bc6"),c=i("af17"),u=i("6f92");let d=class extends n.default{constructor(){super(...arguments),this.shape=null}mounted(){c.EventBus.$on("SelectionInfo.Shape.Set",e=>{this.shape=e})}beforeDestroy(){c.EventBus.$off("SelectionInfo.Shape.Set")}openEditDialog(){this.$refs.editDialog.visible=!0}changeValue(e,t){null!==this.shape&&a.getRef("prompt").prompt(`New ${e.name} value:`,`Updating ${e.name}`).then(i=>{if(null===this.shape)return;const s=e.value;"+"===i[0]||"-"===i[0]?e.value+=parseInt(i,10):e.value=parseInt(i,10),isNaN(e.value)&&(e.value=s),l.socket.emit("Shape.Update",{shape:this.shape.asDict(),redraw:t,temporary:!1}),t&&u.layerManager.invalidate()},()=>{})}};d=s.__decorate([o.default({components:{"edit-dialog":r.default}})],d),t.default=d},fcac:function(e,t,i){},fe11:function(e,t,i){},fe80:function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0});const s=i("0bc6"),n=i("af17"),o=i("8f0a"),r=i("6f92"),a=i("f692"),l=i("9cb7"),c=i("f10f"),u=i("5f86"),d=i("5a5c");s.socket.on("connect",()=>{console.log("Connected")}),s.socket.on("disconnect",()=>{console.log("Disconnected")}),s.socket.on("connect_error",e=>{console.error("Could not connect to game session."),u.router.push("/dashboard")}),s.socket.on("error",e=>{console.error("Game session does not exist."),u.router.push("/dashboard")}),s.socket.on("redirect",e=>{console.log("redirecting"),u.router.push(e)}),s.socket.on("Room.Info.Set",e=>{c.gameStore.setRoomName(e.name),c.gameStore.setRoomCreator(e.creator),c.gameStore.setInvitationCode(e.invitationCode)}),s.socket.on("Username.Set",e=>{c.gameStore.setUsername(e),c.gameStore.setDM(e===window.location.pathname.split("/")[2])}),s.socket.on("Client.Options.Set",e=>{c.gameStore.setGridColour({colour:e.grid_colour,sync:!1}),c.gameStore.setFOWColour({colour:e.fow_colour,sync:!1}),c.gameStore.setRulerColour({colour:e.ruler_colour,sync:!1}),c.gameStore.setPanX(e.pan_x),c.gameStore.setPanY(e.pan_y),c.gameStore.setZoomDisplay(d.zoomDisplay(e.zoom_factor)),e.active_layer&&r.layerManager.selectLayer(e.active_layer,!1),void 0!==r.layerManager.getGridLayer()&&r.layerManager.getGridLayer().invalidate()}),s.socket.on("Location.Set",e=>{void 0!==e.name&&c.gameStore.setLocationName(e.name),void 0!==e.unit_size&&c.gameStore.setUnitSize({unitSize:e.unit_size,sync:!1}),void 0!==e.use_grid&&c.gameStore.setUseGrid({useGrid:e.use_grid,sync:!1}),void 0!==e.full_fow&&c.gameStore.setFullFOW({fullFOW:e.full_fow,sync:!1}),void 0!==e.fow_opacity&&c.gameStore.setFOWOpacity({fowOpacity:e.fow_opacity,sync:!1}),void 0!==e.fow_los&&c.gameStore.setLineOfSight({fowLOS:e.fow_los,sync:!1}),void 0!==e.vision_min_range&&c.gameStore.setVisionRangeMin({value:e.vision_min_range,sync:!1}),void 0!==e.vision_max_range&&c.gameStore.setVisionRangeMax({value:e.vision_max_range,sync:!1}),void 0!==e.vision_mode&&(c.gameStore.setVisionMode({mode:e.vision_mode,sync:!1}),c.gameStore.recalculateVision(),c.gameStore.recalculateMovement())}),s.socket.on("Position.Set",e=>{l.gameManager.setCenterPosition(new o.GlobalPoint(e.x,e.y))}),s.socket.on("Notes.Set",e=>{for(const t of e)c.gameStore.newNote({note:t,sync:!1})}),s.socket.on("Asset.List.Set",e=>{c.gameStore.setAssets(e)}),s.socket.on("Board.Set",e=>{c.gameStore.clear(),c.gameStore.setLocations(e.locations),document.getElementById("layers").innerHTML="",c.gameStore.resetLayerInfo(),r.layerManager.reset();for(const t of e.layers)a.createLayer(t);r.layerManager.selectLayer(r.layerManager.getLayer().name,!1),n.EventBus.$emit("Initiative.Clear"),c.gameStore.recalculateVision(),c.gameStore.recalculateMovement(),c.gameStore.setBoardInitialized(!0)}),s.socket.on("Gridsize.Set",e=>{c.gameStore.setGridSize({gridSize:e,sync:!1})}),s.socket.on("Shape.Add",e=>{l.gameManager.addShape(e)}),s.socket.on("Shape.Remove",e=>{if(!r.layerManager.UUIDMap.has(e.uuid))return void console.log("Attempted to remove an unknown shape");if(!r.layerManager.hasLayer(e.layer))return void console.log(`Attempted to remove shape from an unknown layer ${e.layer}`);const t=r.layerManager.getLayer(e.layer);t.removeShape(r.layerManager.UUIDMap.get(e.uuid),!1),t.invalidate(!1)}),s.socket.on("Shape.Order.Set",e=>{if(!r.layerManager.UUIDMap.has(e.shape.uuid))return void console.log("Attempted to move the shape order of an unknown shape");if(!r.layerManager.hasLayer(e.shape.layer))return void console.log(`Attempted to remove shape from an unknown layer ${e.shape.layer}`);const t=r.layerManager.UUIDMap.get(e.shape.uuid),i=r.layerManager.getLayer(t.layer);i.moveShapeOrder(t,e.index,!1)}),s.socket.on("Shape.Layer.Change",e=>{const t=r.layerManager.UUIDMap.get(e.uuid);void 0!==t&&t.moveLayer(e.layer,!1)}),s.socket.on("Shape.Update",e=>{l.gameManager.updateShape(e)}),s.socket.on("Temp.Clear",e=>{e.forEach(e=>{if(!r.layerManager.UUIDMap.has(e.uuid))return void console.log("Attempted to remove an unknown temporary shape");if(!r.layerManager.hasLayer(e.layer))return void console.log(`Attempted to remove shape from an unknown layer ${e.layer}`);const t=r.layerManager.UUIDMap.get(e.uuid);r.layerManager.getLayer(e.layer).removeShape(t,!1)})}),s.socket.on("Labels.Set",e=>{for(const t of e)c.gameStore.addLabel(t)}),s.socket.on("Label.Visibility.Set",e=>{c.gameStore.setLabelVisibility(e)}),s.socket.on("Label.Add",e=>{c.gameStore.addLabel(e)}),s.socket.on("Label.Delete",e=>{c.gameStore.deleteLabel(e)}),s.socket.on("Labels.Filter.Add",e=>{c.gameStore.labelFilters.push(e),r.layerManager.invalidate()}),s.socket.on("Labels.Filter.Remove",e=>{const t=c.gameStore.labelFilters.indexOf(e);t>=0&&(c.gameStore.labelFilters.splice(t,1),r.layerManager.invalidate())}),s.socket.on("Labels.Filters.Set",e=>{c.gameStore.setLabelFilters(e)})}}); -//# sourceMappingURL=app-legacy.41dd580f.js.map \ No newline at end of file diff --git a/server/static/js/app-legacy.41dd580f.js.map b/server/static/js/app-legacy.41dd580f.js.map deleted file mode 100644 index 2c12f9ca3..000000000 --- a/server/static/js/app-legacy.41dd580f.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./src/game/shapes/text.ts","webpack:///./src/game/ui/selection/selection_info.vue?cd1b","webpack:///./src/game/ui/selection/shapecontext.vue","webpack:///./src/App.vue?5b85","webpack:///./src/core/components/modals/prompt.vue?d33d","webpack:///./src/core/components/colorpicker.vue?4d88","webpack:///./src/game/game.vue","webpack:///./src/game/api/socket.ts","webpack:///./src/assetManager/manager.vue?5633","webpack:///./src/game/ui/menu/asset_node.vue","webpack:///./src/game/ui/tools/selectcontext.vue?02dc","webpack:///./src/auth/login.vue","webpack:///./src/game/visibility/te/draw.ts","webpack:///./src/core/components/accordion.vue","webpack:///./src/game/ui/tools/tool.vue?5b17","webpack:///./src/game/shapes/circulartoken.ts","webpack:///./src/game/ui/annotation.ts","webpack:///./src/game/ui/menu/menu.vue","webpack:///./src/core/components/contextmenu.vue","webpack:///./src/game/ui/note.vue?49b7","webpack:///./src/auth/login.vue?c159","webpack:///./src/game/shapes/utils.ts","webpack:///./src/core/components/modals/confirm.vue?e6fb","webpack:///./src/game/ui/tools/select.vue?aed4","webpack:///./src/game/ui/tools/select.vue?29b9","webpack:///./src/game/shapes/shape.ts","webpack:///./src/core/components/modals/prompt.vue?d457","webpack:///./src/game/ui/note.vue?a34d","webpack:///./src/game/ui/note.vue?23aa","webpack:///./src/core/components/modals/modal.vue?33b9","webpack:///./src/game/ui/tools/select.vue?49f9","webpack:///./src/game/ui/tools/utils.ts","webpack:///./src/game/ui/note.vue?a508","webpack:///./src/game/ui/labels.vue?15af","webpack:///./src/game/api/utils.ts","webpack:///./src/game/ui/menu/asset_node.vue?f519","webpack:///./src/core/components/contextmenu.vue?f03a","webpack:///./src/core/components/contextmenu.vue?7efa","webpack:///./src/assetManager/store.ts","webpack:///./src/core/components/contextmenu.vue?50e1","webpack:///./src/game/ui/selection/shapecontext.vue?1cf6","webpack:///./src/game/ui/tools/map.vue?284a","webpack:///./src/game/layers/grid.ts","webpack:///./src/store.ts","webpack:///./src/core/components/colorpicker.vue","webpack:///./src/auth/login.vue?3521","webpack:///./src/App.vue?2e53","webpack:///./src/App.vue","webpack:///./src/game/game.vue?b3a0","webpack:///./src/game/game.vue?f5c6","webpack:///./src/game/layers/fow.ts","webpack:///./src/core/components/load.vue?18c2","webpack:///./src/game/ui/menu/menu.vue?002b","webpack:///./src/game/ui/menu/menu.vue?9e9a","webpack:///./src/game/ui/selection/edit_dialog.vue?db09","webpack:///./src/game/ui/selection/edit_dialog.vue?6334","webpack:///./src/game/shapes/circle.ts","webpack:///./src/game/ui/tools/map.vue?a3ab","webpack:///./src/core/components/load.vue","webpack:///./src/game/ui/tools/pan.ts","webpack:///./src/game/ui/tools/selectcontext.vue","webpack:///./src/core/utils.ts","webpack:///./src/assetManager/contextMenu.vue","webpack:///./src/game/visibility/te/triag.ts","webpack:///./src/game/ui/menu/asset_node.vue?1f27","webpack:///./src/game/ui/selection/edit_dialog.vue?1206","webpack:///./src/core/components/modals/modal.vue?44ae","webpack:///./src/assetManager/socket.ts","webpack:///./src/game/ui/tools/filter.vue?ee60","webpack:///./src/core/components/accordion.vue?3e09","webpack:///./src/game/game.vue?5550","webpack:///./src/game/shapes/multiline.ts","webpack:///./src/game/ui/tools/draw.vue","webpack:///./src/game/ui/initiative.vue?497e","webpack:///./src/game/ui/initiative.vue?527e","webpack:///./src/game/utils.ts","webpack:///./src/game/ui/tools/createtoken_modal.vue?d0df","webpack:///./src/game/ui/note.vue?f9bd","webpack:///./src/game/ui/tools/draw.vue?b96d","webpack:///./src/game/shapes/line.ts","webpack:///./src/router.ts","webpack:///./src/game/ui/tools/tool.vue?d136","webpack:///./src/game/ui/tools/tools.vue","webpack:///./src/game/ui/tools/tool.vue?8ce3","webpack:///./src/game/shapes/asset.ts","webpack:///./src/game/visibility/te/cdt.ts","webpack:///./src/game/ui/tools/draw.vue?1261","webpack:///./src/game/layers/manager.ts","webpack:///./src/game/ui/initiative.vue?c7e1","webpack:///./src/game/ui/tools/createtoken_modal.vue","webpack:///./src/game/visibility/bvh/node.ts","webpack:///./src/game/ui/tools/createtoken_modal.vue?f918","webpack:///./src/game/events/keyboard.ts","webpack:///./src/assetManager/manager.vue?433f","webpack:///./src/game/ui/selection/shapecontext.vue?17f5","webpack:///./src/game/ui/tools/tools.vue?25b2","webpack:///./src/game/ui/selection/selection_info.vue?2310","webpack:///./src/core/components/modals/modal.vue?09d2","webpack:///./src/core/components/contextmenu.vue?a0a2","webpack:///./src/core/components/modals/prompt.vue?4e1b","webpack:///./src/core/components/accordion.vue?3d26","webpack:///./src/core/components/load.vue?4ab2","webpack:///./src/core/components/load.vue?0f87","webpack:///./src/game/ui/menu/menu.vue?8b23","webpack:///./src/game/shapes/boundingrect.ts","webpack:///./src/dashboard/main.vue?5e14","webpack:///./src/dashboard/main.vue?94d1","webpack:///./src/game/geom.ts","webpack:///./src/game/ui/menu/asset_node.vue?c55a","webpack:///./src/game/ui/menu/asset_node.vue?3fe9","webpack:///./src/game/ui/labels.vue?33c0","webpack:///./src/game/game.vue?5592","webpack:///./src/game/units.ts","webpack:///./src/game/ui/menu/menu.vue?ae57","webpack:///./src/core/components/colorpicker.vue?1682","webpack:///./src/game/ui/tools/selectcontext.vue?0020","webpack:///./src/game/ui/tools/selectcontext.vue?758c","webpack:///./src/game/visibility/te/tds.ts","webpack:///./src/game/visibility/bvh/bvh.ts","webpack:///./src/game/manager.ts","webpack:///./src/game/ui/menu/asset_node.vue?0d0e","webpack:///./src/core/components/load.vue?8cd0","webpack:///./src/game/ui/selection/selection_info.vue?7cd0","webpack:///./src/game/ui/selection/selection_info.vue?4f48","webpack:///./src/game/ui/selection/shapecontext.vue?4b66","webpack:///./src/game/ui/selection/shapecontext.vue?0558","webpack:///./src/game/ui/tools/filter.vue?5a71","webpack:///./src/game/ui/tools/filter.vue?0072","webpack:///./src/dashboard/main.vue?3f72","webpack:///./src/core/components/modals/confirm.vue","webpack:///./src/game/ui/tools/tools.vue?c704","webpack:///./src/game/ui/selection/shapecontext.vue?aac0","webpack:///./src/assetManager/contextMenu.vue?c131","webpack:///./src/assetManager/contextMenu.vue?a185","webpack:///./src/game/ui/tools/draw.vue?60f4","webpack:///./src/game/ui/labels.vue?6447","webpack:///./src/game/ui/labels.vue?86fc","webpack:///./src/assetManager/manager.vue?a11e","webpack:///./src/game/event-bus.ts","webpack:///./src/dashboard/main.vue?d5a9","webpack:///./src/game/shapes/rect.ts","webpack:///./src/game/game.vue?b235","webpack:///./src/game/ui/tools/filter.vue?b0f4","webpack:///./src/game/ui/tools/selectcontext.vue?6f66","webpack:///./src/game/layers/fowplayers.ts","webpack:///./src/game/layers/layer.ts","webpack:///./src/game/events/mouse.ts","webpack:///./src/game/ui/tools/filter.vue","webpack:///./src/game/ui/menu/menu.vue?904d","webpack:///./src/game/shapes/baserect.ts","webpack:///./src/game/ui/tools/select.vue","webpack:///./src/dashboard/main.vue","webpack:///./src/game/ui/tools/createtoken_modal.vue?6f0b","webpack:///./src/assetManager/manager.vue?765a","webpack:///./src/assetManager/manager.vue?a045","webpack:///./src/game/ui/tools/selectcontext.vue?d61f","webpack:///./src/auth/logout.ts","webpack:///./src/core/store.ts","webpack:///./src/main.ts","webpack:///./src/core/components/contextmenu.vue?f402","webpack:///./src/invitation/invitation.ts","webpack:///./src/core/components/modals/prompt.vue","webpack:///./src/game/visibility/te/te.ts","webpack:///./src/game/ui/tools/map.vue?f96f","webpack:///./src/game/ui/tools/map.vue?7f60","webpack:///./src/game/ui/selection/edit_dialog.vue","webpack:///./src/game/settings.ts","webpack:///./src/auth/login.vue?283c","webpack:///./src/game/ui/tools/createtoken_modal.vue?e7b2","webpack:///./src/game/ui/tools/createtoken_modal.vue?5fcc","webpack:///./src/game/ui/tools/tool.vue?6323","webpack:///./src/game/ui/tools/tool.vue?f5ba","webpack:///./src/core/components/modals/modal.vue?1854","webpack:///./src/core/components/modals/modal.vue?e329","webpack:///./src/game/game.vue?d01c","webpack:///./src/game/ui/tools/ruler.ts","webpack:///./src/core/components/modals/modal.vue","webpack:///./src/core/components/accordion.vue?4b34","webpack:///./src/game/visibility/te/pa.ts","webpack:///./src/dashboard/main.vue?1359","webpack:///./src/game/ui/selection/edit_dialog.vue?9a84","webpack:///./src/core/components/modals/confirm.vue?f9ee","webpack:///./src/game/ui/initiative.vue?59ac","webpack:///./src/game/ui/tools/map.vue","webpack:///./src/core/components/accordion.vue?c7e6","webpack:///./src/core/components/accordion.vue?6229","webpack:///./src/game/ui/tools/filter.vue?77c9","webpack:///./src/core/components/modals/confirm.vue?e141","webpack:///./src/core/components/modals/confirm.vue?be48","webpack:///./src/assetManager/contextMenu.vue?1b1b","webpack:///./src/game/ui/tools/select.vue?b7fd","webpack:///./src/game/ui/tools/filter.vue?6447","webpack:///./src/game/ui/labels.vue?8d8f","webpack:///./src/game/shapes/polygon.ts","webpack:///./src/game/ui/tools/draw.vue?1866","webpack:///./src/game/ui/tools/draw.vue?03b4","webpack:///./src/core/components/colorpicker.vue?0fbc","webpack:///./src/core/components/colorpicker.vue?fb27","webpack:///./src/assetManager/manager.vue","webpack:///./src/game/ui/tools/tools.vue?fa4a","webpack:///./src/game/ui/tools/tool.vue","webpack:///./src/core/components/modals/prompt.vue?0a11","webpack:///./src/core/components/modals/prompt.vue?36e2","webpack:///./src/game/ui/initiative.vue?36c8","webpack:///./src/game/ui/selection/selection_info.vue","webpack:///./src/game/store.ts","webpack:///./src/core/components/colorpicker.vue?4d99","webpack:///./src/core/components/modals/confirm.vue?a22f","webpack:///./src/game/comm/conversion/aura.ts","webpack:///./src/game/ui/tools/tools.vue?47aa","webpack:///./src/game/ui/tools/tools.vue?e95e","webpack:///./src/assetManager/contextMenu.vue?1e9a","webpack:///./src/game/ui/note.vue","webpack:///./src/game/ui/initiative.vue","webpack:///./src/game/layers/utils.ts","webpack:///./src/game/ui/labels.vue","webpack:///./src/game/ui/selection/edit_dialog.vue?3800","webpack:///./src/auth/login.vue?e4a1","webpack:///./src/auth/login.vue?8f9e","webpack:///./src/game/ui/selection/selection_info.vue?5d62","webpack:///./src/game/api/events.ts"],"names":["webpackJsonpCallback","data","moduleId","chunkId","chunkIds","moreModules","executeModules","i","resolves","length","installedChunks","push","Object","prototype","hasOwnProperty","call","modules","parentJsonpFunction","shift","deferredModules","apply","checkDeferredModules","result","deferredModule","fulfilled","j","depId","splice","__webpack_require__","s","installedModules","app","exports","module","l","m","c","d","name","getter","o","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","p","jsonpArray","window","oldJsonpFunction","slice","boundingrect_1","shape_1","units_1","Text","Shape","[object Object]","position","text","font","angle","fillColour","strokeColour","uuid","super","this","type","assign","getBaseDict","points","refPoint","x","y","BoundingRect","ctx","draw","fillStyle","save","dest","g2l","translate","rotate","textAlign","getLines","map","line","fillText","restore","point","centerPoint","canvas","getBoundingBox","visibleInCanvas","resizePoint","lines","lineHeight","widths","measureText","width","Math","max","split","allLines","maxWidth","targetLine","words","word","testLine","metrics","testWidth","_node_modules_mini_css_extract_plugin_dist_loader_js_ref_6_oneOf_1_0_node_modules_css_loader_index_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_6_oneOf_1_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_selection_info_vue_vue_type_style_index_0_id_674cf937_scoped_true_lang_css___WEBPACK_IMPORTED_MODULE_0__","_node_modules_mini_css_extract_plugin_dist_loader_js_ref_6_oneOf_1_0_node_modules_css_loader_index_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_6_oneOf_1_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_selection_info_vue_vue_type_style_index_0_id_674cf937_scoped_true_lang_css___WEBPACK_IMPORTED_MODULE_0___default","__webpack_exports__","_shapecontext_vue_vue_type_template_id_759e5a8a_scoped_true___WEBPACK_IMPORTED_MODULE_0__","_shapecontext_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__","__WEBPACK_IMPORT_KEY__","_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_3__","component","options","__file","_node_modules_mini_css_extract_plugin_dist_loader_js_ref_6_oneOf_1_0_node_modules_css_loader_index_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_6_oneOf_1_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_App_vue_vue_type_style_index_0_lang_css___WEBPACK_IMPORTED_MODULE_0__","_node_modules_mini_css_extract_plugin_dist_loader_js_ref_6_oneOf_1_0_node_modules_css_loader_index_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_6_oneOf_1_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_App_vue_vue_type_style_index_0_lang_css___WEBPACK_IMPORTED_MODULE_0___default","_node_modules_mini_css_extract_plugin_dist_loader_js_ref_6_oneOf_1_0_node_modules_css_loader_index_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_6_oneOf_1_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_prompt_vue_vue_type_style_index_0_id_0602c2e6_scoped_true_lang_css___WEBPACK_IMPORTED_MODULE_0__","_node_modules_mini_css_extract_plugin_dist_loader_js_ref_6_oneOf_1_0_node_modules_css_loader_index_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_6_oneOf_1_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_prompt_vue_vue_type_style_index_0_id_0602c2e6_scoped_true_lang_css___WEBPACK_IMPORTED_MODULE_0___default","tinycolor2_1","tslib_1","__importDefault","vue_1","vue_class_component_1","vue_color_1","vue_property_decorator_1","ColorPicker","default","display","left","top","transparent","$refs","chromePicker","val","rgba","a","setPosition","disabled","$nextTick","$children","$el","focus","newColor","toRgbString","$emit","color","rect","getBoundingClientRect","right","innerWidth","bottom","innerHeight","__decorate","Prop","String","Boolean","components","chrome-picker","Chrome","_game_vue_vue_type_template_id_05b88da7_scoped_true___WEBPACK_IMPORTED_MODULE_0__","_game_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__","_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_4__","socket_io_client_1","createConnection","route","socket","io","opts","query","params","creator","room","connect","location","protocol","host","autoConnect","contextMenu_vue_1","confirm_vue_1","prompt_vue_1","socket_1","store_1","utils_1","AssetManager","path","draggingSelection","folders","assetStore","files","selected","idMap","currentFolder","root","parentFolder","parent","undefined","firstSelectedFile","sel","file_hash","nextFolder","pop","clearSelected","emit","prompt","inode","target","includes","indexOf","delete","event","shiftKey","inodes","start","end","ctrlKey","file","dataTransfer","setData","dropEffect","classList","contains","add","remove","moveInode","upload","document","getElementById","click","fls","CHUNK_SIZE","uuidv4","slices","ceil","size","fr","FileReader","readAsArrayBuffer","min","onload","e","directory","totalSlices","Prompt","ConfirmDialog","AssetContextMenu","to","from","next","disconnect","_asset_node_vue_vue_type_template_id_6d718094_scoped_true___WEBPACK_IMPORTED_MODULE_0__","_asset_node_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__","_node_modules_mini_css_extract_plugin_dist_loader_js_ref_6_oneOf_1_0_node_modules_css_loader_index_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_6_oneOf_1_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_selectcontext_vue_vue_type_style_index_0_id_44a31e42_scoped_true_lang_css___WEBPACK_IMPORTED_MODULE_0__","_node_modules_mini_css_extract_plugin_dist_loader_js_ref_6_oneOf_1_0_node_modules_css_loader_index_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_6_oneOf_1_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_selectcontext_vue_vue_type_style_index_0_id_44a31e42_scoped_true_lang_css___WEBPACK_IMPORTED_MODULE_0___default","_login_vue_vue_type_template_id_bc30fc14_scoped_true___WEBPACK_IMPORTED_MODULE_0__","_login_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__","manager_1","tds_1","triag_1","drawPolygon","polygon","colour","dl","layerManager","getLayer","lineJoin","beginPath","strokeStyle","random","moveTo","g2lx","g2ly","lineTo","closePath","stroke","drawPolygonL","xx","local","yy","I","J","drl","constrained","drawPolygonT","tds","clear","logs","T","clearRect","ei","EdgeIterator","valid","collect","fromP","edge","first","vertices","ccw","second","toP","cw","Infinity","constraints","console","log","pos","triangles","isInfinite","po","arc","PI","fill","DP","DPL","DPT","_accordion_vue_vue_type_template_id_0bf2b7ba_scoped_true___WEBPACK_IMPORTED_MODULE_0__","_accordion_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__","_node_modules_mini_css_extract_plugin_dist_loader_js_ref_6_oneOf_1_0_node_modules_css_loader_index_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_6_oneOf_1_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_tool_vue_vue_type_style_index_0_lang_css___WEBPACK_IMPORTED_MODULE_0__","_node_modules_mini_css_extract_plugin_dist_loader_js_ref_6_oneOf_1_0_node_modules_css_loader_index_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_6_oneOf_1_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_tool_vue_vue_type_style_index_0_lang_css___WEBPACK_IMPORTED_MODULE_0___default","tinycolor","__importStar","circle_1","CircularToken","Circle","center","radius","fromDict","textBaseline","xs","calcFontScale","g2lz","ys","transform","mostReadable","toHexString","visible","gameStore","IS_DM","group","source","has_img","effects","index","geom_1","rect_1","text_1","AnnotationManager","shown","origin","GlobalPoint","annotationText","annotationRect","Rect","layer","hasLayer","warn","addShape","l2g","LocalPoint","getMaxWidth","height","getMaxHeight","w","zoomFactor","h","invalidate","_menu_vue_vue_type_template_id_aaf3f05e_scoped_true___WEBPACK_IMPORTED_MODULE_0__","_menu_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__","_contextmenu_vue_vue_type_template_id_256dde9c___WEBPACK_IMPORTED_MODULE_0__","_contextmenu_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__","_node_modules_cache_loader_dist_cjs_js_ref_12_0_node_modules_thread_loader_dist_cjs_js_node_modules_ts_loader_index_js_ref_12_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_note_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__","_node_modules_cache_loader_dist_cjs_js_ref_12_0_node_modules_thread_loader_dist_cjs_js_node_modules_ts_loader_index_js_ref_12_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_note_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0___default","_node_modules_cache_loader_dist_cjs_js_ref_12_0_node_modules_thread_loader_dist_cjs_js_node_modules_ts_loader_index_js_ref_12_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_login_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__","_node_modules_cache_loader_dist_cjs_js_ref_12_0_node_modules_thread_loader_dist_cjs_js_node_modules_ts_loader_index_js_ref_12_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_login_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0___default","asset_1","circulartoken_1","line_1","multiline_1","polygon_1","createShapeFromDict","shape","sh","type_","fill_colour","stroke_colour","circ","token","Line","x2","y2","line_width","multiline","MultiLine","Polygon","v","asset","img","Image","src","startsWith","URL","pathname","Asset","_node_modules_mini_css_extract_plugin_dist_loader_js_ref_6_oneOf_1_0_node_modules_css_loader_index_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_6_oneOf_1_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_confirm_vue_vue_type_style_index_0_id_1883e207_scoped_true_lang_css___WEBPACK_IMPORTED_MODULE_0__","_node_modules_mini_css_extract_plugin_dist_loader_js_ref_6_oneOf_1_0_node_modules_css_loader_index_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_6_oneOf_1_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_confirm_vue_vue_type_style_index_0_id_1883e207_scoped_true_lang_css___WEBPACK_IMPORTED_MODULE_0___default","render","_vm","_h","$createElement","_c","_self","ref","staticRenderFns","aura_1","nameVisible","trackers","auras","labels","_owners","visionObstruction","movementObstruction","isToken","showHighlight","annotation","globalCompositeOperation","Map","_refPoint","delta","idx","entries","abs","prev","fromArray","vec","subtract","mid","multiply","normalize","skipLightUpdate","recalculate","self","obstructionIndex","visionBlockers","update","recalculateVision","forEach","au","ls","visionSources","findIndex","aura","visionSource","some","blocksMovement","movementblockers","recalculateMovement","ownedBy","ownedtokens","draw_operator","movement_obstruction","vision_obstruction","aurasToServer","owners","name_visible","is_token","JSON","stringify","aurasFromServer","parse","bbox","strokeRect","topLeft","dim","loc","innerRange","g2lr","gradient","createRadialGradient","tc","addColorStop","setAlpha","lastPath","sync","oldLayer","newLayer","shapes","freeze","username","owner","oldValue","newValue","ownerIndex","addOwner","_node_modules_cache_loader_dist_cjs_js_ref_12_0_node_modules_thread_loader_dist_cjs_js_node_modules_ts_loader_index_js_ref_12_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_prompt_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__","_node_modules_cache_loader_dist_cjs_js_ref_12_0_node_modules_thread_loader_dist_cjs_js_node_modules_ts_loader_index_js_ref_12_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_prompt_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0___default","note","attrs","mask","on","close","$event","scopedSlots","_u","fn","staticClass","draggable","dragstart","dragStart","dragend","dragEnd","title","select","staticStyle","font-size","directives","rawName","expression","domProps","change","updateNote","input","composing","$set","style","calcHeight","removeNote","_v","_e","_node_modules_mini_css_extract_plugin_dist_loader_js_ref_6_oneOf_1_0_node_modules_css_loader_index_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_6_oneOf_1_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_modal_vue_vue_type_style_index_0_id_12ed61ba_scoped_true_lang_css___WEBPACK_IMPORTED_MODULE_0__","_node_modules_mini_css_extract_plugin_dist_loader_js_ref_6_oneOf_1_0_node_modules_css_loader_index_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_6_oneOf_1_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_modal_vue_vue_type_style_index_0_id_12ed61ba_scoped_true_lang_css___WEBPACK_IMPORTED_MODULE_0___default","selectcontext_vue_1","tool_vue_1","utils_2","utils_3","SelectOperations","SelectTool","showContextMenu","active","Noop","deltaChanged","dragRay","Ray","Vector","selectionStartPoint","selectionHelper","mouse","getMouse","globalMouse","selectionStack","hit","selection","concat","getPointIndex","l2gz","getRef","Resize","Drag","localRefPoint","GroupSelect","endPoint","og","direction","ogDelta","calculateDelta","asDict","redraw","temporary","resize","updateCursor","body","cursor","clearSelection","topRight","botLeft","useGrid","altKey","snapToGrid","resizeToGrid","$parent","shapecontext","open","selectcontext","getPointOrientation","SelectContext","pa_1","done","visionMode","ogSelBBox","newSelBBox","offset","refine","movementBlocker","blocker","UUIDMap","blockerBBox","found","intersectsWithInner","ray","fromPoints","invDir","inverse","dirIsNegative","intersectP","bCenter","sCenter","ux","uy","dx","dot","dy","centerTriangle","PA_CDT","movement","locate","asArray","lt","triangle","checkTriangle","skip","endpoint","neighbours","_cw","_ccw","ix","intersection","isConstrained","orientation","Sign","LEFT_TURN","ZERO","newDelta","_node_modules_mini_css_extract_plugin_dist_loader_js_ref_6_oneOf_1_0_node_modules_css_loader_index_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_6_oneOf_1_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_note_vue_vue_type_style_index_0_id_7a3669fd_scoped_true_lang_css___WEBPACK_IMPORTED_MODULE_0__","_node_modules_mini_css_extract_plugin_dist_loader_js_ref_6_oneOf_1_0_node_modules_css_loader_index_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_6_oneOf_1_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_note_vue_vue_type_style_index_0_id_7a3669fd_scoped_true_lang_css___WEBPACK_IMPORTED_MODULE_0___default","_node_modules_cache_loader_dist_cjs_js_ref_12_0_node_modules_thread_loader_dist_cjs_js_node_modules_ts_loader_index_js_ref_12_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_labels_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__","_node_modules_cache_loader_dist_cjs_js_ref_12_0_node_modules_thread_loader_dist_cjs_js_node_modules_ts_loader_index_js_ref_12_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_labels_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0___default","sendClientOptions","locationOptions","panX","panY","AssetNode","showImage","keys","filter","el","sort","alphSort","__files","b","toLowerCase","children","imageSource","querySelector","setDragImage","tabindex","blur","_t","vuex_module_decorators_1","AssetStore","VuexModule","Mutation","Module","dynamic","store","rootStore","namespaced","getModule","_node_modules_cache_loader_dist_cjs_js_ref_12_0_node_modules_thread_loader_dist_cjs_js_node_modules_ts_loader_index_js_ref_12_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_contextmenu_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__","_node_modules_cache_loader_dist_cjs_js_ref_12_0_node_modules_thread_loader_dist_cjs_js_node_modules_ts_loader_index_js_ref_12_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_contextmenu_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0___default","contextmenu_vue_1","event_bus_1","ShapeContext","activeLayer","pageX","pageY","layers","selectable","playerEditable","moveLayer","getActiveLayer","moveShapeOrder","initiative","addInitiative","getInitiativeRepr","EventBus","ContextMenu","_node_modules_cache_loader_dist_cjs_js_ref_12_0_node_modules_thread_loader_dist_cjs_js_node_modules_ts_loader_index_js_ref_12_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_map_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__","_node_modules_cache_loader_dist_cjs_js_ref_12_0_node_modules_thread_loader_dist_cjs_js_node_modules_ts_loader_index_js_ref_12_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_map_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0___default","layer_1","GridLayer","Layer","doClear","drawGrid","gs","gridSize","gridColour","lineWidth","vuex_1","use","Store","_colorpicker_vue_vue_type_template_id_d32461a4_scoped_true___WEBPACK_IMPORTED_MODULE_0__","_colorpicker_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__","_node_modules_mini_css_extract_plugin_dist_loader_js_ref_6_oneOf_1_0_node_modules_css_loader_index_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_6_oneOf_1_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_login_vue_vue_type_style_index_0_id_bc30fc14_scoped_true_lang_css___WEBPACK_IMPORTED_MODULE_0__","_node_modules_mini_css_extract_plugin_dist_loader_js_ref_6_oneOf_1_0_node_modules_css_loader_index_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_6_oneOf_1_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_login_vue_vue_type_style_index_0_id_bc30fc14_scoped_true_lang_css___WEBPACK_IMPORTED_MODULE_0___default","id","script","componentNormalizer","mouseleave","wheel","zoom","ready","mousedown","mouseup","mousemove","contextmenu","preventDefault","stopPropagation","dragover","drop","showUI","_l","class","layer-selected","selectedLayer","selectLayer","href","_s","interval","dot-width","dot-height","tooltip-dir","tooltip","formatter","zoomDisplay","toFixed","slider-style","border-radius","bg-style","background-color","box-shadow","process-style","model","callback","$$v","settings_1","te_1","FOWLayer","isVisionLayer","preFogShapes","virtualCanvas","createElement","vCtx","getContext","has","removeShape","Settings","skipLightFOW","originalOperation","dctx","drawAngleLines","drawFirstLightHit","fullFOW","bb","lcenter","alm","light","find","auraLength","getUnitDistance","auraCircle","lastArcAngle","Path2D","firstPoint","angleSteps","anglePoint","cos","sin","lightRay","hitResult","BV","intersect","computeVisibility","drawImage","fowLOS","preShape","ogComposite","getFogColour","fillRect","_node_modules_cache_loader_dist_cjs_js_ref_12_0_node_modules_thread_loader_dist_cjs_js_node_modules_ts_loader_index_js_ref_12_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_load_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__","_node_modules_cache_loader_dist_cjs_js_ref_12_0_node_modules_thread_loader_dist_cjs_js_node_modules_ts_loader_index_js_ref_12_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_load_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0___default","settings","locations","rm-list-dm","_m","enter","rm","transition","settingsClick","overflow-y","overflow-x","assets","createNote","openNote","notes","for","checked","Array","isArray","_i","$$a","$$el","$$c","$$i","modifiers","number","step","fowOpacity","_n","$forceUpdate","unitSize","changeVisionMode","$store","state","game","lazy","visionRangeMin","visionRangeMax","readonly","invitationCode","update:color","fowColour","rulerColour","text-decoration","changeLocation","createLocation","grid-column","owned","updateShape","opacity","grid-column-start","setToken","setVisionBlocker","setMovementBlocker","placeholder","updateOwner","gridColumnStart","removeOwner","tracker","removeTracker","updateAuraColour","updateAuraVisionSource","removeAura","label","category","removeLabel","openLabelManager","updateAnnotation","pow","targetX","targetY","round","diff","sqrt","baserect_1","MapTool","xCount","yCount","startPoint","clone","BaseRect","_load_vue_vue_type_template_id_ff095222___WEBPACK_IMPORTED_MODULE_0__","_load_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__","_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__","PanTool","panStart","distance","increasePanX","increasePanY","_selectcontext_vue_vue_type_template_id_44a31e42_scoped_true___WEBPACK_IMPORTED_MODULE_0__","_selectcontext_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__","main_1","replace","toString","capitalize","charAt","toUpperCase","getHTMLFont","element","parentElement","getComputedStyle","getPropertyValue","getHTMLTextWidth","fakeElement","appendChild","partition","arr","predicate","ret","Number","fontWidth","fixedEncodeURIComponent","str","encodeURIComponent","charCodeAt","OrderedMap","values","getComponent","activeComponent","_contextMenu_vue_vue_type_template_id_606797b4___WEBPACK_IMPORTED_MODULE_0__","_contextMenu_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__","edgeInfo","va","vb","ec","EdgeCirculator","indv","indexV","ri","infinite","vi","orient","COLLINEAR","collinearBetween","q","cPQ","cQR","compare","EQUAL","SMALLER","LARGER","px","py","qx","qy","rx","ry","pqx","pqy","prx","pry","det","determinant","maxX","maxY","aprX","aprY","eps","EPSILON","POSITIVE","NEGATIVE","a00","a01","a10","a11","hasInexactNegativeOrientation","sideOfOrientedCircle","perturb","sideOfOrientedCircleP","Error","p0","p1","p2","os","getOrientedSide","ON_ORIENTED_BOUNDARY","reverse","ON_NEGATIVE_SIDE","xyEqual","xySmaller","xyCompare","qpx","qpy","rpx","rpy","tpx","tpy","tqx","tqy","rqx","rqy","maxx","maxy","arpx","arpy","atqx","atqy","atpx","atpy","arqx","arqy","ON_POSITIVE_SIDE","segSegDoIntersectCrossing","p3","p4","RIGHT_TURN","segSegDoIntersectContained","pa","pb","pc","pd","getIntersectionType","intersectionType","IntersectionType","POINT","NO_INTERSECTION","getLine","doIntersect","l1","l2","info","getIntersectionTypeLine","la","lb","denom","nom1","nom2","A1","A2","B1","B2","nextUp","MAX_VALUE","MIN_VALUE","ulp","_node_modules_cache_loader_dist_cjs_js_ref_12_0_node_modules_thread_loader_dist_cjs_js_node_modules_ts_loader_index_js_ref_12_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_asset_node_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__","_node_modules_cache_loader_dist_cjs_js_ref_12_0_node_modules_thread_loader_dist_cjs_js_node_modules_ts_loader_index_js_ref_12_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_asset_node_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0___default","_node_modules_mini_css_extract_plugin_dist_loader_js_ref_6_oneOf_1_0_node_modules_css_loader_index_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_6_oneOf_1_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_edit_dialog_vue_vue_type_style_index_0_id_23de098e_scoped_true_lang_css___WEBPACK_IMPORTED_MODULE_0__","_node_modules_mini_css_extract_plugin_dist_loader_js_ref_6_oneOf_1_0_node_modules_css_loader_index_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_6_oneOf_1_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_edit_dialog_vue_vue_type_style_index_0_id_23de098e_scoped_true_lang_css___WEBPACK_IMPORTED_MODULE_0___default","Modal","positioned","offsetX","offsetY","screenX","screenY","dragging","updatePosition","container","offsetWidth","offsetHeight","clientX","clientY","parseInt","destination","setRoot","folder","child","set","accordion_vue_1","FilterTool","cat","localeCompare","initalValues","labelFilters","f","categories","toggleUnlabeledFilter","_","accordion","Accordion","initialValues","updateCategory","overall","items","indeterminate","item","_node_modules_mini_css_extract_plugin_dist_loader_js_ref_6_oneOf_1_0_node_modules_css_loader_index_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_6_oneOf_1_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_game_vue_vue_type_style_index_0_lang_css___WEBPACK_IMPORTED_MODULE_0__","_node_modules_mini_css_extract_plugin_dist_loader_js_ref_6_oneOf_1_0_node_modules_css_loader_index_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_6_oneOf_1_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_game_vue_vue_type_style_index_0_lang_css___WEBPACK_IMPORTED_MODULE_0___default","_points","minx","miny","lineCap","_draw_vue_vue_type_template_id_639cd890_scoped_true___WEBPACK_IMPORTED_MODULE_0__","_draw_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__","fakeSetData","updateOrder","actor","flex-direction","align-items","initiative-selected","currentActor","mouseenter","toggleHighlight","notAllowed","owns","syncInitiative","createEffect","getDefaultEffect","toggleOption","removeInitiative","effect","updateEffect","turns","roundCounter","setRound","updateTurn","nextTurn","opposite","zoomValue","exp","colorpicker_vue_1","modal_vue_1","CreateTokenModal","borderColour","updatePreview","Watch","color-picker","computed","mapState","NoteDialog","textarea","scrollHeight","then","DrawTool","brushHelper","ruler","shapeSelect","modeSelect","modes","brushSize","helperSize","onModeChange","fowLayer","normalLayer","setupBrush","_vertices","pushBrushBack","lastPoint","finaliseShape","axios_1","vue_router_1","manager_vue_1","login_vue_1","logout_1","load_vue_1","main_vue_1","game_vue_1","invitation_1","router","base","routes","redirect","meta","auth","template","beforeEach","coreStore","initialized","matched","record","authenticated","response","setAuthenticated","setUsername","setInitialized","catch","error","Tool","detailRight","detailArrow","$on","tool","onMouseDown","onMouseUp","onMouseMove","onContextMenu","onDeselect","onSelect","_tools_vue_vue_type_template_id_cf33581e_scoped_true___WEBPACK_IMPORTED_MODULE_0__","_tools_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__","_node_modules_cache_loader_dist_cjs_js_ref_12_0_node_modules_thread_loader_dist_cjs_js_node_modules_ts_loader_index_js_ref_12_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_tool_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__","_node_modules_cache_loader_dist_cjs_js_ref_12_0_node_modules_thread_loader_dist_cjs_js_node_modules_ts_loader_index_js_ref_12_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_tool_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0___default","topleft","CDT","TDS","insert","insertConstraintV","stack","markConstraint","intersectionInfo","findIntersectedFaces","triangulateHole","intersectedFaces","listAB","listBA","edges","triangulateHole2","propagatingFlipE","triangulateHalfHole","fl","deleteTriangle","conflictBoundaries","iN","iT","iC","current","n1","n2","ind","ind1","ind2","mirrorIndex","v0","v1","v2","newlf","createTriangle","vaa","vbb","aa","lfc","LineFaceCirculator","lf","rf","indexT","unshift","previousFace","currentVertex","i1","i2","vcc","vdd","pi","BoundingBox","dilate","overlaps","removeConstrainedEdge","dimension","indf","locateInfo","iLocate","insertb","li","flipAround","propagatingFlip","depth","isFlipable","maxDepth","ni","flip","e1","e2","uid","eni","eI","edgeSet","lessEdge","indn","ed","tt","ii","u","t1","t2","t3","i3","t4","i4","insertInConstrainedEdge","LocateType","EDGE","insertc","updateConstraintsIncident","VERTEX","clearConstraintsIncident","updateConstraintsOpposite","c1","c2","fc","FaceCirculator","cwi","ccwi","insertFirst","finiteVertex","insertSecond","OUTSIDE_AFFINE_HULL","insertOutsideAffineHull","OUTSIDE_CONVEX_HULL","insertOutsideConvexHull","insertInEdge","FACE","insertInFace","insertDimUp","_infinite","conform","finiteEdge","COUNTERCLOCKWISE","insertOutsideConvexHull2","ccwlist","cwlist","th","marchLocate1D","marchLocate2D","ff","iv","pqt","Triangle","leftFirst","o0","o1","o2","sum","nTurns","_node_modules_cache_loader_dist_cjs_js_ref_12_0_node_modules_thread_loader_dist_cjs_js_node_modules_ts_loader_index_js_ref_12_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_draw_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__","_node_modules_cache_loader_dist_cjs_js_ref_12_0_node_modules_thread_loader_dist_cjs_js_node_modules_ts_loader_index_js_ref_12_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_draw_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0___default","LayerManager","drawLoop","requestAnimationFrame","addLayer","globalAlpha","getSelection","image","getData","l2gx","l2gy","lm","_node_modules_cache_loader_dist_cjs_js_ref_12_0_node_modules_thread_loader_dist_cjs_js_node_modules_ts_loader_index_js_ref_12_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_initiative_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__","_node_modules_cache_loader_dist_cjs_js_ref_12_0_node_modules_thread_loader_dist_cjs_js_node_modules_ts_loader_index_js_ref_12_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_initiative_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0___default","_createtoken_modal_vue_vue_type_template_id_73816298_scoped_true___WEBPACK_IMPORTED_MODULE_0__","_createtoken_modal_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__","BoundingNode","nPrimitives","LeafNode","firstPrimOffset","InteriorNode","union","_node_modules_cache_loader_dist_cjs_js_ref_12_0_node_modules_thread_loader_dist_cjs_js_node_modules_ts_loader_index_js_ref_12_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_createtoken_modal_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__","_node_modules_cache_loader_dist_cjs_js_ref_12_0_node_modules_thread_loader_dist_cjs_js_node_modules_ts_loader_index_js_ref_12_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_createtoken_modal_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0___default","utils_4","onKeyUp","HTMLInputElement","HTMLTextAreaElement","selectTool","onKeyDown","keyCode","hasSelection","toggleUI","clipboard","setClipboard","clip","oldTrackers","newTracker","oldAuras","newAura","_node_modules_mini_css_extract_plugin_dist_loader_js_ref_6_oneOf_1_0_node_modules_css_loader_index_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_6_oneOf_1_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_manager_vue_vue_type_style_index_0_lang_css___WEBPACK_IMPORTED_MODULE_0__","_node_modules_mini_css_extract_plugin_dist_loader_js_ref_6_oneOf_1_0_node_modules_css_loader_index_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_6_oneOf_1_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_manager_vue_vue_type_style_index_0_lang_css___WEBPACK_IMPORTED_MODULE_0___default","_node_modules_mini_css_extract_plugin_dist_loader_js_ref_6_oneOf_1_0_node_modules_css_loader_index_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_6_oneOf_1_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_shapecontext_vue_vue_type_style_index_0_id_759e5a8a_scoped_true_lang_css___WEBPACK_IMPORTED_MODULE_0__","_node_modules_mini_css_extract_plugin_dist_loader_js_ref_6_oneOf_1_0_node_modules_css_loader_index_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_6_oneOf_1_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_shapecontext_vue_vue_type_style_index_0_id_759e5a8a_scoped_true_lang_css___WEBPACK_IMPORTED_MODULE_0___default","shapecontext_vue_1","createtoken_modal_vue_1","draw_vue_1","filter_vue_1","map_vue_1","pan_1","select_vue_1","manager_2","ruler_1","Tools","currentTool","tools","dmTools","currentToolComponent","visibleTools","tagName","targetTool","button","buttons","annotations","gameManager","annotationManager","setActiveText","select-tool","pan-tool","draw-tool","ruler-tool","RulerTool","map-tool","filter-tool","shape-menu","createtoken-dialog","watch","_node_modules_cache_loader_dist_cjs_js_ref_12_0_node_modules_thread_loader_dist_cjs_js_node_modules_ts_loader_index_js_ref_12_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_selection_info_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__","_node_modules_cache_loader_dist_cjs_js_ref_12_0_node_modules_thread_loader_dist_cjs_js_node_modules_ts_loader_index_js_ref_12_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_selection_info_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0___default","_node_modules_cache_loader_dist_cjs_js_ref_12_0_node_modules_thread_loader_dist_cjs_js_node_modules_ts_loader_index_js_ref_12_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_modal_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__","_node_modules_cache_loader_dist_cjs_js_ref_12_0_node_modules_thread_loader_dist_cjs_js_node_modules_ts_loader_index_js_ref_12_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_modal_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0___default","_node_modules_mini_css_extract_plugin_dist_loader_js_ref_6_oneOf_1_0_node_modules_css_loader_index_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_6_oneOf_1_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_contextmenu_vue_vue_type_style_index_0_lang_css___WEBPACK_IMPORTED_MODULE_0__","_node_modules_mini_css_extract_plugin_dist_loader_js_ref_6_oneOf_1_0_node_modules_css_loader_index_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_6_oneOf_1_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_contextmenu_vue_vue_type_style_index_0_lang_css___WEBPACK_IMPORTED_MODULE_0___default","question","answer","resolve","reject","Promise","_node_modules_mini_css_extract_plugin_dist_loader_js_ref_6_oneOf_1_0_node_modules_css_loader_index_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_6_oneOf_1_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_accordion_vue_vue_type_style_index_0_id_0bf2b7ba_scoped_true_lang_css___WEBPACK_IMPORTED_MODULE_0__","_node_modules_mini_css_extract_plugin_dist_loader_js_ref_6_oneOf_1_0_node_modules_css_loader_index_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_6_oneOf_1_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_accordion_vue_vue_type_style_index_0_id_0bf2b7ba_scoped_true_lang_css___WEBPACK_IMPORTED_MODULE_0___default","message","_node_modules_cache_loader_dist_cjs_js_ref_12_0_node_modules_thread_loader_dist_cjs_js_node_modules_ts_loader_index_js_ref_12_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_menu_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__","_node_modules_cache_loader_dist_cjs_js_ref_12_0_node_modules_thread_loader_dist_cjs_js_node_modules_ts_loader_index_js_ref_12_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_menu_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0___default","botRight","vector","other","xmin","xmax","ymin","ymax","botright","dirIsNeg","txmin","getDiagCorner","txmax","tymin","tymax","tMax","coreVisible","joined","submit","createRoom","newSessionName","tag","getPointDistance","Point","scale","atan2","maxT","toggle","mouseover","hash","mouseout","_node_modules_mini_css_extract_plugin_dist_loader_js_ref_6_oneOf_1_0_node_modules_css_loader_index_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_6_oneOf_1_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_labels_vue_vue_type_style_index_0_id_4697341e_scoped_true_lang_css___WEBPACK_IMPORTED_MODULE_0__","_node_modules_mini_css_extract_plugin_dist_loader_js_ref_6_oneOf_1_0_node_modules_css_loader_index_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_6_oneOf_1_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_labels_vue_vue_type_style_index_0_id_4697341e_scoped_true_lang_css___WEBPACK_IMPORTED_MODULE_0___default","vue_slider_component_1","lodash_1","initiative_vue_1","labels_vue_1","menu_vue_1","note_vue_1","selection_info_vue_1","tools_vue_1","keyboard_1","mouse_1","Game","manager","updateZoom","newZoomDisplay","zoomLocation","addEventListener","resizeWindow","removeEventListener","throttle","scrollZoom","setWidth","setHeight","confirm","dropAsset","tool-bar","selection-info","prompt-dialog","confirm-dialog","menu-bar","initiative-dialog","zoom-slider","note-dialog","label-dialog","obj","z","l2gr","asset_node_vue_1","MenuBar","setUseGrid","setFullFOW","setFOWOpacity","setLineOfSight","setUnitSize","setGridSize","setGridColour","setFOWColour","setRulerColour","setVisionRangeMin","setVisionRangeMax","nextElementSibling","newNote","setVisionMode","asset-node","_node_modules_cache_loader_dist_cjs_js_ref_12_0_node_modules_thread_loader_dist_cjs_js_node_modules_ts_loader_index_js_ref_12_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_colorpicker_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__","_node_modules_cache_loader_dist_cjs_js_ref_12_0_node_modules_thread_loader_dist_cjs_js_node_modules_ts_loader_index_js_ref_12_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_colorpicker_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0___default","bringPlayers","createToken","showInitiative","_INFINITE_VERTEX","LineFaceState","newPoint","INFINITE","_counter","vertex","A","sign","Vertex","_point","_ri","Edge","_es","associatedEdge","increment","tr","dir","UNDEFINED","_tr","ic","vt","vr","pqr","VERTEX_VERTEX","VERTEX_EDGE","EDGE_VERTEX","EDGE_EDGE","createVertex","addVertex","infiniteVertex","n0","trig","t0","i0","setAdjacency","deleteList","copy","neighbour","lfit","reorient","vCW","vCCW","tri","bl","bli","vv","g","x1","y1","dist","node_1","BoundingVolume","totalNodes","buildData","orderedPrims","nodes","recursiveBuild","compact","node","createLeaf","centroidBbox","getMaxExtent","pMid","partitionedData","flattened","stopOnFirstHit","tMin","todoOffset","nodeNum","todo","secondChildOffset","flatten","myOffset","secondOffset","primitivesOffset","annotation_1","GameManager","selectedTool","oldShape","redrawInitiative","checkVisionSources","setMovementBlock","setIsToken","localPos","_node_modules_mini_css_extract_plugin_dist_loader_js_ref_6_oneOf_1_0_node_modules_css_loader_index_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_6_oneOf_1_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_asset_node_vue_vue_type_style_index_0_id_6d718094_scoped_true_lang_css___WEBPACK_IMPORTED_MODULE_0__","_node_modules_mini_css_extract_plugin_dist_loader_js_ref_6_oneOf_1_0_node_modules_css_loader_index_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_6_oneOf_1_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_asset_node_vue_vue_type_style_index_0_id_6d718094_scoped_true_lang_css___WEBPACK_IMPORTED_MODULE_0___default","LoadComponent","openEditDialog","changeValue","maxvalue","getLayers","setLayer","moveToBack","moveToFront","getInitiativeWord","--detailRight","--detailArrow","showArrow","selectionupdate","updateSelection","registerHooks","Dashboard","vm","err","post","$router","_confirm_vue_vue_type_template_id_1883e207_scoped_true___WEBPACK_IMPORTED_MODULE_0__","_confirm_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__","_node_modules_mini_css_extract_plugin_dist_loader_js_ref_6_oneOf_1_0_node_modules_css_loader_index_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_6_oneOf_1_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_tools_vue_vue_type_style_index_0_id_cf33581e_scoped_true_lang_css___WEBPACK_IMPORTED_MODULE_0__","_node_modules_mini_css_extract_plugin_dist_loader_js_ref_6_oneOf_1_0_node_modules_css_loader_index_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_6_oneOf_1_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_tools_vue_vue_type_style_index_0_id_cf33581e_scoped_true_lang_css___WEBPACK_IMPORTED_MODULE_0___default","_node_modules_cache_loader_dist_cjs_js_ref_12_0_node_modules_thread_loader_dist_cjs_js_node_modules_ts_loader_index_js_ref_12_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_shapecontext_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__","_node_modules_cache_loader_dist_cjs_js_ref_12_0_node_modules_thread_loader_dist_cjs_js_node_modules_ts_loader_index_js_ref_12_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_shapecontext_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0___default","rename","_node_modules_mini_css_extract_plugin_dist_loader_js_ref_6_oneOf_1_0_node_modules_css_loader_index_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_6_oneOf_1_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_draw_vue_vue_type_style_index_0_id_639cd890_scoped_true_lang_css___WEBPACK_IMPORTED_MODULE_0__","_node_modules_mini_css_extract_plugin_dist_loader_js_ref_6_oneOf_1_0_node_modules_css_loader_index_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_6_oneOf_1_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_draw_vue_vue_type_style_index_0_id_639cd890_scoped_true_lang_css___WEBPACK_IMPORTED_MODULE_0___default","margin","search","selectLabel","lower-opacity","toggleVisibility","deleteLabel","trim","newCategory","newName","addLabel","_node_modules_cache_loader_dist_cjs_js_ref_12_0_node_modules_thread_loader_dist_cjs_js_node_modules_ts_loader_index_js_ref_12_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_manager_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__","_node_modules_cache_loader_dist_cjs_js_ref_12_0_node_modules_thread_loader_dist_cjs_js_node_modules_ts_loader_index_js_ref_12_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_manager_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0___default","_node_modules_cache_loader_dist_cjs_js_ref_12_0_node_modules_thread_loader_dist_cjs_js_node_modules_ts_loader_index_js_ref_12_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_main_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__","_node_modules_cache_loader_dist_cjs_js_ref_12_0_node_modules_thread_loader_dist_cjs_js_node_modules_ts_loader_index_js_ref_12_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_main_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0___default","_node_modules_mini_css_extract_plugin_dist_loader_js_ref_6_oneOf_1_0_node_modules_css_loader_index_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_6_oneOf_1_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_game_vue_vue_type_style_index_1_id_05b88da7_scoped_true_lang_css___WEBPACK_IMPORTED_MODULE_0__","_node_modules_mini_css_extract_plugin_dist_loader_js_ref_6_oneOf_1_0_node_modules_css_loader_index_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_6_oneOf_1_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_game_vue_vue_type_style_index_1_id_05b88da7_scoped_true_lang_css___WEBPACK_IMPORTED_MODULE_0___default","_node_modules_cache_loader_dist_cjs_js_ref_12_0_node_modules_thread_loader_dist_cjs_js_node_modules_ts_loader_index_js_ref_12_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_filter_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__","_node_modules_cache_loader_dist_cjs_js_ref_12_0_node_modules_thread_loader_dist_cjs_js_node_modules_ts_loader_index_js_ref_12_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_filter_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0___default","_node_modules_cache_loader_dist_cjs_js_ref_12_0_node_modules_thread_loader_dist_cjs_js_node_modules_ts_loader_index_js_ref_12_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_selectcontext_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__","_node_modules_cache_loader_dist_cjs_js_ref_12_0_node_modules_thread_loader_dist_cjs_js_node_modules_ts_loader_index_js_ref_12_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_selectcontext_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0___default","FOWPlayersLayer","skipPlayerFOW","maxLength","tokenId","_a","selectionColor","selectionWidth","invalidateLight","serverShape","lsI","lbI","mbI","anI","annotationIndex","ownedIndex","ogOP","drawAuras","filterNoLabel","destinationIndex","oldIdx","deltaY","_filter_vue_vue_type_template_id_847e7ec4_scoped_true___WEBPACK_IMPORTED_MODULE_0__","_filter_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__","_node_modules_mini_css_extract_plugin_dist_loader_js_ref_6_oneOf_1_0_node_modules_css_loader_index_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_6_oneOf_1_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_menu_vue_vue_type_style_index_0_id_aaf3f05e_scoped_true_lang_css___WEBPACK_IMPORTED_MODULE_0__","_node_modules_mini_css_extract_plugin_dist_loader_js_ref_6_oneOf_1_0_node_modules_css_loader_index_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_6_oneOf_1_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_menu_vue_vue_type_style_index_0_id_aaf3f05e_scoped_true_lang_css___WEBPACK_IMPORTED_MODULE_0___default","topright","botleft","mx","my","_select_vue_vue_type_template_id_048b3482___WEBPACK_IMPORTED_MODULE_0__","_select_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__","_main_vue_vue_type_template_id_61eb1455_scoped_true___WEBPACK_IMPORTED_MODULE_0__","_main_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__","_node_modules_mini_css_extract_plugin_dist_loader_js_ref_6_oneOf_1_0_node_modules_css_loader_index_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_6_oneOf_1_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_createtoken_modal_vue_vue_type_style_index_0_id_73816298_scoped_true_lang_css___WEBPACK_IMPORTED_MODULE_0__","_node_modules_mini_css_extract_plugin_dist_loader_js_ref_6_oneOf_1_0_node_modules_css_loader_index_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_6_oneOf_1_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_createtoken_modal_vue_vue_type_style_index_0_id_73816298_scoped_true_lang_css___WEBPACK_IMPORTED_MODULE_0___default","moveDrag","stopDrag","multiple","hidden","createDirectory","prepareUpload","dblclick","changeDirectory","dragleave","leaveDrag","inode-selected","cm","startDrag","createtokendialog","Logout","CoreStore","init","App_vue_1","router_1","config","productionTip","devtools","performance","$mount","props","Initiative","code","sessionUrl","_prompt_vue_vue_type_template_id_0602c2e6_scoped_true___WEBPACK_IMPORTED_MODULE_0__","_prompt_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__","draw_1","drawt","drawTEContour","Q","rawOutput","expandEdge","fh","nfh","nIndex","rIndex","lIndex","nvh","rvh","lvh","re","le","ro","lo","raySegIntersection","CLOCKWISE","denominator","ua","_edit_dialog_vue_vue_type_template_id_23de098e_scoped_true___WEBPACK_IMPORTED_MODULE_0__","_edit_dialog_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__","tempFill","Login","password","$route","statusText","span","modal-mask","dialog-mask","dragOver","_node_modules_cache_loader_dist_cjs_js_ref_12_0_node_modules_thread_loader_dist_cjs_js_node_modules_ts_loader_index_js_ref_12_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_game_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__","_node_modules_cache_loader_dist_cjs_js_ref_12_0_node_modules_thread_loader_dist_cjs_js_node_modules_ts_loader_index_js_ref_12_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_game_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0___default","diffsign","xdiff","ydiff","xmid","ymid","_modal_vue_vue_type_template_id_12ed61ba_scoped_true___WEBPACK_IMPORTED_MODULE_0__","_modal_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__","_node_modules_cache_loader_dist_cjs_js_ref_12_0_node_modules_thread_loader_dist_cjs_js_node_modules_ts_loader_index_js_ref_12_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_accordion_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__","_node_modules_cache_loader_dist_cjs_js_ref_12_0_node_modules_thread_loader_dist_cjs_js_node_modules_ts_loader_index_js_ref_12_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_accordion_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0___default","cdt_1","triangulate","partial","cdt","insertConstraint","vision","_node_modules_mini_css_extract_plugin_dist_loader_js_ref_6_oneOf_1_0_node_modules_css_loader_index_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_6_oneOf_1_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_main_vue_vue_type_style_index_0_id_61eb1455_scoped_true_lang_css___WEBPACK_IMPORTED_MODULE_0__","_node_modules_mini_css_extract_plugin_dist_loader_js_ref_6_oneOf_1_0_node_modules_css_loader_index_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_6_oneOf_1_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_main_vue_vue_type_style_index_0_id_61eb1455_scoped_true_lang_css___WEBPACK_IMPORTED_MODULE_0___default","EditDialog","$off","addEmpty","hadAnnotation","an","yes","no","ok","_node_modules_mini_css_extract_plugin_dist_loader_js_ref_6_oneOf_1_0_node_modules_css_loader_index_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_6_oneOf_1_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_initiative_vue_vue_type_style_index_0_id_af4dc61a_scoped_true_lang_css___WEBPACK_IMPORTED_MODULE_0__","_node_modules_mini_css_extract_plugin_dist_loader_js_ref_6_oneOf_1_0_node_modules_css_loader_index_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_6_oneOf_1_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_initiative_vue_vue_type_style_index_0_id_af4dc61a_scoped_true_lang_css___WEBPACK_IMPORTED_MODULE_0___default","_map_vue_vue_type_template_id_2104f147___WEBPACK_IMPORTED_MODULE_0__","_map_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__","toggleDisplay","toggleCategory","toggleSelection","_node_modules_mini_css_extract_plugin_dist_loader_js_ref_6_oneOf_1_0_node_modules_css_loader_index_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_6_oneOf_1_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_filter_vue_vue_type_style_index_1_id_847e7ec4_scoped_true_lang_css___WEBPACK_IMPORTED_MODULE_0__","_node_modules_mini_css_extract_plugin_dist_loader_js_ref_6_oneOf_1_0_node_modules_css_loader_index_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_6_oneOf_1_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_filter_vue_vue_type_style_index_1_id_847e7ec4_scoped_true_lang_css___WEBPACK_IMPORTED_MODULE_0___default","deny","_node_modules_cache_loader_dist_cjs_js_ref_12_0_node_modules_thread_loader_dist_cjs_js_node_modules_ts_loader_index_js_ref_12_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_select_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__","_node_modules_cache_loader_dist_cjs_js_ref_12_0_node_modules_thread_loader_dist_cjs_js_node_modules_ts_loader_index_js_ref_12_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_select_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0___default","_node_modules_mini_css_extract_plugin_dist_loader_js_ref_6_oneOf_1_0_node_modules_css_loader_index_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_6_oneOf_1_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_filter_vue_vue_type_style_index_0_lang_css___WEBPACK_IMPORTED_MODULE_0__","_node_modules_mini_css_extract_plugin_dist_loader_js_ref_6_oneOf_1_0_node_modules_css_loader_index_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_6_oneOf_1_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_filter_vue_vue_type_style_index_0_lang_css___WEBPACK_IMPORTED_MODULE_0___default","LabelManager","user","option-selected","max-width","currentTarget","closePicker","z-index","updateColor","_manager_vue_vue_type_template_id_5b0def98___WEBPACK_IMPORTED_MODULE_0__","_manager_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__","_node_modules_cache_loader_dist_cjs_js_ref_12_0_node_modules_thread_loader_dist_cjs_js_node_modules_ts_loader_index_js_ref_12_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_tools_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__","_node_modules_cache_loader_dist_cjs_js_ref_12_0_node_modules_thread_loader_dist_cjs_js_node_modules_ts_loader_index_js_ref_12_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_tools_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0___default","_tool_vue_vue_type_template_id_1e034b42___WEBPACK_IMPORTED_MODULE_0__","_tool_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__","keyup","_k","vuedraggable_1","setTurn","getActor","actorId","order","show","option","effectIndex","syncEffect","_selection_info_vue_vue_type_template_id_674cf937_scoped_true___WEBPACK_IMPORTED_MODULE_0__","_selection_info_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__","bvh_1","GameStore","selectedLayerIndex","boardInitialized","roomName","roomCreator","locationName","vision_mode","filters","updatedLayers","Set","isDM","oldLoc","newLoc","getGridLayer","increase","unit_size","gridLayer","use_grid","vision_min_range","vision_max_range","full_fow","fow_opacity","fow_los","actualNote","context","commit","Action","_node_modules_mini_css_extract_plugin_dist_loader_js_ref_6_oneOf_1_0_node_modules_css_loader_index_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_6_oneOf_1_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_colorpicker_vue_vue_type_style_index_0_id_d32461a4_scoped_true_lang_css___WEBPACK_IMPORTED_MODULE_0__","_node_modules_mini_css_extract_plugin_dist_loader_js_ref_6_oneOf_1_0_node_modules_css_loader_index_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_6_oneOf_1_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_colorpicker_vue_vue_type_style_index_0_id_d32461a4_scoped_true_lang_css___WEBPACK_IMPORTED_MODULE_0___default","_node_modules_cache_loader_dist_cjs_js_ref_12_0_node_modules_thread_loader_dist_cjs_js_node_modules_ts_loader_index_js_ref_12_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_confirm_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__","_node_modules_cache_loader_dist_cjs_js_ref_12_0_node_modules_thread_loader_dist_cjs_js_node_modules_ts_loader_index_js_ref_12_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_confirm_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0___default","vision_source","refInFor","tool-selected","_node_modules_cache_loader_dist_cjs_js_ref_12_0_node_modules_thread_loader_dist_cjs_js_node_modules_ts_loader_index_js_ref_12_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_contextMenu_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__","_node_modules_cache_loader_dist_cjs_js_ref_12_0_node_modules_thread_loader_dist_cjs_js_node_modules_ts_loader_index_js_ref_12_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_contextMenu_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0___default","_note_vue_vue_type_template_id_7a3669fd_scoped_true___WEBPACK_IMPORTED_MODULE_0__","_note_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__","_initiative_vue_vue_type_template_id_af4dc61a_scoped_true___WEBPACK_IMPORTED_MODULE_0__","_initiative_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__","fow_1","fowplayers_1","grid_1","createLayer","layerInfo","zIndex","player_editable","setShapes","_labels_vue_vue_type_template_id_4697341e_scoped_true___WEBPACK_IMPORTED_MODULE_0__","_labels_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__","_node_modules_cache_loader_dist_cjs_js_ref_12_0_node_modules_thread_loader_dist_cjs_js_node_modules_ts_loader_index_js_ref_12_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_edit_dialog_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__","_node_modules_cache_loader_dist_cjs_js_ref_12_0_node_modules_thread_loader_dist_cjs_js_node_modules_ts_loader_index_js_ref_12_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_edit_dialog_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0___default","focusin","focusout","login","autocomplete","required","visibility","register","edit_dialog_vue_1","SelectionInfo","editDialog","ogValue","isNaN","edit-dialog","setRoomName","setRoomCreator","setInvitationCode","setDM","grid_colour","fow_colour","ruler_colour","setPanX","pan_x","setPanY","pan_y","setZoomDisplay","zoom_factor","active_layer","setLocationName","setCenterPosition","setAssets","locationInfo","setLocations","innerHTML","resetLayerInfo","reset","setBoardInitialized","realShape","setLabelVisibility","setLabelFilters"],"mappings":"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","file":"static/js/app-legacy.41dd580f.js","sourcesContent":[" \t// install a JSONP callback for chunk loading\n \tfunction webpackJsonpCallback(data) {\n \t\tvar chunkIds = data[0];\n \t\tvar moreModules = data[1];\n \t\tvar executeModules = data[2];\n\n \t\t// add \"moreModules\" to the modules object,\n \t\t// then flag all \"chunkIds\" as loaded and fire callback\n \t\tvar moduleId, chunkId, i = 0, resolves = [];\n \t\tfor(;i < chunkIds.length; i++) {\n \t\t\tchunkId = chunkIds[i];\n \t\t\tif(installedChunks[chunkId]) {\n \t\t\t\tresolves.push(installedChunks[chunkId][0]);\n \t\t\t}\n \t\t\tinstalledChunks[chunkId] = 0;\n \t\t}\n \t\tfor(moduleId in moreModules) {\n \t\t\tif(Object.prototype.hasOwnProperty.call(moreModules, moduleId)) {\n \t\t\t\tmodules[moduleId] = moreModules[moduleId];\n \t\t\t}\n \t\t}\n \t\tif(parentJsonpFunction) parentJsonpFunction(data);\n\n \t\twhile(resolves.length) {\n \t\t\tresolves.shift()();\n \t\t}\n\n \t\t// add entry modules from loaded chunk to deferred list\n \t\tdeferredModules.push.apply(deferredModules, executeModules || []);\n\n \t\t// run deferred modules when all chunks ready\n \t\treturn checkDeferredModules();\n \t};\n \tfunction checkDeferredModules() {\n \t\tvar result;\n \t\tfor(var i = 0; i < deferredModules.length; i++) {\n \t\t\tvar deferredModule = deferredModules[i];\n \t\t\tvar fulfilled = true;\n \t\t\tfor(var j = 1; j < deferredModule.length; j++) {\n \t\t\t\tvar depId = deferredModule[j];\n \t\t\t\tif(installedChunks[depId] !== 0) fulfilled = false;\n \t\t\t}\n \t\t\tif(fulfilled) {\n \t\t\t\tdeferredModules.splice(i--, 1);\n \t\t\t\tresult = __webpack_require__(__webpack_require__.s = deferredModule[0]);\n \t\t\t}\n \t\t}\n \t\treturn result;\n \t}\n\n \t// The module cache\n \tvar installedModules = {};\n\n \t// object to store loaded and loading chunks\n \t// undefined = chunk not loaded, null = chunk preloaded/prefetched\n \t// Promise = chunk loading, 0 = chunk loaded\n \tvar installedChunks = {\n \t\t\"app\": 0\n \t};\n\n \tvar deferredModules = [];\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"/\";\n\n \tvar jsonpArray = window[\"webpackJsonp\"] = window[\"webpackJsonp\"] || [];\n \tvar oldJsonpFunction = jsonpArray.push.bind(jsonpArray);\n \tjsonpArray.push = webpackJsonpCallback;\n \tjsonpArray = jsonpArray.slice();\n \tfor(var i = 0; i < jsonpArray.length; i++) webpackJsonpCallback(jsonpArray[i]);\n \tvar parentJsonpFunction = oldJsonpFunction;\n\n\n \t// add entry module to deferred list\n \tdeferredModules.push([0,\"chunk-vendors\"]);\n \t// run deferred modules when ready\n \treturn checkDeferredModules();\n","import { GlobalPoint, LocalPoint } from \"@/game/geom\";\nimport { BoundingRect } from \"@/game/shapes/boundingrect\";\nimport { Shape } from \"@/game/shapes/shape\";\nimport { g2l } from \"@/game/units\";\n\nexport class Text extends Shape {\n type = \"text\";\n text: string;\n font: string;\n angle: number;\n constructor(\n position: GlobalPoint,\n text: string,\n font: string,\n angle?: number,\n fillColour?: string,\n strokeColour?: string,\n uuid?: string,\n ) {\n super(position, fillColour, strokeColour, uuid);\n this.text = text;\n this.font = font;\n this.angle = angle || 0;\n }\n asDict() {\n return Object.assign(this.getBaseDict(), {\n text: this.text,\n font: this.font,\n angle: this.angle,\n });\n }\n get points() {\n return [[this.refPoint.x, this.refPoint.y]];\n }\n getBoundingBox(): BoundingRect {\n return new BoundingRect(this.refPoint, 5, 5); // TODO: fix this bounding box\n }\n draw(ctx: CanvasRenderingContext2D) {\n super.draw(ctx);\n ctx.font = this.font;\n ctx.fillStyle = this.fillColour;\n ctx.save();\n const dest = g2l(this.refPoint);\n ctx.translate(dest.x, dest.y);\n ctx.rotate(this.angle);\n ctx.textAlign = \"center\";\n this.getLines(ctx).map(line => ctx.fillText(line.text, line.x, line.y));\n ctx.restore();\n }\n contains(point: GlobalPoint): boolean {\n return false; // TODO\n }\n\n center(): GlobalPoint;\n center(centerPoint: GlobalPoint): void;\n center(centerPoint?: GlobalPoint): GlobalPoint | void {} // TODO\n visibleInCanvas(canvas: HTMLCanvasElement): boolean {\n return this.getBoundingBox().visibleInCanvas(canvas);\n } // TODO\n snapToGrid(): void {}\n resizeToGrid(): void {}\n resize(resizePoint: number, point: LocalPoint): void {}\n\n getMaxHeight(ctx: CanvasRenderingContext2D) {\n const lines = this.getLines(ctx);\n const lineHeight = 30;\n return lineHeight * lines.length;\n }\n\n getMaxWidth(ctx: CanvasRenderingContext2D) {\n const lines = this.getLines(ctx);\n const widths = lines.map(line => ctx.measureText(line.text).width);\n return Math.max(...widths);\n }\n\n private getLines(ctx: CanvasRenderingContext2D) {\n const lines = this.text.split(\"\\n\");\n const allLines: { text: string; x: number; y: number }[] = [];\n const maxWidth = ctx.canvas.width;\n const lineHeight = 30;\n const x = 0; // this.refPoint.x;\n let y = 0; // this.refPoint.y;\n\n for (const line of lines) {\n let targetLine = \"\";\n const words = line.split(\" \");\n for (const word of words) {\n const testLine = targetLine + word + \" \";\n const metrics = ctx.measureText(testLine);\n const testWidth = metrics.width;\n if (testWidth > maxWidth) {\n ctx.fillText(targetLine, x, y);\n allLines.push({ text: targetLine, x, y });\n targetLine = word + \" \";\n y += lineHeight;\n } else {\n targetLine = testLine;\n }\n }\n allLines.push({ text: targetLine, x, y });\n y += lineHeight;\n }\n return allLines;\n }\n}\n","import mod from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./selection_info.vue?vue&type=style&index=0&id=674cf937&scoped=true&lang=css&\"; export default mod; export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./selection_info.vue?vue&type=style&index=0&id=674cf937&scoped=true&lang=css&\"","import { render, staticRenderFns } from \"./shapecontext.vue?vue&type=template&id=759e5a8a&scoped=true&\"\nimport script from \"./shapecontext.vue?vue&type=script&lang=ts&\"\nexport * from \"./shapecontext.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./shapecontext.vue?vue&type=style&index=0&id=759e5a8a&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"759e5a8a\",\n null\n \n)\n\ncomponent.options.__file = \"shapecontext.vue\"\nexport default component.exports","import mod from \"-!../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../node_modules/cache-loader/dist/cjs.js??ref--0-0!../node_modules/vue-loader/lib/index.js??vue-loader-options!./App.vue?vue&type=style&index=0&lang=css&\"; export default mod; export * from \"-!../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../node_modules/cache-loader/dist/cjs.js??ref--0-0!../node_modules/vue-loader/lib/index.js??vue-loader-options!./App.vue?vue&type=style&index=0&lang=css&\"","import mod from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./prompt.vue?vue&type=style&index=0&id=0602c2e6&scoped=true&lang=css&\"; export default mod; export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./prompt.vue?vue&type=style&index=0&id=0602c2e6&scoped=true&lang=css&\"","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nimport tinycolor from \"tinycolor2\";\nimport Vue from \"vue\";\nimport Component from \"vue-class-component\";\n\nimport { Chrome } from \"vue-color\";\nimport { Prop } from \"vue-property-decorator\";\n\n@Component({\n components: {\n \"chrome-picker\": Chrome,\n },\n})\nexport default class ColorPicker extends Vue {\n @Prop(String) color!: string;\n @Prop(Boolean) disabled!: boolean;\n\n display = false;\n left = 0;\n top = 0;\n transparent = false;\n\n mounted() {\n this.transparent = (this.$refs.chromePicker).val.rgba.a === 0;\n this.setPosition();\n }\n\n open() {\n if (this.display || this.disabled) return; // click on the picker itself\n this.setPosition();\n this.display = true;\n this.$nextTick(() => this.$children[0].$el.focus());\n }\n updateColor(value: { rgba: { r: number; g: number; b: number; a: number } }) {\n this.transparent = value.rgba.a === 0;\n const newColor = tinycolor(value.rgba).toRgbString();\n this.$emit(\"update:color\", newColor);\n this.$emit(\"input\", newColor);\n }\n closePicker() {\n this.display = false;\n this.$emit(\"change\", this.color);\n }\n setPosition() {\n const rect = this.$el.getBoundingClientRect();\n // 224 is the width of the picker, 242 the height\n if (rect.right + 224 > window.innerWidth) this.left = rect.left - 224;\n else this.left = rect.right;\n if (rect.bottom + 242 > window.innerHeight) this.top = rect.top - 242;\n else this.top = rect.bottom;\n }\n}\n","import { render, staticRenderFns } from \"./game.vue?vue&type=template&id=05b88da7&scoped=true&\"\nimport script from \"./game.vue?vue&type=script&lang=ts&\"\nexport * from \"./game.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./game.vue?vue&type=style&index=0&lang=css&\"\nimport style1 from \"./game.vue?vue&type=style&index=1&id=05b88da7&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"05b88da7\",\n null\n \n)\n\ncomponent.options.__file = \"game.vue\"\nexport default component.exports","import io from \"socket.io-client\";\nimport { Route } from \"vue-router\";\n\nexport const socket = io(location.protocol + \"//\" + location.host + \"/planarally\", { autoConnect: false });\n\nexport function createConnection(route: Route) {\n socket.io.opts.query = `user=${route.params.creator}&room=${route.params.room}`;\n socket.connect();\n}\n","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nimport Vue from \"vue\";\nimport Component from \"vue-class-component\";\n\nimport AssetContextMenu from \"@/assetManager/contextMenu.vue\";\nimport ConfirmDialog from \"@/core/components/modals/confirm.vue\";\nimport Prompt from \"@/core/components/modals/prompt.vue\";\n\nimport { socket } from \"@/assetManager/socket\";\nimport { assetStore } from \"@/assetManager/store\";\nimport { Asset } from \"@/core/comm/types\";\nimport { uuidv4 } from \"@/core/utils\";\n\n@Component({\n components: {\n Prompt,\n ConfirmDialog,\n AssetContextMenu,\n },\n beforeRouteEnter(to, from, next) {\n socket.connect();\n next();\n },\n beforeRouteLeave(to, from, next) {\n socket.disconnect();\n next();\n },\n})\nexport default class AssetManager extends Vue {\n path: number[] = [];\n draggingSelection = false;\n\n get folders(): number[] {\n return assetStore.folders;\n }\n\n get files(): number[] {\n return assetStore.files;\n }\n\n get selected(): number[] {\n return assetStore.selected;\n }\n\n get idMap() {\n return assetStore.idMap;\n }\n\n get currentFolder(): number {\n if (this.path.length) return this.path[this.path.length - 1];\n return assetStore.root;\n }\n get parentFolder(): number {\n let parent = this.path[this.path.length - 2];\n if (parent === undefined) parent = assetStore.root;\n return parent;\n }\n get firstSelectedFile(): Asset | null {\n for (const sel of assetStore.selected) {\n if (assetStore.idMap.get(sel)!.file_hash) {\n return assetStore.idMap.get(sel)!;\n }\n }\n return null;\n }\n changeDirectory(nextFolder: number) {\n if (nextFolder < 0) this.path.pop();\n else this.path.push(nextFolder);\n assetStore.clearSelected();\n socket.emit(\"Folder.Get\", this.currentFolder);\n }\n createDirectory() {\n const name = window.prompt(\"New folder name\");\n if (name !== null) {\n socket.emit(\"Folder.Create\", { name, parent: this.currentFolder });\n }\n }\n moveInode(inode: number, target: number) {\n if (assetStore.files.includes(inode)) assetStore.files.splice(assetStore.files.indexOf(inode), 1);\n else assetStore.folders.splice(assetStore.folders.indexOf(inode), 1);\n assetStore.idMap.delete(inode);\n socket.emit(\"Inode.Move\", { inode, target });\n }\n select(event: MouseEvent, inode: number) {\n if (event.shiftKey && assetStore.selected.length > 0) {\n const inodes = [...assetStore.files, ...assetStore.folders];\n const start = inodes.indexOf(assetStore.selected[assetStore.selected.length - 1]);\n const end = inodes.indexOf(inode);\n for (let i = start; i !== end; start < end ? i++ : i--) {\n if (i === start) continue;\n assetStore.selected.push(inodes[i]);\n }\n assetStore.selected.push(inodes[end]);\n } else {\n if (!event.ctrlKey) {\n assetStore.clearSelected();\n }\n assetStore.selected.push(inode);\n }\n }\n startDrag(event: DragEvent, file: number) {\n if (event.dataTransfer === null) return;\n event.dataTransfer.setData(\"Hack\", \"ittyHack\");\n event.dataTransfer.dropEffect = \"move\";\n if (!assetStore.selected.includes(file)) assetStore.selected.push(file);\n this.draggingSelection = true;\n }\n moveDrag(event: DragEvent) {\n if ((event.target).classList.contains(\"folder\"))\n (event.target).classList.add(\"inode-selected\");\n }\n leaveDrag(event: DragEvent) {\n if ((event.target).classList.contains(\"folder\"))\n (event.target).classList.remove(\"inode-selected\");\n }\n stopDrag(event: DragEvent, target: number) {\n (event.target).classList.remove(\"inode-selected\");\n if (this.draggingSelection) {\n if (\n (target === assetStore.root || assetStore.folders.includes(target)) &&\n !assetStore.selected.includes(target)\n ) {\n for (const inode of assetStore.selected) {\n this.moveInode(inode, target);\n }\n }\n assetStore.clearSelected();\n } else if (event.dataTransfer && event.dataTransfer.files.length > 0) {\n this.upload(event.dataTransfer.files, target);\n }\n this.draggingSelection = false;\n }\n prepareUpload() {\n document.getElementById(\"files\")!.click();\n }\n upload(fls?: FileList, target?: number) {\n const files = (document.getElementById(\"files\")!).files;\n if (fls === undefined) {\n if (files) fls = files;\n else return;\n }\n if (target === undefined) target = this.currentFolder;\n const CHUNK_SIZE = 100000;\n for (const file of fls) {\n const uuid = uuidv4();\n const slices = Math.ceil(file.size / CHUNK_SIZE);\n for (let slice = 0; slice < slices; slice++) {\n const fr = new FileReader();\n fr.readAsArrayBuffer(\n file.slice(\n slice * CHUNK_SIZE,\n slice * CHUNK_SIZE + Math.min(CHUNK_SIZE, file.size - slice * CHUNK_SIZE),\n ),\n );\n fr.onload = e => {\n socket.emit(\"Asset.Upload\", {\n name: file.name,\n directory: target,\n data: fr.result,\n slice,\n totalSlices: slices,\n uuid,\n });\n };\n }\n }\n }\n}\n","import { render, staticRenderFns } from \"./asset_node.vue?vue&type=template&id=6d718094&scoped=true&\"\nimport script from \"./asset_node.vue?vue&type=script&lang=ts&\"\nexport * from \"./asset_node.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./asset_node.vue?vue&type=style&index=0&id=6d718094&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"6d718094\",\n null\n \n)\n\ncomponent.options.__file = \"asset_node.vue\"\nexport default component.exports","import mod from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./selectcontext.vue?vue&type=style&index=0&id=44a31e42&scoped=true&lang=css&\"; export default mod; export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./selectcontext.vue?vue&type=style&index=0&id=44a31e42&scoped=true&lang=css&\"","import { render, staticRenderFns } from \"./login.vue?vue&type=template&id=bc30fc14&scoped=true&\"\nimport script from \"./login.vue?vue&type=script&lang=ts&\"\nexport * from \"./login.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./login.vue?vue&type=style&index=0&id=bc30fc14&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"bc30fc14\",\n null\n \n)\n\ncomponent.options.__file = \"login.vue\"\nexport default component.exports","import { layerManager } from \"@/game/layers/manager\";\nimport { g2lx, g2ly } from \"@/game/units\";\nimport { EdgeIterator, TDS } from \"./tds\";\nimport { ccw, cw } from \"./triag\";\n\nexport function drawPolygon(polygon: number[][], colour?: string) {\n const dl = layerManager.getLayer(\"draw\");\n if (dl === undefined) return;\n const ctx = dl.ctx;\n ctx.lineJoin = \"round\";\n // ctx.clearRect(0, 0, window.innerWidth, window.innerHeight);\n ctx.lineJoin = \"round\";\n ctx.beginPath();\n ctx.strokeStyle =\n colour === undefined ? `rgb(${Math.random() * 255}, ${Math.random() * 255}, ${Math.random() * 255})` : colour;\n ctx.moveTo(g2lx(polygon[0][0]), g2ly(polygon[0][1]));\n for (const point of polygon) {\n ctx.lineTo(g2lx(point[0]), g2ly(point[1]));\n }\n ctx.closePath();\n ctx.stroke();\n}\n\nexport function drawPolygonL(polygon: number[][], colour?: string) {\n const dl = layerManager.getLayer(\"draw\");\n if (dl === undefined) return;\n const ctx = dl.ctx;\n ctx.lineJoin = \"round\";\n // ctx.clearRect(0, 0, window.innerWidth, window.innerHeight);\n ctx.lineJoin = \"round\";\n ctx.beginPath();\n ctx.strokeStyle =\n colour === undefined ? `rgb(${Math.random() * 255}, ${Math.random() * 255}, ${Math.random() * 255})` : colour;\n ctx.moveTo(polygon[0][0], polygon[0][1]);\n for (const point of polygon) {\n ctx.lineTo(point[0], point[1]);\n }\n ctx.closePath();\n ctx.stroke();\n}\n\nfunction x(xx: number, local: boolean) {\n if (local) return xx;\n else return g2lx(xx);\n}\n\nfunction y(yy: number, local: boolean) {\n if (local) return yy;\n else return g2ly(yy);\n}\n\nlet I = 0;\nlet J = 0;\n\nfunction drl(ctx: CanvasRenderingContext2D, from: number[], to: number[], constrained: boolean, local: boolean) {\n // J++;\n // if (constrained) {\n // I++;\n // console.log(\"*\", from, to);\n // } else {\n // console.log(\" \", from, to);\n // }\n ctx.beginPath();\n ctx.strokeStyle = constrained ? \"rgba(255, 0, 0, 0.30)\" : \"rgba(0, 0, 0, 0.30)\";\n ctx.moveTo(x(from[0], local), y(from[1], local));\n ctx.lineTo(x(to[0], local), y(to[1], local));\n ctx.closePath();\n ctx.stroke();\n}\n\nfunction drawPolygonT(tds: TDS, local = true, clear = true, logs: 0 | 1 | 2 = 0) {\n I = 0;\n J = 0;\n let T = 0;\n const dl = layerManager.getLayer(\"draw\");\n if (dl === undefined) return;\n const ctx = dl.ctx;\n if (clear) ctx.clearRect(0, 0, 2000, 1000);\n ctx.lineJoin = \"round\";\n // ctx.clearRect(0, 0, window.innerWidth, window.innerHeight);\n ctx.lineJoin = \"round\";\n const ei = new EdgeIterator(tds);\n while (ei.valid) {\n ei.next();\n ei.collect();\n }\n ei.collect();\n do {\n const fromP = ei.edge.first!.vertices[ccw(ei.edge.second)]!.point!;\n const toP = ei.edge.first!.vertices[cw(ei.edge.second)]!.point!;\n if (logs > 0) {\n if (fromP[0] === -Infinity || toP[0] === -Infinity) {\n ei.next();\n continue;\n }\n J++;\n if (ei.edge.first!.constraints[ei.edge.second]) {\n I++;\n if (logs === 2) console.log(`Edge: (*) ${fromP} > ${toP}`);\n } else if (logs === 2) console.log(`Edge: ${fromP} > ${toP}`);\n }\n do {\n ei.next();\n ei.collect();\n } while (ei.valid);\n } while (ei.pos !== null);\n for (const t of tds.triangles) {\n if (t.isInfinite()) continue;\n T++;\n const po = [];\n ctx.fillStyle = \"red\";\n if (t.vertices[0] !== undefined) {\n po.push(t.vertices[0]!.point);\n ctx.beginPath();\n ctx.arc(x(t.vertices[0]!.point![0], local), y(t.vertices[0]!.point![1], local), 5, 0, 2 * Math.PI);\n ctx.closePath();\n ctx.fill();\n }\n if (t.vertices[1] !== undefined) {\n po.push(t.vertices[1]!.point);\n ctx.arc(x(t.vertices[1]!.point![0], local), y(t.vertices[1]!.point![1], local), 5, 0, 2 * Math.PI);\n ctx.closePath();\n ctx.fill();\n }\n if (t.vertices[2] !== undefined) {\n po.push(t.vertices[2]!.point);\n ctx.arc(x(t.vertices[2]!.point![0], local), y(t.vertices[2]!.point![1], local), 5, 0, 2 * Math.PI);\n ctx.closePath();\n ctx.fill();\n }\n if (logs === 2) console.log(\"[T] \", ...po, t.constraints);\n\n ctx.moveTo(x(t.vertices[0]!.point![0], local), y(t.vertices[0]!.point![1], local));\n if (t.vertices[0] !== undefined && t.vertices[1] !== undefined)\n drl(ctx, t.vertices[0]!.point!, t.vertices[1]!.point!, t.constraints[2], local);\n if (t.vertices[1] !== undefined && t.vertices[2] !== undefined)\n drl(ctx, t.vertices[1]!.point!, t.vertices[2]!.point!, t.constraints[0], local);\n if (t.vertices[2] !== undefined && t.vertices[0] !== undefined)\n drl(ctx, t.vertices[2]!.point!, t.vertices[0]!.point!, t.constraints[1], local);\n }\n if (logs > 0) {\n console.log(`Edges: ${I}/${J}`);\n console.log(`Faces: ${T}`);\n }\n}\n\n(window).DP = drawPolygon;\n(window).DPL = drawPolygonL;\n(window).DPT = drawPolygonT;\n","import { render, staticRenderFns } from \"./accordion.vue?vue&type=template&id=0bf2b7ba&scoped=true&\"\nimport script from \"./accordion.vue?vue&type=script&lang=ts&\"\nexport * from \"./accordion.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./accordion.vue?vue&type=style&index=0&id=0bf2b7ba&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"0bf2b7ba\",\n null\n \n)\n\ncomponent.options.__file = \"accordion.vue\"\nexport default component.exports","import mod from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./tool.vue?vue&type=style&index=0&lang=css&\"; export default mod; export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./tool.vue?vue&type=style&index=0&lang=css&\"","import * as tinycolor from \"tinycolor2\";\n\nimport { calcFontScale } from \"@/core/utils\";\nimport { InitiativeData } from \"@/game/comm/types/general\";\nimport { ServerCircularToken } from \"@/game/comm/types/shapes\";\nimport { GlobalPoint } from \"@/game/geom\";\nimport { Circle } from \"@/game/shapes/circle\";\nimport { gameStore } from \"@/game/store\";\nimport { g2l, g2lz } from \"@/game/units\";\n\nexport class CircularToken extends Circle {\n type = \"circulartoken\";\n text: string;\n font: string;\n constructor(\n center: GlobalPoint,\n r: number,\n text: string,\n font: string,\n fillColour?: string,\n strokeColour?: string,\n uuid?: string,\n ) {\n super(center, r, fillColour, strokeColour, uuid);\n this.text = text;\n this.font = font;\n }\n asDict(): ServerCircularToken {\n return Object.assign(this.getBaseDict(), {\n radius: this.r,\n text: this.text,\n font: this.font,\n });\n }\n fromDict(data: ServerCircularToken) {\n super.fromDict(data);\n this.r = data.radius;\n this.text = data.text;\n this.font = data.font;\n }\n draw(ctx: CanvasRenderingContext2D) {\n super.draw(ctx);\n ctx.font = this.font;\n ctx.save();\n const dest = g2l(this.center());\n ctx.textAlign = \"center\";\n ctx.textBaseline = \"middle\";\n const xs = calcFontScale(ctx, this.text, g2lz(this.r), g2lz(this.r));\n const ys = 0;\n ctx.transform(xs, ys, -ys, xs, dest.x, dest.y);\n ctx.fillStyle = tinycolor.mostReadable(this.fillColour, [\"#000\", \"#fff\"]).toHexString();\n ctx.fillText(this.text, 0, 0);\n ctx.restore();\n }\n getInitiativeRepr(): InitiativeData {\n return {\n uuid: this.uuid,\n visible: !gameStore.IS_DM,\n group: false,\n source: this.name === \"\" || this.name === \"Unknown shape\" ? this.text : this.name,\n has_img: false,\n effects: [],\n index: Infinity,\n };\n }\n}\n","import { GlobalPoint, LocalPoint } from \"@/game/geom\";\nimport { Layer } from \"@/game/layers/layer\";\nimport { layerManager } from \"@/game/layers/manager\";\nimport { Rect } from \"@/game/shapes/rect\";\nimport { Text } from \"@/game/shapes/text\";\nimport { gameStore } from \"@/game/store\";\nimport { l2g } from \"@/game/units\";\n\nexport class AnnotationManager {\n annotationText: Text;\n annotationRect: Rect;\n layer: Layer | undefined;\n shown: boolean = false;\n\n constructor() {\n const origin = new GlobalPoint(0, 0);\n this.annotationText = new Text(origin, \"\", \"bold 20px serif\", 0, \"rgba(230, 230, 230, 1)\");\n this.annotationRect = new Rect(origin, 0, 0, \"rgba(0, 0, 0, 0.6)\");\n }\n\n setActiveText(text: string) {\n if (this.layer === undefined) {\n if (layerManager.hasLayer(\"draw\")) {\n this.layer = layerManager.getLayer(\"draw\")!;\n this.layer.addShape(this.annotationRect, false);\n this.layer.addShape(this.annotationText, false);\n } else {\n console.warn(\"There is no draw layer to draw annotations on!\");\n return;\n }\n }\n this.shown = text !== \"\";\n this.annotationText.refPoint = l2g(new LocalPoint(this.layer.canvas.width / 2, 50));\n this.annotationText.text = text;\n const width = this.shown ? this.annotationText.getMaxWidth(this.layer.ctx) + 10 : 0;\n const height = this.shown ? this.annotationText.getMaxHeight(this.layer.ctx) + 10 : 0;\n this.annotationRect.refPoint = l2g(new LocalPoint(this.layer.canvas.width / 2 - width / 2, 30));\n this.annotationRect.w = width / gameStore.zoomFactor;\n this.annotationRect.h = height / gameStore.zoomFactor;\n this.layer.invalidate(true);\n }\n}\n","import { render, staticRenderFns } from \"./menu.vue?vue&type=template&id=aaf3f05e&scoped=true&\"\nimport script from \"./menu.vue?vue&type=script&lang=ts&\"\nexport * from \"./menu.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./menu.vue?vue&type=style&index=0&id=aaf3f05e&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"aaf3f05e\",\n null\n \n)\n\ncomponent.options.__file = \"menu.vue\"\nexport default component.exports","import { render, staticRenderFns } from \"./contextmenu.vue?vue&type=template&id=256dde9c&\"\nimport script from \"./contextmenu.vue?vue&type=script&lang=ts&\"\nexport * from \"./contextmenu.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./contextmenu.vue?vue&type=style&index=0&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\ncomponent.options.__file = \"contextmenu.vue\"\nexport default component.exports","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/ts-loader/index.js??ref--12-2!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./note.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/ts-loader/index.js??ref--12-2!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./note.vue?vue&type=script&lang=ts&\"","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/ts-loader/index.js??ref--12-2!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./login.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/ts-loader/index.js??ref--12-2!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./login.vue?vue&type=script&lang=ts&\"","import {\n ServerAsset,\n ServerCircle,\n ServerCircularToken,\n ServerLine,\n ServerMultiLine,\n ServerPolygon,\n ServerRect,\n ServerShape,\n ServerText,\n} from \"@/game/comm/types/shapes\";\nimport { GlobalPoint } from \"@/game/geom\";\nimport { layerManager } from \"@/game/layers/manager\";\nimport { Asset } from \"@/game/shapes/asset\";\nimport { Circle } from \"@/game/shapes/circle\";\nimport { CircularToken } from \"@/game/shapes/circulartoken\";\nimport { Line } from \"@/game/shapes/line\";\nimport { MultiLine } from \"@/game/shapes/multiline\";\nimport { Rect } from \"@/game/shapes/rect\";\nimport { Shape } from \"@/game/shapes/shape\";\nimport { Text } from \"@/game/shapes/text\";\nimport { Polygon } from \"./polygon\";\n\nexport function createShapeFromDict(shape: ServerShape) {\n let sh: Shape;\n\n // A fromJSON and toJSON on Shape would be cleaner but ts does not allow for static abstracts so yeah.\n\n // Shape Type specifics\n\n const refPoint = new GlobalPoint(shape.x, shape.y);\n if (shape.type_ === \"rect\") {\n const rect = shape;\n sh = new Rect(refPoint, rect.width, rect.height, rect.fill_colour, rect.stroke_colour, rect.uuid);\n } else if (shape.type_ === \"circle\") {\n const circ = shape;\n sh = new Circle(refPoint, circ.radius, circ.fill_colour, circ.stroke_colour, circ.uuid);\n } else if (shape.type_ === \"circulartoken\") {\n const token = shape;\n sh = new CircularToken(\n refPoint,\n token.radius,\n token.text,\n token.font,\n token.fill_colour,\n token.stroke_colour,\n token.uuid,\n );\n } else if (shape.type_ === \"line\") {\n const line = shape;\n sh = new Line(refPoint, new GlobalPoint(line.x2, line.y2), line.line_width, line.stroke_colour, line.uuid);\n } else if (shape.type_ === \"multiline\") {\n const multiline = shape;\n sh = new MultiLine(\n refPoint,\n multiline.points.map(p => new GlobalPoint(p.x, p.y)),\n multiline.line_width,\n multiline.stroke_colour,\n multiline.uuid,\n );\n } else if (shape.type_ === \"polygon\") {\n const polygon = shape;\n sh = new Polygon(\n refPoint,\n polygon.vertices.map(v => new GlobalPoint(v.x, v.y)),\n polygon.fill_colour,\n polygon.stroke_colour,\n polygon.uuid,\n );\n } else if (shape.type_ === \"text\") {\n const text = shape;\n sh = new Text(refPoint, text.text, text.font, text.angle, text.fill_colour, text.stroke_colour, text.uuid);\n } else if (shape.type_ === \"assetrect\") {\n const asset = shape;\n const img = new Image(asset.width, asset.height);\n if (asset.src.startsWith(\"http\")) img.src = new URL(asset.src).pathname;\n else img.src = asset.src;\n sh = new Asset(img, refPoint, asset.width, asset.height, asset.uuid);\n img.onload = () => {\n layerManager.getLayer(shape.layer)!.invalidate(false);\n };\n } else {\n return undefined;\n }\n sh.fromDict(shape);\n return sh;\n}\n","import mod from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./confirm.vue?vue&type=style&index=0&id=1883e207&scoped=true&lang=css&\"; export default mod; export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./confirm.vue?vue&type=style&index=0&id=1883e207&scoped=true&lang=css&\"","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('SelectContext',{ref:\"selectcontext\"})}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","export * from \"-!cache-loader?{\\\"cacheDirectory\\\":\\\"node_modules/.cache/vue-loader\\\",\\\"cacheIdentifier\\\":\\\"74f43d04-vue-loader-template\\\"}!../../../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./select.vue?vue&type=template&id=048b3482&\"","import tinycolor from \"tinycolor2\";\n\nimport { uuidv4 } from \"@/core/utils\";\nimport { socket } from \"@/game/api/socket\";\nimport { aurasFromServer, aurasToServer } from \"@/game/comm/conversion/aura\";\nimport { InitiativeData } from \"@/game/comm/types/general\";\nimport { ServerShape } from \"@/game/comm/types/shapes\";\nimport { GlobalPoint, LocalPoint, Vector } from \"@/game/geom\";\nimport { layerManager } from \"@/game/layers/manager\";\nimport { BoundingRect } from \"@/game/shapes/boundingrect\";\nimport { gameStore } from \"@/game/store\";\nimport { g2l, g2lr, g2lx, g2ly, g2lz } from \"@/game/units\";\n\nexport abstract class Shape {\n // Used to create class instance from server shape data\n abstract readonly type: string;\n // The unique ID of this shape\n readonly uuid: string;\n // The layer the shape is currently on\n layer!: string;\n\n // A reference point regarding that specific shape's structure\n protected _refPoint: GlobalPoint;\n\n // Fill colour of the shape\n fillColour: string = \"#000\";\n strokeColour: string = \"rgba(0,0,0,0)\";\n // The optional name associated with the shape\n name = \"Unknown shape\";\n nameVisible = true;\n\n // Associated trackers/auras/owners\n trackers: Tracker[] = [];\n auras: Aura[] = [];\n labels: Label[] = [];\n protected _owners: string[] = [];\n\n // Block light sources\n visionObstruction = false;\n // Prevent shapes from overlapping with this shape\n movementObstruction = false;\n // Does this shape represent a playable token\n isToken = false;\n // Show a highlight box\n showHighlight = false;\n\n // Mouseover annotation\n annotation: string = \"\";\n\n // Draw modus to use\n globalCompositeOperation: string = \"source-over\";\n\n // Additional options for specialized uses\n options: Map = new Map();\n\n constructor(refPoint: GlobalPoint, fillColour?: string, strokeColour?: string, uuid?: string) {\n this._refPoint = refPoint;\n this.uuid = uuid || uuidv4();\n if (fillColour !== undefined) this.fillColour = fillColour;\n if (strokeColour !== undefined) this.strokeColour = strokeColour;\n }\n\n get refPoint() {\n return this._refPoint;\n }\n set refPoint(point: GlobalPoint) {\n this._refPoint = point;\n }\n\n abstract getBoundingBox(): BoundingRect;\n\n // If inWorldCoord is\n abstract contains(point: GlobalPoint): boolean;\n\n abstract center(): GlobalPoint;\n abstract center(centerPoint: GlobalPoint): void;\n visibleInCanvas(canvas: HTMLCanvasElement): boolean {\n // for (const aura of this.auras) {\n // if (aura.value > 0) {\n // const auraCircle = new Circle(this.center(), aura.value);\n // if (auraCircle.visibleInCanvas(canvas)) return true;\n // }\n // }\n return false;\n }\n\n // Code to snap a shape to the grid\n // This is shape dependent as the shape refPoints are shape specific in\n abstract snapToGrid(): void;\n abstract resizeToGrid(): void;\n abstract resize(resizePoint: number, point: LocalPoint): void;\n\n abstract get points(): number[][];\n\n getPointIndex(p: GlobalPoint, delta = 0): number {\n for (const [idx, point] of this.points.entries()) {\n if (Math.abs(p.x - point[0]) <= delta && Math.abs(p.y - point[1]) <= delta) return idx;\n }\n return -1;\n }\n\n getPointOrientation(i: number): Vector {\n const prev = GlobalPoint.fromArray(this.points[(this.points.length + i - 1) % this.points.length]);\n const point = GlobalPoint.fromArray(this.points[i]);\n const next = GlobalPoint.fromArray(this.points[(i + 1) % this.points.length]);\n const vec = next.subtract(prev);\n const mid = prev.add(vec.multiply(0.5));\n return point.subtract(mid).normalize();\n }\n\n invalidate(skipLightUpdate: boolean) {\n const l = layerManager.getLayer(this.layer);\n if (l) l.invalidate(skipLightUpdate);\n }\n\n checkVisionSources(recalculate = true) {\n const self = this;\n const obstructionIndex = gameStore.visionBlockers.indexOf(this.uuid);\n let update = false;\n if (this.visionObstruction && obstructionIndex === -1) {\n gameStore.visionBlockers.push(this.uuid);\n update = true;\n } else if (!this.visionObstruction && obstructionIndex >= 0) {\n gameStore.visionBlockers.splice(obstructionIndex, 1);\n update = true;\n }\n if (update && recalculate) gameStore.recalculateVision();\n\n // Check if the visionsource auras are in the gameManager\n this.auras.forEach(au => {\n const ls = gameStore.visionSources;\n const i = ls.findIndex(o => o.aura === au.uuid);\n if (au.visionSource && i === -1) {\n ls.push({ shape: self.uuid, aura: au.uuid });\n } else if (!au.visionSource && i >= 0) {\n ls.splice(i, 1);\n }\n });\n // Check if anything in the gameManager referencing this shape is in fact still a visionsource\n for (let i = gameStore.visionSources.length - 1; i >= 0; i--) {\n const ls = gameStore.visionSources[i];\n if (ls.shape === self.uuid) {\n if (!self.auras.some(a => a.uuid === ls.aura && a.visionSource)) gameStore.visionSources.splice(i, 1);\n }\n }\n }\n\n setMovementBlock(blocksMovement: boolean, recalculate = true) {\n this.movementObstruction = blocksMovement || false;\n const obstructionIndex = gameStore.movementblockers.indexOf(this.uuid);\n let update = false;\n if (this.movementObstruction && obstructionIndex === -1) {\n gameStore.movementblockers.push(this.uuid);\n update = true;\n } else if (!this.movementObstruction && obstructionIndex >= 0) {\n gameStore.movementblockers.splice(obstructionIndex, 1);\n update = true;\n }\n if (update && recalculate) gameStore.recalculateMovement();\n }\n\n setIsToken(isToken: boolean) {\n this.isToken = isToken;\n if (this.ownedBy()) {\n const i = gameStore.ownedtokens.indexOf(this.uuid);\n if (this.isToken && i === -1) gameStore.ownedtokens.push(this.uuid);\n else if (!this.isToken && i >= 0) gameStore.ownedtokens.splice(i, 1);\n }\n }\n\n abstract asDict(): ServerShape;\n getBaseDict(): ServerShape {\n return {\n type_: this.type,\n uuid: this.uuid,\n x: this.refPoint.x,\n y: this.refPoint.y,\n layer: this.layer,\n draw_operator: this.globalCompositeOperation,\n movement_obstruction: this.movementObstruction,\n vision_obstruction: this.visionObstruction,\n auras: aurasToServer(this.auras),\n trackers: this.trackers,\n labels: this.labels,\n owners: this._owners,\n fill_colour: this.fillColour,\n stroke_colour: this.strokeColour,\n name: this.name,\n name_visible: this.nameVisible,\n annotation: this.annotation,\n is_token: this.isToken,\n options: JSON.stringify([...this.options]),\n };\n }\n fromDict(data: ServerShape) {\n this.layer = data.layer;\n this.globalCompositeOperation = data.draw_operator;\n this.movementObstruction = data.movement_obstruction;\n this.visionObstruction = data.vision_obstruction;\n this.auras = aurasFromServer(data.auras);\n this.trackers = data.trackers;\n this.labels = data.labels;\n this._owners = data.owners;\n this.isToken = data.is_token;\n this.nameVisible = data.name_visible;\n if (data.annotation) this.annotation = data.annotation;\n if (data.name) this.name = data.name;\n if (data.options) this.options = new Map(JSON.parse(data.options));\n }\n\n draw(ctx: CanvasRenderingContext2D) {\n if (this.globalCompositeOperation !== undefined) ctx.globalCompositeOperation = this.globalCompositeOperation;\n else ctx.globalCompositeOperation = \"source-over\";\n if (this.showHighlight) {\n const bbox = this.getBoundingBox();\n ctx.strokeStyle = \"red\";\n ctx.strokeRect(g2lx(bbox.topLeft.x) - 5, g2ly(bbox.topLeft.y) - 5, g2lz(bbox.w) + 10, g2lz(bbox.h) + 10);\n }\n }\n\n drawAuras(ctx: CanvasRenderingContext2D) {\n for (const aura of this.auras) {\n if (aura.value === 0 && aura.dim === 0) return;\n ctx.beginPath();\n\n const loc = g2l(this.center());\n const innerRange = g2lr(aura.value + aura.dim);\n\n if (aura.dim === 0) ctx.fillStyle = aura.colour;\n else {\n const gradient = ctx.createRadialGradient(\n loc.x,\n loc.y,\n g2lr(aura.value),\n loc.x,\n loc.y,\n g2lr(aura.value + aura.dim),\n );\n const tc = tinycolor(aura.colour);\n ctx.fillStyle = gradient;\n gradient.addColorStop(0, aura.colour);\n gradient.addColorStop(1, tc.setAlpha(0).toRgbString());\n }\n if (!aura.visionSource || aura.lastPath === undefined) {\n ctx.arc(loc.x, loc.y, innerRange, 0, 2 * Math.PI);\n ctx.fill();\n } else {\n try {\n ctx.fill(aura.lastPath);\n } catch (e) {\n ctx.arc(loc.x, loc.y, innerRange, 0, 2 * Math.PI);\n ctx.fill();\n console.warn(e);\n }\n }\n }\n }\n\n getInitiativeRepr(): InitiativeData {\n return {\n uuid: this.uuid,\n visible: !gameStore.IS_DM,\n group: false,\n source: this.name,\n has_img: false,\n effects: [],\n index: Infinity,\n };\n }\n\n moveLayer(layer: string, sync: boolean) {\n const oldLayer = layerManager.getLayer(this.layer);\n const newLayer = layerManager.getLayer(layer);\n if (oldLayer === undefined || newLayer === undefined) return;\n this.layer = layer;\n // Update layer shapes\n oldLayer.shapes.splice(oldLayer.shapes.indexOf(this), 1);\n newLayer.shapes.push(this);\n // Revalidate layers (light should at most be redone once)\n oldLayer.invalidate(true);\n newLayer.invalidate(false);\n // Sync!\n if (sync) socket.emit(\"Shape.Layer.Change\", { uuid: this.uuid, layer });\n }\n\n get owners() {\n return Object.freeze(this._owners.slice());\n }\n\n ownedBy(username?: string) {\n if (username === undefined) username = gameStore.username;\n return gameStore.IS_DM || this._owners.includes(username);\n }\n\n addOwner(owner: string) {\n if (!this._owners.includes(owner)) this._owners.push(owner);\n }\n\n updateOwner(oldValue: string, newValue: string) {\n const ownerIndex = this._owners.findIndex(o => o === oldValue);\n if (ownerIndex >= 0) this._owners.splice(ownerIndex, 1, newValue);\n else this.addOwner(newValue);\n }\n\n removeOwner(owner: string) {\n const ownerIndex = this._owners.findIndex(o => o === owner);\n this._owners.splice(ownerIndex, 1);\n }\n}\n","import mod from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/ts-loader/index.js??ref--12-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./prompt.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/ts-loader/index.js??ref--12-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./prompt.vue?vue&type=script&lang=ts&\"","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return (_vm.note !== null)?_c('modal',{attrs:{\"visible\":_vm.visible,\"mask\":false},on:{\"close\":function($event){_vm.visible = false}},scopedSlots:_vm._u([{key:\"header\",fn:function(m){return _c('div',{staticClass:\"modal-header\",attrs:{\"draggable\":\"true\"},on:{\"dragstart\":m.dragStart,\"dragend\":m.dragEnd}},[_c('span',{on:{\"click\":function($event){_vm.$refs.title.select()}}},[_c('i',{staticClass:\"fas fa-pencil-alt\",staticStyle:{\"font-size\":\"15px\"}})]),_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.note.title),expression:\"note.title\"}],ref:\"title\",domProps:{\"value\":(_vm.note.title)},on:{\"change\":_vm.updateNote,\"input\":function($event){if($event.target.composing){ return; }_vm.$set(_vm.note, \"title\", $event.target.value)}}}),_c('div',{staticClass:\"header-close\",on:{\"click\":function($event){_vm.visible = false}}},[_c('i',{staticClass:\"far fa-window-close\"})])])}}])},[_c('div',{staticClass:\"modal-body\"},[_c('textarea',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.note.text),expression:\"note.text\"}],ref:\"textarea\",style:({'height': _vm.calcHeight()}),domProps:{\"value\":(_vm.note.text)},on:{\"change\":_vm.updateNote,\"input\":function($event){if($event.target.composing){ return; }_vm.$set(_vm.note, \"text\", $event.target.value)}}})]),_c('div',{staticClass:\"modal-footer\"},[_c('button',{on:{\"click\":_vm.removeNote}},[_c('i',{staticClass:\"far fa-trash-alt\"}),_vm._v(\" Remove\\n \")])])]):_vm._e()}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","export * from \"-!cache-loader?{\\\"cacheDirectory\\\":\\\"node_modules/.cache/vue-loader\\\",\\\"cacheIdentifier\\\":\\\"74f43d04-vue-loader-template\\\"}!../../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./note.vue?vue&type=template&id=7a3669fd&scoped=true&\"","import mod from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./modal.vue?vue&type=style&index=0&id=12ed61ba&scoped=true&lang=css&\"; export default mod; export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./modal.vue?vue&type=style&index=0&id=12ed61ba&scoped=true&lang=css&\"","\n\n\n\n\nimport Component from \"vue-class-component\";\n\nimport SelectContext from \"@/game/ui/tools/selectcontext.vue\";\nimport Tool from \"@/game/ui/tools/tool.vue\";\nimport SelectionInfo from \"../selection/selection_info.vue\";\n\nimport { getRef } from \"@/core/utils\";\nimport { socket } from \"@/game/api/socket\";\nimport { GlobalPoint, LocalPoint, Ray, Vector } from \"@/game/geom\";\nimport { Layer } from \"@/game/layers/layer\";\nimport { layerManager } from \"@/game/layers/manager\";\nimport { Rect } from \"@/game/shapes/rect\";\nimport { gameStore } from \"@/game/store\";\nimport { calculateDelta } from \"@/game/ui/tools/utils\";\nimport { g2l, g2lr, g2lx, g2ly, g2lz, l2g, l2gz } from \"@/game/units\";\nimport { getMouse } from \"@/game/utils\";\n\nexport enum SelectOperations {\n Noop,\n Resize,\n Drag,\n GroupSelect,\n}\n\nconst start = new GlobalPoint(-1000, -1000);\n\n@Component({\n components: {\n SelectContext,\n },\n})\nexport default class SelectTool extends Tool {\n name = \"Select\";\n showContextMenu = false;\n active = false;\n\n mode = SelectOperations.Noop;\n resizePoint = 0;\n deltaChanged = false;\n // Because we never drag from the asset's (0, 0) coord and want a smoother drag experience\n // we keep track of the actual offset within the asset.\n dragRay = new Ray(new LocalPoint(0, 0), new Vector(0, 0));\n selectionStartPoint = start;\n selectionHelper = new Rect(start, 0, 0);\n created() {\n this.selectionHelper.globalCompositeOperation = \"source-over\";\n }\n onMouseDown(event: MouseEvent) {\n const layer = layerManager.getLayer();\n if (layer === undefined) {\n console.log(\"No active layer!\");\n return;\n }\n\n if (!this.selectionHelper.owners.includes(gameStore.username)) {\n this.selectionHelper.addOwner(gameStore.username);\n }\n\n const mouse = getMouse(event);\n const globalMouse = l2g(mouse);\n\n let hit = false;\n // The selectionStack allows for lower positioned objects that are selected to have precedence during overlap.\n let selectionStack;\n if (!layer.selection.length) selectionStack = layer.shapes;\n else selectionStack = layer.shapes.concat(layer.selection);\n for (let i = selectionStack.length - 1; i >= 0; i--) {\n const shape = selectionStack[i];\n\n this.resizePoint = shape.getPointIndex(globalMouse, l2gz(3));\n\n // Resize case, a corner is selected\n if (this.resizePoint >= 0) {\n layer.selection = [shape];\n getRef(\"selectionInfo\").shape = shape;\n this.mode = SelectOperations.Resize;\n layer.invalidate(true);\n hit = true;\n break;\n\n // Drag case, a shape is selected\n } else if (shape.contains(globalMouse)) {\n const selection = shape;\n if (layer.selection.indexOf(selection) === -1) {\n layer.selection = [selection];\n getRef(\"selectionInfo\").shape = selection;\n }\n this.mode = SelectOperations.Drag;\n const localRefPoint = g2l(selection.refPoint);\n this.dragRay = new Ray(localRefPoint, mouse.subtract(localRefPoint));\n layer.invalidate(true);\n hit = true;\n break;\n }\n }\n\n // GroupSelect case, draw a selection box to select multiple shapes\n if (!hit) {\n this.mode = SelectOperations.GroupSelect;\n for (const selection of layer.selection) getRef(\"selectionInfo\").shape = selection;\n\n this.selectionStartPoint = globalMouse;\n\n this.selectionHelper.refPoint = this.selectionStartPoint;\n this.selectionHelper.w = 0;\n this.selectionHelper.h = 0;\n\n layer.selection = [this.selectionHelper];\n layer.invalidate(true);\n }\n this.active = true;\n }\n onMouseMove(event: MouseEvent) {\n // if (!this.active) return; we require mousemove for the resize cursor\n const layer = layerManager.getLayer();\n if (layer === undefined) {\n console.log(\"No active layer!\");\n return;\n }\n const mouse = getMouse(event);\n const globalMouse = l2g(mouse);\n this.deltaChanged = false;\n\n if (this.mode === SelectOperations.GroupSelect) {\n // Currently draw on active layer\n const endPoint = globalMouse;\n\n this.selectionHelper.w = Math.abs(endPoint.x - this.selectionStartPoint.x);\n this.selectionHelper.h = Math.abs(endPoint.y - this.selectionStartPoint.y);\n this.selectionHelper.refPoint = new GlobalPoint(\n Math.min(this.selectionStartPoint.x, endPoint.x),\n Math.min(this.selectionStartPoint.y, endPoint.y),\n );\n layer.invalidate(true);\n } else if (layer.selection.length) {\n const og = g2l(layer.selection[layer.selection.length - 1].refPoint);\n const origin = og.add(this.dragRay.direction);\n let delta = mouse.subtract(origin).multiply(1 / gameStore.zoomFactor);\n const ogDelta = delta;\n if (this.mode === SelectOperations.Drag) {\n // If we are on the tokens layer do a movement block check.\n if (layer.name === \"tokens\" && !(event.shiftKey && gameStore.IS_DM)) {\n for (const sel of layer.selection) {\n if (!sel.ownedBy()) continue;\n if (sel.uuid === this.selectionHelper.uuid) continue; // the selection helper should not be treated as a real shape.\n delta = calculateDelta(delta, sel);\n if (delta !== ogDelta) this.deltaChanged = true;\n }\n }\n // Actually apply the delta on all shapes\n for (const sel of layer.selection) {\n if (!sel.ownedBy()) continue;\n sel.refPoint = sel.refPoint.add(delta);\n if (sel !== this.selectionHelper) {\n if (sel.visionObstruction) gameStore.recalculateVision(true);\n socket.emit(\"Shape.Update\", { shape: sel.asDict(), redraw: true, temporary: true });\n }\n }\n layer.invalidate(false);\n } else if (this.mode === SelectOperations.Resize) {\n for (const sel of layer.selection) {\n if (!sel.ownedBy()) continue;\n sel.resize(this.resizePoint, mouse);\n if (sel !== this.selectionHelper) {\n if (sel.visionObstruction) gameStore.recalculateVision(true);\n socket.emit(\"Shape.Update\", { shape: sel.asDict(), redraw: true, temporary: true });\n }\n layer.invalidate(false);\n this.updateCursor(layer, globalMouse);\n }\n } else {\n this.updateCursor(layer, globalMouse);\n }\n } else {\n document.body.style.cursor = \"default\";\n }\n }\n onMouseUp(e: MouseEvent): void {\n if (!this.active) return;\n if (layerManager.getLayer() === undefined) {\n console.log(\"No active layer!\");\n return;\n }\n const layer = layerManager.getLayer()!;\n\n if (this.mode === SelectOperations.GroupSelect) {\n layer.clearSelection();\n layer.shapes.forEach(shape => {\n if (!shape.ownedBy()) return;\n if (shape === this.selectionHelper) return;\n const bbox = shape.getBoundingBox();\n if (!shape.ownedBy()) return;\n if (\n this.selectionHelper!.refPoint.x <= bbox.topRight.x &&\n this.selectionHelper!.refPoint.x + this.selectionHelper!.w >= bbox.topLeft.x &&\n this.selectionHelper!.refPoint.y <= bbox.botLeft.y &&\n this.selectionHelper!.refPoint.y + this.selectionHelper!.h >= bbox.topLeft.y\n ) {\n layer.selection.push(shape);\n }\n });\n\n // Push the selection helper as the last element of the selection\n // This makes sure that it will be the first one to be hit in the hit detection onMouseDown\n if (layer.selection.length > 0) layer.selection.push(this.selectionHelper);\n\n layer.invalidate(true);\n } else if (layer.selection.length) {\n layer.selection.forEach(sel => {\n if (!sel.ownedBy()) return;\n if (this.mode === SelectOperations.Drag) {\n if (\n this.dragRay.origin!.x === g2lx(sel.refPoint.x) &&\n this.dragRay.origin!.y === g2ly(sel.refPoint.y)\n )\n return;\n\n if (gameStore.useGrid && !e.altKey && !this.deltaChanged) {\n sel.snapToGrid();\n }\n\n if (sel !== this.selectionHelper) {\n if (sel.visionObstruction) gameStore.recalculateVision();\n if (sel.movementObstruction) gameStore.recalculateMovement();\n socket.emit(\"Shape.Update\", { shape: sel.asDict(), redraw: true, temporary: false });\n }\n layer.invalidate(false);\n }\n if (this.mode === SelectOperations.Resize) {\n if (gameStore.useGrid && !e.altKey) {\n sel.resizeToGrid();\n }\n if (sel !== this.selectionHelper) {\n if (sel.visionObstruction) gameStore.recalculateVision();\n if (sel.movementObstruction) gameStore.recalculateMovement();\n socket.emit(\"Shape.Update\", { shape: sel.asDict(), redraw: true, temporary: false });\n }\n layer.invalidate(false);\n }\n });\n }\n this.mode = SelectOperations.Noop;\n this.active = false;\n }\n onContextMenu(event: MouseEvent) {\n if (layerManager.getLayer() === undefined) {\n console.log(\"No active layer!\");\n return;\n }\n const layer = layerManager.getLayer()!;\n const mouse = getMouse(event);\n const globalMouse = l2g(mouse);\n\n for (const shape of layer.selection) {\n if (shape.contains(globalMouse) && shape !== this.selectionHelper) {\n layer.selection = [shape];\n getRef(\"selectionInfo\").shape = shape;\n layer.invalidate(true);\n (this.$parent.$refs.shapecontext).open(event, shape);\n return;\n }\n }\n (this.$refs.selectcontext).open(event);\n }\n updateCursor(layer: Layer, globalMouse: GlobalPoint) {\n for (const sel of layer.selection) {\n const resizePoint = sel.getPointIndex(globalMouse, l2gz(3));\n if (resizePoint < 0) document.body.style.cursor = \"default\";\n else {\n let angle = sel.getPointOrientation(resizePoint).angle();\n if (angle < 0) angle += 360;\n const d = 45 / 2;\n if (angle >= 315 + d || angle < d || (angle >= 135 + d && angle < 225 - d))\n document.body.style.cursor = \"ew-resize\";\n if ((angle >= 45 + d && angle < 135 - d) || (angle >= 225 + d && angle < 315 - d))\n document.body.style.cursor = \"ns-resize\";\n if ((angle >= d && angle < 90 - d) || (angle >= 180 + d && angle < 270 - d))\n document.body.style.cursor = \"nwse-resize\";\n if ((angle >= 90 + d && angle < 180 - d) || (angle >= 270 + d && angle < 360 - d))\n document.body.style.cursor = \"nesw-resize\";\n }\n }\n }\n}\n","import { GlobalPoint, Ray, Vector } from \"@/game/geom\";\nimport { layerManager } from \"@/game/layers/manager\";\nimport { Shape } from \"@/game/shapes/shape\";\nimport { gameStore } from \"@/game/store\";\nimport { PA_CDT } from \"@/game/visibility/te/pa\";\nimport { Point, Sign, Triangle } from \"@/game/visibility/te/tds\";\nimport { ccw, cw, intersection, orientation } from \"@/game/visibility/te/triag\";\n\n// First go through each shape in the selection and see if the delta has to be truncated due to movement blockers\n\n// This is definitely super convoluted and inefficient but I was tired and really wanted the smooth wall sliding collision stuff to work\n// And it does now, so hey ¯\\_(ツ)_/¯\nexport function calculateDelta(delta: Vector, sel: Shape, done?: string[]) {\n if (delta.x === 0 && delta.y === 0) return delta;\n if (gameStore.visionMode === \"bvh\") {\n if (done === undefined) done = [];\n const ogSelBBox = sel.getBoundingBox();\n const newSelBBox = ogSelBBox.offset(delta);\n let refine = false;\n for (const movementBlocker of gameStore.movementblockers) {\n if (done.includes(movementBlocker)) continue;\n const blocker = layerManager.UUIDMap.get(movementBlocker)!;\n const blockerBBox = blocker.getBoundingBox();\n let found = blockerBBox.intersectsWithInner(newSelBBox);\n if (!found) {\n // This is an edge case, precalculating the rays is not worth in this case.\n const ray = Ray.fromPoints(ogSelBBox.topLeft.add(delta.normalize()), newSelBBox.topLeft);\n const invDir = ray.direction.inverse();\n const dirIsNegative = [invDir.x < 0, invDir.y < 0];\n found = blockerBBox.intersectP(ray, invDir, dirIsNegative).hit;\n }\n // Check if the bounding box of our destination would intersect with the bounding box of the movementblocker\n if (found) {\n const bCenter = blockerBBox.center();\n const sCenter = ogSelBBox.center();\n\n const d = sCenter.subtract(bCenter);\n const ux = new Vector(1, 0);\n const uy = new Vector(0, 1);\n let dx = d.dot(ux);\n let dy = d.dot(uy);\n if (dx > blockerBBox.w / 2) dx = blockerBBox.w / 2;\n if (dx < -blockerBBox.w / 2) dx = -blockerBBox.w / 2;\n if (dy > blockerBBox.h / 2) dy = blockerBBox.h / 2;\n if (dy < -blockerBBox.h / 2) dy = -blockerBBox.h / 2;\n\n // Closest point / intersection point between the two bboxes. Not the delta intersect!\n const p = bCenter.add(ux.multiply(dx)).add(uy.multiply(dy));\n\n if (p.x === ogSelBBox.topLeft.x || p.x === ogSelBBox.topRight.x) delta = new Vector(0, delta.y);\n else if (p.y === ogSelBBox.topLeft.y || p.y === ogSelBBox.botLeft.y) delta = new Vector(delta.x, 0);\n else {\n if (p.x < ogSelBBox.topLeft.x) delta = new Vector(p.x - ogSelBBox.topLeft.x, delta.y);\n else if (p.x > ogSelBBox.topRight.x) delta = new Vector(p.x - ogSelBBox.topRight.x, delta.y);\n else if (p.y < ogSelBBox.topLeft.y) delta = new Vector(delta.x, p.y - ogSelBBox.topLeft.y);\n else if (p.y > ogSelBBox.botLeft.y) delta = new Vector(delta.x, p.y - ogSelBBox.botLeft.y);\n }\n refine = true;\n done.push(movementBlocker);\n break;\n }\n }\n if (refine) delta = calculateDelta(delta, sel, done);\n return delta;\n } else {\n const centerTriangle = PA_CDT.movement.locate(sel.center().asArray(), null).loc;\n for (const point of sel.points) {\n const lt = PA_CDT.movement.locate(point, centerTriangle);\n const triangle = lt.loc;\n if (triangle === null) continue;\n delta = checkTriangle(point, triangle, delta);\n }\n return delta;\n }\n}\n\nfunction checkTriangle(point: Point, triangle: Triangle, delta: Vector, skip: Triangle[] = []): Vector {\n const p = new GlobalPoint(point[0], point[1]);\n const endpoint = p.add(delta).asArray();\n if (triangle.contains(endpoint)) return delta;\n skip.push(triangle);\n\n for (let i = 0; i < 3; i++) {\n if (skip.includes(triangle.neighbours[i]!)) continue;\n\n const _cw = triangle.vertices[cw(i)]!.point!;\n const _ccw = triangle.vertices[ccw(i)]!.point!;\n const ix = intersection(point, endpoint, _cw, _ccw);\n\n if (ix === null) continue;\n\n if (!triangle.isConstrained(i)) return checkTriangle(point, triangle.neighbours[i]!, delta, skip);\n\n if (ix[0] === p.x && ix[1] === p.y) {\n const OR = orientation;\n const o = orientation(point, endpoint, _ccw);\n // Remember: canvas y axis is inverted\n if (o === Sign.LEFT_TURN) continue;\n if (o === Sign.ZERO) continue;\n }\n let newDelta = new GlobalPoint(ix[0], ix[1]).subtract(p).multiply(0.8);\n if (newDelta.length() < 1) newDelta = new Vector(0, 0);\n if (newDelta.length() < delta.length()) delta = newDelta;\n }\n return delta;\n}\n","import mod from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./note.vue?vue&type=style&index=0&id=7a3669fd&scoped=true&lang=css&\"; export default mod; export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./note.vue?vue&type=style&index=0&id=7a3669fd&scoped=true&lang=css&\"","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/ts-loader/index.js??ref--12-2!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./labels.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/ts-loader/index.js??ref--12-2!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./labels.vue?vue&type=script&lang=ts&\"","import { socket } from \"@/game/api/socket\";\nimport { gameStore } from \"@/game/store\";\n\nexport function sendClientOptions() {\n socket.emit(\"Client.Options.Set\", {\n locationOptions: {\n panX: gameStore.panX,\n panY: gameStore.panY,\n zoomFactor: gameStore.zoomFactor,\n },\n });\n}\n","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nimport Vue from \"vue\";\nimport Component from \"vue-class-component\";\nimport { Prop } from \"vue-property-decorator\";\n\nimport { AssetFile, AssetList } from \"@/core/comm/types\";\nimport { alphSort } from \"@/core/utils\";\n\n@Component({\n name: \"asset-node\",\n})\nexport default class AssetNode extends Vue {\n @Prop() asset!: AssetList;\n\n showImage = null;\n get folders(): string[] {\n return Object.keys(this.asset)\n .filter(el => ![\"__files\"].includes(el))\n .sort(alphSort);\n }\n\n get files(): AssetFile[] {\n if (this.asset.__files)\n return (this.asset.__files)\n .concat()\n .sort((a, b) => (a.name.toLowerCase() > b.name.toLowerCase() ? 1 : -1));\n return [];\n }\n\n toggle(event: { target: HTMLElement }) {\n // tslint:disable-next-line:prefer-for-of\n for (let i = 0; i < event.target.children.length; i++) {\n const el = event.target.children[i];\n el.style.display = el.style.display === \"\" ? \"block\" : \"\";\n }\n }\n\n dragStart(event: DragEvent, imageSource: string) {\n this.showImage = null;\n if (event === null || event.dataTransfer === null) return;\n const img = (event.target).querySelector(\".preview\")!;\n event.dataTransfer.setDragImage(img, 0, 0);\n event.dataTransfer.setData(\"text/plain\", imageSource);\n }\n}\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return (_vm.visible)?_c('div',{staticClass:\"ContextMenu\",style:({left:_vm.left, top:_vm.top}),attrs:{\"tabindex\":\"-1\"},on:{\"blur\":function($event){_vm.$emit('close')}}},[_c('ul',[_vm._t(\"default\")],2)]):_vm._e()}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","export * from \"-!cache-loader?{\\\"cacheDirectory\\\":\\\"node_modules/.cache/vue-loader\\\",\\\"cacheIdentifier\\\":\\\"74f43d04-vue-loader-template\\\"}!../../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./contextmenu.vue?vue&type=template&id=256dde9c&\"","// import Vuex from \"vuex\";\nimport { getModule, Module, Mutation, VuexModule } from \"vuex-module-decorators\";\n\nimport { Asset } from \"@/core/comm/types\";\nimport { rootStore } from \"@/store\";\n\nexport interface AssetState {\n root: number;\n files: number[];\n folders: number[];\n idMap: Map;\n selected: number[];\n}\n\n@Module({ dynamic: true, store: rootStore, name: \"assets\", namespaced: true })\nclass AssetStore extends VuexModule {\n root = -1;\n files: number[] = [];\n folders: number[] = [];\n idMap: Map = new Map();\n selected: number[] = [];\n\n @Mutation\n clear() {\n this.folders = [];\n this.files = [];\n }\n\n @Mutation\n clearSelected() {\n console.log(\"Cleared\");\n this.selected = [];\n }\n\n @Mutation\n setRoot(root: number) {\n this.root = root;\n }\n}\n\nexport const assetStore = getModule(AssetStore);\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/ts-loader/index.js??ref--12-2!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./contextmenu.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/ts-loader/index.js??ref--12-2!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./contextmenu.vue?vue&type=script&lang=ts&\"","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nimport Vue from \"vue\";\nimport Component from \"vue-class-component\";\n\nimport ContextMenu from \"@/core/components/contextmenu.vue\";\nimport Initiative from \"@/game/ui/initiative.vue\";\n\nimport { getRef } from \"@/core/utils\";\nimport { EventBus } from \"@/game/event-bus\";\nimport { layerManager } from \"@/game/layers/manager\";\nimport { Shape } from \"@/game/shapes/shape\";\nimport { gameStore } from \"@/game/store\";\n\n@Component({\n components: {\n ContextMenu,\n },\n})\nexport default class ShapeContext extends Vue {\n visible = false;\n x = 0;\n y = 0;\n shape: Shape | null = null;\n get activeLayer(): string {\n const layer = layerManager.getLayer();\n return layer === undefined ? \"\" : layer.name;\n }\n open(event: MouseEvent, shape: Shape) {\n this.visible = true;\n this.x = event.pageX;\n this.y = event.pageY;\n this.shape = shape;\n this.$nextTick(() => this.$children[0].$el.focus());\n }\n close() {\n this.visible = false;\n this.shape = null;\n }\n getLayers() {\n return layerManager.layers.filter(l => l.selectable && (gameStore.IS_DM || l.playerEditable));\n }\n getActiveLayer() {\n return layerManager.getLayer();\n }\n getInitiativeWord() {\n if (this.shape === null) return \"\";\n return getRef(\"initiative\").contains(this.shape.uuid) ? \"Show\" : \"Add\";\n }\n setLayer(newLayer: string) {\n if (this.shape === null) return;\n this.shape.moveLayer(newLayer, true);\n this.close();\n }\n moveToBack() {\n if (this.shape === null) return;\n const layer = this.getActiveLayer()!;\n layer.moveShapeOrder(this.shape, 0, true);\n this.close();\n }\n moveToFront() {\n if (this.shape === null) return;\n const layer = this.getActiveLayer()!;\n layer.moveShapeOrder(this.shape, layer.shapes.length - 1, true);\n this.close();\n }\n addInitiative() {\n if (this.shape === null) return;\n const initiative = getRef(\"initiative\");\n if (!initiative.contains(this.shape.uuid)) initiative.addInitiative(this.shape.getInitiativeRepr());\n initiative.visible = true;\n this.close();\n }\n openEditDialog() {\n EventBus.$emit(\"EditDialog.Open\", this.shape);\n this.close();\n }\n}\n","import mod from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/ts-loader/index.js??ref--12-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./map.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/ts-loader/index.js??ref--12-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./map.vue?vue&type=script&lang=ts&\"","import { Layer } from \"@/game/layers/layer\";\nimport { gameStore } from \"@/game/store\";\n\nexport class GridLayer extends Layer {\n invalidate(): void {\n this.valid = false;\n }\n draw(doClear?: boolean): void {\n if (!this.valid) {\n this.drawGrid();\n }\n }\n drawGrid(): void {\n const ctx = this.ctx;\n this.clear();\n ctx.beginPath();\n\n const gs = gameStore.gridSize;\n\n for (let i = 0; i < this.width; i += gs * gameStore.zoomFactor) {\n ctx.moveTo(i + (gameStore.panX % gs) * gameStore.zoomFactor, 0);\n ctx.lineTo(i + (gameStore.panX % gs) * gameStore.zoomFactor, this.height);\n ctx.moveTo(0, i + (gameStore.panY % gs) * gameStore.zoomFactor);\n ctx.lineTo(this.width, i + (gameStore.panY % gs) * gameStore.zoomFactor);\n }\n\n ctx.strokeStyle = gameStore.gridColour;\n ctx.lineWidth = 1;\n ctx.stroke();\n this.valid = true;\n }\n}\n","import Vue from \"vue\";\nimport Vuex from \"vuex\";\n\nimport { AssetState } from \"@/assetManager/store\";\nimport { CoreState } from \"@/core/store\";\nimport { GameState } from \"@/game/store\";\n\nVue.use(Vuex);\n\nexport interface RootState {\n assets: AssetState;\n core: CoreState;\n game: GameState;\n}\n\nexport const rootStore = new Vuex.Store({});\n","import { render, staticRenderFns } from \"./colorpicker.vue?vue&type=template&id=d32461a4&scoped=true&\"\nimport script from \"./colorpicker.vue?vue&type=script&lang=ts&\"\nexport * from \"./colorpicker.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./colorpicker.vue?vue&type=style&index=0&id=d32461a4&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"d32461a4\",\n null\n \n)\n\ncomponent.options.__file = \"colorpicker.vue\"\nexport default component.exports","import mod from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./login.vue?vue&type=style&index=0&id=bc30fc14&scoped=true&lang=css&\"; export default mod; export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./login.vue?vue&type=style&index=0&id=bc30fc14&scoped=true&lang=css&\"","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{attrs:{\"id\":\"app\"}},[_c('router-view',{ref:\"activeComponent\"})],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","import { render, staticRenderFns } from \"./App.vue?vue&type=template&id=196415f0&\"\nvar script = {}\nimport style0 from \"./App.vue?vue&type=style&index=0&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\ncomponent.options.__file = \"App.vue\"\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{attrs:{\"id\":\"main\"},on:{\"mouseleave\":_vm.mouseleave,\"wheel\":_vm.zoom}},[(_vm.showUI)?_c('menu-bar'):_vm._e(),_c('div',{attrs:{\"id\":\"board\"}},[(_vm.ready.manager)?[_c('tool-bar',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.showUI),expression:\"showUI\"}],ref:\"tools\"})]:_vm._e(),_c('div',{attrs:{\"id\":\"layers\"},on:{\"mousedown\":_vm.mousedown,\"mouseup\":_vm.mouseup,\"mousemove\":_vm.mousemove,\"contextmenu\":function($event){$event.preventDefault();$event.stopPropagation();return _vm.contextmenu($event)},\"dragover\":function($event){$event.preventDefault();},\"drop\":function($event){$event.preventDefault();$event.stopPropagation();return _vm.drop($event)}}}),_c('div',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.showUI && _vm.layers.length>1),expression:\"showUI && layers.length>1\"}],attrs:{\"id\":\"layerselect\"}},[_c('ul',_vm._l((_vm.layers),function(layer){return _c('li',{key:layer.name,class:{ 'layer-selected': layer === _vm.selectedLayer },on:{\"mousedown\":function($event){_vm.selectLayer(layer)}}},[_c('a',{attrs:{\"href\":\"#\"}},[_vm._v(_vm._s(layer))])])}))])],2),_c('selection-info',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.showUI),expression:\"showUI\"}],ref:\"selectionInfo\"}),_c('initiative-dialog',{ref:\"initiative\",attrs:{\"id\":\"initiativedialog\"}}),_c('note-dialog',{ref:\"note\"}),_c('label-dialog',{ref:\"labels\"}),_c('zoom-slider',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.showUI),expression:\"showUI\"}],attrs:{\"id\":\"zoomer\",\"height\":6,\"width\":200,\"min\":0,\"max\":1,\"interval\":0.1,\"dot-width\":8,\"dot-height\":20,\"tooltip-dir\":'bottom',\"tooltip\":'hover',\"formatter\":_vm.zoomDisplay.toFixed(1),\"slider-style\":{'border-radius': '15%'},\"bg-style\":{'background-color': '#fff', 'box-shadow': '0.5px 0.5px 3px 1px rgba(0, 0, 0, .36)'},\"process-style\":{'background-color': '#fff'}},model:{value:(_vm.zoomDisplay),callback:function ($$v) {_vm.zoomDisplay=$$v},expression:\"zoomDisplay\"}}),_c('prompt-dialog',{ref:\"prompt\"}),_c('confirm-dialog',{ref:\"confirm\"})],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","export * from \"-!cache-loader?{\\\"cacheDirectory\\\":\\\"node_modules/.cache/vue-loader\\\",\\\"cacheIdentifier\\\":\\\"74f43d04-vue-loader-template\\\"}!../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./game.vue?vue&type=template&id=05b88da7&scoped=true&\"","import { GlobalPoint, Ray } from \"@/game/geom\";\nimport { Layer } from \"@/game/layers/layer\";\nimport { layerManager } from \"@/game/layers/manager\";\nimport { Settings } from \"@/game/settings\";\nimport { Circle } from \"@/game/shapes/circle\";\nimport { Shape } from \"@/game/shapes/shape\";\nimport { gameStore } from \"@/game/store\";\nimport { g2l, g2lr, g2lx, g2ly, g2lz, getUnitDistance } from \"@/game/units\";\nimport { getFogColour } from \"@/game/utils\";\nimport { computeVisibility } from \"../visibility/te/te\";\n\nexport class FOWLayer extends Layer {\n isVisionLayer: boolean = true;\n preFogShapes: Shape[] = [];\n virtualCanvas: HTMLCanvasElement;\n vCtx: CanvasRenderingContext2D;\n\n constructor(canvas: HTMLCanvasElement, name: string) {\n super(canvas, name);\n this.virtualCanvas = document.createElement(\"canvas\");\n this.virtualCanvas.width = window.innerWidth;\n this.virtualCanvas.height = window.innerHeight;\n this.vCtx = this.virtualCanvas.getContext(\"2d\")!;\n }\n\n addShape(shape: Shape, sync: boolean, temporary?: boolean, invalidate = true): void {\n super.addShape(shape, sync, temporary, invalidate);\n if (shape.options.has(\"preFogShape\") && shape.options.get(\"preFogShape\")) {\n this.preFogShapes.push(shape);\n }\n }\n\n removeShape(shape: Shape, sync: boolean, temporary?: boolean) {\n if (shape.options.has(\"preFogShape\") && shape.options.get(\"preFogShape\")) {\n const idx = this.preFogShapes.findIndex(s => s.uuid === shape.uuid);\n this.preFogShapes.splice(idx, 1);\n }\n super.removeShape(shape, sync, temporary);\n }\n\n draw(): void {\n if (!this.valid) {\n const ctx = this.ctx;\n\n if (Settings.skipLightFOW) {\n ctx.clearRect(0, 0, this.canvas.width, this.canvas.height);\n this.valid = true;\n return;\n }\n\n const originalOperation = ctx.globalCompositeOperation;\n ctx.clearRect(0, 0, this.canvas.width, this.canvas.height);\n\n ctx.fillStyle = \"rgba(0, 0, 0, 1)\";\n\n const dctx = layerManager.getLayer(\"draw\")!.ctx;\n if (Settings.drawAngleLines || Settings.drawFirstLightHit) {\n dctx.clearRect(0, 0, dctx.canvas.width, dctx.canvas.height);\n }\n\n // At all times provide a minimal vision range to prevent losing your tokens in fog.\n if (gameStore.fullFOW && layerManager.hasLayer(\"tokens\")) {\n layerManager.getLayer(\"tokens\")!.shapes.forEach(sh => {\n if (!sh.ownedBy() || !sh.isToken) return;\n const bb = sh.getBoundingBox();\n const lcenter = g2l(sh.center());\n const alm = 0.8 * g2lz(bb.w);\n ctx.beginPath();\n ctx.arc(lcenter.x, lcenter.y, alm, 0, 2 * Math.PI);\n const gradient = ctx.createRadialGradient(lcenter.x, lcenter.y, alm / 2, lcenter.x, lcenter.y, alm);\n gradient.addColorStop(0, \"rgba(0, 0, 0, 1)\");\n gradient.addColorStop(1, \"rgba(0, 0, 0, 0)\");\n ctx.fillStyle = gradient;\n ctx.fill();\n });\n }\n\n this.vCtx.clearRect(0, 0, window.innerWidth, window.innerHeight);\n\n // First cut out all the light sources\n for (const light of gameStore.visionSources) {\n const shape = layerManager.UUIDMap.get(light.shape);\n if (shape === undefined) continue;\n const aura = shape.auras.find(a => a.uuid === light.aura);\n if (aura === undefined) continue;\n\n const auraLength = getUnitDistance(aura.value + aura.dim);\n const center = shape.center();\n const lcenter = g2l(center);\n\n const auraCircle = new Circle(center, auraLength);\n if (!auraCircle.visibleInCanvas(ctx.canvas)) continue;\n\n if (gameStore.visionMode === \"bvh\") {\n let lastArcAngle = -1;\n\n const path = new Path2D();\n path.moveTo(lcenter.x, lcenter.y);\n let firstPoint: GlobalPoint;\n\n for (let angle = 0; angle < 2 * Math.PI; angle += (Settings.angleSteps / 180) * Math.PI) {\n const anglePoint = new GlobalPoint(\n center.x + auraLength * Math.cos(angle),\n center.y + auraLength * Math.sin(angle),\n );\n if (Settings.drawAngleLines) {\n dctx!.beginPath();\n dctx!.moveTo(g2lx(center.x), g2ly(center.y));\n dctx!.lineTo(g2lx(anglePoint.x), g2ly(anglePoint.y));\n dctx!.stroke();\n }\n\n // Check if there is a hit with one of the nearby light blockers.\n const lightRay = Ray.fromPoints(center, anglePoint);\n const hitResult = gameStore.BV.intersect(lightRay);\n\n if (angle === 0) firstPoint = hitResult.hit ? hitResult.intersect : anglePoint;\n\n // We can move on to the next angle if nothing was hit.\n if (!hitResult.hit) {\n // If an earlier hit caused the aura to leave the arc, we need to go back to the arc\n if (lastArcAngle === -1) {\n // Set the start of a new arc beginning at the current angle\n lastArcAngle = angle;\n // Draw a line from the last non arc location back to the arc\n const dest = g2l(anglePoint);\n ctx.lineTo(dest.x, dest.y);\n }\n continue;\n }\n // If hit , first finish any ongoing arc, then move to the intersection point\n if (lastArcAngle !== -1) {\n path.arc(lcenter.x, lcenter.y, g2lr(aura.value + aura.dim), lastArcAngle, angle);\n lastArcAngle = -1;\n }\n path.lineTo(g2lx(hitResult.intersect.x), g2ly(hitResult.intersect.y));\n }\n // Finish the final arc.\n if (lastArcAngle === -1) path.lineTo(g2lx(firstPoint!.x), g2ly(firstPoint!.y));\n else path.arc(lcenter.x, lcenter.y, g2lr(aura.value + aura.dim), lastArcAngle, 2 * Math.PI);\n\n if (gameStore.fullFOW) {\n if (aura.dim > 0) {\n // Fill the light aura with a radial dropoff towards the outside.\n const gradient = ctx.createRadialGradient(\n lcenter.x,\n lcenter.y,\n g2lr(aura.value),\n lcenter.x,\n lcenter.y,\n g2lr(aura.value + aura.dim),\n );\n gradient.addColorStop(0, \"rgba(0, 0, 0, 1)\");\n gradient.addColorStop(1, \"rgba(0, 0, 0, 0)\");\n ctx.fillStyle = gradient;\n } else {\n ctx.fillStyle = \"rgba(0, 0, 0, 1)\";\n }\n ctx.fill(path);\n }\n\n aura.lastPath = path;\n } else {\n this.vCtx.globalCompositeOperation = \"source-over\";\n this.vCtx.fillStyle = \"rgba(0, 0, 0, 1)\";\n const polygon = computeVisibility(center, \"vision\");\n this.vCtx.beginPath();\n this.vCtx.moveTo(g2lx(polygon[0][0]), g2ly(polygon[0][1]));\n for (const point of polygon) this.vCtx.lineTo(g2lx(point[0]), g2ly(point[1]));\n this.vCtx.closePath();\n this.vCtx.fill();\n if (aura.dim > 0) {\n // Fill the light aura with a radial dropoff towards the outside.\n const gradient = this.vCtx.createRadialGradient(\n lcenter.x,\n lcenter.y,\n g2lr(aura.value),\n lcenter.x,\n lcenter.y,\n g2lr(aura.value + aura.dim),\n );\n gradient.addColorStop(0, \"rgba(0, 0, 0, 1)\");\n gradient.addColorStop(1, \"rgba(0, 0, 0, 0)\");\n this.vCtx.fillStyle = gradient;\n } else {\n this.vCtx.fillStyle = \"rgba(0, 0, 0, 1)\";\n }\n this.vCtx.globalCompositeOperation = \"source-in\";\n this.vCtx.beginPath();\n this.vCtx.arc(lcenter.x, lcenter.y, g2lr(aura.value + aura.dim), 0, 2 * Math.PI);\n this.vCtx.fill();\n ctx.drawImage(this.virtualCanvas, 0, 0);\n }\n }\n\n // At the DM Side due to opacity of the two fow layers, it looks strange if we just render them on top of eachother like players.\n if (gameStore.fowLOS) {\n ctx.globalCompositeOperation = \"source-in\";\n ctx.drawImage(layerManager.getLayer(\"fow-players\")!.canvas, 0, 0);\n }\n\n for (const preShape of this.preFogShapes) {\n if (!preShape.visibleInCanvas(this.canvas)) continue;\n const ogComposite = preShape.globalCompositeOperation;\n if (!gameStore.fullFOW) {\n if (preShape.globalCompositeOperation === \"source-over\")\n preShape.globalCompositeOperation = \"destination-out\";\n else if (preShape.globalCompositeOperation === \"destination-out\")\n preShape.globalCompositeOperation = \"source-over\";\n }\n preShape.draw(ctx);\n preShape.globalCompositeOperation = ogComposite;\n }\n\n if (gameStore.fullFOW) {\n ctx.globalCompositeOperation = \"source-out\";\n ctx.fillStyle = getFogColour();\n ctx.fillRect(0, 0, ctx.canvas.width, ctx.canvas.height);\n }\n\n super.draw(false);\n\n ctx.globalCompositeOperation = originalOperation;\n }\n }\n}\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/ts-loader/index.js??ref--12-2!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./load.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/ts-loader/index.js??ref--12-2!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./load.vue?vue&type=script&lang=ts&\"","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{attrs:{\"id\":\"menuContainer\"}},[_c('div',{ref:\"rm\",style:({\n left: _vm.visible.settings ? '200px' : '0',\n top: _vm.visible.locations ? '100px' : '0'\n }),attrs:{\"id\":\"radialmenu\"}},[_c('div',{staticClass:\"rm-wrapper\"},[_c('div',{staticClass:\"rm-toggler\"},[_c('ul',{staticClass:\"rm-list\",class:{ 'rm-list-dm': _vm.IS_DM }},[(_vm.IS_DM)?_c('li',{staticClass:\"rm-item\",attrs:{\"id\":\"rm-locations\"},on:{\"click\":function($event){_vm.visible.locations = !_vm.visible.locations}}},[_vm._m(0)]):_vm._e(),_c('li',{staticClass:\"rm-item\",attrs:{\"id\":\"rm-settings\"},on:{\"click\":function($event){_vm.visible.settings = !_vm.visible.settings}}},[_vm._m(1)])])]),_vm._m(2)])]),_c('transition',{attrs:{\"name\":\"settings\"},on:{\"enter\":function($event){_vm.$refs.rm.style.transition = 'left 500ms'}}},[(_vm.visible.settings)?_c('div',{ref:\"settings\",attrs:{\"id\":\"menu\"},on:{\"click\":_vm.settingsClick}},[_c('div',{staticStyle:{\"width\":\"200px\",\"height\":\"90%\",\"overflow-y\":\"auto\",\"overflow-x\":\"hidden\"}},[(_vm.IS_DM)?[_c('button',{staticClass:\"accordion\"},[_vm._v(\"Assets\")]),_c('div',{staticClass:\"accordion-panel\"},[_c('a',{staticClass:\"actionButton\",attrs:{\"href\":\"/assets\",\"target\":\"blank\",\"title\":\"Open asset manager\"}},[_c('i',{staticClass:\"fas fa-external-link-alt\"})]),_c('div',{staticClass:\"directory\",attrs:{\"id\":\"menu-tokens\"}},[_c('asset-node',{attrs:{\"asset\":_vm.assets}}),(!_vm.assets)?_c('div',[_vm._v(\"No assets\")]):_vm._e()],1)]),_c('button',{staticClass:\"accordion\"},[_vm._v(\"Notes\")]),_c('div',{staticClass:\"accordion-panel\"},[_c('div',{staticClass:\"accordion-subpanel\",attrs:{\"id\":\"menu-notes\"}},[_c('a',{staticClass:\"actionButton\",on:{\"click\":_vm.createNote}},[_c('i',{staticClass:\"far fa-plus-square\"})]),_vm._l((_vm.notes),function(note){return _c('div',{key:note.uuid,staticStyle:{\"cursor\":\"pointer\"},on:{\"click\":function($event){_vm.openNote(note)}}},[_vm._v(_vm._s(note.title || \"[?]\"))])}),(!_vm.notes.length)?_c('div',[_vm._v(\"No notes\")]):_vm._e()],2)]),_c('button',{staticClass:\"accordion\"},[_vm._v(\"DM Options\")]),_c('div',{staticClass:\"accordion-panel\"},[_c('div',{staticClass:\"accordion-subpanel\"},[_c('label',{attrs:{\"for\":\"useGridInput\"}},[_vm._v(\"Use grid:\")]),_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.useGrid),expression:\"useGrid\"}],attrs:{\"id\":\"useGridInput\",\"type\":\"checkbox\",\"checked\":\"checked\"},domProps:{\"checked\":Array.isArray(_vm.useGrid)?_vm._i(_vm.useGrid,null)>-1:(_vm.useGrid)},on:{\"change\":function($event){var $$a=_vm.useGrid,$$el=$event.target,$$c=$$el.checked?(true):(false);if(Array.isArray($$a)){var $$v=null,$$i=_vm._i($$a,$$v);if($$el.checked){$$i<0&&(_vm.useGrid=$$a.concat([$$v]))}else{$$i>-1&&(_vm.useGrid=$$a.slice(0,$$i).concat($$a.slice($$i+1)))}}else{_vm.useGrid=$$c}}}}),_c('label',{attrs:{\"for\":\"useFOWInput\"}},[_vm._v(\"Fill entire canvas with FOW:\")]),_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.fullFOW),expression:\"fullFOW\"}],attrs:{\"id\":\"useFOWInput\",\"type\":\"checkbox\"},domProps:{\"checked\":Array.isArray(_vm.fullFOW)?_vm._i(_vm.fullFOW,null)>-1:(_vm.fullFOW)},on:{\"change\":function($event){var $$a=_vm.fullFOW,$$el=$event.target,$$c=$$el.checked?(true):(false);if(Array.isArray($$a)){var $$v=null,$$i=_vm._i($$a,$$v);if($$el.checked){$$i<0&&(_vm.fullFOW=$$a.concat([$$v]))}else{$$i>-1&&(_vm.fullFOW=$$a.slice(0,$$i).concat($$a.slice($$i+1)))}}else{_vm.fullFOW=$$c}}}}),_c('label',{attrs:{\"for\":\"fowOpacity\"}},[_vm._v(\"FOW opacity:\")]),_c('input',{directives:[{name:\"model\",rawName:\"v-model.number\",value:(_vm.fowOpacity),expression:\"fowOpacity\",modifiers:{\"number\":true}}],attrs:{\"id\":\"fowOpacity\",\"type\":\"number\",\"min\":\"0\",\"max\":\"1\",\"step\":\"0.1\"},domProps:{\"value\":(_vm.fowOpacity)},on:{\"input\":function($event){if($event.target.composing){ return; }_vm.fowOpacity=_vm._n($event.target.value)},\"blur\":function($event){_vm.$forceUpdate()}}}),_c('label',{attrs:{\"for\":\"fowLOS\"}},[_vm._v(\"Only show lights in LoS:\")]),_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.fowLOS),expression:\"fowLOS\"}],attrs:{\"id\":\"fowLOS\",\"type\":\"checkbox\"},domProps:{\"checked\":Array.isArray(_vm.fowLOS)?_vm._i(_vm.fowLOS,null)>-1:(_vm.fowLOS)},on:{\"change\":function($event){var $$a=_vm.fowLOS,$$el=$event.target,$$c=$$el.checked?(true):(false);if(Array.isArray($$a)){var $$v=null,$$i=_vm._i($$a,$$v);if($$el.checked){$$i<0&&(_vm.fowLOS=$$a.concat([$$v]))}else{$$i>-1&&(_vm.fowLOS=$$a.slice(0,$$i).concat($$a.slice($$i+1)))}}else{_vm.fowLOS=$$c}}}}),_c('label',{attrs:{\"for\":\"unitSizeInput\"}},[_vm._v(\"Unit Size (in ft.):\")]),_c('input',{directives:[{name:\"model\",rawName:\"v-model.number\",value:(_vm.unitSize),expression:\"unitSize\",modifiers:{\"number\":true}}],attrs:{\"id\":\"unitSizeInput\",\"type\":\"number\"},domProps:{\"value\":(_vm.unitSize)},on:{\"input\":function($event){if($event.target.composing){ return; }_vm.unitSize=_vm._n($event.target.value)},\"blur\":function($event){_vm.$forceUpdate()}}}),_c('label',{attrs:{\"for\":\"gridSizeInput\"}},[_vm._v(\"Grid Size (in pixels):\")]),_c('input',{directives:[{name:\"model\",rawName:\"v-model.number\",value:(_vm.gridSize),expression:\"gridSize\",modifiers:{\"number\":true}}],attrs:{\"id\":\"gridSizeInput\",\"type\":\"number\",\"min\":\"0\"},domProps:{\"value\":(_vm.gridSize)},on:{\"input\":function($event){if($event.target.composing){ return; }_vm.gridSize=_vm._n($event.target.value)},\"blur\":function($event){_vm.$forceUpdate()}}}),_c('label',{attrs:{\"for\":\"visionMode\"}},[_vm._v(\"Vision Mode:\")]),_c('select',{attrs:{\"id\":\"visionMode\"},on:{\"change\":_vm.changeVisionMode}},[_c('option',{domProps:{\"selected\":_vm.$store.state.game.visionMode === 'bvh'}},[_vm._v(\"BVH\")]),_c('option',{domProps:{\"selected\":_vm.$store.state.game.visionMode === 'triangle'}},[_vm._v(\"Triangle\")])]),_c('label',{attrs:{\"for\":\"vmininp\"}},[_vm._v(\"Minimal full vision (ft):\")]),_c('input',{directives:[{name:\"model\",rawName:\"v-model.lazy.number\",value:(_vm.visionRangeMin),expression:\"visionRangeMin\",modifiers:{\"lazy\":true,\"number\":true}}],attrs:{\"id\":\"vmininp\",\"type\":\"number\",\"min\":\"0\"},domProps:{\"value\":(_vm.visionRangeMin)},on:{\"change\":function($event){_vm.visionRangeMin=_vm._n($event.target.value)},\"blur\":function($event){_vm.$forceUpdate()}}}),_c('label',{attrs:{\"for\":\"vmaxinp\"}},[_vm._v(\"Maximal vision (ft):\")]),_c('input',{directives:[{name:\"model\",rawName:\"v-model.lazy.number\",value:(_vm.visionRangeMax),expression:\"visionRangeMax\",modifiers:{\"lazy\":true,\"number\":true}}],attrs:{\"id\":\"vmaxinp\",\"type\":\"number\",\"min\":\"0\"},domProps:{\"value\":(_vm.visionRangeMax)},on:{\"change\":function($event){_vm.visionRangeMax=_vm._n($event.target.value)},\"blur\":function($event){_vm.$forceUpdate()}}}),_c('label',{attrs:{\"for\":\"invitation\"}},[_vm._v(\"Invitation Code:\")]),_c('input',{attrs:{\"id\":\"invitation\",\"type\":\"text\",\"readonly\":\"readonly\"},domProps:{\"value\":_vm.invitationCode}})])])]:_vm._e(),_c('button',{staticClass:\"accordion\"},[_vm._v(\"Client Options\")]),_c('div',{staticClass:\"accordion-panel\"},[_c('div',{staticClass:\"accordion-subpanel\"},[_c('label',{attrs:{\"for\":\"gridColour\"}},[_vm._v(\"Grid Colour:\")]),_c('color-picker',{attrs:{\"id\":\"gridColour\",\"color\":_vm.gridColour},on:{\"update:color\":function($event){_vm.gridColour=$event}}}),_c('label',{attrs:{\"for\":\"fowColour\"}},[_vm._v(\"FOW Colour:\")]),_c('color-picker',{attrs:{\"id\":\"fowColour\",\"color\":_vm.fowColour},on:{\"update:color\":function($event){_vm.fowColour=$event}}}),_c('label',{attrs:{\"for\":\"rulerColour\"}},[_vm._v(\"Ruler Colour:\")]),_c('color-picker',{attrs:{\"id\":\"rulerColour\",\"color\":_vm.rulerColour},on:{\"update:color\":function($event){_vm.rulerColour=$event}}})],1)])],2),_c('router-link',{staticClass:\"accordion\",staticStyle:{\"text-decoration\":\"none\",\"display\":\"inline-block\",\"position\":\"absolute\",\"bottom\":\"0\"},attrs:{\"to\":\"/dashboard\"}},[_vm._v(\"Exit\")])],1):_vm._e()]),_c('transition',{attrs:{\"name\":\"locations\"},on:{\"enter\":function($event){_vm.$refs.rm.style.transition = 'top 500ms'}}},[(_vm.IS_DM && _vm.visible.locations)?_c('div',{attrs:{\"id\":\"locations-menu\"}},[_c('div',[_vm._l((_vm.locations),function(location){return _c('div',{key:location,on:{\"click\":function($event){_vm.changeLocation(location)}}},[_vm._v(_vm._s(location))])}),_c('div',{on:{\"click\":_vm.createLocation}},[_c('i',{staticClass:\"fas fa-plus\"})])],2)]):_vm._e()]),_c('img',{attrs:{\"id\":\"dragImage\"}})],1)}\nvar staticRenderFns = [function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('a',{attrs:{\"href\":\"#\"}},[_c('i',{staticClass:\"far fa-compass\"})])},function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('a',{attrs:{\"href\":\"#\"}},[_c('i',{staticClass:\"fas fa-cog\"})])},function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('span',{staticClass:\"rm-topper\"},[_c('i',{staticClass:\"icon-share-alt\"})])}]\n\nexport { render, staticRenderFns }","export * from \"-!cache-loader?{\\\"cacheDirectory\\\":\\\"node_modules/.cache/vue-loader\\\",\\\"cacheIdentifier\\\":\\\"74f43d04-vue-loader-template\\\"}!../../../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./menu.vue?vue&type=template&id=aaf3f05e&scoped=true&\"","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('Modal',{attrs:{\"visible\":_vm.visible,\"mask\":false},on:{\"close\":function($event){_vm.visible = false}},scopedSlots:_vm._u([{key:\"header\",fn:function(m){return _c('div',{staticClass:\"modal-header\",attrs:{\"draggable\":\"true\"},on:{\"dragstart\":m.dragStart,\"dragend\":m.dragEnd}},[_c('div',[_vm._v(\"Edit asset\")]),_c('div',{staticClass:\"header-close\",on:{\"click\":function($event){_vm.visible = false}}},[_c('i',{staticClass:\"far fa-window-close\"})])])}}])},[_c('div',{staticClass:\"modal-body\"},[_c('div',{staticClass:\"grid\"},[_c('label',{attrs:{\"for\":\"shapeselectiondialog-name\"}},[_vm._v(\"Name\")]),_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.shape.name),expression:\"shape.name\"}],staticStyle:{\"grid-column\":\"numerator / remove\"},attrs:{\"type\":\"text\",\"id\":\"shapeselectiondialog-name\",\"disabled\":!_vm.owned},domProps:{\"value\":(_vm.shape.name)},on:{\"change\":function($event){_vm.updateShape(false)},\"input\":function($event){if($event.target.composing){ return; }_vm.$set(_vm.shape, \"name\", $event.target.value)}}}),_c('div',{style:({opacity: _vm.shape.nameVisible ? 1.0 : 0.3, textAlign: 'center'}),attrs:{\"disabled\":!_vm.owned},on:{\"click\":function($event){_vm.shape.nameVisible = !_vm.shape.nameVisible;_vm.updateShape(false)}}},[_c('i',{staticClass:\"fas fa-eye\"})]),_c('label',{attrs:{\"for\":\"shapeselectiondialog-istoken\"}},[_vm._v(\"Is a token\")]),_c('input',{staticClass:\"styled-checkbox\",staticStyle:{\"grid-column-start\":\"remove\"},attrs:{\"type\":\"checkbox\",\"id\":\"shapeselectiondialog-istoken\",\"disabled\":!_vm.owned},domProps:{\"checked\":_vm.shape.isToken},on:{\"click\":_vm.setToken}}),_c('label',{attrs:{\"for\":\"shapeselectiondialog-visionblocker\"}},[_vm._v(\"Blocks vision/light\")]),_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.shape.visionObstruction),expression:\"shape.visionObstruction\"}],staticStyle:{\"grid-column-start\":\"remove\"},attrs:{\"type\":\"checkbox\",\"id\":\"shapeselectiondialog-visionblocker\",\"disabled\":!_vm.owned},domProps:{\"checked\":Array.isArray(_vm.shape.visionObstruction)?_vm._i(_vm.shape.visionObstruction,null)>-1:(_vm.shape.visionObstruction)},on:{\"change\":[function($event){var $$a=_vm.shape.visionObstruction,$$el=$event.target,$$c=$$el.checked?(true):(false);if(Array.isArray($$a)){var $$v=null,$$i=_vm._i($$a,$$v);if($$el.checked){$$i<0&&(_vm.$set(_vm.shape, \"visionObstruction\", $$a.concat([$$v])))}else{$$i>-1&&(_vm.$set(_vm.shape, \"visionObstruction\", $$a.slice(0,$$i).concat($$a.slice($$i+1))))}}else{_vm.$set(_vm.shape, \"visionObstruction\", $$c)}},_vm.setVisionBlocker]}}),_c('label',{attrs:{\"for\":\"shapeselectiondialog-moveblocker\"}},[_vm._v(\"Blocks movement\")]),_c('input',{staticStyle:{\"grid-column-start\":\"remove\"},attrs:{\"type\":\"checkbox\",\"id\":\"shapeselectiondialog-moveblocker\",\"disabled\":!_vm.owned},domProps:{\"checked\":_vm.shape.movementObstruction},on:{\"click\":_vm.setMovementBlocker}}),_c('label',{attrs:{\"for\":\"shapeselectiondialog-strokecolour\"}},[_vm._v(\"Border colour\")]),_c('color-picker',{staticStyle:{\"grid-column-start\":\"remove\"},attrs:{\"color\":_vm.shape.strokeColour,\"disabled\":!_vm.owned},on:{\"update:color\":function($event){_vm.$set(_vm.shape, \"strokeColour\", $event)},\"input\":function($event){_vm.updateShape(true, true)},\"change\":function($event){_vm.updateShape(true)}}}),_c('label',{attrs:{\"for\":\"shapeselectiondialog-fillcolour\"}},[_vm._v(\"Fill colour\")]),_c('color-picker',{staticStyle:{\"grid-column-start\":\"remove\"},attrs:{\"color\":_vm.shape.fillColour,\"disabled\":!_vm.owned},on:{\"update:color\":function($event){_vm.$set(_vm.shape, \"fillColour\", $event)},\"input\":function($event){_vm.updateShape(true, true)},\"change\":function($event){_vm.updateShape(true)}}}),_c('div',{staticClass:\"spanrow header\"},[_vm._v(\"Access\")]),_vm._l((_vm.shape.owners),function(owner){return [_c('input',{key:owner,staticStyle:{\"grid-column-start\":\"name\"},attrs:{\"type\":\"text\",\"placeholder\":\"name\",\"disabled\":!_vm.owned},domProps:{\"value\":owner},on:{\"change\":function($event){_vm.updateOwner($event, owner)}}}),(owner !== '')?_c('div',{key:'remove-' + owner,style:({opacity: _vm.owned ? 1.0 : 0.3, textAlign: 'center', gridColumnStart: 'remove'}),attrs:{\"disabled\":!_vm.owned},on:{\"click\":function($event){_vm.removeOwner(owner)}}},[_c('i',{staticClass:\"fas fa-trash-alt\"})]):_vm._e()]}),_c('div',{staticClass:\"spanrow header\"},[_vm._v(\"Trackers\")]),_vm._l((_vm.shape.trackers),function(tracker){return [_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(tracker.name),expression:\"tracker.name\"}],key:'name-'+tracker.uuid,staticStyle:{\"grid-column-start\":\"name\"},attrs:{\"type\":\"text\",\"placeholder\":\"name\",\"disabled\":!_vm.owned},domProps:{\"value\":(tracker.name)},on:{\"change\":function($event){_vm.updateShape(false);},\"input\":function($event){if($event.target.composing){ return; }_vm.$set(tracker, \"name\", $event.target.value)}}}),_c('input',{directives:[{name:\"model\",rawName:\"v-model.number\",value:(tracker.value),expression:\"tracker.value\",modifiers:{\"number\":true}}],key:'value-'+tracker.uuid,attrs:{\"type\":\"text\",\"title\":\"Current value\",\"disabled\":!_vm.owned},domProps:{\"value\":(tracker.value)},on:{\"change\":function($event){_vm.updateShape(false)},\"input\":function($event){if($event.target.composing){ return; }_vm.$set(tracker, \"value\", _vm._n($event.target.value))},\"blur\":function($event){_vm.$forceUpdate()}}}),_c('span',{key:'fspan-'+tracker.uuid},[_vm._v(\"/\")]),_c('input',{directives:[{name:\"model\",rawName:\"v-model.number\",value:(tracker.maxvalue),expression:\"tracker.maxvalue\",modifiers:{\"number\":true}}],key:'maxvalue-'+tracker.uuid,attrs:{\"type\":\"text\",\"title\":\"Current value\",\"disabled\":!_vm.owned},domProps:{\"value\":(tracker.maxvalue)},on:{\"change\":function($event){_vm.updateShape(false)},\"input\":function($event){if($event.target.composing){ return; }_vm.$set(tracker, \"maxvalue\", _vm._n($event.target.value))},\"blur\":function($event){_vm.$forceUpdate()}}}),_c('span',{key:'sspan-'+tracker.uuid}),_c('div',{key:'visibility-'+tracker.uuid,style:({opacity: tracker.visible ? 1.0 : 0.3, textAlign: 'center'}),attrs:{\"disabled\":!_vm.owned},on:{\"click\":function($event){tracker.visible = !tracker.visible;_vm.updateShape(false)}}},[_c('i',{staticClass:\"fas fa-eye\"})]),_c('span',{key:'tspan-'+tracker.uuid}),(tracker.name !== '' || tracker.value !== 0)?_c('div',{key:'remove-'+tracker.uuid,style:({opacity: _vm.owned ? 1.0 : 0.3, textAlign: 'center'}),attrs:{\"disabled\":!_vm.owned},on:{\"click\":function($event){_vm.removeTracker(tracker.uuid)}}},[_c('i',{staticClass:\"fas fa-trash-alt\"})]):_vm._e()]}),_c('div',{staticClass:\"spanrow header\"},[_vm._v(\"Auras\")]),_vm._l((_vm.shape.auras),function(aura){return [_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(aura.name),expression:\"aura.name\"}],key:'name-'+aura.uuid,staticStyle:{\"grid-column-start\":\"name\"},attrs:{\"type\":\"text\",\"placeholder\":\"name\",\"disabled\":!_vm.owned},domProps:{\"value\":(aura.name)},on:{\"change\":function($event){_vm.updateShape(false)},\"input\":function($event){if($event.target.composing){ return; }_vm.$set(aura, \"name\", $event.target.value)}}}),_c('input',{directives:[{name:\"model\",rawName:\"v-model.number\",value:(aura.value),expression:\"aura.value\",modifiers:{\"number\":true}}],key:'value-'+aura.uuid,attrs:{\"type\":\"text\",\"title\":\"Current value\",\"disabled\":!_vm.owned},domProps:{\"value\":(aura.value)},on:{\"change\":function($event){_vm.updateShape(true)},\"input\":function($event){if($event.target.composing){ return; }_vm.$set(aura, \"value\", _vm._n($event.target.value))},\"blur\":function($event){_vm.$forceUpdate()}}}),_c('span',{key:'fspan-'+aura.uuid},[_vm._v(\"/\")]),_c('input',{directives:[{name:\"model\",rawName:\"v-model.number\",value:(aura.dim),expression:\"aura.dim\",modifiers:{\"number\":true}}],key:'dimvalue-'+aura.uuid,attrs:{\"type\":\"text\",\"title\":\"Dim value\",\"disabled\":!_vm.owned},domProps:{\"value\":(aura.dim)},on:{\"change\":function($event){_vm.updateShape(true)},\"input\":function($event){if($event.target.composing){ return; }_vm.$set(aura, \"dim\", _vm._n($event.target.value))},\"blur\":function($event){_vm.$forceUpdate()}}}),_c('color-picker',{key:'colour-'+aura.uuid,attrs:{\"color\":aura.colour,\"disabled\":!_vm.owned},on:{\"update:color\":function($event){_vm.$set(aura, \"colour\", $event)},\"input\":function($event){_vm.updateAuraColour(aura, $event)},\"change\":function($event){_vm.updateShape(true)}}}),_c('div',{key:'visibility-'+aura.uuid,style:({opacity: aura.visible ? 1.0 : 0.3, textAlign: 'center'}),attrs:{\"disabled\":!_vm.owned},on:{\"click\":function($event){aura.visible = !aura.visible;_vm.updateShape(true)}}},[_c('i',{staticClass:\"fas fa-eye\"})]),_c('div',{key:'visionsource-'+aura.uuid,style:({opacity: aura.visionSource ? 1.0 : 0.3, textAlign: 'center'}),attrs:{\"disabled\":!_vm.owned},on:{\"click\":function($event){_vm.updateAuraVisionSource(aura)}}},[_c('i',{staticClass:\"fas fa-lightbulb\"})]),(aura.name !== '' || aura.value !== 0)?_c('div',{key:'remove-'+aura.uuid,style:({opacity: _vm.owned ? 1.0 : 0.3, textAlign: 'center'}),attrs:{\"disabled\":!_vm.owned},on:{\"click\":function($event){_vm.removeAura(aura.uuid)}}},[_c('i',{staticClass:\"fas fa-trash-alt\"})]):_vm._e()]}),_c('div',{staticClass:\"spanrow header\"},[_vm._v(\"Labels\")]),_c('div',{staticClass:\"spanrow\",attrs:{\"id\":\"labels\"}},[_vm._l((_vm.shape.labels),function(label){return _c('div',{key:label.uuid,staticClass:\"label\"},[(label.category)?[_c('div',{staticClass:\"label-user\"},[_vm._v(_vm._s(label.category))]),_c('div',{staticClass:\"label-main\",on:{\"click\":function($event){_vm.removeLabel(label.uuid)}}},[_vm._v(_vm._s(label.name))])]:_vm._e(),(!label.category)?[_c('div',{staticClass:\"label-main\",on:{\"click\":function($event){_vm.removeLabel(label.uuid)}}},[_vm._v(_vm._s(label.name))])]:_vm._e()],2)}),(_vm.owned)?_c('div',{staticClass:\"label\",attrs:{\"id\":\"label-add\"}},[_c('div',{staticClass:\"label-main\",on:{\"click\":_vm.openLabelManager}},[_vm._v(\"+\")])]):_vm._e()],2),_c('div',{staticClass:\"spanrow header\"},[_vm._v(\"Annotation\")]),_c('textarea',{staticClass:\"spanrow\",attrs:{\"disabled\":!_vm.owned},domProps:{\"value\":_vm.shape.annotation},on:{\"change\":_vm.updateAnnotation}})],2)])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","export * from \"-!cache-loader?{\\\"cacheDirectory\\\":\\\"node_modules/.cache/vue-loader\\\",\\\"cacheIdentifier\\\":\\\"74f43d04-vue-loader-template\\\"}!../../../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./edit_dialog.vue?vue&type=template&id=23de098e&scoped=true&\"","import { ServerCircle } from \"@/game/comm/types/shapes\";\nimport { GlobalPoint, LocalPoint, Vector } from \"@/game/geom\";\nimport { BoundingRect } from \"@/game/shapes/boundingrect\";\nimport { Shape } from \"@/game/shapes/shape\";\nimport { gameStore } from \"@/game/store\";\nimport { calculateDelta } from \"@/game/ui/tools/utils\";\nimport { g2l, g2lz, l2g } from \"@/game/units\";\nimport { getFogColour } from \"@/game/utils\";\n\nexport class Circle extends Shape {\n type = \"circle\";\n r: number;\n constructor(center: GlobalPoint, r: number, fillColour?: string, strokeColour?: string, uuid?: string) {\n super(center, fillColour, strokeColour, uuid);\n this.r = r || 1;\n }\n asDict(): ServerCircle {\n // const base = this.getBaseDict();\n // base.r = this.r;\n // base.border = this.border;\n // return base;\n return Object.assign(this.getBaseDict(), {\n radius: this.r,\n });\n }\n fromDict(data: ServerCircle) {\n super.fromDict(data);\n this.r = data.radius;\n }\n getBoundingBox(): BoundingRect {\n return new BoundingRect(\n new GlobalPoint(this.refPoint.x - this.r, this.refPoint.y - this.r),\n this.r * 2,\n this.r * 2,\n );\n }\n\n get points() {\n return this.getBoundingBox().points;\n }\n\n draw(ctx: CanvasRenderingContext2D) {\n super.draw(ctx);\n ctx.beginPath();\n if (this.fillColour === \"fog\") ctx.fillStyle = getFogColour();\n else ctx.fillStyle = this.fillColour;\n const loc = g2l(this.refPoint);\n ctx.arc(loc.x, loc.y, g2lz(this.r), 0, 2 * Math.PI);\n ctx.fill();\n if (this.strokeColour !== \"rgba(0, 0, 0, 0)\") {\n ctx.beginPath();\n ctx.lineWidth = g2lz(5);\n ctx.strokeStyle = this.strokeColour;\n ctx.arc(loc.x, loc.y, g2lz(this.r), 0, 2 * Math.PI);\n ctx.stroke();\n }\n }\n contains(point: GlobalPoint): boolean {\n return (point.x - this.refPoint.x) ** 2 + (point.y - this.refPoint.y) ** 2 < this.r ** 2;\n }\n center(): GlobalPoint;\n center(centerPoint: GlobalPoint): void;\n center(centerPoint?: GlobalPoint): GlobalPoint | void {\n if (centerPoint === undefined) return this.refPoint;\n this.refPoint = centerPoint;\n }\n visibleInCanvas(canvas: HTMLCanvasElement): boolean {\n return this.getBoundingBox().visibleInCanvas(canvas);\n } // TODO\n snapToGrid() {\n const gs = gameStore.gridSize;\n let targetX;\n let targetY;\n if (((2 * this.r) / gs) % 2 === 0) {\n targetX = Math.round(this.refPoint.x / gs) * gs;\n } else {\n targetX = Math.round((this.refPoint.x - gs / 2) / gs) * gs + this.r;\n }\n if (((2 * this.r) / gs) % 2 === 0) {\n targetY = Math.round(this.refPoint.y / gs) * gs;\n } else {\n targetY = Math.round((this.refPoint.y - gs / 2) / gs) * gs + this.r;\n }\n const delta = calculateDelta(new Vector(targetX - this.refPoint.x, targetY - this.refPoint.y), this);\n this.refPoint = this.refPoint.add(delta);\n this.invalidate(false);\n }\n resizeToGrid() {\n const gs = gameStore.gridSize;\n this.r = Math.max(Math.round(this.r / gs) * gs, gs / 2);\n this.invalidate(false);\n }\n resize(resizePoint: number, point: LocalPoint) {\n const z = gameStore.zoomFactor;\n const diff = l2g(point).subtract(this.refPoint);\n this.r = Math.sqrt(Math.pow(diff.length(), 2) / 2);\n }\n}\n","\n\n\n\n\n\n\n\n\n\n\n\n\n\nimport Tool from \"@/game/ui/tools/tool.vue\";\n\nimport { GlobalPoint } from \"@/game/geom\";\nimport { layerManager } from \"@/game/layers/manager\";\nimport { BaseRect } from \"@/game/shapes/baserect\";\nimport { Rect } from \"@/game/shapes/rect\";\nimport { gameStore } from \"@/game/store\";\nimport { l2g } from \"@/game/units\";\nimport { getMouse } from \"@/game/utils\";\nimport Component from \"vue-class-component\";\n\n@Component\nexport default class MapTool extends Tool {\n name = \"Map\";\n active = false;\n xCount = 3;\n yCount = 3;\n startPoint: GlobalPoint | null = null;\n rect: Rect | null = null;\n\n onMouseDown(event: MouseEvent) {\n const layer = layerManager.getLayer();\n if (layer === undefined) {\n console.log(\"No active layer!\");\n return;\n }\n this.active = true;\n\n this.startPoint = l2g(getMouse(event));\n this.rect = new Rect(this.startPoint.clone(), 0, 0, \"rgba(0,0,0,0)\", \"black\");\n layer.addShape(this.rect, false, false);\n }\n onMouseMove(event: MouseEvent) {\n if (!this.active || this.rect === null || this.startPoint === null) return;\n const layer = layerManager.getLayer();\n if (layer === undefined) {\n console.log(\"No active layer!\");\n return;\n }\n\n const endPoint = l2g(getMouse(event));\n\n this.rect.w = Math.abs(endPoint.x - this.startPoint.x);\n this.rect.h = Math.abs(endPoint.y - this.startPoint.y);\n this.rect.refPoint = new GlobalPoint(\n Math.min(this.startPoint.x, endPoint.x),\n Math.min(this.startPoint.y, endPoint.y),\n );\n layer.invalidate(false);\n }\n onMouseUp(event: MouseEvent) {\n if (!this.active || this.rect === null) return;\n const layer = layerManager.getLayer();\n if (layer === undefined) {\n console.log(\"No active layer!\");\n return;\n }\n this.active = false;\n\n if (layer.selection.length !== 1) {\n layer.removeShape(this.rect, false, false);\n return;\n }\n\n const w = this.rect.w;\n const h = this.rect.h;\n const sel = layer.selection[0];\n\n if (sel instanceof BaseRect) {\n sel.w *= (this.xCount * gameStore.gridSize) / w;\n sel.h *= (this.yCount * gameStore.gridSize) / h;\n }\n\n layer.removeShape(this.rect, false, false);\n }\n}\n","import { render, staticRenderFns } from \"./load.vue?vue&type=template&id=ff095222&\"\nimport script from \"./load.vue?vue&type=script&lang=ts&\"\nexport * from \"./load.vue?vue&type=script&lang=ts&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\ncomponent.options.__file = \"load.vue\"\nexport default component.exports","import Tool from \"@/game/ui/tools/tool.vue\";\n\nimport { sendClientOptions } from \"@/game/api/utils\";\nimport { LocalPoint } from \"@/game/geom\";\nimport { layerManager } from \"@/game/layers/manager\";\nimport { gameStore } from \"@/game/store\";\nimport { getMouse } from \"@/game/utils\";\nimport Component from \"vue-class-component\";\n\n@Component\nexport default class PanTool extends Tool {\n name = \"Pan\";\n panStart = new LocalPoint(0, 0);\n active = false;\n\n onMouseDown(event: MouseEvent) {\n this.panStart = getMouse(event);\n this.active = true;\n }\n onMouseMove(event: MouseEvent) {\n if (!this.active) return;\n const mouse = getMouse(event);\n const distance = mouse.subtract(this.panStart).multiply(1 / gameStore.zoomFactor);\n gameStore.increasePanX(Math.round(distance.x));\n gameStore.increasePanY(Math.round(distance.y));\n this.panStart = mouse;\n layerManager.invalidate();\n }\n onMouseUp(event: MouseEvent) {\n this.active = false;\n sendClientOptions();\n }\n}\n","import { render, staticRenderFns } from \"./selectcontext.vue?vue&type=template&id=44a31e42&scoped=true&\"\nimport script from \"./selectcontext.vue?vue&type=script&lang=ts&\"\nexport * from \"./selectcontext.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./selectcontext.vue?vue&type=style&index=0&id=44a31e42&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"44a31e42\",\n null\n \n)\n\ncomponent.options.__file = \"selectcontext.vue\"\nexport default component.exports","import Vue from \"vue\";\n\nimport { app } from \"@/main\";\n\n// Reference: https://stackoverflow.com/questions/105034/create-guid-uuid-in-javascript\nexport function uuidv4() {\n return \"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx\".replace(/[xy]/g, c => {\n const r = (Math.random() * 16) | 0;\n const v = c === \"x\" ? r : (r & 0x3) | 0x8;\n return v.toString(16);\n });\n}\n\nexport function capitalize(text: string) {\n return text.charAt(0).toUpperCase() + text.slice(1);\n}\n\nexport function alphSort(a: string, b: string) {\n if (a.toLowerCase() < b.toLowerCase()) return -1;\n else return 1;\n}\n\nexport function getHTMLFont(element: HTMLElement) {\n let font = element.style.font;\n while (font === null && element.parentElement !== null) {\n element = element.parentElement;\n font = element.style.font;\n }\n if (font === null) font = window.getComputedStyle(document.body).getPropertyValue(\"font\");\n return font;\n}\n\nexport function getHTMLTextWidth(text: string, font: string): number {\n let fakeElement = document.getElementById(\"emptycanvas\");\n if (fakeElement === null) {\n fakeElement = document.createElement(\"canvas\");\n fakeElement.id = \"emptycanvas\";\n fakeElement.style.display = \"\";\n document.body.appendChild(fakeElement);\n }\n const ctx = fakeElement.getContext(\"2d\")!;\n ctx.font = font;\n return Math.ceil(ctx.measureText(text).width);\n}\n\nexport function partition(arr: T[], predicate: (n: T) => boolean) {\n const ret: T[][] = [[], []];\n arr.forEach(n => (predicate(n) ? ret[1].push(n) : ret[0].push(n)));\n return ret;\n}\n\nexport function calcFontScale(ctx: CanvasRenderingContext2D, text: string, width: number, height: number) {\n const points = Number(ctx.font.split(\"px\")[0]) * 0.2;\n const fontWidth = ctx.measureText(text).width;\n return Math.min(width / fontWidth, height / points);\n}\n\nexport function fixedEncodeURIComponent(str: string) {\n return encodeURIComponent(str).replace(/[!'()*]/g, c => {\n return \"%\" + c.charCodeAt(0).toString(16);\n });\n}\n\nexport class OrderedMap {\n keys: K[] = [];\n values: V[] = [];\n\n get length() {\n return this.keys.length;\n }\n\n get(key: K) {\n return this.values[this.keys.indexOf(key)];\n }\n getIndexValue(idx: number) {\n return this.values[idx];\n }\n getIndexKey(idx: number) {\n return this.keys[idx];\n }\n set(key: K, value: V) {\n this.keys.push(key);\n this.values.push(value);\n }\n has(key: K) {\n return this.indexOf(key) >= 0;\n }\n indexOf(element: K) {\n return this.keys.indexOf(element);\n }\n remove(element: K) {\n const idx = this.indexOf(element);\n this.keys.splice(idx, 1);\n this.values.splice(idx, 1);\n }\n}\n\nexport function getComponent(): T {\n return app.$children[0].$refs.activeComponent;\n}\n\nexport function getRef(ref: string): T {\n const active = app.$children[0].$refs.activeComponent;\n return active.$refs[ref];\n}\n","import { render, staticRenderFns } from \"./contextMenu.vue?vue&type=template&id=606797b4&\"\nimport script from \"./contextMenu.vue?vue&type=script&lang=ts&\"\nexport * from \"./contextMenu.vue?vue&type=script&lang=ts&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\ncomponent.options.__file = \"contextMenu.vue\"\nexport default component.exports","import { EdgeCirculator, Point, Sign, Triangle, Vertex } from \"./tds\";\n\ntype Line = number[];\n\nexport function cw(index: number) {\n return (index + 2) % 3;\n}\n\nexport function ccw(index: number) {\n return (index + 1) % 3;\n}\n\nexport function edgeInfo(va: Vertex, vb: Vertex) {\n const ec = new EdgeCirculator(va, null);\n if (ec.valid) {\n do {\n const indv = 3 - ec.t!.indexV(va) - ec.ri;\n const v = ec.t!.vertices[indv]!;\n if (!v.infinite) {\n if (v === vb) {\n return { includes: true, vi: vb, fr: ec.t!, i: ec.ri };\n } else {\n const orient = orientation(va.point!, vb.point!, v.point!);\n if (orient === Sign.COLLINEAR && collinearBetween(va.point!, v.point!, vb.point!)) {\n return { includes: true, vi: v, fr: ec.t!, i: ec.ri };\n }\n }\n }\n } while (ec.next());\n }\n return { includes: false };\n}\n\nexport function collinearBetween(p: Point, q: Point, r: Point): boolean {\n let cPQ: Sign;\n let cQR: Sign;\n if (compare(0, p, r) === Sign.EQUAL) {\n cPQ = compare(1, p, q);\n cQR = compare(1, q, r);\n } else {\n cPQ = compare(0, p, q);\n cQR = compare(0, q, r);\n }\n return (cPQ === Sign.SMALLER && cQR === Sign.SMALLER) || (cPQ === Sign.LARGER && cQR === Sign.LARGER);\n}\n\nfunction compare(index: number, a: Point, b: Point): Sign {\n if (a[index] < b[index]) return Sign.SMALLER;\n if (a[index] > b[index]) return Sign.LARGER;\n return Sign.EQUAL;\n}\n\nexport function orientation(p: Point, q: Point, r: Point) {\n const px = p[0];\n const py = p[1];\n const qx = q[0];\n const qy = q[1];\n const rx = r[0];\n const ry = r[1];\n const pqx = qx - px;\n const pqy = qy - py;\n const prx = rx - px;\n const pry = ry - py;\n const det = determinant(pqx, pqy, prx, pry);\n let maxX = Math.abs(pqx);\n let maxY = Math.abs(pqy);\n const aprX = Math.abs(prx);\n const aprY = Math.abs(pry);\n if (maxX < aprX) maxX = aprX;\n if (maxY < aprY) maxY = aprY;\n if (maxX > maxY) [maxX, maxY] = [maxY, maxX];\n // underflow proection in eps computation?? Math.sqrt(Number.MIN_VALUE, Number.EPSILON)\n if (maxX < 2e-162 && maxX === 0) {\n return Sign.ZERO;\n }\n // overflow protection in det computation\n if (maxY < 1e153) {\n const eps = Number.EPSILON * maxX * maxY;\n if (det > eps) return Sign.POSITIVE;\n if (det < -eps) return Sign.NEGATIVE;\n }\n return Sign.ZERO;\n}\n\nexport function determinant(a00: number, a01: number, a10: number, a11: number) {\n return a00 * a11 - a01 * a10;\n}\n\nexport function hasInexactNegativeOrientation(p: Point, q: Point, r: Point) {\n return determinant(q[0] - p[0], q[1] - p[1], r[0] - p[0], r[1] - p[1]) < 0;\n}\n\nexport function sideOfOrientedCircle(t: Triangle, p: Point, perturb: boolean): Sign {\n if (!t.isInfinite())\n return sideOfOrientedCircleP(t.vertices[0]!.point!, t.vertices[1]!.point!, t.vertices[2]!.point!, p, perturb);\n throw new Error(\"SSS\");\n}\n\nfunction sideOfOrientedCircleP(p0: Point, p1: Point, p2: Point, p: Point, perturb: boolean): Sign {\n const os = getOrientedSide(p0, p1, p2, p);\n if (os !== Sign.ON_ORIENTED_BOUNDARY || !perturb) return os;\n const points = [p0, p1, p2, p];\n points.sort((a, b) => a[0] - b[0] || a[1] - b[1]);\n for (const point of points.reverse()) {\n if (point === p) return Sign.ON_NEGATIVE_SIDE;\n let o = orientation(p0, p1, p);\n if (point === p2 && o !== Sign.COLLINEAR) return o;\n o = orientation(p0, p, p2);\n if (point === p1 && o !== Sign.COLLINEAR) return o;\n o = orientation(p, p1, p2);\n if (point === p0 && o !== Sign.COLLINEAR) return o;\n }\n return Sign.ON_NEGATIVE_SIDE;\n}\n\nexport function xyEqual(p: Point, q: Point) {\n return p[0] === q[0] && p[1] === q[1];\n}\n\nexport function xySmaller(p: Point, q: Point) {\n return p[0] < q[0] || (p[0] === q[0] && p[1] < q[1]);\n}\n\nexport function xyCompare(p: Point, q: Point) {\n if (xySmaller(p, q)) return Sign.SMALLER;\n if (xyEqual(p, q)) return Sign.EQUAL;\n return Sign.LARGER;\n}\n\nfunction getOrientedSide(p: Point, q: Point, r: Point, t: Point): Sign {\n const qpx = q[0] - p[0];\n const qpy = q[1] - p[1];\n const rpx = r[0] - p[0];\n const rpy = r[1] - p[1];\n const tpx = t[0] - p[0];\n const tpy = t[1] - p[1];\n const tqx = t[0] - q[0];\n const tqy = t[1] - q[1];\n const rqx = r[0] - q[0];\n const rqy = r[1] - q[1];\n\n const det = determinant(qpx * tpy - qpy * tpx, tpx * tqx + tpy * tqy, qpx * rpy - qpy * rpx, rpx * rqx + rpy * rqy);\n let maxx = Math.abs(qpx);\n let maxy = Math.abs(qpy);\n const arpx = Math.abs(rpx);\n const arpy = Math.abs(rpy);\n const atqx = Math.abs(tqx);\n const atqy = Math.abs(tqy);\n const atpx = Math.abs(tpx);\n const atpy = Math.abs(tpy);\n const arqx = Math.abs(rqx);\n const arqy = Math.abs(rqy);\n\n if (maxx < arpx) maxx = arpx;\n if (maxx < atpx) maxx = atpx;\n if (maxx < atqx) maxx = atqx;\n if (maxx < arqx) maxx = arqx;\n\n if (maxy < arpy) maxy = arpy;\n if (maxy < atpy) maxy = atpy;\n if (maxy < atqy) maxy = atqy;\n if (maxy < arqy) maxy = arqy;\n\n if (maxx > maxy) [maxx, maxy] = [maxy, maxx];\n\n if (maxx < 1e-73 && maxx === 0) return Sign.ON_ORIENTED_BOUNDARY;\n // sqrt(sqrt(max_double/16\n else if (maxy < 1e76) {\n const eps = Number.EPSILON * maxx * maxy * (maxy * maxy);\n if (det > eps) return Sign.ON_POSITIVE_SIDE;\n if (det < -eps) return Sign.ON_NEGATIVE_SIDE;\n }\n\n return Sign.ZERO;\n}\n\nfunction segSegDoIntersectCrossing(p1: Point, p2: Point, p3: Point, p4: Point): boolean {\n switch (orientation(p1, p2, p3)) {\n case Sign.LEFT_TURN:\n return orientation(p3, p4, p2) !== Sign.RIGHT_TURN;\n case Sign.RIGHT_TURN:\n return orientation(p3, p4, p2) !== Sign.LEFT_TURN;\n case Sign.COLLINEAR:\n return true;\n }\n}\n\nfunction segSegDoIntersectContained(p1: Point, p2: Point, p3: Point, p4: Point): boolean {\n switch (orientation(p1, p2, p3)) {\n case Sign.LEFT_TURN:\n return orientation(p1, p2, p4) !== Sign.LEFT_TURN;\n case Sign.RIGHT_TURN:\n return orientation(p1, p2, p4) !== Sign.RIGHT_TURN;\n case Sign.COLLINEAR:\n return true;\n }\n}\n\nexport function intersection(pa: Point, pb: Point, pc: Point, pd: Point) {\n const i = getIntersectionType(pa, pb, pc, pd);\n switch (i.intersectionType) {\n case IntersectionType.POINT:\n return i.point!;\n case IntersectionType.NO_INTERSECTION:\n return null;\n }\n throw new Error(\"sdfgighowen\");\n}\n\nenum IntersectionType {\n NO_INTERSECTION,\n POINT,\n SEGMENT,\n}\n\nfunction getLine(p0: Point, p1: Point): Line {\n if (p0[0] === p1[0]) return [1, 0, -p0[0]];\n if (p0[1] === p1[1]) return [0, 1, -p0[1]];\n const x = p1[0] - p0[0];\n const y = p1[1] - p0[1];\n return [-y, x, -x * p0[1] + y * p0[0]];\n}\n\nfunction getIntersectionType(pa: Point, pb: Point, pc: Point, pd: Point) {\n if (!doIntersect(pa, pb, pc, pd)) return { intersectionType: IntersectionType.NO_INTERSECTION, point: null };\n const l1 = getLine(pa, pb);\n const l2 = getLine(pc, pd);\n const info = getIntersectionTypeLine(l1, l2);\n switch (info.intersectionType) {\n case IntersectionType.POINT: {\n return info;\n }\n }\n throw new Error(\"gzseuihgpib\");\n}\n\nfunction getIntersectionTypeLine(la: Line, lb: Line) {\n const denom = la[0] * lb[1] - lb[0] * la[1];\n const nom1 = la[1] * lb[2] - lb[1] * la[2];\n const nom2 = lb[0] * la[2] - la[0] * lb[2];\n return {\n intersectionType: IntersectionType.POINT,\n point: [nom1 / denom, nom2 / denom],\n };\n}\n\nfunction doIntersect(A1: Point, A2: Point, B1: Point, B2: Point): boolean {\n if (xySmaller(A1, A2)) {\n if (xySmaller(B1, B2)) {\n if (xySmaller(A2, B1) || xySmaller(B2, A1)) return false;\n } else {\n if (xySmaller(A2, B2) || xySmaller(B1, A1)) return false;\n }\n } else {\n if (xySmaller(B1, B2)) {\n if (xySmaller(A1, B1) || xySmaller(B2, A2)) return false;\n } else {\n if (xySmaller(A1, B2) || xySmaller(B1, A2)) return false;\n }\n }\n if (xySmaller(A1, A2)) {\n if (xySmaller(B1, B2)) {\n switch (xyCompare(A1, B1)) {\n case Sign.SMALLER: {\n switch (xyCompare(A2, B1)) {\n case Sign.SMALLER:\n return false;\n case Sign.EQUAL:\n return true;\n default: {\n switch (xyCompare(A2, B2)) {\n case Sign.SMALLER:\n return segSegDoIntersectCrossing(A1, A2, B1, B2);\n case Sign.EQUAL:\n return true;\n default:\n return segSegDoIntersectContained(A1, A2, B1, B2);\n }\n }\n }\n }\n case Sign.EQUAL:\n return true;\n default:\n switch (xyCompare(B2, A1)) {\n case Sign.SMALLER:\n return false;\n case Sign.EQUAL:\n return true;\n default: {\n switch (xyCompare(B2, A2)) {\n case Sign.SMALLER:\n return segSegDoIntersectCrossing(B1, B2, A1, A2);\n case Sign.EQUAL:\n return true;\n default:\n return segSegDoIntersectContained(B1, B2, A1, A2);\n }\n }\n }\n }\n } else {\n switch (xyCompare(A1, B2)) {\n case Sign.SMALLER: {\n switch (xyCompare(A2, B2)) {\n case Sign.SMALLER:\n return false;\n case Sign.EQUAL:\n return true;\n default: {\n switch (xyCompare(A2, B1)) {\n case Sign.SMALLER:\n return segSegDoIntersectCrossing(A1, A2, B2, B1);\n case Sign.EQUAL:\n return true;\n default:\n return segSegDoIntersectContained(A1, A2, B2, B1);\n }\n }\n }\n }\n case Sign.EQUAL:\n return true;\n default:\n switch (xyCompare(B1, A1)) {\n case Sign.SMALLER:\n return false;\n case Sign.EQUAL:\n return true;\n default: {\n switch (xyCompare(B1, A2)) {\n case Sign.SMALLER:\n return segSegDoIntersectCrossing(B2, B1, A1, A2);\n case Sign.EQUAL:\n return true;\n default:\n return segSegDoIntersectContained(B2, B1, A1, A2);\n }\n }\n }\n }\n }\n } else {\n if (xySmaller(B1, B2)) {\n switch (xyCompare(A2, B1)) {\n case Sign.SMALLER: {\n switch (xyCompare(A1, B1)) {\n case Sign.SMALLER:\n return false;\n case Sign.EQUAL:\n return true;\n default: {\n switch (xyCompare(A1, B2)) {\n case Sign.SMALLER:\n return segSegDoIntersectCrossing(A2, A1, B1, B2);\n case Sign.EQUAL:\n return true;\n default:\n return segSegDoIntersectContained(A2, A1, B1, B2);\n }\n }\n }\n }\n case Sign.EQUAL:\n return true;\n default:\n switch (xyCompare(B2, A2)) {\n case Sign.SMALLER:\n return false;\n case Sign.EQUAL:\n return true;\n default: {\n switch (xyCompare(B2, A1)) {\n case Sign.SMALLER:\n return segSegDoIntersectCrossing(B1, B2, A2, A1);\n case Sign.EQUAL:\n return true;\n default:\n return segSegDoIntersectContained(B1, B2, A2, A1);\n }\n }\n }\n }\n } else {\n switch (xyCompare(A2, B2)) {\n case Sign.SMALLER: {\n switch (xyCompare(A1, B2)) {\n case Sign.SMALLER:\n return false;\n case Sign.EQUAL:\n return true;\n default: {\n switch (xyCompare(A1, B1)) {\n case Sign.SMALLER:\n return segSegDoIntersectCrossing(A2, A1, B2, B1);\n case Sign.EQUAL:\n return true;\n default:\n return segSegDoIntersectContained(A2, A1, B2, B1);\n }\n }\n }\n }\n case Sign.EQUAL:\n return true;\n default:\n switch (xyCompare(B1, A2)) {\n case Sign.SMALLER:\n return false;\n case Sign.EQUAL:\n return true;\n default: {\n switch (xyCompare(B1, A1)) {\n case Sign.SMALLER:\n return segSegDoIntersectCrossing(B2, B1, A2, A1);\n case Sign.EQUAL:\n return true;\n default:\n return segSegDoIntersectContained(B2, B1, A2, A1);\n }\n }\n }\n }\n }\n }\n}\n\nfunction nextUp(x: number) {\n if (x !== x) {\n return x;\n }\n if (x === -1 / 0) {\n return -Number.MAX_VALUE;\n }\n if (x === +1 / 0) {\n return +1 / 0;\n }\n if (x === +Number.MAX_VALUE) {\n return +1 / 0;\n }\n let y = x * (x < 0 ? 1 - Number.EPSILON / 2 : 1 + Number.EPSILON);\n if (y === x) {\n y = Number.MIN_VALUE * Number.EPSILON > 0 ? x + Number.MIN_VALUE * Number.EPSILON : x + Number.MIN_VALUE;\n }\n if (y === +1 / 0) {\n y = +Number.MAX_VALUE;\n }\n const b = x + (y - x) / 2;\n if (x < b && b < y) {\n y = b;\n }\n const c = (y + x) / 2;\n if (x < c && c < y) {\n y = c;\n }\n return y === 0 ? -0 : y;\n}\n\nexport function ulp(x: number) {\n return x < 0 ? nextUp(x) - x : x + nextUp(-x);\n}\n","import mod from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/ts-loader/index.js??ref--12-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./asset_node.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/ts-loader/index.js??ref--12-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./asset_node.vue?vue&type=script&lang=ts&\"","import mod from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./edit_dialog.vue?vue&type=style&index=0&id=23de098e&scoped=true&lang=css&\"; export default mod; export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./edit_dialog.vue?vue&type=style&index=0&id=23de098e&scoped=true&lang=css&\"","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nimport Vue from \"vue\";\nimport Component from \"vue-class-component\";\nimport { Prop } from \"vue-property-decorator\";\n\n@Component\nexport default class Modal extends Vue {\n @Prop(Boolean) visible!: boolean;\n @Prop({ type: Boolean, default: true }) mask!: boolean;\n\n $refs!: {\n container: HTMLElement;\n };\n\n positioned = false;\n offsetX = 0;\n offsetY = 0;\n screenX = 0;\n screenY = 0;\n dragging = false;\n\n // Example of mounted required: opening note\n mounted() {\n this.updatePosition();\n }\n // Example of updated required: opening initiative\n updated() {\n this.updatePosition();\n }\n\n close(event: MouseEvent) {\n this.$emit(\"close\");\n }\n updatePosition() {\n if (!this.positioned) {\n const container = this.$refs.container;\n if (container.offsetWidth === 0 && container.offsetHeight === 0) return;\n this.$refs.container.style.left = (window.innerWidth - container.offsetWidth) / 2 + \"px\";\n this.$refs.container.style.top = (window.innerHeight - container.offsetHeight) / 2 + \"px\";\n this.positioned = true;\n }\n }\n dragStart(event: DragEvent) {\n if (event === null || event.dataTransfer === null) return;\n event.dataTransfer.setData(\"Hack\", \"\");\n // Because the drag event is happening on the header, we have to change the drag image\n // in order to give the impression that the entire modal is dragged.\n event.dataTransfer.setDragImage(this.$refs.container, event.offsetX, event.offsetY);\n this.offsetX = event.offsetX;\n this.offsetY = event.offsetY;\n this.screenX = event.screenX;\n this.screenY = event.screenY;\n this.dragging = true;\n }\n dragEnd(event: DragEvent) {\n this.dragging = false;\n let left = event.clientX - this.offsetX;\n let top = event.clientY - this.offsetY;\n if (event.clientX === 0 && event.clientY === 0 && event.pageX === 0 && event.pageY === 0) {\n left = parseInt(this.$refs.container.style.left!, 10) - (this.screenX - event.screenX);\n top = parseInt(this.$refs.container.style.top!, 10) - (this.screenY - event.screenY);\n }\n if (left < 0) left = 0;\n if (left > window.innerWidth - 100) left = window.innerWidth - 100;\n if (top < 0) top = 0;\n if (top > window.innerHeight - 100) top = window.innerHeight - 100;\n this.$refs.container.style.left = left + \"px\";\n this.$refs.container.style.top = top + \"px\";\n this.$refs.container.style.display = \"block\";\n }\n dragOver(event: DragEvent) {\n if (this.dragging) this.$refs.container.style.display = \"none\";\n }\n}\n","import io from \"socket.io-client\";\n\nimport { Asset } from \"@/core/comm/types\";\nimport { assetStore } from \"./store\";\n\nexport const socket = io(location.protocol + \"//\" + location.host + \"/pa_assetmgmt\", { autoConnect: false });\n\n// export const socket = io.connect(location.protocol + \"//\" + location.host + \"/pa_assetmgmt\");\nsocket.on(\"connect\", () => {\n console.log(\"Connected\");\n});\nsocket.on(\"disconnect\", () => {\n console.log(\"Disconnected\");\n});\nsocket.on(\"redirect\", (destination: string) => {\n console.log(\"redirecting\");\n window.location.href = destination;\n});\nsocket.on(\"Folder.Root.Set\", (root: number) => {\n assetStore.setRoot(root);\n});\nsocket.on(\"Folder.Set\", (folder: Asset) => {\n assetStore.clear();\n if (folder.children) {\n for (const child of folder.children) {\n assetStore.idMap.set(child.id, child);\n if (child.file_hash) {\n assetStore.files.push(child.id);\n } else {\n assetStore.folders.push(child.id);\n }\n }\n }\n});\nsocket.on(\"Folder.Create\", (folder: Asset) => {\n assetStore.folders.push(folder.id);\n assetStore.idMap.set(folder.id, folder);\n});\nsocket.on(\"Asset.Upload.Finish\", (asset: Asset) => {\n assetStore.idMap.set(asset.id, asset);\n assetStore.files.push(asset.id);\n});\n","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nimport Component from \"vue-class-component\";\n\nimport Accordion from \"@/core/components/accordion.vue\";\nimport Tool from \"@/game/ui/tools/tool.vue\";\n\nimport { socket } from \"@/game/api/socket\";\nimport { layerManager } from \"@/game/layers/manager\";\nimport { gameStore } from \"@/game/store\";\n\n@Component({\n components: {\n accordion: Accordion,\n },\n})\nexport default class FilterTool extends Tool {\n name = \"Filter\";\n active = false;\n\n get labels() {\n const cat: { [category: string]: [string, string][] } = {};\n for (const uuid of Object.keys(gameStore.labels)) {\n const label = gameStore.labels[uuid];\n if (!label.category) cat[\"\"].push([label.uuid, label.name]);\n else {\n if (!(label.category in cat)) cat[label.category] = [];\n cat[label.category].push([label.uuid, label.name]);\n cat[label.category].sort((a, b) => a[1].localeCompare(b[1]));\n }\n }\n return cat;\n }\n\n get initalValues() {\n const values: { [category: string]: string[] } = {};\n for (const cat of Object.keys(this.labels)) {\n values[cat] = gameStore.labelFilters.filter(f => this.labels[cat].map(l => l[0]).includes(f));\n }\n return values;\n }\n\n get categories() {\n return Object.keys(this.labels).sort();\n }\n\n isFilter(uuid: string): boolean {\n return gameStore.labelFilters.includes(uuid);\n }\n\n toggleFilter(uuid: string) {\n const i = gameStore.labelFilters.indexOf(uuid);\n if (i >= 0) gameStore.labelFilters.splice(i, 1);\n else gameStore.labelFilters.push(uuid);\n layerManager.invalidate();\n }\n\n toggleUnlabeled() {\n gameStore.toggleUnlabeledFilter();\n layerManager.invalidate();\n }\n\n updateSelection(data: { title: string; selection: string[] }) {\n if (!(data.title in this.labels)) return;\n for (const [uuid, _] of this.labels[data.title]) {\n const idx = gameStore.labelFilters.indexOf(uuid);\n const selected = data.selection.includes(uuid);\n if (idx >= 0 && !selected) {\n gameStore.labelFilters.splice(idx, 1);\n socket.emit(\"Labels.Filter.Remove\", uuid);\n } else if (idx < 0 && selected) {\n gameStore.labelFilters.push(uuid);\n socket.emit(\"Labels.Filter.Add\", uuid);\n }\n }\n layerManager.invalidate();\n }\n}\n","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nimport Vue from \"vue\";\nimport Component from \"vue-class-component\";\n\nimport { Prop } from \"vue-property-decorator\";\nimport { gameStore } from '../../game/store';\n\n@Component\nexport default class Accordion extends Vue {\n @Prop(String) title!: string;\n @Prop({ default: true, type: Boolean }) showArrow!: boolean;\n @Prop({ default: () => []}) items!: [string, string][];\n @Prop({ default: () => []}) initialValues!: string[];\n\n selected: string[] = [];\n\n active = false;\n\n mounted() {\n this.selected = this.initialValues;\n this.updateCategory();\n }\n\n toggleDisplay(event: MouseEvent) {\n this.active = !this.active;\n }\n\n toggleCategory() {\n const overall = this.$refs.overall as HTMLInputElement;\n if (overall.checked) this.selected = this.items.map((i) => i[0]);\n else this.selected = [];\n this.$emit(\"selectionupdate\", {title: this.title, selection: this.selected});\n }\n\n updateCategory() {\n const overall = this.$refs.overall as HTMLInputElement;\n if (this.selected.length === 0) {\n overall.checked = false;\n overall.indeterminate = false;\n } else if(this.selected.length === this.items.length) {\n overall.checked = true;\n overall.indeterminate = false;\n } else {\n overall.checked = false;\n overall.indeterminate = true;\n }\n }\n\n toggleSelection(item: string) {\n const found = this.selected.indexOf(item);\n if (found === -1) this.selected.push(item);\n else this.selected.splice(found, 1);\n this.updateCategory();\n this.$emit(\"selectionupdate\", {title: this.title, selection: this.selected});\n }\n}\n","import mod from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./game.vue?vue&type=style&index=0&lang=css&\"; export default mod; export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./game.vue?vue&type=style&index=0&lang=css&\"","import { GlobalPoint, LocalPoint } from \"@/game/geom\";\nimport { BoundingRect } from \"@/game/shapes/boundingrect\";\nimport { Shape } from \"@/game/shapes/shape\";\nimport { g2lx, g2ly, g2lz, l2g } from \"@/game/units\";\nimport { getFogColour } from \"@/game/utils\";\nimport { ServerMultiLine } from \"../comm/types/shapes\";\n\nexport class MultiLine extends Shape {\n type = \"multiline\";\n _points: GlobalPoint[] = [];\n lineWidth: number;\n constructor(\n startPoint: GlobalPoint,\n points?: GlobalPoint[],\n lineWidth?: number,\n strokeColour?: string,\n uuid?: string,\n ) {\n super(startPoint, \"rgba(0, 0, 0, 0)\", strokeColour || \"#000\", uuid);\n this._points = points || [];\n this.lineWidth = lineWidth || 3;\n }\n\n get refPoint() {\n return this._refPoint;\n }\n set refPoint(point: GlobalPoint) {\n const delta = point.subtract(this._refPoint);\n this._refPoint = point;\n for (let i = 0; i < this._points.length; i++) this._points[i] = this._points[i].add(delta);\n }\n\n asDict() {\n return Object.assign(this.getBaseDict(), {\n line_width: this.lineWidth,\n points: this._points.map(p => ({ x: p.x, y: p.y })),\n });\n }\n fromDict(data: ServerMultiLine) {\n super.fromDict(data);\n this._points = data.points.map(p => new GlobalPoint(p.x, p.y));\n }\n get points() {\n return this._points.map(point => [point.x, point.y]);\n }\n getBoundingBox(): BoundingRect {\n let minx: number = this.refPoint.x;\n let maxx: number = this.refPoint.x;\n let miny: number = this.refPoint.y;\n let maxy: number = this.refPoint.y;\n for (const p of this._points) {\n if (p.x < minx) minx = p.x;\n if (p.x > maxx) maxx = p.x;\n if (p.y < miny) miny = p.y;\n if (p.y > maxy) maxy = p.y;\n }\n return new BoundingRect(new GlobalPoint(minx, miny), maxx - minx, maxy - miny);\n }\n draw(ctx: CanvasRenderingContext2D) {\n super.draw(ctx);\n ctx.beginPath();\n ctx.lineCap = \"round\";\n ctx.lineJoin = \"round\";\n ctx.moveTo(g2lx(this.refPoint.x), g2ly(this.refPoint.y));\n for (const p of this._points) ctx.lineTo(g2lx(p.x), g2ly(p.y));\n if (this.strokeColour === \"fog\") ctx.strokeStyle = getFogColour();\n else ctx.strokeStyle = this.strokeColour;\n ctx.lineWidth = g2lz(this.lineWidth);\n ctx.stroke();\n }\n contains(point: GlobalPoint): boolean {\n return this.getBoundingBox().contains(point);\n }\n\n center(): GlobalPoint;\n center(centerPoint: GlobalPoint): void;\n center(centerPoint?: GlobalPoint): GlobalPoint | void {\n return this.getBoundingBox().center();\n }\n visibleInCanvas(canvas: HTMLCanvasElement): boolean {\n return this.getBoundingBox().visibleInCanvas(canvas);\n } // TODO\n snapToGrid(): void {}\n resizeToGrid(): void {}\n resize(resizePoint: number, point: LocalPoint): void {\n if (resizePoint === 0) this._refPoint = l2g(point);\n else this._points[resizePoint - 1] = l2g(point);\n }\n}\n","import { render, staticRenderFns } from \"./draw.vue?vue&type=template&id=639cd890&scoped=true&\"\nimport script from \"./draw.vue?vue&type=script&lang=ts&\"\nexport * from \"./draw.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./draw.vue?vue&type=style&index=0&id=639cd890&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"639cd890\",\n null\n \n)\n\ncomponent.options.__file = \"draw.vue\"\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('modal',{attrs:{\"visible\":_vm.visible,\"mask\":false},on:{\"close\":function($event){_vm.visible = false}},scopedSlots:_vm._u([{key:\"header\",fn:function(m){return _c('div',{staticClass:\"modal-header\",attrs:{\"draggable\":\"true\"},on:{\"dragstart\":m.dragStart,\"dragend\":m.dragEnd}},[_c('div',[_vm._v(\"Initiative\")]),_c('div',{staticClass:\"header-close\",on:{\"click\":function($event){_vm.visible = false}}},[_c('i',{staticClass:\"far fa-window-close\"})])])}}])},[_c('div',{staticClass:\"modal-body\"},[_c('draggable',{attrs:{\"id\":\"initiative-list\",\"options\":{setData: _vm.fakeSetData, disabled: !_vm.$store.state.game.IS_DM}},on:{\"change\":_vm.updateOrder},model:{value:(_vm.data),callback:function ($$v) {_vm.data=$$v},expression:\"data\"}},[_vm._l((_vm.data),function(actor){return [_c('div',{key:actor.uuid,staticStyle:{\"display\":\"flex\",\"flex-direction\":\"column\",\"align-items\":\"flex-end\"}},[_c('div',{staticClass:\"initiative-actor\",class:{'initiative-selected': _vm.currentActor === actor.uuid},style:({'cursor': _vm.$store.state.game.IS_DM && 'move'}),on:{\"mouseenter\":function($event){_vm.toggleHighlight(actor, true)},\"mouseleave\":function($event){_vm.toggleHighlight(actor, false)}}},[(actor.has_img)?[_c('img',{attrs:{\"src\":actor.source,\"width\":\"30px\",\"height\":\"30px\"}})]:[_c('span',{staticStyle:{\"width\":\"auto\"}},[_vm._v(_vm._s(actor.source))])],_c('input',{directives:[{name:\"model\",rawName:\"v-model.lazy.number\",value:(actor.initiative),expression:\"actor.initiative\",modifiers:{\"lazy\":true,\"number\":true}}],class:{'notAllowed': !_vm.owns(actor)},attrs:{\"type\":\"text\",\"placeholder\":\"value\",\"disabled\":!_vm.owns(actor)},domProps:{\"value\":(actor.initiative)},on:{\"change\":[function($event){_vm.$set(actor, \"initiative\", _vm._n($event.target.value))},function($event){_vm.syncInitiative(actor)}],\"blur\":function($event){_vm.$forceUpdate()}}}),_c('div',{staticClass:\"initiative-effects-icon\",class:{'notAllowed': !_vm.owns(actor)},staticStyle:{\"opacity\":\"0.6\"},on:{\"click\":function($event){_vm.createEffect(actor, _vm.getDefaultEffect(), true)}}},[_c('i',{staticClass:\"fas fa-stopwatch\"}),(actor.effects)?[_vm._v(_vm._s(actor.effects.length))]:[_vm._v(\"0\")]],2),_c('div',{class:{'notAllowed': !_vm.owns(actor)},style:({'opacity': actor.visible ? '1.0' : '0.3'}),on:{\"click\":function($event){_vm.toggleOption(actor, 'visible')}}},[_c('i',{staticClass:\"fas fa-eye\"})]),_c('div',{class:{'notAllowed': !_vm.owns(actor)},style:({'opacity': actor.group ? '1.0' : '0.3'}),on:{\"click\":function($event){_vm.toggleOption(actor, 'group')}}},[_c('i',{staticClass:\"fas fa-users\"})]),_c('div',{class:{'notAllowed': !_vm.owns(actor)},style:({'opacity': _vm.owns(actor) ? '1.0' : '0.3'}),on:{\"click\":function($event){_vm.removeInitiative(actor.uuid, true, true)}}},[_c('i',{staticClass:\"fas fa-trash-alt\"})])],2),(actor.effects)?_c('div',{staticClass:\"initiative-effect\"},_vm._l((actor.effects),function(effect){return _c('div',{key:effect.uuid},[_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(effect.name),expression:\"effect.name\"}],attrs:{\"type\":\"text\",\"size\":effect.name.length || 1},domProps:{\"value\":(effect.name)},on:{\"change\":function($event){_vm.updateEffect(actor.uuid, effect, true)},\"input\":function($event){if($event.target.composing){ return; }_vm.$set(effect, \"name\", $event.target.value)}}}),_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(effect.turns),expression:\"effect.turns\"}],attrs:{\"type\":\"text\",\"size\":effect.turns.toString().length || 1},domProps:{\"value\":(effect.turns)},on:{\"change\":function($event){_vm.updateEffect(actor.uuid, effect, true)},\"input\":function($event){if($event.target.composing){ return; }_vm.$set(effect, \"turns\", $event.target.value)}}})])})):_vm._e()])]})],2),_c('div',{attrs:{\"id\":\"initiative-bar\"}},[_c('div',{attrs:{\"id\":\"initiative-round\"}},[_vm._v(\"Round \"+_vm._s(_vm.roundCounter))]),_c('div',{staticStyle:{\"display\":\"flex\"}}),_c('div',{staticClass:\"initiative-bar-button\",class:{'notAllowed': !_vm.$store.state.game.IS_DM},on:{\"click\":function($event){_vm.setRound(0, true); _vm.updateTurn(_vm.data[0].uuid, true)}}},[_c('i',{staticClass:\"fas fa-sync-alt\"})]),_c('div',{staticClass:\"initiative-bar-button\",class:{'notAllowed': !_vm.$store.state.game.IS_DM},on:{\"click\":_vm.nextTurn}},[_c('i',{staticClass:\"fas fa-chevron-right\"})])])],1)])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","export * from \"-!cache-loader?{\\\"cacheDirectory\\\":\\\"node_modules/.cache/vue-loader\\\",\\\"cacheIdentifier\\\":\\\"74f43d04-vue-loader-template\\\"}!../../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./initiative.vue?vue&type=template&id=af4dc61a&scoped=true&\"","import tinycolor from \"tinycolor2\";\n\nimport { LocalPoint } from \"@/game/geom\";\nimport { gameStore } from \"@/game/store\";\n\nexport function getMouse(e: MouseEvent): LocalPoint {\n return new LocalPoint(e.pageX, e.pageY);\n}\n\nexport function getFogColour(opposite: boolean = false): string {\n const tc = tinycolor(gameStore.fowColour);\n if (gameStore.IS_DM) tc.setAlpha(opposite ? 1 : gameStore.fowOpacity);\n else tc.setAlpha(1);\n return tc.toRgbString();\n}\n\nexport function zoomValue(display: number) {\n // Powercurve 0.2/3/10\n // Based on https://stackoverflow.com/a/17102320\n return 1 / (-5 / 3 + (28 / 15) * Math.exp(1.83 * display));\n}\n\nexport function zoomDisplay(value: number) {\n return Math.log((1 / value + 5 / 3) * (15 / 28)) / 1.83;\n}\n","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nimport * as tinycolor from \"tinycolor2\";\nimport Vue from \"vue\";\nimport Component from \"vue-class-component\";\n\nimport { mapState } from \"vuex\";\n\nimport ColorPicker from \"@/core/components/colorpicker.vue\";\nimport Modal from \"@/core/components/modals/modal.vue\";\n\nimport { calcFontScale } from \"@/core/utils\";\nimport { LocalPoint } from \"@/game/geom\";\nimport { layerManager } from \"@/game/layers/manager\";\nimport { CircularToken } from \"@/game/shapes/circulartoken\";\nimport { gameStore } from \"@/game/store\";\nimport { getUnitDistance, l2g } from \"@/game/units\";\nimport { Watch } from \"vue-property-decorator\";\n\n@Component({\n components: {\n Modal,\n \"color-picker\": ColorPicker,\n },\n computed: {\n ...mapState(\"game\", [\"unitSize\"]),\n },\n})\nexport default class CreateTokenModal extends Vue {\n x = 0;\n y = 0;\n visible = false;\n text = \"X\";\n fillColour = \"rgba(255, 255, 255, 1)\";\n borderColour = \"rgba(0, 0, 0, 1)\";\n\n mounted() {\n this.updatePreview();\n }\n\n @Watch(\"text\")\n onTextChange(newValue: string, oldValue: string) {\n this.updatePreview();\n }\n @Watch(\"fillColour\")\n onFillChange(newValue: string, oldValue: string) {\n this.updatePreview();\n }\n @Watch(\"borderColour\")\n onBorderChange(newValue: string, oldValue: string) {\n this.updatePreview();\n }\n\n open(x: number, y: number) {\n this.visible = true;\n this.x = x;\n this.y = y;\n }\n submit() {\n const layer = layerManager.getLayer();\n if (layer === undefined) return;\n const token = new CircularToken(\n l2g(new LocalPoint(this.x, this.y)),\n getUnitDistance(gameStore.unitSize / 2),\n this.text,\n \"10px serif\",\n this.fillColour,\n this.borderColour,\n );\n token.addOwner(gameStore.username);\n layer.addShape(token, true);\n layer.invalidate(false);\n this.visible = false;\n }\n updatePreview() {\n const ctx = (this.$refs.canvas).getContext(\"2d\")!;\n ctx.clearRect(0, 0, ctx.canvas.width, ctx.canvas.height);\n ctx.beginPath();\n const dest = { x: ctx.canvas.width / 2, y: ctx.canvas.height / 2 };\n const r = Math.min(dest.x, dest.y) * 0.9;\n\n ctx.fillStyle = this.fillColour;\n\n ctx.arc(dest.x, dest.y, r, 0, 2 * Math.PI);\n ctx.fill();\n if (this.borderColour !== \"rgba(0, 0, 0, 0)\") {\n ctx.beginPath();\n ctx.lineWidth = 5;\n ctx.strokeStyle = this.borderColour;\n ctx.arc(dest.x, dest.y, r, 0, 2 * Math.PI);\n ctx.stroke();\n }\n ctx.save();\n ctx.textAlign = \"center\";\n ctx.textBaseline = \"middle\";\n const xs = calcFontScale(ctx, this.text, r, r);\n const ys = 0;\n ctx.transform(xs, ys, -ys, xs, dest.x, dest.y);\n ctx.fillStyle = tinycolor.mostReadable(this.fillColour, [\"#000\", \"#fff\"]).toHexString();\n ctx.fillText(this.text, 0, 0);\n ctx.restore();\n }\n}\n","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nimport Vue from \"vue\";\nimport Component from \"vue-class-component\";\n\nimport ConfirmDialog from \"@/core/components/modals/confirm.vue\";\nimport Modal from \"@/core/components/modals/modal.vue\";\n\nimport { getRef } from \"@/core/utils\";\nimport { Note } from \"@/game/comm/types/general\";\nimport { gameStore } from \"@/game/store\";\n\n@Component({\n components: {\n Modal,\n },\n})\nexport default class NoteDialog extends Vue {\n visible = false;\n note: Note | null = null;\n\n open(note: Note) {\n this.visible = true;\n this.note = note;\n }\n calcHeight() {\n if (this.$refs.textarea) {\n const el = this.$refs.textarea;\n el.style.height = \"auto\";\n el.style.height = el.scrollHeight + \"px\";\n // Using the return value without the above did not achieve what I want, so hey /shrug\n return el.scrollHeight + \"px\";\n }\n return \"100px\";\n }\n updateNote() {\n if (this.note) gameStore.updateNote({ note: this.note, sync: true });\n }\n removeNote() {\n getRef(\"confirm\")\n .open(\"Are you sure you wish to remove this?\")\n .then(\n (result: boolean) => {\n if (result && this.note) {\n gameStore.removeNote({ note: this.note, sync: true });\n this.visible = false;\n }\n },\n () => {},\n );\n }\n}\n","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nimport Component from \"vue-class-component\";\n\nimport { Watch } from \"vue-property-decorator\";\n\nimport ColorPicker from \"@/core/components/colorpicker.vue\";\nimport Tool from \"@/game/ui/tools/tool.vue\";\n\nimport { socket } from \"@/game/api/socket\";\nimport { GlobalPoint } from \"@/game/geom\";\nimport { layerManager } from \"@/game/layers/manager\";\nimport { Circle } from \"@/game/shapes/circle\";\nimport { Line } from \"@/game/shapes/line\";\nimport { MultiLine } from \"@/game/shapes/multiline\";\nimport { Polygon } from \"@/game/shapes/polygon\";\nimport { Rect } from \"@/game/shapes/rect\";\nimport { Shape } from \"@/game/shapes/shape\";\nimport { gameStore } from \"@/game/store\";\nimport { getUnitDistance, l2g } from \"@/game/units\";\nimport { getMouse } from \"@/game/utils\";\n\n@Component({\n components: {\n \"color-picker\": ColorPicker,\n },\n})\nexport default class DrawTool extends Tool {\n name = \"Draw\";\n active = false;\n\n startPoint: GlobalPoint | null = null;\n shape: Shape | null = null;\n brushHelper: Circle | null = null;\n ruler: Line | null = null;\n\n fillColour = \"rgba(0, 0, 0, 1)\";\n borderColour = \"rgba(255, 255, 255, 0)\";\n\n shapeSelect = \"square\";\n shapes = [\"square\", \"circle\", \"draw-polygon\", \"paint-brush\"];\n modeSelect = \"normal\";\n modes = [\"normal\", \"reveal\", \"hide\"];\n\n brushSize = getUnitDistance(gameStore.unitSize);\n\n get helperSize(): number {\n if (this.shapeSelect === \"paint-brush\") return this.brushSize / 2;\n return getUnitDistance(this.unitSize) / 8;\n }\n get IS_DM(): boolean {\n return gameStore.IS_DM;\n }\n get unitSize(): number {\n return gameStore.unitSize;\n }\n get useGrid(): boolean {\n return gameStore.useGrid;\n }\n\n @Watch(\"fillColour\")\n onFillChange() {\n if (this.brushHelper) this.brushHelper.fillColour = this.fillColour;\n }\n\n @Watch(\"modeSelect\")\n onModeUpdate(newValue: string, oldValue: string) {\n this.onModeChange(newValue, oldValue);\n }\n\n setupBrush() {\n if (this.brushHelper === null) return;\n if (this.modeSelect === \"reveal\" || this.modeSelect === \"hide\") {\n this.brushHelper.options.set(\"preFogShape\", true);\n this.brushHelper.options.set(\"skipDraw\", true);\n this.brushHelper.fillColour = \"rgba(0, 0, 0, 1)\";\n\n if (this.modeSelect === \"reveal\") this.brushHelper.globalCompositeOperation = \"source-over\";\n else if (this.modeSelect === \"hide\") this.brushHelper.globalCompositeOperation = \"destination-out\";\n } else {\n this.brushHelper.options.delete(\"preFogShape\");\n this.brushHelper.options.delete(\"skipDraw\");\n this.brushHelper.globalCompositeOperation = \"source-over\";\n this.brushHelper.fillColour = this.fillColour;\n }\n }\n onModeChange(newValue: string, oldValue: string) {\n if (this.brushHelper === null) return;\n\n const fowLayer = layerManager.getLayer(\"fow\");\n const normalLayer = layerManager.getLayer();\n if (fowLayer === undefined || normalLayer === undefined) return;\n\n this.setupBrush();\n\n if (newValue !== \"normal\" && oldValue === \"normal\") {\n normalLayer.removeShape(this.brushHelper, false);\n fowLayer.addShape(this.brushHelper, false);\n } else if (newValue === \"normal\" && oldValue !== \"normal\") {\n normalLayer.addShape(this.brushHelper, false);\n fowLayer.removeShape(this.brushHelper, false);\n }\n }\n getLayer() {\n if (this.modeSelect === \"normal\") return layerManager.getLayer();\n return layerManager.getLayer(\"fow\");\n }\n onMouseDown(event: MouseEvent) {\n const layer = this.getLayer();\n if (layer === undefined) {\n console.log(\"No active layer!\");\n return;\n }\n if (!this.active) {\n this.startPoint = l2g(getMouse(event));\n this.active = true;\n switch (this.shapeSelect) {\n case \"square\": {\n this.shape = new Rect(this.startPoint.clone(), 0, 0, this.fillColour, this.borderColour);\n break;\n }\n case \"circle\": {\n this.shape = new Circle(\n this.startPoint.clone(),\n this.helperSize,\n this.fillColour,\n this.borderColour,\n );\n break;\n }\n case \"paint-brush\": {\n this.shape = new MultiLine(this.startPoint.clone(), [], this.brushSize);\n this.shape.fillColour = this.fillColour;\n break;\n }\n case \"draw-polygon\": {\n this.shape = new Polygon(this.startPoint.clone(), [], this.fillColour, this.borderColour);\n break;\n }\n default:\n return;\n }\n\n if (this.modeSelect !== \"normal\") {\n this.shape.options.set(\"preFogShape\", true);\n this.shape.options.set(\"skipDraw\", true);\n this.shape.fillColour = \"rgba(0, 0, 0, 1)\";\n }\n if (this.modeSelect === \"reveal\") this.shape.globalCompositeOperation = \"source-over\";\n else if (this.modeSelect === \"hide\") this.shape.globalCompositeOperation = \"destination-out\";\n\n this.shape.addOwner(gameStore.username);\n if (layer.name === \"fow\" && this.modeSelect === \"normal\") {\n this.shape.visionObstruction = true;\n this.shape.movementObstruction = true;\n }\n layer.addShape(this.shape, true, false, false);\n\n // Push brushhelper to back\n this.pushBrushBack();\n } else if (this.shape !== null && this.shape instanceof Polygon) {\n // For polygon draw\n this.shape._vertices.push(l2g(getMouse(event)));\n }\n if (this.shape !== null && this.shape instanceof Polygon) {\n const lastPoint = l2g(getMouse(event));\n if (this.ruler === null) {\n this.ruler = new Line(lastPoint, lastPoint, 3, \"black\");\n layer.addShape(this.ruler, false);\n } else {\n this.ruler.refPoint = lastPoint;\n this.ruler.endPoint = lastPoint;\n }\n if (this.shape.visionObstruction) gameStore.recalculateVision(true);\n layer.invalidate(false);\n socket.emit(\"Shape.Update\", { shape: this.shape!.asDict(), redraw: true, temporary: true });\n }\n }\n onMouseMove(event: MouseEvent) {\n const endPoint = l2g(getMouse(event));\n const layer = this.getLayer();\n if (layer === undefined) {\n console.log(\"No active layer!\");\n return;\n }\n\n if (this.brushHelper !== null) {\n this.brushHelper.r = this.helperSize;\n this.brushHelper.refPoint = endPoint;\n if (!this.active) layer.invalidate(false);\n }\n\n if (!this.active || this.startPoint === null || this.shape === null) return;\n\n switch (this.shapeSelect) {\n case \"square\": {\n (this.shape).w = Math.abs(endPoint.x - this.startPoint.x);\n (this.shape).h = Math.abs(endPoint.y - this.startPoint.y);\n this.shape.refPoint = new GlobalPoint(\n Math.min(this.startPoint.x, endPoint.x),\n Math.min(this.startPoint.y, endPoint.y),\n );\n break;\n }\n case \"circle\": {\n (this.shape).r = endPoint.subtract(this.startPoint).length();\n break;\n }\n case \"paint-brush\": {\n (this.shape)._points.push(endPoint);\n break;\n }\n case \"draw-polygon\": {\n this.ruler!.endPoint = endPoint;\n break;\n }\n }\n\n if (!(this.shape instanceof Polygon)) {\n socket.emit(\"Shape.Update\", { shape: this.shape!.asDict(), redraw: true, temporary: true });\n if (this.shape.visionObstruction) gameStore.recalculateVision(true);\n }\n layer.invalidate(false);\n }\n onMouseUp(event: MouseEvent) {\n if (!this.active || this.shape === null || this.shape instanceof Polygon) return;\n if (!event.altKey && this.useGrid) {\n this.shape.resizeToGrid();\n }\n this.finaliseShape();\n }\n onContextMenu(event: MouseEvent) {\n if (!this.active || this.shape === null || !(this.shape instanceof Polygon)) return;\n const layer = this.getLayer();\n if (layer === undefined) {\n console.log(\"No active layer!\");\n return;\n }\n layer.removeShape(this.ruler!, false);\n this.ruler = null;\n this.finaliseShape();\n }\n\n private finaliseShape() {\n if (this.shape === null) return;\n if (this.shape.visionObstruction) gameStore.recalculateVision();\n if (this.shape.movementObstruction) gameStore.recalculateMovement();\n socket.emit(\"Shape.Update\", { shape: this.shape!.asDict(), redraw: true, temporary: false });\n this.active = false;\n }\n\n onSelect() {\n const layer = this.getLayer();\n if (layer === undefined) return;\n this.brushHelper = new Circle(new GlobalPoint(-1000, -1000), this.brushSize / 2, this.fillColour);\n this.setupBrush();\n layer.addShape(this.brushHelper, false); // during mode change the shape is already added\n }\n onDeselect() {\n const layer = this.getLayer();\n if (this.brushHelper !== null && layer !== undefined) layer.removeShape(this.brushHelper, false);\n if (this.active && layer !== undefined && this.shape !== null) {\n layer.removeShape(this.shape, true, false);\n this.shape = null;\n this.active = false;\n layer.invalidate(false);\n }\n }\n\n private pushBrushBack() {\n const layer = this.getLayer();\n if (layer === undefined) {\n console.log(\"No active layer!\");\n return;\n }\n if (this.brushHelper !== null) layer.removeShape(this.brushHelper, false);\n this.brushHelper = new Circle(new GlobalPoint(-1000, -1000), this.brushSize / 2, this.fillColour);\n this.setupBrush();\n layer.addShape(this.brushHelper, false); // during mode change the shape is already added\n }\n}\n","import { GlobalPoint, LocalPoint } from \"@/game/geom\";\nimport { BoundingRect } from \"@/game/shapes/boundingrect\";\nimport { Shape } from \"@/game/shapes/shape\";\nimport { g2lx, g2ly, l2g } from \"@/game/units\";\n\nexport class Line extends Shape {\n type = \"line\";\n endPoint: GlobalPoint;\n lineWidth: number;\n constructor(\n startPoint: GlobalPoint,\n endPoint: GlobalPoint,\n lineWidth?: number,\n strokeColour?: string,\n uuid?: string,\n ) {\n super(startPoint, \"rgba(0, 0, 0, 0)\", strokeColour || \"#000\", uuid);\n this.endPoint = endPoint;\n this.lineWidth = lineWidth === undefined ? 1 : lineWidth;\n }\n asDict() {\n return Object.assign(this.getBaseDict(), {\n x2: this.endPoint.x,\n y2: this.endPoint.y,\n line_width: this.lineWidth,\n });\n }\n get points() {\n return [[this.refPoint.x, this.refPoint.y], [this.endPoint.x, this.endPoint.y]];\n }\n getBoundingBox(): BoundingRect {\n return new BoundingRect(\n new GlobalPoint(Math.min(this.refPoint.x, this.endPoint.x), Math.min(this.refPoint.y, this.endPoint.y)),\n Math.abs(this.refPoint.x - this.endPoint.x),\n Math.abs(this.refPoint.y - this.endPoint.y),\n );\n }\n draw(ctx: CanvasRenderingContext2D) {\n super.draw(ctx);\n ctx.strokeStyle = this.strokeColour;\n ctx.beginPath();\n ctx.moveTo(g2lx(this.refPoint.x), g2ly(this.refPoint.y));\n ctx.lineTo(g2lx(this.endPoint.x), g2ly(this.endPoint.y));\n ctx.lineWidth = this.lineWidth;\n ctx.stroke();\n }\n contains(point: GlobalPoint): boolean {\n return false; // TODO\n }\n\n center(): GlobalPoint;\n center(centerPoint: GlobalPoint): void;\n center(centerPoint?: GlobalPoint): GlobalPoint | void {} // TODO\n visibleInCanvas(canvas: HTMLCanvasElement): boolean {\n return this.getBoundingBox().visibleInCanvas(canvas);\n } // TODO\n snapToGrid(): void {}\n resizeToGrid(): void {}\n resize(resizePoint: number, point: LocalPoint): void {\n if (resizePoint === 0) this.refPoint = l2g(point);\n else this.endPoint = l2g(point);\n }\n}\n","// import \"./class-component-hooks\";\n\nimport axios, { AxiosResponse } from \"axios\";\nimport Vue from \"vue\";\nimport Router from \"vue-router\";\n\nVue.use(Router);\n\nimport AssetManager from \"@/assetManager/manager.vue\";\nimport Login from \"@/auth/login.vue\";\nimport Logout from \"@/auth/logout\";\nimport LoadComponent from \"@/core/components/load.vue\";\nimport Dashboard from \"@/dashboard/main.vue\";\nimport Game from \"@/game/game.vue\";\nimport Invitation from \"@/invitation/invitation\";\n\nimport { coreStore } from \"@/core/store\";\n// import { AssetManager } from \"./assetManager/assets\";\n// const AssetManager = () => import(\"./assetManager/assets\").then(m => m.AssetManager);\n\nexport const router = new Router({\n mode: \"history\",\n base: process.env.BASE_URL,\n routes: [\n {\n path: \"/\",\n redirect: \"/dashboard\",\n },\n {\n path: \"/_load\",\n name: \"load\",\n component: LoadComponent,\n },\n {\n path: \"/assets\",\n component: AssetManager,\n meta: {\n auth: true,\n },\n },\n {\n path: \"/auth\",\n component: { template: \"\" },\n children: [{ path: \"login\", component: Login }, { path: \"logout\", component: Logout }],\n },\n {\n path: \"/invite/:code\",\n component: Invitation,\n meta: {\n auth: true,\n },\n },\n {\n path: \"/dashboard\",\n component: Dashboard,\n meta: {\n auth: true,\n },\n },\n {\n path: \"/game/:creator/:room\",\n component: Game,\n meta: {\n auth: true,\n },\n },\n ],\n});\n\nrouter.beforeEach((to, from, next) => {\n if (!coreStore.initialized && to.path !== \"/_load\") {\n next({ path: \"/_load\" });\n axios\n .get(\"/api/auth\")\n .then((response: AxiosResponse) => {\n if (response.data.auth) {\n coreStore.setAuthenticated(true);\n coreStore.setUsername(response.data.username);\n }\n coreStore.setInitialized(true);\n router.push(to.path);\n })\n .catch(() => {\n console.error(\"Authentication check could not be fulfilled.\");\n });\n } else if (to.matched.some(record => record.meta.auth) && !coreStore.authenticated) {\n next({ path: \"/auth/login\", query: { redirect: to.path } });\n } else {\n next();\n }\n});\n","\n\n\nimport Vue from \"vue\";\nimport Component from \"vue-class-component\";\n\n@Component\nexport default class Tool extends Vue {\n name = \"\";\n selected = false;\n active = false;\n get detailRight(): string {\n const rect = (this.$parent.$refs[this.name + \"-selector\"])[0].getBoundingClientRect();\n const mid = rect.left + rect.width / 2;\n\n return `${window.innerWidth - Math.min(window.innerWidth - 25, mid + 75)}px`;\n }\n get detailArrow(): string {\n const rect = (this.$parent.$refs[this.name + \"-selector\"])[0].getBoundingClientRect();\n const mid = rect.left + rect.width / 2;\n const right = Math.min(window.innerWidth - 25, mid + 75);\n return `${right - mid - 14}px`; // border width\n }\n created() {\n this.$parent.$on(\"mousedown\", (event: MouseEvent, tool: string) => {\n if (tool === this.name) this.onMouseDown(event);\n });\n this.$parent.$on(\"mouseup\", (event: MouseEvent, tool: string) => {\n if (tool === this.name) this.onMouseUp(event);\n });\n this.$parent.$on(\"mousemove\", (event: MouseEvent, tool: string) => {\n if (tool === this.name) this.onMouseMove(event);\n });\n this.$parent.$on(\"contextmenu\", (event: MouseEvent, tool: string) => {\n if (tool === this.name) this.onContextMenu(event);\n });\n this.$parent.$on(\"tools-select-change\", (newValue: string, oldValue: string) => {\n if (oldValue === this.name) {\n this.selected = false;\n this.onDeselect();\n } else if (newValue === this.name) {\n this.selected = true;\n this.onSelect();\n }\n });\n }\n onSelect() {}\n onDeselect() {}\n onMouseDown(event: MouseEvent) {}\n onMouseUp(event: MouseEvent) {}\n onMouseMove(event: MouseEvent) {}\n onContextMenu(event: MouseEvent) {}\n}\n","import { render, staticRenderFns } from \"./tools.vue?vue&type=template&id=cf33581e&scoped=true&\"\nimport script from \"./tools.vue?vue&type=script&lang=ts&\"\nexport * from \"./tools.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./tools.vue?vue&type=style&index=0&id=cf33581e&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"cf33581e\",\n null\n \n)\n\ncomponent.options.__file = \"tools.vue\"\nexport default component.exports","import mod from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/ts-loader/index.js??ref--12-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./tool.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/ts-loader/index.js??ref--12-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./tool.vue?vue&type=script&lang=ts&\"","import { InitiativeData } from \"@/game/comm/types/general\";\nimport { ServerAsset } from \"@/game/comm/types/shapes\";\nimport { GlobalPoint } from \"@/game/geom\";\nimport { BaseRect } from \"@/game/shapes/baserect\";\nimport { gameStore } from \"@/game/store\";\nimport { g2lx, g2ly, g2lz } from \"@/game/units\";\n\nexport class Asset extends BaseRect {\n type = \"assetrect\";\n img: HTMLImageElement;\n src: string = \"\";\n constructor(img: HTMLImageElement, topleft: GlobalPoint, w: number, h: number, uuid?: string) {\n super(topleft, w, h, undefined, undefined, uuid);\n this.img = img;\n }\n asDict() {\n return Object.assign(this.getBaseDict(), {\n src: this.src,\n });\n }\n fromDict(data: ServerAsset) {\n super.fromDict(data);\n this.src = data.src;\n }\n draw(ctx: CanvasRenderingContext2D) {\n super.draw(ctx);\n try {\n ctx.drawImage(this.img, g2lx(this.refPoint.x), g2ly(this.refPoint.y), g2lz(this.w), g2lz(this.h));\n } catch (error) {\n console.warn(`Shape ${this.uuid} could not load the image ${this.src}`);\n }\n }\n getInitiativeRepr(): InitiativeData {\n return {\n uuid: this.uuid,\n visible: !gameStore.IS_DM,\n group: false,\n source: this.src,\n has_img: true,\n effects: [],\n index: Infinity,\n };\n }\n}\n","import {\n BoundingBox,\n EdgeCirculator,\n FaceCirculator,\n LineFaceCirculator,\n LocateType,\n Point,\n Sign,\n TDS,\n Triangle,\n Vertex,\n} from \"./tds\";\nimport {\n ccw,\n collinearBetween,\n cw,\n edgeInfo,\n hasInexactNegativeOrientation,\n intersection,\n orientation,\n sideOfOrientedCircle,\n xyEqual,\n} from \"./triag\";\n\nexport type Edge = [Triangle, number];\n\nexport class CDT {\n tds: TDS;\n constructor() {\n this.tds = new TDS();\n }\n insertConstraint(a: Point, b: Point) {\n const va = this.insert(a);\n const vb = this.insert(b);\n if (va !== vb) this.insertConstraintV(va, vb);\n }\n\n insertConstraintV(va: Vertex, vb: Vertex) {\n const stack = [[va, vb]];\n while (stack.length > 0) {\n const v = stack.pop()!;\n const info = edgeInfo(v[0], v[1]);\n if (info.includes) {\n this.markConstraint(info.fr!, info.i!);\n if (info.vi! !== v[1]) {\n stack.push([info.vi!, v[1]]);\n }\n continue;\n }\n const intersectionInfo = this.findIntersectedFaces(v[0], v[1]);\n if (intersectionInfo.found) {\n if (intersectionInfo.vi !== v[0] && intersectionInfo.vi !== v[1]) {\n stack.push([v[0], intersectionInfo.vi]);\n stack.push([intersectionInfo.vi, v[1]]);\n } else {\n stack.push(v);\n }\n continue;\n }\n this.triangulateHole(intersectionInfo.intersectedFaces, intersectionInfo.listAB, intersectionInfo.listBA);\n if (intersectionInfo.vi !== v[1]) {\n stack.push([intersectionInfo.vi, v[1]]);\n }\n }\n }\n\n triangulateHole(intersectedFaces: Triangle[], listAB: Edge[], listBA: Edge[]) {\n const edges: Edge[] = [];\n this.triangulateHole2(intersectedFaces, listAB, listBA, edges);\n this.propagatingFlipE(edges);\n }\n\n triangulateHole2(intersectedFaces: Triangle[], listAB: Edge[], listBA: Edge[], edges: Edge[]) {\n if (listAB.length > 0) {\n this.triangulateHalfHole(listAB, edges);\n this.triangulateHalfHole(listBA, edges);\n const fl = listAB[0][0];\n const fr = listBA[0][0];\n fl.neighbours[2] = fr;\n fr.neighbours[2] = fl;\n fl.constraints[2] = true;\n fr.constraints[2] = true;\n\n while (intersectedFaces.length > 0) {\n this.tds.deleteTriangle(intersectedFaces.shift()!);\n }\n }\n }\n\n triangulateHalfHole(conflictBoundaries: Edge[], edges: Edge[]) {\n let iC = 0;\n let iN: number;\n let iT: number;\n const current = () => conflictBoundaries[iC];\n const next = () => conflictBoundaries[iN];\n const tempo = () => conflictBoundaries[iT];\n\n const va = current()[0].vertices[ccw(current()[1])]!;\n iN = iC;\n ++iN;\n\n let n: Triangle;\n let n1: Triangle;\n let n2: Triangle;\n let ind: number;\n let ind1: number;\n let ind2: number;\n do {\n n1 = current()[0];\n ind1 = current()[1];\n if (n1.neighbours[ind1] !== null) {\n n = n1.neighbours[ind1]!;\n ind = cw(n.indexV(n1.vertices[cw(ind1)]!));\n n1 = n.neighbours[ind]!;\n ind1 = this.tds.mirrorIndex(n, ind);\n }\n n2 = next()[0];\n ind2 = next()[1];\n if (n2.neighbours[ind2] !== null) {\n n = n2.neighbours[ind2]!;\n ind = cw(n.indexV(n2.vertices[cw(ind2)]!));\n n2 = n.neighbours[ind]!;\n ind2 = this.tds.mirrorIndex(n, ind);\n }\n const v0 = n1.vertices[ccw(ind1)]!;\n const v1 = n1.vertices[cw(ind1)]!;\n const v2 = n2.vertices[cw(ind2)]!;\n const orient = orientation(v0.point!, v1.point!, v2.point!);\n switch (orient) {\n case Sign.RIGHT_TURN: {\n const newlf = this.tds.createTriangle(v0, v2, v1, null, null, null);\n edges.push([newlf, 2]);\n newlf.neighbours[1] = n1;\n newlf.neighbours[0] = n2;\n n1.neighbours[ind1] = newlf;\n n2.neighbours[ind2] = newlf;\n if (n1.isConstrained(ind1)) newlf.constraints[1] = true;\n if (n2.isConstrained(ind2)) newlf.constraints[0] = true;\n v0.triangle = newlf;\n v1.triangle = newlf;\n v2.triangle = newlf;\n iT = iC + 1;\n conflictBoundaries.splice(iC, 0, [newlf, 2]);\n conflictBoundaries.splice(Math.max(iT, iN), 1);\n conflictBoundaries.splice(Math.min(iT, iN), 1);\n iN = iC;\n if (v0 !== va) --iC;\n else ++iN;\n break;\n }\n case Sign.LEFT_TURN:\n case Sign.COLLINEAR: {\n ++iC;\n ++iN;\n break;\n }\n }\n } while (iN < conflictBoundaries.length);\n }\n\n findIntersectedFaces(vaa: Vertex, vbb: Vertex) {\n const aa = vaa.point!;\n const bb = vbb.point!;\n const listAB: Edge[] = [];\n const listBA: Edge[] = [];\n const intersectedFaces: Triangle[] = [];\n const lfc = new LineFaceCirculator(vaa, this, bb);\n let ind = lfc.pos!.indexV(vaa);\n let vi: Vertex;\n if (lfc.pos!.isConstrained(ind)) {\n vi = this.intersect(lfc.pos!, ind, vaa, vbb);\n return { found: true, vi, listAB, listBA, intersectedFaces };\n }\n let lf = lfc.pos!.neighbours[ccw(ind)]!;\n let rf = lfc.pos!.neighbours[cw(ind)]!;\n listAB.push([lf, lf.indexT(lfc.pos!)]);\n listBA.unshift([rf, rf.indexT(lfc.pos!)]);\n intersectedFaces.unshift(lfc.pos!);\n let previousFace = lfc.pos!;\n lfc.next();\n ind = lfc.pos!.indexT(previousFace);\n let currentVertex = lfc.pos!.vertices[ind]!;\n let done = false;\n while (currentVertex !== vbb && !done) {\n let i1: number;\n let i2: number;\n const orient = orientation(aa, bb, currentVertex.point!);\n switch (orient) {\n case Sign.COLLINEAR: {\n done = true;\n break;\n }\n case Sign.LEFT_TURN:\n case Sign.RIGHT_TURN: {\n if (orient === Sign.LEFT_TURN) {\n i1 = ccw(ind);\n i2 = cw(ind);\n } else {\n i1 = cw(ind);\n i2 = ccw(ind);\n }\n if (lfc.pos!.isConstrained(i1)) {\n vi = this.intersect(lfc.pos!, i1, vaa, vbb);\n return { found: true, vi, listAB, listBA, intersectedFaces };\n } else {\n lf = lfc.pos!.neighbours[i2]!;\n intersectedFaces.unshift(lfc.pos!);\n if (orient === Sign.LEFT_TURN) listAB.push([lf, lf.indexT(lfc.pos!)]);\n else listBA.unshift([lf, lf.indexT(lfc.pos!)]);\n previousFace = lfc.pos!;\n lfc.next();\n ind = lfc.pos!.indexT(previousFace);\n currentVertex = lfc.pos!.vertices[ind]!;\n }\n break;\n }\n }\n }\n vi = currentVertex;\n intersectedFaces.unshift(lfc.pos!);\n lf = lfc.pos!.neighbours[cw(ind)]!;\n listAB.push([lf, lf.indexT(lfc.pos!)]);\n rf = lfc.pos!.neighbours[ccw(ind)]!;\n listBA.unshift([rf, rf.indexT(lfc.pos!)]);\n return { found: false, vi, listAB, listBA, intersectedFaces };\n }\n\n intersect(t: Triangle, i: number, vaa: Vertex, vbb: Vertex): Vertex {\n const vcc = t.vertices[cw(i)]!;\n const vdd = t.vertices[ccw(i)]!;\n const pa = vaa.point!;\n const pb = vbb.point!;\n const pc = vcc.point!;\n const pd = vdd.point!;\n let pi = intersection(pa, pb, pc, pd);\n if (pi !== pa && pi !== pb && pi !== pc && pi !== pd) {\n const bbox = new BoundingBox(pi!);\n bbox.dilate(4);\n if (bbox.overlaps(new BoundingBox(pa))) pi = pa;\n if (bbox.overlaps(new BoundingBox(pb))) pi = pb;\n if (bbox.overlaps(new BoundingBox(pc))) pi = pc;\n if (bbox.overlaps(new BoundingBox(pd))) pi = pd;\n }\n let vi: Vertex;\n if (pi === null) throw new Error(\"what\");\n else {\n this.removeConstrainedEdge(t, i);\n vi = this.insert(pi, t);\n }\n\n if (vi !== vcc && vi !== vdd) {\n this.insertConstraintV(vcc, vi);\n this.insertConstraintV(vi, vdd);\n } else {\n this.insertConstraintV(vcc, vdd);\n }\n return vi;\n }\n\n removeConstrainedEdge(t: Triangle, i: number) {\n t.constraints[i] = false;\n if (this.tds.dimension === 2) t.neighbours[i]!.constraints[this.tds.mirrorIndex(t, i)] = false;\n }\n\n updateConstraintsOpposite(v: Vertex) {\n let t = v.triangle!;\n const start = t;\n let indf: number;\n do {\n indf = t.indexV(v);\n if (t.neighbours[indf]!.constraints[this.tds.mirrorIndex(t, indf)]) t.constraints[indf] = true;\n else t.constraints[indf] = false;\n t = t.neighbours[ccw(indf)]!;\n } while (t !== start);\n }\n\n markConstraint(t: Triangle, i: number) {\n if (this.tds.dimension === 1) t.constraints[2] = true;\n else {\n t.constraints[i] = true;\n t.neighbours[i]!.constraints[this.tds.mirrorIndex(t, i)] = true;\n }\n }\n\n insert(p: Point, start: Triangle | null = null) {\n const locateInfo = this.locate(p, this.iLocate(p, start));\n const va = this.insertb(p, locateInfo.loc, locateInfo.lt, locateInfo.li);\n this.flipAround(va);\n return va;\n }\n\n flipAround(v: Vertex) {\n if (this.tds.dimension <= 1) return;\n let t = v.triangle!;\n let i: number;\n let next: Triangle;\n const start = t;\n do {\n i = t.indexV(v);\n next = t.neighbours[ccw(i)]!;\n this.propagatingFlip(t, i);\n t = next;\n } while (next !== start);\n }\n\n propagatingFlip(t: Triangle, i: number, depth = 0) {\n if (!this.isFlipable(t, i)) return;\n const maxDepth = 100;\n if (depth === maxDepth) {\n throw new Error(\"maxde\");\n return;\n }\n const ni = t.neighbours[i]!;\n this.flip(t, i);\n this.propagatingFlip(t, i, depth + 1);\n i = ni.indexV(t.vertices[i]!);\n this.propagatingFlip(ni, i, depth + 1);\n }\n\n lessEdge(e1: Edge, e2: Edge) {\n const ind1 = e1[1];\n const ind2 = e2[1];\n return e1[0].uid < e2[0].uid || (e1[0].uid === e2[0].uid && ind1 < ind2);\n }\n\n propagatingFlipE(edges: Edge[]) {\n let eI = 0;\n let t: Triangle;\n let i: number;\n let eni: Edge;\n const edgeSet: Edge[] = [];\n while (eI < edges.length) {\n t = edges[eI][0];\n i = edges[eI][1];\n if (this.isFlipable(t, i)) {\n eni = [t.neighbours[i]!, this.tds.mirrorIndex(t, i)];\n if (this.lessEdge(edges[eI], eni)) edgeSet.push(edges[eI]);\n else edgeSet.push(eni);\n }\n ++eI;\n }\n let indf: number;\n let ni: Triangle;\n let indn: number;\n let ei: Edge;\n const e: (Edge | null)[] = [null, null, null, null];\n while (edgeSet.length > 0) {\n t = edgeSet[0][0];\n indf = edgeSet[0][1];\n ni = t.neighbours[indf]!;\n indn = this.tds.mirrorIndex(t, indf);\n ei = [t, indf];\n edgeSet.splice(edgeSet.findIndex(ed => ed[0] === ei[0] && ed[1] === ei[1]), 1);\n e[0] = [t, cw(indf)];\n e[1] = [t, ccw(indf)];\n e[2] = [ni, cw(indn)];\n e[3] = [ni, ccw(indn)];\n\n for (const edge of e) {\n const tt = edge![0];\n const ii = edge![1];\n eni = [tt.neighbours[ii]!, this.tds.mirrorIndex(tt, ii)];\n if (this.lessEdge(edge!, eni))\n edgeSet.splice(edgeSet.findIndex(ed => ed[0] === edge![0] && ed[1] === edge![1]), 1);\n else edgeSet.splice(edgeSet.findIndex(ed => ed[0] === eni[0] && ed[1] === eni[1]), 1);\n }\n\n this.flip(t, indf);\n\n for (const edge of e) {\n const tt = edge![0];\n const ii = edge![1];\n if (this.isFlipable(tt, ii)) {\n eni = [tt.neighbours[ii]!, this.tds.mirrorIndex(tt, ii)];\n if (this.lessEdge(edge!, eni)) edgeSet.push(edge!);\n else edgeSet.push(eni);\n }\n }\n }\n }\n\n flip(t: Triangle, i: number) {\n const u = t.neighbours[i]!;\n const j = this.tds.mirrorIndex(t, i);\n const t1 = t.neighbours[cw(i)]!;\n const i1 = this.tds.mirrorIndex(t, cw(i));\n const t2 = t.neighbours[ccw(i)]!;\n const i2 = this.tds.mirrorIndex(t, ccw(i));\n const t3 = u.neighbours[cw(j)]!;\n const i3 = this.tds.mirrorIndex(u, cw(j));\n const t4 = u.neighbours[ccw(j)]!;\n const i4 = this.tds.mirrorIndex(u, ccw(j));\n this.tds.flip(t, i);\n t.constraints[t.indexT(u)] = false;\n u.constraints[u.indexT(t)] = false;\n t1.neighbours[i1]!.constraints[this.tds.mirrorIndex(t1, i1)] = t1.constraints[i1];\n t2.neighbours[i2]!.constraints[this.tds.mirrorIndex(t2, i2)] = t2.constraints[i2];\n t3.neighbours[i3]!.constraints[this.tds.mirrorIndex(t3, i3)] = t3.constraints[i3];\n t4.neighbours[i4]!.constraints[this.tds.mirrorIndex(t4, i4)] = t4.constraints[i4];\n }\n\n isFlipable(t: Triangle, i: number, perturb = true) {\n const ni = t.neighbours[i]!;\n if (t.isInfinite() || ni.isInfinite()) return false;\n if (t.constraints[i]) return false;\n return sideOfOrientedCircle(ni, t.vertices[i]!.point!, perturb) === Sign.ON_POSITIVE_SIDE;\n }\n\n insertb(a: Point, loc: Triangle | null, lt: LocateType, li: number): Vertex {\n let insertInConstrainedEdge = false;\n let v1: Vertex;\n let v2: Vertex;\n if (lt === LocateType.EDGE && loc!.isConstrained(li)) {\n insertInConstrainedEdge = true;\n v1 = loc!.vertices[ccw(li)]!;\n v2 = loc!.vertices[cw(li)]!;\n }\n const va = this.insertc(a, loc, lt, li);\n if (insertInConstrainedEdge) this.updateConstraintsIncident(va, v1!, v2!);\n else if (lt !== LocateType.VERTEX) this.clearConstraintsIncident(va);\n if (this.tds.dimension === 2) this.updateConstraintsOpposite(va);\n return va;\n }\n\n updateConstraintsIncident(va: Vertex, c1: Vertex, c2: Vertex) {\n if (this.tds.dimension === 0) return;\n if (this.tds.dimension === 1) {\n const ec = new EdgeCirculator(va, null);\n do {\n ec.t!.constraints[2] = true;\n } while (ec.next());\n } else {\n const fc = new FaceCirculator(va, null);\n do {\n const indf = fc.t!.indexV(va);\n const cwi = cw(indf);\n const ccwi = ccw(indf);\n if (fc.t!.vertices[cwi] === c1 || fc.t!.vertices[cwi] === c2) {\n fc.t!.constraints[ccwi] = true;\n fc.t!.constraints[cwi] = false;\n } else {\n fc.t!.constraints[ccwi] = false;\n fc.t!.constraints[cwi] = true;\n }\n } while (fc.next());\n }\n }\n\n clearConstraintsIncident(v: Vertex) {\n const ec = new EdgeCirculator(v, null);\n if (ec.valid) {\n do {\n const t = ec.t!;\n const indf = ec.ri;\n t.constraints[indf] = false;\n if (this.tds.dimension === 2) t.neighbours[indf]!.constraints[this.tds.mirrorIndex(t, indf)] = false;\n } while (ec.next());\n }\n }\n\n insertc(p: Point, loc: Triangle | null, lt: LocateType, li: number): Vertex {\n if (this.tds.vertices.length === 1) {\n return this.insertFirst(p);\n } else if (this.tds.vertices.length === 2) {\n if (lt === LocateType.VERTEX) return this.tds.finiteVertex;\n else return this.insertSecond(p);\n }\n switch (lt) {\n case LocateType.VERTEX: {\n return loc!.vertices[li]!;\n }\n case LocateType.OUTSIDE_AFFINE_HULL: {\n return this.insertOutsideAffineHull(p);\n }\n case LocateType.OUTSIDE_CONVEX_HULL: {\n return this.insertOutsideConvexHull(p, loc!);\n }\n case LocateType.EDGE: {\n return this.insertInEdge(p, loc!, li);\n }\n case LocateType.FACE: {\n return this.insertInFace(p, loc!);\n }\n }\n throw new Error(\"qwe\");\n return new Vertex();\n }\n\n insertInEdge(p: Point, loc: Triangle, li: number): Vertex {\n const v = this.tds.insertInEdge(loc, li);\n v.point = p;\n return v;\n }\n\n insertInFace(p: Point, loc: Triangle): Vertex {\n const v = this.tds.insertInFace(loc);\n v.point = p;\n return v;\n }\n\n insertFirst(p: Point): Vertex {\n const v = this.tds.insertDimUp();\n v.point = p;\n return v;\n }\n\n insertSecond(p: Point): Vertex {\n const v = this.tds.insertDimUp(this.tds._infinite, true);\n v.point = p;\n return v;\n }\n\n insertOutsideAffineHull(p: Point): Vertex {\n let conform = false;\n if (this.tds.dimension === 1) {\n const t = this.tds.finiteEdge.first!;\n const orient = orientation(t.vertices[0]!.point!, t.vertices[1]!.point!, p);\n conform = orient === Sign.COUNTERCLOCKWISE;\n }\n const v = this.tds.insertDimUp(this.tds._infinite, conform);\n v.point = p;\n return v;\n }\n\n insertOutsideConvexHull(p: Point, t: Triangle): Vertex {\n let v: Vertex;\n if (this.tds.dimension === 1) {\n throw new Error(\"sdfasdasd\");\n } else {\n v = this.insertOutsideConvexHull2(p, t);\n }\n v.point = p;\n return v;\n }\n\n insertOutsideConvexHull2(p: Point, t: Triangle): Vertex {\n let li = t.indexV(this.tds._infinite);\n const ccwlist: Triangle[] = [];\n const cwlist: Triangle[] = [];\n let fc = new FaceCirculator(this.tds._infinite, t);\n let done = false;\n while (!done) {\n fc.prev();\n li = fc.t!.indexV(this.tds._infinite);\n const q = fc.t!.vertices[ccw(li)]!.point!;\n const r = fc.t!.vertices[cw(li)]!.point!;\n if (orientation(p, q, r) === Sign.LEFT_TURN) ccwlist.push(fc.t!);\n else done = true;\n }\n fc = new FaceCirculator(this.tds._infinite, t);\n done = false;\n while (!done) {\n fc.next();\n li = fc.t!.indexV(this.tds._infinite);\n const q = fc.t!.vertices[ccw(li)]!.point!;\n const r = fc.t!.vertices[cw(li)]!.point!;\n if (orientation(p, q, r) === Sign.LEFT_TURN) cwlist.push(fc.t!);\n else done = true;\n }\n const v = this.tds.insertInFace(t);\n v.point = p;\n let th;\n while (ccwlist.length > 0) {\n th = ccwlist[0];\n li = ccw(th.indexV(this.tds._infinite));\n this.tds.flip(th, li);\n ccwlist.shift();\n }\n while (cwlist.length > 0) {\n th = cwlist[0];\n li = cw(th.indexV(this.tds._infinite));\n this.tds.flip(th, li);\n cwlist.shift();\n }\n fc = new FaceCirculator(v, null);\n while (!fc.t!.isInfinite()) fc.next();\n this.tds._infinite.triangle = fc.t!;\n return v;\n }\n\n locate(p: Point, start: Triangle | null) {\n let lt = 0;\n let li = 0;\n if (this.tds.dimension < 0) {\n lt = LocateType.OUTSIDE_AFFINE_HULL;\n li = 4;\n return { loc: null, lt, li };\n } else if (this.tds.dimension === 0) {\n if (xyEqual(p, this.tds.finiteVertex.triangle!.vertices[0]!.point!)) {\n lt = LocateType.VERTEX;\n } else {\n lt = LocateType.OUTSIDE_AFFINE_HULL;\n }\n li = 4;\n return { loc: null, lt, li };\n } else if (this.tds.dimension === 1) {\n return this.marchLocate1D(p);\n }\n if (start === null) {\n const t = this.tds._infinite.triangle!;\n start = t.neighbours[t.indexV(this.tds._infinite)]!;\n } else if (start.isInfinite()) {\n start = start.neighbours[start.indexV(this.tds._infinite)]!;\n }\n return this.marchLocate2D(start, p);\n }\n\n marchLocate1D(p: Point) {\n const ff = this.tds._infinite.triangle!;\n const iv = ff.indexV(this.tds._infinite);\n const t = ff.neighbours[iv]!;\n const pqt = orientation(t.vertices[0]!.point!, t.vertices[1]!.point!, p);\n if (pqt === Sign.RIGHT_TURN || pqt === Sign.LEFT_TURN) {\n return { loc: new Triangle(), lt: LocateType.OUTSIDE_AFFINE_HULL, li: 4 };\n }\n const i = t.indexT(ff);\n if (collinearBetween(p, t.vertices[1 - i]!.point!, t.vertices[i]!.point!))\n return { loc: ff, lt: LocateType.OUTSIDE_CONVEX_HULL, li: iv };\n\n if (xyEqual(p, t.vertices[1 - i]!.point!)) return { loc: t, lt: LocateType.VERTEX, li: 1 - i };\n throw new Error(\"sdfsdf\");\n }\n\n marchLocate2D(c: Triangle, p: Point) {\n let prev = null;\n let first = true;\n let lt: LocateType | undefined;\n let li: number | undefined;\n while (true) {\n if (c.isInfinite()) {\n return { loc: c, lt: LocateType.OUTSIDE_CONVEX_HULL, li: c.indexV(this.tds._infinite) };\n }\n const leftFirst = 0; // Math.round(Math.random());\n const p0 = c.vertices[0]!.point!;\n const p1 = c.vertices[1]!.point!;\n const p2 = c.vertices[2]!.point!;\n let o0: Sign;\n let o1: Sign;\n let o2: Sign;\n if (first) {\n prev = c;\n first = false;\n o0 = orientation(p0, p1, p);\n if (o0 === Sign.NEGATIVE) {\n c = c.neighbours[2]!;\n continue;\n }\n o1 = orientation(p1, p2, p);\n if (o1 === Sign.NEGATIVE) {\n c = c.neighbours[0]!;\n continue;\n }\n o2 = orientation(p2, p0, p);\n if (o2 === Sign.NEGATIVE) {\n c = c.neighbours[1]!;\n continue;\n }\n } else if (leftFirst) {\n if (c.neighbours[0]! === prev) {\n prev = c;\n o0 = orientation(p0, p1, p);\n if (o0 === Sign.NEGATIVE) {\n c = c.neighbours[2]!;\n continue;\n }\n o2 = orientation(p2, p0, p);\n if (o2 === Sign.NEGATIVE) {\n c = c.neighbours[1]!;\n continue;\n }\n o1 = Sign.POSITIVE;\n } else if (c.neighbours[1]! === prev) {\n prev = c;\n o1 = orientation(p1, p2, p);\n if (o1 === Sign.NEGATIVE) {\n c = c.neighbours[0]!;\n continue;\n }\n o0 = orientation(p0, p1, p);\n if (o0 === Sign.NEGATIVE) {\n c = c.neighbours[2]!;\n continue;\n }\n o2 = Sign.POSITIVE;\n } else {\n prev = c;\n o2 = orientation(p2, p0, p);\n if (o2 === Sign.NEGATIVE) {\n c = c.neighbours[1]!;\n continue;\n }\n o1 = orientation(p1, p2, p);\n if (o1 === Sign.NEGATIVE) {\n c = c.neighbours[0]!;\n continue;\n }\n o0 = Sign.POSITIVE;\n }\n } else {\n if (c.neighbours[0] === prev) {\n prev = c;\n o2 = orientation(p2, p0, p);\n if (o2 === Sign.NEGATIVE) {\n c = c.neighbours[1]!;\n continue;\n }\n o0 = orientation(p0, p1, p);\n if (o0 === Sign.NEGATIVE) {\n c = c.neighbours[2]!;\n continue;\n }\n o1 = Sign.POSITIVE;\n } else if (c.neighbours[1] === prev) {\n prev = c;\n o0 = orientation(p0, p1, p);\n if (o0 === Sign.NEGATIVE) {\n c = c.neighbours[2]!;\n continue;\n }\n o1 = orientation(p1, p2, p);\n if (o1 === Sign.NEGATIVE) {\n c = c.neighbours[0]!;\n continue;\n }\n o2 = Sign.POSITIVE;\n } else {\n prev = c;\n o1 = orientation(p1, p2, p);\n if (o1 === Sign.NEGATIVE) {\n c = c.neighbours[0]!;\n continue;\n }\n o2 = orientation(p2, p0, p);\n if (o2 === Sign.NEGATIVE) {\n c = c.neighbours[1]!;\n continue;\n }\n o0 = Sign.POSITIVE;\n }\n }\n const sum =\n (o0 === Sign.COLLINEAR ? 1 : 0) + (o1 === Sign.COLLINEAR ? 1 : 0) + (o2 === Sign.COLLINEAR ? 1 : 0);\n switch (sum) {\n case 0: {\n lt = LocateType.FACE;\n li = 4;\n break;\n }\n case 1: {\n lt = LocateType.EDGE;\n li = o0 === Sign.COLLINEAR ? 2 : o1 === Sign.COLLINEAR ? 0 : 1;\n break;\n }\n case 2: {\n lt = LocateType.VERTEX;\n li = o0 !== Sign.COLLINEAR ? 2 : o1 !== Sign.COLLINEAR ? 0 : 1;\n break;\n }\n }\n if (lt === undefined || li === undefined) throw new Error(\"ert\");\n return { loc: c, lt, li };\n }\n }\n\n iLocate(p: Point, start: Triangle | null) {\n if (this.tds.dimension < 2) return start;\n if (start === null) {\n const t = this.tds._infinite.triangle!;\n start = t.neighbours[t.indexV(this.tds._infinite)];\n } else if (start.isInfinite()) {\n start = start.neighbours[start.indexV(this.tds._infinite)];\n }\n let prev = null;\n let c = start!;\n let first = true;\n let nTurns = 2500;\n while (true) {\n if (!nTurns--) return c;\n if (c.isInfinite()) return c;\n const p0 = c.vertices[0]!.point!;\n const p1 = c.vertices[1]!.point!;\n const p2 = c.vertices[2]!.point!;\n if (first) {\n prev = c;\n first = false;\n if (hasInexactNegativeOrientation(p0, p1, p)) {\n c = c.neighbours[2]!;\n continue;\n }\n if (hasInexactNegativeOrientation(p1, p2, p)) {\n c = c.neighbours[0]!;\n continue;\n }\n if (hasInexactNegativeOrientation(p2, p0, p)) {\n c = c.neighbours[1]!;\n continue;\n }\n } else {\n if (c.neighbours[0] === prev) {\n prev = c;\n if (hasInexactNegativeOrientation(p0, p1, p)) {\n c = c.neighbours[2]!;\n continue;\n }\n if (hasInexactNegativeOrientation(p2, p0, p)) {\n c = c.neighbours[1]!;\n continue;\n }\n } else if (c.neighbours[1] === prev) {\n prev = c;\n if (hasInexactNegativeOrientation(p0, p1, p)) {\n c = c.neighbours[2]!;\n continue;\n }\n if (hasInexactNegativeOrientation(p1, p2, p)) {\n c = c.neighbours[0]!;\n continue;\n }\n } else {\n prev = c;\n if (hasInexactNegativeOrientation(p2, p0, p)) {\n c = c.neighbours[1]!;\n continue;\n }\n if (hasInexactNegativeOrientation(p1, p2, p)) {\n c = c.neighbours[0]!;\n continue;\n }\n }\n }\n break;\n }\n return c;\n }\n}\n","import mod from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/ts-loader/index.js??ref--12-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./draw.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/ts-loader/index.js??ref--12-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./draw.vue?vue&type=script&lang=ts&\"","import { GlobalPoint } from \"@/game/geom\";\nimport { GridLayer } from \"@/game/layers/grid\";\nimport { Layer } from \"@/game/layers/layer\";\nimport { Asset } from \"@/game/shapes/asset\";\nimport { Shape } from \"@/game/shapes/shape\";\nimport { gameStore } from \"@/game/store\";\nimport { l2gx, l2gy, l2gz } from \"@/game/units\";\n\nclass LayerManager {\n layers: Layer[] = [];\n width = window.innerWidth;\n height = window.innerHeight;\n\n UUIDMap: Map = new Map();\n\n // Refresh interval and redraw setter.\n interval = 30;\n\n constructor() {\n requestAnimationFrame(this.drawLoop);\n }\n\n reset() {\n this.layers = [];\n this.UUIDMap = new Map();\n }\n\n drawLoop = () => {\n for (let i = this.layers.length - 1; i >= 0; i--) {\n this.layers[i].draw();\n }\n requestAnimationFrame(this.drawLoop);\n };\n\n setWidth(width: number): void {\n this.width = width;\n for (const layer of this.layers) {\n layer.canvas.width = width;\n layer.width = width;\n }\n }\n\n setHeight(height: number): void {\n this.height = height;\n for (const layer of this.layers) {\n layer.canvas.height = height;\n layer.height = height;\n }\n }\n\n addLayer(layer: Layer): void {\n this.layers.push(layer);\n if (!gameStore.IS_DM && !layer.playerEditable) return;\n if (layer.selectable) gameStore.addLayer(layer.name);\n }\n\n hasLayer(name: string): boolean {\n return this.layers.some(l => l.name === name);\n }\n\n getLayer(name?: string) {\n name = name === undefined ? gameStore.selectedLayer : name;\n for (const layer of this.layers) {\n if (layer.name === name) return layer;\n }\n }\n\n selectLayer(name: string, sync: boolean = true): void {\n let found = false;\n for (const layer of this.layers) {\n if (!layer.selectable) continue;\n if (found && layer.name !== \"fow\") layer.ctx.globalAlpha = 0.3;\n else layer.ctx.globalAlpha = 1.0;\n\n if (name === layer.name) {\n gameStore.selectLayer({ name, sync });\n found = true;\n }\n\n layer.clearSelection();\n layer.invalidate(true);\n }\n }\n\n getGridLayer(): GridLayer | undefined {\n return this.getLayer(\"grid\");\n }\n\n hasSelection() {\n const selection = this.getSelection();\n return selection !== undefined && selection.length > 0;\n }\n\n // THIS INCLUDES POTENTIALLY THE SelectTool.SelectionHelper !!!\n getSelection() {\n const layer = this.getLayer();\n if (layer === undefined) return undefined;\n return layer.selection;\n }\n\n invalidate(): void {\n for (let i = this.layers.length - 1; i >= 0; i--) {\n this.layers[i].invalidate(true);\n }\n }\n\n invalidateLight() {\n for (let i = this.layers.length - 1; i >= 0; i--)\n if (this.layers[i].isVisionLayer) this.layers[i].invalidate(true);\n }\n\n dropAsset(event: DragEvent) {\n const layer = this.getLayer();\n if (layer === undefined || event === null || event.dataTransfer === null) return;\n const image = document.createElement(\"img\");\n image.src = event.dataTransfer.getData(\"text/plain\");\n const asset = new Asset(\n image,\n new GlobalPoint(l2gx(event.clientX), l2gy(event.clientY)),\n l2gz(image.width),\n l2gz(image.height),\n );\n asset.src = new URL(image.src).pathname;\n\n if (gameStore.useGrid) {\n const gs = gameStore.gridSize;\n asset.refPoint = new GlobalPoint(\n Math.round(asset.refPoint.x / gs) * gs,\n Math.round(asset.refPoint.y / gs) * gs,\n );\n asset.w = Math.max(Math.round(asset.w / gs) * gs, gs);\n asset.h = Math.max(Math.round(asset.h / gs) * gs, gs);\n }\n\n layer.addShape(asset, true);\n }\n}\n\nexport const layerManager = new LayerManager();\n(window).lm = layerManager;\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/ts-loader/index.js??ref--12-2!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./initiative.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/ts-loader/index.js??ref--12-2!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./initiative.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./createtoken_modal.vue?vue&type=template&id=73816298&scoped=true&\"\nimport script from \"./createtoken_modal.vue?vue&type=script&lang=ts&\"\nexport * from \"./createtoken_modal.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./createtoken_modal.vue?vue&type=style&index=0&id=73816298&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"73816298\",\n null\n \n)\n\ncomponent.options.__file = \"createtoken_modal.vue\"\nexport default component.exports","import { BoundingRect } from \"@/game/shapes/boundingrect\";\n\nexport class BoundingNode {\n bbox: BoundingRect;\n nPrimitives: number;\n children: BoundingNode[] = [];\n constructor(nPrimitives: number, bbox: BoundingRect) {\n this.nPrimitives = nPrimitives;\n this.bbox = bbox;\n }\n}\n\nexport class LeafNode extends BoundingNode {\n firstPrimOffset: number;\n constructor(first: number, n: number, bbox: BoundingRect) {\n super(n, bbox);\n this.firstPrimOffset = first;\n }\n}\n\nexport class InteriorNode extends BoundingNode {\n dimension: number;\n constructor(dimension: number, c1: BoundingNode, c2: BoundingNode) {\n super(0, c1.bbox.union(c2.bbox));\n this.dimension = dimension;\n this.children.push(c1);\n this.children.push(c2);\n }\n}\n","import mod from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/ts-loader/index.js??ref--12-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./createtoken_modal.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/ts-loader/index.js??ref--12-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./createtoken_modal.vue?vue&type=script&lang=ts&\"","import Tools from \"@/game/ui/tools/tools.vue\";\n\nimport { getRef, uuidv4 } from \"@/core/utils\";\nimport { socket } from \"@/game/api/socket\";\nimport { sendClientOptions } from \"@/game/api/utils\";\nimport { ServerAura } from '@/game/comm/types/shapes';\nimport { EventBus } from \"@/game/event-bus\";\nimport { Vector } from \"@/game/geom\";\nimport { layerManager } from \"@/game/layers/manager\";\nimport { createShapeFromDict } from \"@/game/shapes/utils\";\nimport { gameStore } from \"@/game/store\";\nimport { calculateDelta } from \"@/game/ui/tools/utils\";\n\nexport function onKeyUp(event: KeyboardEvent) {\n if (event.target instanceof HTMLInputElement || event.target instanceof HTMLTextAreaElement) {\n } else {\n if (event.key === \"Delete\" || event.key === \"Del\" || event.key === \"Backspace\") {\n if (layerManager.getLayer === undefined) {\n console.log(\"No active layer selected for delete operation\");\n return;\n }\n const l = layerManager.getLayer()!;\n for (let i = l.selection.length - 1; i >= 0; i--) {\n const sel = l.selection[i];\n if ((getRef(\"tools\").$refs.selectTool).selectionHelper.uuid === sel.uuid) {\n l.selection.splice(i, 1);\n continue;\n }\n l.removeShape(sel, true, false);\n EventBus.$emit(\"SelectionInfo.Shape.Set\", null);\n EventBus.$emit(\"Initiative.Remove\", sel.uuid);\n }\n }\n }\n}\n\nexport function onKeyDown(event: KeyboardEvent) {\n if (event.target instanceof HTMLInputElement || event.target instanceof HTMLTextAreaElement) {\n if (event.keyCode === 65 && event.ctrlKey) event.target!.select();\n } else {\n if (event.keyCode >= 37 && event.keyCode <= 40) {\n // todo: this should already be rounded\n const gridSize = Math.round(gameStore.gridSize);\n let offsetX = gridSize * (event.keyCode % 2);\n let offsetY = gridSize * (event.keyCode % 2 ? 0 : 1);\n if (layerManager.hasSelection()) {\n const selection = layerManager.getSelection()!;\n offsetX *= event.keyCode <= 38 ? -1 : 1;\n offsetY *= event.keyCode <= 38 ? -1 : 1;\n let delta = new Vector(offsetX, offsetY);\n if (!event.shiftKey || !gameStore.IS_DM) {\n // First check for collisions. Using the smooth wall slide collision check used on mouse move is overkill here.\n for (const sel of selection) {\n if ((getRef(\"tools\").$refs.selectTool).selectionHelper.uuid === sel.uuid) continue;\n delta = calculateDelta(delta, sel);\n }\n }\n for (const sel of selection) {\n if ((getRef(\"tools\").$refs.selectTool).selectionHelper.uuid === sel.uuid) continue;\n sel.refPoint = sel.refPoint.add(delta);\n // todo: Fix again\n // if (sel.refPoint.x % gridSize !== 0 || sel.refPoint.y % gridSize !== 0) sel.snapToGrid();\n socket.emit(\"Shape.Position.Update\", { shape: sel.asDict(), redraw: true, temporary: false });\n }\n gameStore.recalculateVision();\n layerManager.getLayer()!.invalidate(false);\n } else {\n // The pan offsets should be in the opposite direction to give the correct feel.\n gameStore.increasePanX(offsetX * (event.keyCode <= 38 ? 1 : -1));\n gameStore.increasePanY(offsetY * (event.keyCode <= 38 ? 1 : -1));\n layerManager.invalidate();\n sendClientOptions();\n }\n } else if (event.keyCode === 68) {\n const layer = layerManager.getLayer();\n if (layer) {\n layer.clearSelection();\n layer.invalidate(true);\n }\n } else if (event.key === \"u\" && event.ctrlKey) {\n event.preventDefault();\n event.stopPropagation();\n gameStore.toggleUI();\n } else if (event.key === \"c\" && event.ctrlKey) {\n const layer = layerManager.getLayer();\n if (!layer) return;\n if (!layer.selection) return;\n const clipboard = [];\n for (const shape of layer.selection) {\n if ((getRef(\"tools\").$refs.selectTool).selectionHelper.uuid === shape.uuid) continue;\n clipboard.push(shape.asDict());\n }\n gameStore.setClipboard(clipboard);\n } else if (event.key === \"v\" && event.ctrlKey) {\n const layer = layerManager.getLayer();\n if (!layer) return;\n if (!gameStore.clipboard) return;\n layer.selection = [];\n for (const clip of gameStore.clipboard) {\n clip.x += 10;\n clip.y += 10;\n clip.uuid = uuidv4();\n const oldTrackers = clip.trackers;\n clip.trackers = [];\n for (const tracker of oldTrackers) {\n const newTracker: Tracker = {\n ...tracker,\n uuid: uuidv4()\n }\n clip.trackers.push(newTracker);\n }\n const oldAuras = clip.auras;\n clip.auras = [];\n for (const aura of oldAuras) {\n const newAura: ServerAura = {\n ...aura,\n uuid: uuidv4()\n }\n clip.auras.push(newAura);\n }\n const shape = createShapeFromDict(clip);\n if (shape === undefined) continue;\n layer.addShape(shape, true);\n layer.selection.push(shape);\n }\n if (layer.selection.length === 1) EventBus.$emit(\"SelectionInfo.Shape.Set\", layer.selection[0]);\n else EventBus.$emit(\"SelectionInfo.Shape.Set\", null);\n layer.invalidate(false);\n }\n }\n}\n","import mod from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./manager.vue?vue&type=style&index=0&lang=css&\"; export default mod; export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./manager.vue?vue&type=style&index=0&lang=css&\"","import mod from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./shapecontext.vue?vue&type=style&index=0&id=759e5a8a&scoped=true&lang=css&\"; export default mod; export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./shapecontext.vue?vue&type=style&index=0&id=759e5a8a&scoped=true&lang=css&\"","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nimport Vue from \"vue\";\n\nimport ShapeContext from \"@/game/ui/selection/shapecontext.vue\";\nimport CreateTokenModal from \"@/game/ui/tools/createtoken_modal.vue\";\nimport DrawTool from \"@/game/ui/tools/draw.vue\";\nimport FilterTool from \"@/game/ui/tools/filter.vue\";\nimport MapTool from \"@/game/ui/tools/map.vue\";\nimport PanTool from \"@/game/ui/tools/pan\";\nimport SelectTool from \"@/game/ui/tools/select.vue\";\n\nimport { layerManager } from \"@/game/layers/manager\";\nimport { gameManager } from \"@/game/manager\";\nimport { gameStore } from \"@/game/store\";\nimport { RulerTool } from \"@/game/ui/tools/ruler\";\nimport { l2g } from \"@/game/units\";\nimport { getMouse } from \"@/game/utils\";\nimport Component from \"vue-class-component\";\n\n@Component({\n components: {\n \"select-tool\": SelectTool,\n \"pan-tool\": PanTool,\n \"draw-tool\": DrawTool,\n \"ruler-tool\": RulerTool,\n \"map-tool\": MapTool,\n \"filter-tool\": FilterTool,\n \"shape-menu\": ShapeContext,\n \"createtoken-dialog\": CreateTokenModal,\n },\n watch: {\n currentTool(newValue, oldValue) {\n this.$emit(\"tools-select-change\", newValue, oldValue);\n },\n },\n})\nexport default class Tools extends Vue {\n $refs!: {\n selectTool: InstanceType;\n };\n\n currentTool = \"Select\";\n tools = [\"Select\", \"Pan\", \"Draw\", \"Ruler\", \"Map\", \"Filter\"];\n dmTools = [\"Map\"];\n\n get IS_DM(): boolean {\n return gameStore.IS_DM;\n }\n\n get currentToolComponent(): string {\n return `${this.currentTool.toLowerCase()}-tool`;\n }\n\n get visibleTools(): string[] {\n return this.tools.filter(t => (!this.dmTools.includes(t) || this.IS_DM));\n }\n\n mousedown(event: MouseEvent) {\n if ((event.target).tagName !== \"CANVAS\") return;\n\n let targetTool = this.currentTool;\n if (event.button === 1) {\n targetTool = \"Pan\";\n } else if (event.button !== 0) {\n return;\n }\n\n this.$emit(\"mousedown\", event, targetTool);\n }\n mouseup(event: MouseEvent) {\n if ((event.target).tagName !== \"CANVAS\") return;\n\n let targetTool = this.currentTool;\n if (event.button === 1) {\n targetTool = \"Pan\";\n } else if (event.button !== 0) {\n return;\n }\n\n this.$emit(\"mouseup\", event, targetTool);\n }\n mousemove(event: MouseEvent) {\n if ((event.target).tagName !== \"CANVAS\") return;\n\n let targetTool = this.currentTool;\n if ((event.buttons & 4) !== 0) {\n targetTool = \"Pan\";\n } else if ((event.button & 1) > 1) {\n return;\n }\n\n this.$emit(\"mousemove\", event, targetTool);\n\n // Annotation hover\n let found = false;\n for (const uuid of gameStore.annotations) {\n if (layerManager.UUIDMap.has(uuid) && layerManager.hasLayer(\"draw\")) {\n const shape = layerManager.UUIDMap.get(uuid)!;\n if (shape.contains(l2g(getMouse(event)))) {\n found = true;\n gameManager.annotationManager.setActiveText(shape.annotation);\n }\n }\n }\n if (!found && gameManager.annotationManager.shown) {\n gameManager.annotationManager.setActiveText(\"\");\n }\n }\n mouseleave(event: MouseEvent) {\n // When leaving the window while a mouse is pressed down, act as if it was released\n if ((event.buttons & 1) !== 0) {\n this.$emit(\"mouseup\", event, this.currentTool);\n }\n }\n contextmenu(event: MouseEvent) {\n if ((event.target).tagName !== \"CANVAS\") return;\n if (event.button !== 2 || (event.target).tagName !== \"CANVAS\") return;\n this.$emit(\"contextmenu\", event, this.currentTool);\n }\n}\n","import mod from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/ts-loader/index.js??ref--12-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./selection_info.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/ts-loader/index.js??ref--12-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./selection_info.vue?vue&type=script&lang=ts&\"","import mod from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/ts-loader/index.js??ref--12-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./modal.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/ts-loader/index.js??ref--12-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./modal.vue?vue&type=script&lang=ts&\"","import mod from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./contextmenu.vue?vue&type=style&index=0&lang=css&\"; export default mod; export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./contextmenu.vue?vue&type=style&index=0&lang=css&\"","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nimport Vue from \"vue\";\nimport Component from \"vue-class-component\";\n\nimport Modal from \"@/core/components/modals/modal.vue\";\n\n@Component({\n components: {\n Modal,\n },\n})\nexport default class Prompt extends Vue {\n $refs!: {\n answer: HTMLElement;\n };\n\n visible = false;\n question = \"\";\n answer = \"\";\n title = \"\";\n\n resolve = (value: string) => {};\n reject = () => {};\n\n submit() {\n this.resolve(this.answer);\n this.close();\n }\n close() {\n this.reject();\n this.visible = false;\n this.question = \"\";\n this.answer = \"\";\n this.title = \"\";\n }\n prompt(question: string, title: string): Promise {\n this.question = question;\n this.title = title;\n this.visible = true;\n this.$nextTick(() => {\n this.$refs.answer.focus();\n });\n return new Promise((resolve, reject) => {\n this.resolve = resolve;\n this.reject = reject;\n });\n }\n}\n","import mod from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./accordion.vue?vue&type=style&index=0&id=0bf2b7ba&scoped=true&lang=css&\"; export default mod; export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./accordion.vue?vue&type=style&index=0&id=0bf2b7ba&scoped=true&lang=css&\"","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_vm._v(_vm._s(_vm.message))])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","export * from \"-!cache-loader?{\\\"cacheDirectory\\\":\\\"node_modules/.cache/vue-loader\\\",\\\"cacheIdentifier\\\":\\\"74f43d04-vue-loader-template\\\"}!../../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./load.vue?vue&type=template&id=ff095222&\"","import mod from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/ts-loader/index.js??ref--12-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./menu.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/ts-loader/index.js??ref--12-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./menu.vue?vue&type=script&lang=ts&\"","import { GlobalPoint, Point, Ray, Vector } from \"@/game/geom\";\nimport { g2lx, g2ly } from \"../units\";\n\nexport class BoundingRect {\n readonly w: number;\n readonly h: number;\n readonly topLeft: GlobalPoint;\n readonly topRight: GlobalPoint;\n readonly botRight: GlobalPoint;\n readonly botLeft: GlobalPoint;\n\n constructor(topleft: GlobalPoint, w: number, h: number) {\n this.w = w;\n this.h = h;\n this.topLeft = topleft;\n this.topRight = new GlobalPoint(topleft.x + w, topleft.y);\n this.botRight = new GlobalPoint(topleft.x + w, topleft.y + h);\n this.botLeft = new GlobalPoint(topleft.x, topleft.y + h);\n }\n\n contains(point: GlobalPoint): boolean {\n return (\n this.topLeft.x <= point.x &&\n this.topRight.x >= point.x &&\n this.topLeft.y <= point.y &&\n this.botLeft.y >= point.y\n );\n }\n\n get points() {\n if (this.w === 0 || this.h === 0) return [[this.topLeft.x, this.topLeft.y]];\n return [\n [this.topLeft.x, this.topLeft.y],\n [this.botLeft.x, this.botLeft.y],\n [this.botRight.x, this.botRight.y],\n [this.topRight.x, this.topRight.y],\n ];\n }\n\n offset(vector: Vector): BoundingRect {\n return new BoundingRect(this.topLeft.add(vector), this.w, this.h);\n }\n\n union(other: BoundingRect): BoundingRect {\n const xmin = Math.min(this.topLeft.x, other.topLeft.x);\n const xmax = Math.max(this.topRight.x, other.topRight.x);\n const ymin = Math.min(this.topLeft.y, other.topLeft.y);\n const ymax = Math.max(this.botLeft.y, other.botLeft.y);\n return new BoundingRect(new GlobalPoint(xmin, ymin), xmax - xmin, ymax - ymin);\n }\n\n getDiagCorner(botright: boolean) {\n return botright ? this.botRight : this.topLeft;\n }\n\n intersectsWith(other: BoundingRect): boolean {\n return !(\n other.topLeft.x > this.topRight.x ||\n other.topRight.x < this.topLeft.x ||\n other.topLeft.y > this.botLeft.y ||\n other.botLeft.y < this.topLeft.y\n );\n }\n\n intersectsWithInner(other: BoundingRect): boolean {\n return !(\n other.topLeft.x >= this.topRight.x ||\n other.topRight.x <= this.topLeft.x ||\n other.topLeft.y >= this.botLeft.y ||\n other.botLeft.y <= this.topLeft.y\n );\n }\n\n intersectP(ray: Ray, invDir: Vector, dirIsNeg: boolean[]) {\n let txmin = invDir.x * (this.getDiagCorner(dirIsNeg[0]).x - ray.origin!.x);\n let txmax = invDir.x * (this.getDiagCorner(!dirIsNeg[0]).x - ray.origin!.x);\n const tymin = invDir.y * (this.getDiagCorner(dirIsNeg[1]).y - ray.origin!.y);\n const tymax = invDir.y * (this.getDiagCorner(!dirIsNeg[1]).y - ray.origin!.y);\n if (txmin > tymax || tymin > txmax) return { hit: false, min: txmin, max: txmax };\n if (tymin > txmin) txmin = tymin;\n if (tymax < txmax) txmax = tymax;\n return { hit: txmin < ray.tMax! && txmax > 0, min: txmin, max: txmax };\n }\n\n center(): GlobalPoint {\n return this.topLeft.add(new Vector(this.w / 2, this.h / 2));\n }\n\n getMaxExtent() {\n return this.w > this.h ? 0 : 1;\n }\n visibleInCanvas(canvas: HTMLCanvasElement): boolean {\n const coreVisible = !(\n g2lx(this.topLeft.x) > canvas.width ||\n g2ly(this.topLeft.y) > canvas.height ||\n g2lx(this.topRight.x) < 0 ||\n g2ly(this.botRight.y) < 0\n );\n if (coreVisible) return true;\n return false;\n }\n}\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{attrs:{\"id\":\"formcontainer\"}},[(_vm.owned || _vm.joined)?_c('form',[_c('fieldset',[_c('legend',{staticClass:\"legend\"},[_vm._v(\"Your sessions\")]),_c('div',{staticClass:\"input\"},[_vm._l((_vm.owned),function(room,i){return _c('router-link',{key:'o-'+i,attrs:{\"to\":'/game/' + room[1] + '/' + room[0]}},[_vm._v(_vm._s(room[0]))])}),_vm._l((_vm.joined),function(room,i){return _c('router-link',{key:'j-'+i,attrs:{\"to\":'/game/' + room[1] + '/' + room[0]}},[_vm._v(_vm._s(room[1])+\"/\"+_vm._s(room[0]))])})],2),(_vm.owned.length === 0)?_c('div',{staticClass:\"input\"},[_vm._v(\"No active sessions\")]):_vm._e()])]):_vm._e(),_vm._m(0),_c('form',{on:{\"submit\":function($event){$event.preventDefault();return _vm.createRoom($event)}}},[_c('fieldset',[(!_vm.owned && !_vm.joined)?_c('legend',{staticClass:\"legend\"},[_vm._v(\"Create a session\")]):_c('div',{staticClass:\"input\"},[_vm._v(\"Create a new session\")]),_c('div',{staticClass:\"input\"},[_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.newSessionName),expression:\"newSessionName\"}],attrs:{\"type\":\"text\",\"name\":\"room_name\",\"placeholder\":\"Session Name\"},domProps:{\"value\":(_vm.newSessionName)},on:{\"input\":function($event){if($event.target.composing){ return; }_vm.newSessionName=$event.target.value}}}),_vm._m(1)]),_vm._m(2)])]),_c('div',{attrs:{\"id\":\"account-options\"}},[_c('form',{on:{\"submit\":function($event){$event.preventDefault();}}},[_c('router-link',{staticClass:\"submit\",attrs:{\"tag\":\"button\",\"title\":\"Account Settings\",\"to\":\"/account\"}},[_c('i',{staticClass:\"fas fa-cog\"})])],1),_c('form',{on:{\"submit\":function($event){$event.preventDefault();}}},[_c('router-link',{staticClass:\"submit\",attrs:{\"tag\":\"button\",\"title\":\"Logout\",\"to\":\"/auth/logout\"}},[_c('i',{staticClass:\"fas fa-sign-out-alt\"})])],1)])])}\nvar staticRenderFns = [function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('h4',[_c('span',[_vm._v(\"OR\")])])},function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('span',[_c('i',{staticClass:\"fab fa-d-and-d\"})])},function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('button',{staticClass:\"submit\",attrs:{\"type\":\"submit\",\"title\":\"Create\"}},[_c('i',{staticClass:\"fas fa-arrow-right\"})])}]\n\nexport { render, staticRenderFns }","export * from \"-!cache-loader?{\\\"cacheDirectory\\\":\\\"node_modules/.cache/vue-loader\\\",\\\"cacheIdentifier\\\":\\\"74f43d04-vue-loader-template\\\"}!../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./main.vue?vue&type=template&id=61eb1455&scoped=true&\"","/*\nThis module defines some Point classes.\nA strong focus is made to ensure that at no time a global and a local point are mixed up with each other.\nAt first glance this adds weird looking hacks as ts does not support nominal typing.\n*/\n\nexport function getPointDistance(p1: Point, p2: Point) {\n const a = p1.x - p2.x;\n const b = p1.y - p2.y;\n return Math.sqrt(a * a + b * b);\n}\n\nexport class Point {\n readonly x: number;\n readonly y: number;\n constructor(x: number, y: number) {\n this.x = x;\n this.y = y;\n }\n static fromArray(point: number[]) {\n return new Point(point[0], point[1]);\n }\n add(vec: Vector) {\n return new Point(this.x + vec.x, this.y + vec.y);\n }\n subtract(other: Point) {\n return new Vector(this.x - other.x, this.y - other.y);\n }\n clone(): Point {\n return new Point(this.x, this.y);\n }\n get(dimension: 0 | 1) {\n if (dimension === 0) return this.x;\n return this.y;\n }\n asArray(): number[] {\n return [this.x, this.y];\n }\n}\nexport class GlobalPoint extends Point {\n // This is to differentiate with LocalPoint, is actually never used\n // We do ! to prevent errors that it never gets initialized\n // tslint:disable-next-line:variable-name\n _GlobalPoint!: string;\n add(vec: Vector): GlobalPoint {\n return super.add(vec);\n }\n subtract(other: GlobalPoint): Vector {\n return super.subtract(other);\n }\n clone(): GlobalPoint {\n return super.clone();\n }\n static fromArray(point: number[]) {\n return new GlobalPoint(point[0], point[1]);\n }\n}\n\nexport class LocalPoint extends Point {\n // This is to differentiate with GlobalPoint, is actually never used\n // We do ! to prevent errors that it never gets initialized\n // tslint:disable-next-line:variable-name\n _LocalPoint!: string;\n add(vec: Vector): LocalPoint {\n return super.add(vec);\n }\n subtract(other: LocalPoint): Vector {\n return super.subtract(other);\n }\n clone(): LocalPoint {\n return super.clone();\n }\n}\n\nexport class Vector {\n readonly x: number;\n readonly y: number;\n constructor(x: number, y: number) {\n this.x = x;\n this.y = y;\n }\n dot(other: Vector): number {\n return this.x * other.x + this.y * other.y;\n }\n inverse(): Vector {\n return new Vector(this.x === 0 ? 0 : 1 / this.x, this.y === 0 ? 0 : 1 / this.y);\n }\n length(): number {\n return Math.sqrt(Math.pow(this.x, 2) + Math.pow(this.y, 2));\n }\n normalize(): Vector {\n const l = this.length();\n return new Vector(this.x / l, this.y / l);\n }\n reverse(): Vector {\n return new Vector(-this.x, -this.y);\n }\n multiply(scale: number): Vector {\n return new Vector(this.x * scale, this.y * scale);\n }\n angle(): number {\n return (Math.atan2(this.y, this.x) * 180) / Math.PI;\n }\n}\n\nexport class Ray {\n readonly direction: Vector;\n readonly origin: T;\n tMax: number;\n constructor(origin: T, direction: Vector, tMax?: number) {\n this.direction = direction;\n this.origin = origin;\n if (tMax === undefined) tMax = Infinity;\n this.tMax = tMax;\n }\n static fromPoints(p1: T, p2: T): Ray {\n const vec = new Vector(p2.x - p1.x, p2.y - p1.y);\n let maxT;\n if (Math.abs(vec.x) > 0.01) maxT = (p2.x - p1.x) / vec.x;\n else maxT = (p2.y - p1.y) / vec.y;\n return new Ray(p1, vec, maxT);\n }\n get(t: number): T {\n return new Point(this.origin.x + t * this.direction.x, this.origin.y + t * this.direction.y);\n }\n getDistance(t1: number, t2: number) {\n return Math.sqrt(Math.pow(t2 - t1, 2) * (Math.pow(this.direction.x, 2) + Math.pow(this.direction.y, 2)));\n }\n getT(t1: number, distance: number) {\n return t1 + Math.sqrt(Math.pow(distance, 2) / (Math.pow(this.direction.x, 2) + Math.pow(this.direction.y, 2)));\n }\n}\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('ul',[_vm._l((_vm.folders),function(folder){return _c('li',{key:folder,staticClass:\"folder\",on:{\"click\":function($event){$event.stopPropagation();return _vm.toggle($event)}}},[_vm._v(\"\\n \"+_vm._s(folder)+\"\\n \"),_c('asset-node',{attrs:{\"asset\":_vm.asset[folder]}})],1)}),_vm._l((_vm.files),function(file){return _c('li',{key:file.name,staticClass:\"file draggable token\",attrs:{\"draggable\":\"true\"},on:{\"mouseover\":function($event){_vm.showImage = file.hash},\"mouseout\":function($event){_vm.showImage = null},\"dragstart\":function($event){_vm.dragStart($event, '/static/assets/' + file.hash)}}},[_vm._v(\"\\n \"+_vm._s(file.name)+\"\\n \"),(_vm.showImage == file.hash)?_c('div',{staticClass:\"preview\"},[_c('img',{staticClass:\"asset-preview-image\",attrs:{\"src\":'/static/assets/' + file.hash}})]):_vm._e()])})],2)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","export * from \"-!cache-loader?{\\\"cacheDirectory\\\":\\\"node_modules/.cache/vue-loader\\\",\\\"cacheIdentifier\\\":\\\"74f43d04-vue-loader-template\\\"}!../../../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./asset_node.vue?vue&type=template&id=6d718094&scoped=true&\"","import mod from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./labels.vue?vue&type=style&index=0&id=4697341e&scoped=true&lang=css&\"; export default mod; export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./labels.vue?vue&type=style&index=0&id=4697341e&scoped=true&lang=css&\"","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nimport Vue from \"vue\";\nimport Component from \"vue-class-component\";\nimport vueSlider from \"vue-slider-component\";\n\nimport \"@/game/api/events\";\n\nimport { throttle } from \"lodash\";\nimport { mapGetters, mapState } from \"vuex\";\n\nimport ConfirmDialog from \"@/core/components/modals/confirm.vue\";\nimport Prompt from \"@/core/components/modals/prompt.vue\";\nimport Initiative from \"@/game/ui/initiative.vue\";\nimport LabelManager from \"@/game/ui/labels.vue\";\nimport MenuBar from \"@/game/ui/menu/menu.vue\";\nimport NoteDialog from \"@/game/ui/note.vue\";\nimport SelectionInfo from \"@/game/ui/selection/selection_info.vue\";\nimport Tools from \"@/game/ui/tools/tools.vue\";\n\nimport { createConnection, socket } from \"@/game/api/socket\";\nimport { onKeyDown, onKeyUp } from \"@/game/events/keyboard\";\nimport { scrollZoom } from \"@/game/events/mouse\";\nimport { layerManager } from \"@/game/layers/manager\";\nimport { gameStore } from \"@/game/store\";\nimport { l2g } from \"@/game/units\";\nimport { LocalPoint } from \"./geom\";\n\n@Component({\n components: {\n \"tool-bar\": Tools,\n \"selection-info\": SelectionInfo,\n \"prompt-dialog\": Prompt,\n \"confirm-dialog\": ConfirmDialog,\n \"menu-bar\": MenuBar,\n \"initiative-dialog\": Initiative,\n \"zoom-slider\": vueSlider,\n \"note-dialog\": NoteDialog,\n \"label-dialog\": LabelManager,\n },\n beforeRouteEnter(to, from, next) {\n createConnection(to);\n next();\n },\n beforeRouteLeave(to, from, next) {\n socket.disconnect();\n next();\n },\n})\nexport default class Game extends Vue {\n $refs!: {\n confirm: InstanceType;\n tools: InstanceType;\n };\n\n ready = {\n manager: false,\n tools: false,\n };\n\n get showUI(): boolean {\n return gameStore.showUI;\n }\n\n get IS_DM(): boolean {\n return gameStore.IS_DM;\n }\n\n get layers(): string[] {\n return gameStore.layers;\n }\n\n get selectedLayer(): string {\n return gameStore.selectedLayer;\n }\n\n get zoomDisplay(): number {\n return gameStore.zoomDisplay;\n }\n\n set zoomDisplay(value: number) {\n gameStore.updateZoom({\n newZoomDisplay: value,\n zoomLocation: l2g(new LocalPoint(window.innerWidth / 2, window.innerHeight / 2)),\n });\n }\n\n mounted() {\n window.addEventListener(\"resize\", this.resizeWindow);\n window.addEventListener(\"keyup\", onKeyUp);\n window.addEventListener(\"keydown\", onKeyDown);\n this.ready.manager = true;\n }\n\n destroyed() {\n window.removeEventListener(\"resize\", this.resizeWindow);\n window.removeEventListener(\"keyup\", onKeyUp);\n window.removeEventListener(\"keydown\", onKeyDown);\n this.ready.manager = false;\n }\n\n // Window events\n\n zoom(event: WheelEvent) {\n throttle(scrollZoom)(event);\n }\n\n resizeWindow() {\n layerManager.setWidth(window.innerWidth);\n layerManager.setHeight(window.innerHeight);\n layerManager.invalidate();\n }\n\n // Mouse events\n\n mousedown(event: MouseEvent) {\n this.$refs.tools.mousedown(event);\n }\n mouseup(event: MouseEvent) {\n this.$refs.tools.mouseup(event);\n }\n mousemove(event: MouseEvent) {\n this.$refs.tools.mousemove(event);\n }\n mouseleave(event: MouseEvent) {\n this.$refs.tools.mouseleave(event);\n }\n contextmenu(event: MouseEvent) {\n this.$refs.tools.contextmenu(event);\n }\n selectLayer(layer: string) {\n layerManager.selectLayer(layer);\n }\n drop(event: DragEvent) {\n if (event === null || event.dataTransfer === null) return;\n if (event.dataTransfer.files.length > 0) {\n this.$refs.confirm\n .open(\"Uploading files should be done through the asset manager.\", \"Ok\", \"\")\n .then(() => {}, () => {});\n } else if (event.dataTransfer.getData(\"text/plain\") === \"\") {\n return;\n } else {\n layerManager.dropAsset(event);\n }\n }\n}\n","import { GlobalPoint, LocalPoint, Ray } from \"@/game/geom\";\nimport { gameStore } from \"@/game/store\";\n\nexport function g2l(obj: GlobalPoint): LocalPoint {\n const z = gameStore.zoomFactor;\n const panX = gameStore.panX;\n const panY = gameStore.panY;\n return new LocalPoint((obj.x + panX) * z, (obj.y + panY) * z);\n}\n\nexport function g2lx(x: number) {\n return g2l(new GlobalPoint(x, 0)).x;\n}\n\nexport function g2ly(y: number) {\n return g2l(new GlobalPoint(0, y)).y;\n}\n\nexport function g2lz(z: number) {\n return z * gameStore.zoomFactor;\n}\n\nexport function getUnitDistance(r: number) {\n return (r / gameStore.unitSize) * gameStore.gridSize;\n}\n\nexport function g2lr(r: number) {\n return g2lz(getUnitDistance(r));\n}\n\nexport function l2g(obj: LocalPoint): GlobalPoint;\nexport function l2g(obj: Ray): Ray;\nexport function l2g(obj: LocalPoint | Ray): GlobalPoint | Ray {\n const z = gameStore.zoomFactor;\n const panX = gameStore.panX;\n const panY = gameStore.panY;\n if (obj instanceof LocalPoint) {\n return new GlobalPoint(obj.x / z - panX, obj.y / z - panY);\n } else {\n return new Ray(l2g(obj.origin), obj.direction.multiply(1 / z), obj.tMax);\n }\n}\n\nexport function l2gx(x: number) {\n return l2g(new LocalPoint(x, 0)).x;\n}\n\nexport function l2gy(y: number) {\n return l2g(new LocalPoint(0, y)).y;\n}\n\nexport function l2gz(z: number) {\n return z / gameStore.zoomFactor;\n}\n\nexport function l2gr(r: number) {\n return l2gz(getUnitDistance(r));\n}\n\n(window).g2lx = g2lx;\n(window).g2ly = g2ly;\n","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nimport Vue from \"vue\";\nimport Component from \"vue-class-component\";\n\nimport { mapState } from \"vuex\";\n\nimport ColorPicker from \"@/core/components/colorpicker.vue\";\nimport Prompt from \"@/core/components/modals/prompt.vue\";\nimport AssetNode from \"@/game/ui/menu/asset_node.vue\";\nimport NoteDialog from \"@/game/ui/note.vue\";\n\nimport { getRef, uuidv4 } from \"@/core/utils\";\nimport { socket } from \"@/game/api/socket\";\nimport { Note } from \"@/game/comm/types/general\";\nimport { layerManager } from \"@/game/layers/manager\";\nimport { gameStore } from \"@/game/store\";\n\n@Component({\n components: {\n \"color-picker\": ColorPicker,\n \"asset-node\": AssetNode,\n },\n computed: {\n ...mapState(\"game\", [\"invitationCode\", \"IS_DM\", \"locations\", \"assets\", \"notes\"]),\n },\n})\nexport default class MenuBar extends Vue {\n visible = {\n settings: false,\n locations: false,\n };\n\n get useGrid(): boolean {\n return gameStore.useGrid;\n }\n set useGrid(value: boolean) {\n gameStore.setUseGrid({ useGrid: value, sync: true });\n }\n get fullFOW(): boolean {\n return gameStore.fullFOW;\n }\n set fullFOW(value: boolean) {\n gameStore.setFullFOW({ fullFOW: value, sync: true });\n }\n get fowOpacity(): number {\n return gameStore.fowOpacity;\n }\n set fowOpacity(value: number) {\n if (typeof value !== \"number\") return;\n gameStore.setFOWOpacity({ fowOpacity: value, sync: true });\n }\n get fowLOS(): boolean {\n return gameStore.fowLOS;\n }\n set fowLOS(value: boolean) {\n gameStore.setLineOfSight({ fowLOS: value, sync: true });\n }\n get unitSize(): number {\n return gameStore.unitSize;\n }\n set unitSize(value: number) {\n if (typeof value !== \"number\") return;\n gameStore.setUnitSize({ unitSize: value, sync: true });\n }\n get gridSize(): number {\n return gameStore.gridSize;\n }\n set gridSize(value: number) {\n if (typeof value !== \"number\") return;\n gameStore.setGridSize({ gridSize: value, sync: true });\n }\n get gridColour(): string {\n return gameStore.gridColour;\n }\n set gridColour(value: string) {\n gameStore.setGridColour({ colour: value, sync: true });\n }\n get fowColour(): string {\n return gameStore.fowColour;\n }\n set fowColour(value: string) {\n gameStore.setFOWColour({ colour: value, sync: true });\n }\n get rulerColour(): string {\n return gameStore.rulerColour;\n }\n set rulerColour(value: string) {\n gameStore.setRulerColour({ colour: value, sync: true });\n }\n get visionRangeMin(): number {\n return gameStore.visionRangeMin;\n }\n set visionRangeMin(value: number) {\n if (typeof value !== \"number\") return;\n gameStore.setVisionRangeMin({ value, sync: true });\n }\n get visionRangeMax(): number {\n return gameStore.visionRangeMax;\n }\n set visionRangeMax(value: number) {\n if (typeof value !== \"number\") return;\n gameStore.setVisionRangeMax({ value, sync: true });\n }\n settingsClick(event: { target: HTMLElement }) {\n if (event.target.classList.contains(\"accordion\")) {\n event.target.classList.toggle(\"accordion-active\");\n const next = event.target.nextElementSibling;\n if (next !== null) next.style.display = next.style.display === \"\" ? \"block\" : \"\";\n }\n }\n changeLocation(name: string) {\n socket.emit(\"Location.Change\", name);\n }\n createLocation() {\n getRef(\"prompt\")\n .prompt(`New location name:`, `Create new location`)\n .then(\n (value: string) => {\n socket.emit(\"Location.New\", value);\n },\n () => {},\n );\n }\n createNote() {\n const note = { title: \"New note\", text: \"\", uuid: uuidv4() };\n gameStore.newNote({ note, sync: true });\n this.openNote(note);\n }\n openNote(note: Note) {\n getRef(\"note\").open(note);\n }\n changeVisionMode(event: { target: HTMLSelectElement }) {\n const value = event.target.value.toLowerCase();\n if (value !== \"bvh\" && value !== \"triangle\") return;\n gameStore.setVisionMode({ mode: value, sync: true });\n gameStore.recalculateVision();\n gameStore.recalculateMovement();\n layerManager.invalidate();\n }\n}\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/ts-loader/index.js??ref--12-2!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./colorpicker.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/ts-loader/index.js??ref--12-2!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./colorpicker.vue?vue&type=script&lang=ts&\"","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('ContextMenu',{attrs:{\"visible\":_vm.visible,\"left\":_vm.x + 'px',\"top\":_vm.y + 'px'},on:{\"close\":_vm.close}},[(_vm.IS_DM)?_c('li',{on:{\"click\":_vm.bringPlayers}},[_vm._v(\"Bring players\")]):_vm._e(),_c('li',{on:{\"click\":_vm.createToken}},[_vm._v(\"Create basic token\")]),_c('li',{on:{\"click\":_vm.showInitiative}},[_vm._v(\"Show initiative\")])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","export * from \"-!cache-loader?{\\\"cacheDirectory\\\":\\\"node_modules/.cache/vue-loader\\\",\\\"cacheIdentifier\\\":\\\"74f43d04-vue-loader-template\\\"}!../../../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./selectcontext.vue?vue&type=template&id=44a31e42&scoped=true&\"","import { CDT } from \"./cdt\";\nimport { ccw, cw, orientation, ulp } from \"./triag\";\n\nexport type Point = number[];\n\nexport const INFINITE = -7e310;\n\nlet _INFINITE_VERTEX: Vertex;\n\nexport enum Sign {\n NEGATIVE = -1,\n ZERO = 0,\n POSITIVE = 1,\n\n RIGHT_TURN = -1,\n LEFT_TURN = 1,\n\n SMALLER = -1,\n EQUAL = 0,\n LARGER = 1,\n\n CLOCKWISE = -1,\n COUNTERCLOCKWISE = 1,\n\n COLLINEAR = 0,\n COPLANAR = 0,\n DEGENERATE = 0,\n\n ON_NEGATIVE_SIDE = -1,\n ON_ORIENTED_BOUNDARY = 0,\n ON_POSITIVE_SIDE = 1,\n}\n\nenum LineFaceState {\n UNDEFINED = -1,\n VERTEX_VERTEX = 0,\n VERTEX_EDGE = 1,\n EDGE_VERTEX = 2,\n EDGE_EDGE = 3,\n}\n\nfunction newPoint(): Point {\n return [INFINITE, INFINITE];\n}\n\nexport class Triangle {\n vertices: (Vertex | null)[] = [];\n neighbours: (Triangle | null)[] = [null, null, null];\n constraints = [false, false, false];\n static _counter = 0;\n uid = Triangle._counter++;\n\n constructor(...vertices: (Vertex | null)[]) {\n this.vertices = vertices;\n }\n\n from(t: Triangle): this {\n this.vertices = t.vertices.slice(0, t.vertices.length);\n this.neighbours = t.neighbours.slice(0, t.neighbours.length);\n this.constraints = t.constraints.slice(0, t.constraints.length);\n return this;\n }\n\n get dimension() {\n return this.vertices.length - 1;\n }\n\n addVertex(vertex: Vertex) {\n if (vertex === undefined) {\n console.log(\"UNDEFINED HIERE\");\n }\n this.vertices.push(vertex);\n vertex.triangle = this;\n }\n\n isConstrained(index: number): boolean {\n return this.constraints[index];\n }\n\n reorient() {\n // If certain indices do not exist yet thay will append faulty undefined's, thus we slice them\n this.vertices = [this.vertices[1], this.vertices[0], this.vertices[2]].slice(0, this.vertices.length);\n this.neighbours = [this.neighbours[1], this.neighbours[0], this.neighbours[2]];\n this.constraints = [this.constraints[1], this.constraints[0], this.constraints[2]];\n }\n\n indexV(v: Vertex): number {\n return this.vertices.indexOf(v);\n }\n\n indexT(t: Triangle): number {\n return this.neighbours.indexOf(t);\n }\n\n isInfinite(index?: number): boolean {\n if (index === undefined) {\n return this.vertices.includes(_INFINITE_VERTEX);\n } else {\n return this.vertices[ccw(index)]!.infinite || this.vertices[cw(index)]!.infinite;\n }\n }\n\n contains(point: Point) {\n const A =\n -this.vertices[1]!.point![1] * this.vertices[2]!.point![0] +\n this.vertices[0]!.point![1] * (-this.vertices[1]!.point![0] + this.vertices[2]!.point![0]) +\n this.vertices[0]!.point![0] * (this.vertices[1]!.point![1] - this.vertices[2]!.point![1]) +\n this.vertices[1]!.point![0] * this.vertices[2]!.point![1];\n const sign = A < 0 ? -1 : 1;\n const s =\n (this.vertices[0]!.point![1] * this.vertices[2]!.point![0] -\n this.vertices[0]!.point![0] * this.vertices[2]!.point![1] +\n (this.vertices[2]!.point![1] - this.vertices[0]!.point![1]) * point[0] +\n (this.vertices[0]!.point![0] - this.vertices[2]!.point![0]) * point[1]) *\n sign;\n if (s < 0) return false;\n const t =\n (this.vertices[0]!.point![0] * this.vertices[1]!.point![1] -\n this.vertices[0]!.point![1] * this.vertices[1]!.point![0] +\n (this.vertices[0]!.point![1] - this.vertices[1]!.point![1]) * point[0] +\n (this.vertices[1]!.point![0] - this.vertices[0]!.point![0]) * point[1]) *\n sign;\n\n return t > 0 && s + t < A * sign;\n }\n}\n\nexport class Vertex {\n infinite = false;\n private _point: Point | undefined;\n triangle: Triangle | undefined;\n\n constructor(point?: Point) {\n this._point = point;\n }\n\n get point(): Point | undefined {\n return this._point;\n }\n\n set point(point: Point | undefined) {\n this._point = point;\n this.infinite = false;\n }\n}\n\nexport class EdgeCirculator {\n ri: number;\n v: Vertex | null;\n t: Triangle | null;\n _ri: number;\n _v: Vertex | null;\n _t: Triangle | null;\n\n constructor(v: Vertex | null, t: Triangle | null) {\n this.v = v;\n this.t = t;\n if (v === null) {\n this.t = null;\n } else if (t === null) {\n this.t = v.triangle!;\n }\n if (this.t == null || this.t.dimension < 1) {\n this.ri = 0;\n this.v = null;\n this.t = null;\n } else {\n const i = this.t.indexV(v!);\n if (this.t.dimension === 2) this.ri = ccw(i);\n else this.ri = 2;\n }\n this._ri = this.ri;\n this._v = this.v;\n this._t = this.t;\n }\n\n get valid() {\n return this.t !== null && this.v !== null;\n }\n\n next(): boolean {\n let i = this.t!.indexV(this.v!);\n if (this.t!.dimension === 1) {\n this.t = this.t!.neighbours[i === 0 ? 1 : 0];\n } else {\n this.t = this.t!.neighbours[ccw(i)];\n i = this.t!.indexV(this.v!);\n this.ri = ccw(i);\n }\n return this.ri !== this._ri || this.v !== this._v || this.t !== this._t;\n }\n}\n\nexport class EdgeIterator {\n private i = 0;\n pos: Triangle | null;\n edge: Edge = new Edge();\n tds: TDS;\n _es = 0;\n constructor(tds: TDS) {\n this.tds = tds;\n this.edge.second = 0;\n if (tds.dimension <= 0) {\n this.pos = null;\n return;\n }\n this.pos = tds.triangles[0];\n if (tds.dimension === 1) this.edge.second = 2;\n while (this.pos !== null && !this.associatedEdge()) {\n throw new Error(\"[poi\");\n }\n\n if (tds.dimension === 1) this._es = 2;\n }\n\n get valid(): boolean {\n return (this.pos !== null || this._es !== this.edge.second) && this.pos!.isInfinite(this.edge.second);\n }\n\n next() {\n do {\n this.increment();\n } while (this.pos !== null && !this.associatedEdge());\n }\n\n collect(): Edge {\n this.edge.first = this.pos;\n return this.edge;\n }\n\n associatedEdge(): boolean {\n if (this.tds.dimension === 1) return true;\n return (\n this.tds.triangles.indexOf(this.pos!) < this.tds.triangles.indexOf(this.pos!.neighbours[this.edge.second]!)\n );\n }\n\n increment() {\n if (this.tds.dimension === 1) {\n this.i++;\n if (this.tds.triangles.length <= this.i) this.pos = null;\n else this.pos = this.tds.triangles[this.i];\n } else if (this.edge.second === 2) {\n this.edge.second = 0;\n this.i++;\n if (this.tds.triangles.length <= this.i) this.pos = null;\n else this.pos = this.tds.triangles[this.i];\n } else {\n this.edge.second++;\n }\n }\n}\n\nexport class FaceCirculator {\n v: Vertex | null;\n t: Triangle | null;\n _v: Vertex | null;\n _t: Triangle | null;\n\n constructor(v: Vertex | null, t: Triangle | null) {\n this.v = v;\n this.t = t;\n if (v === null) {\n this.t = null;\n } else if (t === null) {\n this.t = v.triangle!;\n }\n if (this.t == null || this.t.dimension < 2) {\n this.v = null;\n this.t = null;\n }\n this._v = this.v;\n this._t = this.t;\n }\n\n get valid() {\n return this.t !== null && this.v !== null;\n }\n\n prev() {\n const i = this.t!.indexV(this.v!);\n this.t = this.t!.neighbours[cw(i)];\n }\n\n next(): boolean {\n const i = this.t!.indexV(this.v!);\n this.t = this.t!.neighbours[ccw(i)];\n return this.v !== this._v || this.t !== this._t;\n }\n}\n\nexport class LineFaceCirculator {\n private i = 0;\n pos: Triangle | null = null;\n _tr: CDT;\n s: LineFaceState = LineFaceState.UNDEFINED;\n p: Point;\n q: Point;\n\n constructor(v: Vertex, tr: CDT, dir: Point) {\n this._tr = tr;\n this.p = v.point!;\n this.q = dir;\n\n const fc = new FaceCirculator(v, null);\n let ic = fc.t!.indexV(v);\n let vt = fc.t!.vertices[cw(ic)]!;\n while (v === _INFINITE_VERTEX || orientation(this.p, this.q, vt.point!) !== Sign.LEFT_TURN) {\n fc.next();\n ic = fc.t!.indexV(v);\n vt = fc.t!.vertices[cw(ic)]!;\n if (!fc.valid) {\n return;\n }\n }\n\n let vr = fc.t!.vertices[ccw(ic)]!;\n let pqr: Sign = Sign.RIGHT_TURN;\n // tslint:disable:no-conditional-assignment\n while (vr !== _INFINITE_VERTEX && (pqr = orientation(this.p, this.q, vr.point!)) === Sign.LEFT_TURN) {\n fc.prev();\n ic = fc.t!.indexV(v);\n vr = fc.t!.vertices[ccw(ic)]!;\n }\n\n ic = fc.t!.indexV(v);\n vt = fc.t!.vertices[cw(ic)]!;\n\n if (vr === _INFINITE_VERTEX) {\n fc.prev();\n ic = fc.t!.indexV(v);\n vr = fc.t!.vertices[ccw(ic)]!;\n pqr = orientation(this.p, this.q, vr.point!);\n switch (pqr) {\n case Sign.RIGHT_TURN:\n case Sign.COLLINEAR: {\n fc.next();\n ic = fc.t!.indexV(_INFINITE_VERTEX);\n this.pos = fc.t!;\n this.s = LineFaceState.VERTEX_VERTEX;\n this.i = ic;\n break;\n }\n case Sign.LEFT_TURN: {\n break;\n }\n }\n } else if (pqr === Sign.COLLINEAR) {\n this.pos = fc.t!;\n this.s = LineFaceState.VERTEX_VERTEX;\n this.i = ccw(ic);\n } else {\n this.pos = fc.t!;\n this.s = LineFaceState.VERTEX_EDGE;\n this.i = ic;\n }\n }\n\n next() {\n this.increment();\n }\n\n increment() {\n let o: Sign;\n if (this.s === LineFaceState.VERTEX_VERTEX || this.s === LineFaceState.EDGE_VERTEX) {\n do {\n const n = this.pos!.neighbours[cw(this.i)]!;\n this.i = n.indexT(this.pos!);\n this.pos = n;\n if (this.pos!.vertices[this.i] === _INFINITE_VERTEX) {\n o = Sign.COLLINEAR;\n this.i = cw(this.i);\n break;\n }\n o = orientation(this.p, this.q, this.pos!.vertices[this.i]!.point!);\n this.i = cw(this.i);\n } while (o === Sign.LEFT_TURN);\n if (o === Sign.COLLINEAR) {\n this.s = LineFaceState.VERTEX_VERTEX;\n this.i = ccw(this.i);\n } else {\n this.s = LineFaceState.VERTEX_EDGE;\n }\n } else {\n const n = this.pos!.neighbours[this.i]!;\n const ni = n.indexT(this.pos!);\n this.pos = n;\n o =\n this.pos!.vertices[ni]! === _INFINITE_VERTEX\n ? Sign.COLLINEAR\n : orientation(this.p, this.q, this.pos!.vertices[ni]!.point!);\n switch (o) {\n case Sign.LEFT_TURN: {\n this.s = LineFaceState.EDGE_EDGE;\n this.i = ccw(ni);\n break;\n }\n case Sign.RIGHT_TURN: {\n this.s = LineFaceState.EDGE_EDGE;\n this.i = cw(ni);\n break;\n }\n default: {\n this.s = LineFaceState.EDGE_VERTEX;\n this.i = ni;\n }\n }\n }\n }\n}\n\nclass Edge {\n first: Triangle | null = null;\n second: number = 0;\n}\n\nexport enum LocateType {\n VERTEX,\n EDGE,\n FACE,\n OUTSIDE_CONVEX_HULL,\n OUTSIDE_AFFINE_HULL,\n}\n\nexport class TDS {\n dimension = -1;\n vertices: Vertex[] = [];\n triangles: Triangle[] = [];\n _infinite: Vertex;\n\n constructor() {\n this._infinite = this.createVertex();\n _INFINITE_VERTEX = this._infinite;\n const t = new Triangle();\n t.addVertex(this._infinite);\n this.triangles.push(t);\n }\n\n createVertex(): Vertex {\n const v = this.infiniteVertex;\n if (v === undefined) {\n console.log(\"UNDEFINED HIERE\");\n }\n this.vertices.push(v);\n return v;\n }\n\n createTriangle(\n v0: Vertex | null,\n v1: Vertex | null,\n v2: Vertex | null,\n n0: Triangle | null,\n n1: Triangle | null,\n n2: Triangle | null,\n ) {\n const t = new Triangle(v0, v1, v2);\n t.neighbours[0] = n0;\n t.neighbours[1] = n1;\n t.neighbours[2] = n2;\n this.triangles.push(t);\n return t;\n }\n\n deleteTriangle(trig: Triangle) {\n this.triangles = this.triangles.filter(t => t !== trig);\n }\n\n setAdjacency(t0: Triangle, i0: number, t1: Triangle, i1: number) {\n t0.neighbours[i0] = t1;\n t1.neighbours[i1] = t0;\n }\n\n get finiteVertex(): Vertex {\n return this.vertices[1];\n }\n\n get infiniteVertex(): Vertex {\n const v = new Vertex(newPoint());\n v.infinite = true;\n return v;\n }\n\n get finiteEdge(): Edge {\n if (this.dimension < 1) throw new Error(\"aspo\");\n const ei = new EdgeIterator(this);\n while (ei.valid) ei.next();\n return ei.collect();\n }\n\n insertDimUp(w: Vertex = new Vertex(), orient: boolean = true): Vertex {\n const v = this.createVertex();\n this.dimension++;\n let t1: Triangle;\n let t2: Triangle;\n switch (this.dimension) {\n case 0: {\n t1 = this.triangles[0];\n t2 = new Triangle(v);\n this.triangles.push(t2);\n this.setAdjacency(t1, 0, t2, 0);\n v.triangle = t2;\n break;\n }\n case 1:\n case 2: {\n const deleteList: Triangle[] = [];\n const triangles = this.triangles.slice(0, this.triangles.length);\n for (const trig of triangles) {\n const copy = new Triangle().from(trig);\n this.triangles.push(copy);\n trig.vertices[this.dimension] = v;\n copy.vertices[this.dimension] = w;\n this.setAdjacency(trig, this.dimension, copy, this.dimension);\n if (trig.vertices.includes(w)) deleteList.push(copy);\n }\n for (const trig of triangles) {\n const neighbour = trig.neighbours[this.dimension];\n for (let j = 0; j < this.dimension; ++j) {\n neighbour!.neighbours[j] = trig.neighbours[j]!.neighbours[this.dimension];\n }\n }\n\n let lfit = 0;\n if (this.dimension === 1) {\n if (orient) {\n triangles[lfit].reorient();\n lfit++;\n triangles[lfit].neighbours[1]!.reorient();\n } else {\n triangles[lfit].neighbours[1]!.reorient();\n lfit++;\n triangles[lfit].reorient();\n }\n } else {\n for (const trig of triangles) {\n if (orient) trig.neighbours[2]!.reorient();\n else trig.reorient();\n }\n }\n\n for (const trig of deleteList) {\n let j = 1;\n if (trig.vertices[0] === w) j = 0;\n t1 = trig.neighbours[this.dimension]!;\n const i1 = this.mirrorIndex(trig, this.dimension);\n t2 = trig.neighbours[j]!;\n const i2 = this.mirrorIndex(trig, j);\n this.setAdjacency(t1, i1, t2, i2);\n this.deleteTriangle(trig);\n }\n v.triangle = triangles[0];\n break;\n }\n default: {\n throw new Error(\"Dimension unknown\");\n }\n }\n return v;\n }\n\n mirrorIndex(t: Triangle, i: number): number {\n if (t.dimension === 1) {\n const j = t.neighbours[i]!.indexV(t.vertices[i === 0 ? 1 : 0]!);\n return j === 0 ? 1 : 0;\n }\n return ccw(t.neighbours[i]!.indexV(t.vertices[ccw(i)]!));\n }\n\n insertInFace(t: Triangle) {\n const v = this.createVertex();\n const v0 = t.vertices[0]!;\n const v1 = t.vertices[1]!;\n const v2 = t.vertices[2]!;\n const n1 = t.neighbours[1]!;\n const n2 = t.neighbours[2]!;\n const t1 = this.createTriangle(v0, v, v2, t, n1, null);\n const t2 = this.createTriangle(v0, v1, v, t, null, n2);\n this.setAdjacency(t1, 2, t2, 1);\n if (n1 !== null) {\n const i1 = this.mirrorIndex(t, 1);\n n1.neighbours[i1] = t1;\n }\n if (n2 !== null) {\n const i2 = this.mirrorIndex(t, 2);\n n2.neighbours[i2] = t2;\n }\n t.vertices[0] = v;\n t.neighbours[1] = t1;\n t.neighbours[2] = t2;\n if (v0.triangle === t) v0.triangle = t2;\n v.triangle = t;\n return v;\n }\n\n flip(t: Triangle, i: number) {\n const n = t.neighbours[i]!;\n const ni = this.mirrorIndex(t, i);\n const vCW = t.vertices[cw(i)]!;\n const vCCW = t.vertices[ccw(i)]!;\n const tr = t.neighbours[ccw(i)]!;\n const tri = this.mirrorIndex(t, ccw(i));\n const bl = n.neighbours[ccw(ni)]!;\n const bli = this.mirrorIndex(n, ccw(ni));\n\n t.vertices[cw(i)] = n.vertices[ni]!;\n n.vertices[cw(ni)] = t.vertices[i]!;\n\n this.setAdjacency(t, i, bl, bli);\n this.setAdjacency(t, ccw(i), n, ccw(ni));\n this.setAdjacency(n, ni, tr, tri);\n\n if (vCW.triangle! === t) vCW.triangle = n;\n if (vCCW.triangle! === n) vCCW.triangle = t;\n }\n\n insertInEdge(t: Triangle, i: number) {\n let v: Vertex;\n if (this.dimension === 1) {\n v = this.createVertex();\n const ff = t.neighbours[0]!;\n const vv = t.vertices[1]!;\n const g = this.createTriangle(v, vv, null, ff, t, null);\n t.vertices[1] = v;\n t.neighbours[0] = g;\n ff.neighbours[1] = g;\n v.triangle = g;\n vv.triangle = ff;\n } else {\n const n = t.neighbours[i]!;\n const ni = this.mirrorIndex(t, i);\n v = this.insertInFace(t);\n this.flip(n, ni);\n }\n return v;\n }\n}\n\nexport class BoundingBox {\n x1: number;\n x2: number;\n y1: number;\n y2: number;\n constructor(p: Point) {\n this.x1 = p[0];\n this.y1 = p[1];\n this.x2 = p[0];\n this.y2 = p[1];\n }\n\n dilate(dist: number) {\n this.x1 -= dist * ulp(this.x1);\n this.y1 -= dist * ulp(this.y1);\n this.x2 += dist * ulp(this.x2);\n this.y2 += dist * ulp(this.y2);\n }\n\n overlaps(other: BoundingBox): boolean {\n if (this.x2 < other.x1 || other.x2 < this.x1) return false;\n if (this.y2 < other.y1 || other.y2 < this.y1) return false;\n return true;\n }\n}\n","import { partition } from \"@/core/utils\";\nimport { GlobalPoint, Ray } from \"@/game/geom\";\nimport { layerManager } from \"@/game/layers/manager\";\nimport { BoundingRect } from \"@/game/shapes/boundingrect\";\nimport { gameStore } from \"@/game/store\";\nimport { g2lx, g2ly, g2lz } from \"@/game/units\";\nimport { BoundingNode, InteriorNode, LeafNode } from \"@/game/visibility/bvh/node\";\n\ninterface BuildInfo {\n index: number;\n bbox: BoundingRect;\n center: BoundingRect;\n}\ninterface LinearBHVNode {\n bbox: BoundingRect;\n nPrimitives: number;\n}\ninterface LinearLeafNode extends LinearBHVNode {\n primitivesOffset: number;\n}\ninterface LinearInternalNode extends LinearBHVNode {\n secondChildOffset: number;\n dimension: number;\n}\n\nexport class BoundingVolume {\n totalNodes = 0;\n buildData: BuildInfo[] = [];\n shapes: string[];\n orderedPrims: string[] = [];\n root: BoundingNode | null;\n nodes: LinearBHVNode[] = [];\n\n offset = 0;\n\n constructor(shapes: string[]) {\n this.shapes = shapes;\n if (this.shapes.length === 0) {\n this.root = null;\n this.nodes = [];\n return;\n }\n for (let i = 0; i < shapes.length; i++) {\n const shape = layerManager.UUIDMap.get(shapes[i])!;\n this.buildData.push({\n index: i,\n bbox: shape.getBoundingBox(),\n center: new BoundingRect(shape.center(), 0, 0),\n });\n }\n this.root = this.recursiveBuild(0, shapes.length);\n this.compact();\n }\n\n draw() {\n const ctx = layerManager.getLayer(\"draw\")!.ctx;\n for (const node of this.nodes) {\n const b = node.bbox;\n ctx.strokeRect(g2lx(b.topLeft.x), g2ly(b.topLeft.y), g2lz(b.w), g2lz(b.h));\n }\n }\n\n recursiveBuild(start: number, end: number): BoundingNode {\n this.totalNodes++;\n let bbox = this.buildData[start].bbox;\n for (let i = start + 1; i < end; i++) bbox = bbox.union(this.buildData[i].bbox);\n const nPrimitives = end - start;\n if (nPrimitives === 1) {\n return this.createLeaf(start, end, nPrimitives, bbox);\n } else {\n let centroidBbox = this.buildData[start].center;\n for (let i = start; i < end; i++) centroidBbox = centroidBbox.union(this.buildData[i].center);\n const dimension = centroidBbox.getMaxExtent();\n if (centroidBbox.botRight.get(dimension) === centroidBbox.topLeft.get(dimension)) {\n return this.createLeaf(start, end, nPrimitives, bbox);\n }\n // Use shitty Middle thingy until an introselect js algo is added\n const pMid = 0.5 * (centroidBbox.topLeft.get(dimension) + centroidBbox.botRight.get(dimension));\n const partitionedData = partition(\n this.buildData.slice(start, end),\n (n: BuildInfo) => n.center.center().get(dimension) < pMid,\n );\n const flattened = ([]).concat.apply([], partitionedData);\n if (partitionedData[0].length === 0 || partitionedData[1].length === 0) console.log(\"EMPTY\");\n this.buildData.splice(start, flattened.length, ...flattened);\n const mid = partitionedData[0].length + start;\n return new InteriorNode(dimension, this.recursiveBuild(start, mid), this.recursiveBuild(mid, end));\n }\n }\n\n intersect(ray: Ray, stopOnFirstHit?: boolean) {\n if (this.nodes.length === 0) return { hit: false, intersect: ray.get(0), tMin: 0, tMax: ray.tMax };\n if (stopOnFirstHit === undefined) stopOnFirstHit = false;\n // Initialize return values\n let hit = false;\n let tMin = 0;\n let tMax = ray.tMax;\n\n // Initialize work variables\n let todoOffset = 0;\n let nodeNum = 0;\n const todo: number[] = [];\n\n // Precalculate intersection vectors\n const invDir = ray.direction.inverse();\n const dirIsNegative = [invDir.x < 0, invDir.y < 0];\n\n while (true) {\n const node = this.nodes[nodeNum];\n\n const i = node.bbox.intersectP(ray, invDir, dirIsNegative);\n if (i.hit) {\n if (node.nPrimitives > 0) {\n // TODO: nPrimitives is currently always 1 , this could be generalised\n // for (let i=0; i < node.nPrimitives; i++) {\n // if (this.shapes[(node).primitivesOffset + i])\n // }\n hit = true;\n tMin = ray.tMax = i.min;\n tMax = i.max;\n if (todoOffset === 0 || stopOnFirstHit) break;\n nodeNum = todo[--todoOffset];\n } else {\n if (dirIsNegative[(node).dimension]) {\n todo[todoOffset++] = nodeNum + 1;\n nodeNum = (node).secondChildOffset;\n } else {\n todo[todoOffset++] = (node).secondChildOffset;\n nodeNum++;\n }\n }\n } else {\n if (todoOffset === 0) break;\n nodeNum = todo[--todoOffset];\n }\n }\n return { hit, intersect: ray.get(tMin), tMin, tMax };\n }\n\n private compact() {\n this.offset = 0;\n if (this.root !== null) this.flatten(this.root);\n }\n\n private flatten(node: BoundingNode) {\n const index = this.offset;\n const myOffset = this.offset++;\n if (node.nPrimitives === 0) {\n this.flatten(node.children[0]);\n const secondOffset = this.flatten(node.children[1]);\n this.nodes[index] = {\n bbox: node.bbox,\n dimension: (node).dimension,\n nPrimitives: 0,\n secondChildOffset: secondOffset,\n };\n } else {\n this.nodes[index] = {\n bbox: node.bbox,\n primitivesOffset: (node).firstPrimOffset,\n nPrimitives: node.nPrimitives,\n };\n }\n return myOffset;\n }\n\n private createLeaf(start: number, end: number, nPrimitives: number, bbox: BoundingRect) {\n const size = this.orderedPrims.length;\n for (let i = start; i < end; i++) this.orderedPrims.push(this.shapes[this.buildData[i].index]);\n return new LeafNode(size, nPrimitives, bbox);\n }\n}\n","import Initiative from \"./ui/initiative.vue\";\n\nimport { getRef } from \"@/core/utils\";\nimport { sendClientOptions } from \"@/game/api/utils\";\nimport { ServerShape } from \"@/game/comm/types/shapes\";\nimport { GlobalPoint } from \"@/game/geom\";\nimport { layerManager } from \"@/game/layers/manager\";\nimport { createShapeFromDict } from \"@/game/shapes/utils\";\nimport { gameStore } from \"@/game/store\";\nimport { AnnotationManager } from \"@/game/ui/annotation\";\nimport { g2l } from \"@/game/units\";\n\nexport class GameManager {\n selectedTool: number = 0;\n\n annotationManager = new AnnotationManager();\n\n addShape(shape: ServerShape): void {\n if (!layerManager.hasLayer(shape.layer)) {\n console.log(`Shape with unknown layer ${shape.layer} could not be added`);\n return;\n }\n const layer = layerManager.getLayer(shape.layer)!;\n const sh = createShapeFromDict(shape);\n if (sh === undefined) {\n console.log(`Shape with unknown type ${shape.type_} could not be added`);\n return;\n }\n layer.addShape(sh, false);\n layer.invalidate(false);\n }\n\n updateShape(data: { shape: ServerShape; redraw: boolean; move: boolean; temporary: boolean }): void {\n if (!layerManager.hasLayer(data.shape.layer)) {\n console.log(`Shape with unknown layer ${data.shape.layer} could not be added`);\n return;\n }\n const sh = createShapeFromDict(data.shape);\n if (sh === undefined) {\n console.log(`Shape with unknown type ${data.shape.type_} could not be added`);\n return;\n }\n const oldShape = layerManager.UUIDMap.get(data.shape.uuid);\n if (oldShape === undefined) {\n console.log(`Shape with unknown id could not be updated`);\n return;\n }\n const redrawInitiative = sh.owners !== oldShape.owners;\n const shape = Object.assign(oldShape, sh);\n shape.checkVisionSources();\n shape.setMovementBlock(shape.movementObstruction);\n shape.setIsToken(shape.isToken);\n if (data.redraw) {\n gameStore.recalculateVision(data.temporary);\n layerManager.getLayer(data.shape.layer)!.invalidate(false);\n if (shape.movementObstruction) gameStore.recalculateMovement(data.temporary);\n }\n if (redrawInitiative) getRef(\"initiative\").$forceUpdate();\n }\n\n setCenterPosition(position: GlobalPoint) {\n const localPos = g2l(position);\n gameStore.increasePanX((window.innerWidth / 2 - localPos.x) / gameStore.zoomFactor);\n gameStore.increasePanY((window.innerHeight / 2 - localPos.y) / gameStore.zoomFactor);\n layerManager.invalidate();\n sendClientOptions();\n }\n}\n\nexport const gameManager = new GameManager();\n(window).gameManager = gameManager;\n","import mod from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./asset_node.vue?vue&type=style&index=0&id=6d718094&scoped=true&lang=css&\"; export default mod; export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./asset_node.vue?vue&type=style&index=0&id=6d718094&scoped=true&lang=css&\"","\n\n\n\n\n\nimport Vue from \"vue\";\nimport Component from \"vue-class-component\";\n\n@Component\nexport default class LoadComponent extends Vue {\n message = \"Loading...\";\n}\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return (_vm.shape !== null)?_c('div',[_c('div',{attrs:{\"id\":\"selection-menu\"}},[_c('div',{attrs:{\"id\":\"selection-edit-button\"},on:{\"click\":_vm.openEditDialog}},[_c('i',{staticClass:\"fas fa-edit\"})]),_c('div',{attrs:{\"id\":\"selection-name\"}},[_vm._v(_vm._s(_vm.shape.name))]),_c('div',{attrs:{\"id\":\"selection-trackers\"}},[_vm._l((_vm.shape.trackers),function(tracker){return (tracker.name !== '' || tracker.value !== 0)?[_c('div',{key:'name-' + tracker.uuid},[_vm._v(_vm._s(tracker.name))]),_c('div',{key:'value-' + tracker.uuid,staticClass:\"selection-tracker-value\",on:{\"click\":function($event){_vm.changeValue(tracker, false)}}},[(tracker.maxvalue === 0)?[_vm._v(_vm._s(tracker.value))]:[_vm._v(_vm._s(tracker.value)+\" / \"+_vm._s(tracker.maxvalue))]],2)]:_vm._e()})],2),_c('div',{attrs:{\"id\":\"selection-auras\"}},[_vm._l((_vm.shape.auras),function(aura){return (aura.name !== '' || aura.value !== 0)?[_c('div',{key:'name-' + aura.uuid},[_vm._v(_vm._s(aura.name))]),_c('div',{key:'value-' + aura.uuid,staticClass:\"selection-tracker-value\",on:{\"click\":function($event){_vm.changeValue(aura, true)}}},[(aura.dim === 0)?[_vm._v(_vm._s(aura.value))]:[_vm._v(_vm._s(aura.value)+\" / \"+_vm._s(aura.dim))]],2)]:_vm._e()})],2)]),_c('edit-dialog',{ref:\"editDialog\",attrs:{\"shape\":_vm.shape}})],1):_vm._e()}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","export * from \"-!cache-loader?{\\\"cacheDirectory\\\":\\\"node_modules/.cache/vue-loader\\\",\\\"cacheIdentifier\\\":\\\"74f43d04-vue-loader-template\\\"}!../../../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./selection_info.vue?vue&type=template&id=674cf937&scoped=true&\"","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return (_vm.getActiveLayer() !== undefined)?_c('ContextMenu',{attrs:{\"visible\":_vm.visible,\"left\":_vm.x + 'px',\"top\":_vm.y + 'px'},on:{\"close\":_vm.close}},[(_vm.getLayers().length > 1)?_c('li',[_vm._v(\"Layer\\n \"),_c('ul',_vm._l((_vm.getLayers()),function(layer){return _c('li',{key:layer.name,style:([_vm.getActiveLayer().name === layer.name ? {'background-color':'#82c8a0'}: {}]),on:{\"click\":function($event){_vm.setLayer(layer.name)}}},[_vm._v(_vm._s(layer.name))])}))]):_vm._e(),_c('li',{on:{\"click\":_vm.moveToBack}},[_vm._v(\"Move to back\")]),_c('li',{on:{\"click\":_vm.moveToFront}},[_vm._v(\"Move to front\")]),_c('li',{on:{\"click\":_vm.addInitiative}},[_vm._v(_vm._s(_vm.getInitiativeWord())+\" initiative\")]),_c('li',{on:{\"click\":_vm.openEditDialog}},[_vm._v(\"Show properties\")])]):_vm._e()}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","export * from \"-!cache-loader?{\\\"cacheDirectory\\\":\\\"node_modules/.cache/vue-loader\\\",\\\"cacheIdentifier\\\":\\\"74f43d04-vue-loader-template\\\"}!../../../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./shapecontext.vue?vue&type=template&id=759e5a8a&scoped=true&\"","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return (_vm.selected)?_c('div',{staticClass:\"tool-detail\",style:({'--detailRight': _vm.detailRight, '--detailArrow': _vm.detailArrow})},[_c('div',{attrs:{\"id\":\"accordion-container\"}},_vm._l((_vm.categories),function(category){return _c('accordion',{key:category,attrs:{\"title\":category,\"showArrow\":false,\"items\":_vm.labels[category],\"initialValues\":_vm.initalValues[category]},on:{\"selectionupdate\":_vm.updateSelection}})}))]):_vm._e()}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","export * from \"-!cache-loader?{\\\"cacheDirectory\\\":\\\"node_modules/.cache/vue-loader\\\",\\\"cacheIdentifier\\\":\\\"74f43d04-vue-loader-template\\\"}!../../../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./filter.vue?vue&type=template&id=847e7ec4&scoped=true&\"","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nimport axios, { AxiosError, AxiosResponse } from \"axios\";\nimport Vue from \"vue\";\nimport Component from \"vue-class-component\";\nimport { Route } from \"vue-router\";\n\nimport { coreStore } from \"@/core/store\";\n\nComponent.registerHooks([\"beforeRouteEnter\"]);\n\n@Component\nexport default class Dashboard extends Vue {\n owned = [];\n joined = [];\n error = \"\";\n\n newSessionName = \"\";\n\n beforeRouteEnter(to: Route, from: Route, next: ({}) => {}) {\n axios\n .get(\"/api/rooms\")\n .then((response: AxiosResponse) => {\n next((vm: this) => {\n vm.owned = response.data.owned;\n vm.joined = response.data.joined;\n });\n })\n .catch((err: AxiosError) => {\n next((vm: this) => {\n vm.error = err.message;\n });\n });\n }\n\n createRoom(event: Event) {\n axios\n .post(\"/api/rooms\", {\n name: this.newSessionName,\n })\n .then((response: AxiosResponse) => {\n this.$router.push(`/game/${coreStore.username}/${this.newSessionName}`);\n })\n .catch((err: AxiosError) => {\n this.error = err.message;\n });\n }\n}\n","import { render, staticRenderFns } from \"./confirm.vue?vue&type=template&id=1883e207&scoped=true&\"\nimport script from \"./confirm.vue?vue&type=script&lang=ts&\"\nexport * from \"./confirm.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./confirm.vue?vue&type=style&index=0&id=1883e207&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"1883e207\",\n null\n \n)\n\ncomponent.options.__file = \"confirm.vue\"\nexport default component.exports","import mod from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./tools.vue?vue&type=style&index=0&id=cf33581e&scoped=true&lang=css&\"; export default mod; export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./tools.vue?vue&type=style&index=0&id=cf33581e&scoped=true&lang=css&\"","import mod from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/ts-loader/index.js??ref--12-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./shapecontext.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/ts-loader/index.js??ref--12-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./shapecontext.vue?vue&type=script&lang=ts&\"","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('ContextMenu',{attrs:{\"visible\":_vm.visible,\"left\":_vm.left + 'px',\"top\":_vm.top + 'px'},on:{\"close\":_vm.close}},[_c('li',{on:{\"click\":_vm.rename}},[_vm._v(\"Rename\")]),_c('li',{on:{\"click\":_vm.remove}},[_vm._v(\"Remove\")])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","export * from \"-!cache-loader?{\\\"cacheDirectory\\\":\\\"node_modules/.cache/vue-loader\\\",\\\"cacheIdentifier\\\":\\\"74f43d04-vue-loader-template\\\"}!../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./contextMenu.vue?vue&type=template&id=606797b4&\"","import mod from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./draw.vue?vue&type=style&index=0&id=639cd890&scoped=true&lang=css&\"; export default mod; export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./draw.vue?vue&type=style&index=0&id=639cd890&scoped=true&lang=css&\"","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('Modal',{attrs:{\"visible\":_vm.visible,\"mask\":false},on:{\"close\":function($event){_vm.visible = false}},scopedSlots:_vm._u([{key:\"header\",fn:function(m){return _c('div',{staticClass:\"modal-header\",attrs:{\"draggable\":\"true\"},on:{\"dragstart\":m.dragStart,\"dragend\":m.dragEnd}},[_c('div',[_vm._v(\"Label manager\")]),_c('div',{staticClass:\"header-close\",on:{\"click\":function($event){_vm.visible = false}}},[_c('i',{staticClass:\"far fa-window-close\"})])])}}])},[_c('div',{staticClass:\"modal-body\"},[_c('div',{staticClass:\"grid\"},[_c('div',{staticClass:\"header\"},[_c('abbr',{attrs:{\"title\":\"Category\"}},[_vm._v(\"Cat.\")])]),_c('div',{staticClass:\"header name\"},[_vm._v(\"Name\")]),_c('div',{staticClass:\"header\"},[_c('abbr',{attrs:{\"title\":\"Visible\"}},[_vm._v(\"Vis.\")])]),_c('div',{staticClass:\"header\"},[_c('abbr',{attrs:{\"title\":\"Delete\"}},[_vm._v(\"Del.\")])]),_c('div',{staticClass:\"separator spanrow\",staticStyle:{\"margin\":\"0 0 7px\"}}),_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.search),expression:\"search\"}],ref:\"search\",staticClass:\"spanrow\",attrs:{\"type\":\"text\",\"placeholder\":\"search\"},domProps:{\"value\":(_vm.search)},on:{\"input\":function($event){if($event.target.composing){ return; }_vm.search=$event.target.value}}})]),_c('div',{staticClass:\"grid scroll\"},[_vm._l((_vm.categories),function(category){return [_vm._l((_vm.labels[category]),function(label){return [_c('div',{key:'row-'+label.uuid,staticClass:\"row\",on:{\"click\":function($event){_vm.selectLabel(label.uuid)}}},[(label.category)?[_c('div',{key:'cat-'+label.uuid},[_vm._v(_vm._s(label.category))]),_c('div',{key:'name-'+label.uuid,staticClass:\"name\"},[_vm._v(_vm._s(label.name))])]:_vm._e(),(!label.category)?[_c('div',{key:'cat-'+label.uuid}),_c('div',{key:'name-'+label.uuid,staticClass:\"name\"},[_vm._v(_vm._s(label.name))])]:_vm._e(),_c('div',{key:'visible-'+label.uuid,class:{'lower-opacity': !label.visible},style:({textAlign: 'center'}),on:{\"click\":function($event){$event.stopPropagation();_vm.toggleVisibility(label)}}},[_c('i',{staticClass:\"fas fa-eye\"})]),_c('div',{key:'delete-'+label.uuid,on:{\"click\":function($event){$event.stopPropagation();_vm.deleteLabel(label.uuid)}}},[_c('i',{staticClass:\"fas fa-trash-alt\"})])],2)]})]}),(_vm.labels.length === 0)?[_c('div',{attrs:{\"id\":\"no-labels\"}},[_vm._v(\"No labels exist yet\")])]:_vm._e()],2),_c('div',{staticClass:\"grid\"},[_c('div',{staticClass:\"separator spanrow\"}),_c('input',{directives:[{name:\"model\",rawName:\"v-model.trim\",value:(_vm.newCategory),expression:\"newCategory\",modifiers:{\"trim\":true}}],attrs:{\"type\":\"text\"},domProps:{\"value\":(_vm.newCategory)},on:{\"input\":function($event){if($event.target.composing){ return; }_vm.newCategory=$event.target.value.trim()},\"blur\":function($event){_vm.$forceUpdate()}}}),_c('input',{directives:[{name:\"model\",rawName:\"v-model.trim\",value:(_vm.newName),expression:\"newName\",modifiers:{\"trim\":true}}],attrs:{\"type\":\"text\"},domProps:{\"value\":(_vm.newName)},on:{\"input\":function($event){if($event.target.composing){ return; }_vm.newName=$event.target.value.trim()},\"blur\":function($event){_vm.$forceUpdate()}}}),_c('button',{attrs:{\"id\":\"addLabelButton\"},on:{\"click\":function($event){$event.stopPropagation();return _vm.addLabel($event)}}},[_vm._v(\"Add\")])])])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","export * from \"-!cache-loader?{\\\"cacheDirectory\\\":\\\"node_modules/.cache/vue-loader\\\",\\\"cacheIdentifier\\\":\\\"74f43d04-vue-loader-template\\\"}!../../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./labels.vue?vue&type=template&id=4697341e&scoped=true&\"","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/ts-loader/index.js??ref--12-2!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./manager.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/ts-loader/index.js??ref--12-2!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./manager.vue?vue&type=script&lang=ts&\"","import Vue from \"vue\";\nexport const EventBus = new Vue();\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/ts-loader/index.js??ref--12-2!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./main.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/ts-loader/index.js??ref--12-2!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./main.vue?vue&type=script&lang=ts&\"","import { GlobalPoint } from \"@/game/geom\";\nimport { BaseRect } from \"@/game/shapes/baserect\";\nimport { gameStore } from \"@/game/store\";\nimport { g2l } from \"@/game/units\";\nimport { getFogColour } from \"@/game/utils\";\n\nexport class Rect extends BaseRect {\n type = \"rect\";\n constructor(topleft: GlobalPoint, w: number, h: number, fillColour?: string, strokeColour?: string, uuid?: string) {\n super(topleft, w, h, fillColour, strokeColour, uuid);\n }\n asDict() {\n return super.getBaseDict();\n }\n draw(ctx: CanvasRenderingContext2D) {\n super.draw(ctx);\n if (this.fillColour === \"fog\") ctx.fillStyle = getFogColour();\n else ctx.fillStyle = this.fillColour;\n const z = gameStore.zoomFactor;\n const loc = g2l(this.refPoint);\n ctx.fillRect(loc.x, loc.y, this.w * z, this.h * z);\n if (this.strokeColour !== \"rgba(0, 0, 0, 0)\") {\n ctx.strokeStyle = this.strokeColour;\n ctx.lineWidth = 5;\n ctx.strokeRect(loc.x, loc.y, this.w * z, this.h * z);\n }\n }\n}\n","import mod from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./game.vue?vue&type=style&index=1&id=05b88da7&scoped=true&lang=css&\"; export default mod; export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./game.vue?vue&type=style&index=1&id=05b88da7&scoped=true&lang=css&\"","import mod from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/ts-loader/index.js??ref--12-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./filter.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/ts-loader/index.js??ref--12-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./filter.vue?vue&type=script&lang=ts&\"","import mod from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/ts-loader/index.js??ref--12-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./selectcontext.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/ts-loader/index.js??ref--12-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./selectcontext.vue?vue&type=script&lang=ts&\"","import { Ray, Vector } from \"@/game/geom\";\nimport { Layer } from \"@/game/layers/layer\";\nimport { layerManager } from \"@/game/layers/manager\";\nimport { Settings } from \"@/game/settings\";\nimport { gameStore } from \"@/game/store\";\nimport { g2l, g2lr, g2lx, g2ly } from \"@/game/units\";\nimport { computeVisibility } from \"../visibility/te/te\";\n\nexport class FOWPlayersLayer extends Layer {\n isVisionLayer: boolean = true;\n\n draw(): void {\n if (!this.valid) {\n // console.time(\"VI\");\n const ctx = this.ctx;\n\n if (!gameStore.fowLOS || Settings.skipPlayerFOW) {\n ctx.clearRect(0, 0, this.canvas.width, this.canvas.height);\n this.valid = true;\n return;\n }\n\n ctx.clearRect(0, 0, this.canvas.width, this.canvas.height);\n\n const originalOperation = ctx.globalCompositeOperation;\n\n ctx.fillStyle = \"rgba(0, 0, 0, 1)\";\n\n // For the DM this is done at the end of this function. TODO: why the split up ???\n // This was done in commit be1e65cff1e7369375fe11cfa1643fab1d11beab.\n if (!gameStore.IS_DM) super.draw(!gameStore.fullFOW);\n\n // Then cut out all the player vision auras\n const maxLength = ctx.canvas.width + ctx.canvas.height;\n\n for (const tokenId of gameStore.ownedtokens) {\n const token = layerManager.UUIDMap.get(tokenId);\n if (token === undefined) continue;\n const center = token.center();\n const lcenter = g2l(center);\n if (gameStore.visionMode === \"bvh\") {\n ctx.beginPath();\n let lastArcAngle = -1;\n\n for (let angle = 0; angle < 2 * Math.PI; angle += (Settings.angleSteps / 2 / 180) * Math.PI) {\n const cos = Math.cos(angle);\n const sin = Math.sin(angle);\n // Check if there is a hit with one of the nearby light blockers.\n const lightRay = new Ray(center, new Vector(cos, sin));\n const hitResult = gameStore.BV.intersect(lightRay);\n\n // We can move on to the next angle if nothing was hit.\n if (!hitResult.hit) {\n // If an earlier hit caused the aura to leave the arc, we need to go back to the arc\n if (lastArcAngle === -1) {\n // Draw a line from the last non arc location back to the arc\n ctx.lineTo(lcenter.x + maxLength * cos, lcenter.y + maxLength * sin);\n // Set the start of a new arc beginning at the current angle\n lastArcAngle = angle;\n }\n continue;\n }\n // If hit , first finish any ongoing arc, then move to the intersection point\n if (lastArcAngle !== -1) {\n ctx.arc(lcenter.x, lcenter.y, maxLength, lastArcAngle, angle);\n lastArcAngle = -1;\n }\n ctx.lineTo(g2lx(hitResult.intersect.x), g2ly(hitResult.intersect.y));\n }\n\n // Finish the final arc.\n if (lastArcAngle !== -1) ctx.arc(lcenter.x, lcenter.y, maxLength, lastArcAngle, 2 * Math.PI);\n else ctx.closePath();\n ctx.fill();\n } else {\n if (true) {\n // Add a gradient vision dropoff\n const gradient = ctx.createRadialGradient(\n lcenter.x,\n lcenter.y,\n g2lr(gameStore.visionRangeMin),\n lcenter.x,\n lcenter.y,\n g2lr(gameStore.visionRangeMax),\n );\n gradient.addColorStop(0, \"rgba(0, 0, 0, 1)\");\n gradient.addColorStop(1, \"rgba(0, 0, 0, 0)\");\n ctx.fillStyle = gradient;\n } else {\n ctx.fillStyle = \"rgba(0, 0, 0, 1)\";\n }\n try {\n const polygon = computeVisibility(token.center(), \"vision\");\n ctx.beginPath();\n ctx.moveTo(g2lx(polygon[0][0]), g2ly(polygon[0][1]));\n for (const point of polygon) ctx.lineTo(g2lx(point[0]), g2ly(point[1]));\n ctx.closePath();\n ctx.fill();\n } catch {}\n }\n }\n\n // For the players this is done at the beginning of this function. TODO: why the split up ???\n // This was done in commit be1e65cff1e7369375fe11cfa1643fab1d11beab.\n if (gameStore.IS_DM) super.draw(!gameStore.fullFOW);\n\n ctx.globalCompositeOperation = originalOperation;\n // console.timeEnd(\"VI\");\n }\n }\n}\n","import { socket } from \"@/game/api/socket\";\nimport { ServerShape } from \"@/game/comm/types/shapes\";\nimport { EventBus } from \"@/game/event-bus\";\nimport { layerManager } from \"@/game/layers/manager\";\nimport { Shape } from \"@/game/shapes/shape\";\nimport { createShapeFromDict } from \"@/game/shapes/utils\";\nimport { gameStore } from \"@/game/store\";\nimport { g2lx, g2ly } from \"@/game/units\";\n\nexport class Layer {\n name: string;\n width: number;\n height: number;\n canvas: HTMLCanvasElement;\n ctx: CanvasRenderingContext2D;\n\n selectable: boolean = false;\n playerEditable: boolean = false;\n isVisionLayer: boolean = false;\n\n // When set to false, the layer will be redrawn on the next tick\n valid: boolean = false;\n // The collection of shapes that this layer contains.\n // These are ordered on a depth basis.\n shapes: Shape[] = [];\n\n // Collection of shapes that are currently selected\n selection: Shape[] = [];\n\n // Extra selection highlighting settings\n selectionColor = \"#CC0000\";\n selectionWidth = 2;\n\n constructor(canvas: HTMLCanvasElement, name: string) {\n this.canvas = canvas;\n this.name = name;\n this.width = canvas.width;\n this.height = canvas.height;\n this.ctx = canvas.getContext(\"2d\")!;\n }\n\n invalidate(skipLightUpdate: boolean): void {\n this.valid = false;\n if (!skipLightUpdate) {\n layerManager.invalidateLight();\n }\n }\n\n addShape(shape: Shape, sync: boolean, temporary?: boolean, invalidate = true): void {\n if (temporary === undefined) temporary = false;\n shape.layer = this.name;\n this.shapes.push(shape);\n layerManager.UUIDMap.set(shape.uuid, shape);\n shape.checkVisionSources(invalidate);\n shape.setMovementBlock(shape.movementObstruction, invalidate);\n if (shape.ownedBy(gameStore.username) && shape.isToken) gameStore.ownedtokens.push(shape.uuid);\n if (shape.annotation.length) gameStore.annotations.push(shape.uuid);\n if (sync) socket.emit(\"Shape.Add\", { shape: shape.asDict(), temporary });\n if (invalidate) this.invalidate(!sync);\n }\n\n setShapes(shapes: ServerShape[]): void {\n for (const serverShape of shapes) {\n const shape = createShapeFromDict(serverShape);\n if (shape === undefined) {\n console.log(`Shape with unknown type ${serverShape.type_} could not be added`);\n return;\n }\n this.addShape(shape, false, false, false);\n }\n this.clearSelection(); // TODO: Fix keeping selection on those items that are not moved.\n this.invalidate(false);\n }\n\n removeShape(shape: Shape, sync: boolean, temporary?: boolean) {\n if (temporary === undefined) temporary = false;\n this.shapes.splice(this.shapes.indexOf(shape), 1);\n\n if (sync) socket.emit(\"Shape.Remove\", { shape: shape.asDict(), temporary });\n const lsI = gameStore.visionSources.findIndex(ls => ls.shape === shape.uuid);\n const lbI = gameStore.visionBlockers.findIndex(ls => ls === shape.uuid);\n\n const mbI = gameStore.movementblockers.findIndex(ls => ls === shape.uuid);\n const anI = gameStore.annotations.findIndex(ls => ls === shape.uuid);\n if (lsI >= 0) gameStore.visionSources.splice(lsI, 1);\n if (lbI >= 0) gameStore.visionBlockers.splice(lbI, 1);\n if (mbI >= 0) gameStore.movementblockers.splice(mbI, 1);\n if (anI >= 0) gameStore.annotations.splice(anI, 1);\n\n const annotationIndex = gameStore.annotations.indexOf(shape.uuid);\n if (annotationIndex >= 0) gameStore.annotations.splice(annotationIndex, 1);\n\n const ownedIndex = gameStore.ownedtokens.indexOf(shape.uuid);\n if (ownedIndex >= 0) gameStore.ownedtokens.splice(ownedIndex, 1);\n\n layerManager.UUIDMap.delete(shape.uuid);\n\n const index = this.selection.indexOf(shape);\n if (index >= 0) this.selection.splice(index, 1);\n if (lbI >= 0) gameStore.recalculateVision();\n if (mbI >= 0) gameStore.recalculateMovement();\n this.invalidate(!sync);\n }\n\n clear(): void {\n this.ctx.clearRect(0, 0, this.width, this.height);\n }\n\n clearSelection(): void {\n this.selection = [];\n EventBus.$emit(\"SelectionInfo.Shape.Set\", null);\n }\n\n draw(doClear?: boolean): void {\n if (!this.valid) {\n const ctx = this.ctx;\n const ogOP = ctx.globalCompositeOperation;\n doClear = doClear === undefined ? true : doClear;\n\n if (doClear) this.clear();\n\n const state = this;\n\n // We iteratre twice over all shapes\n // First to draw the auras and a second time to draw the shapes themselves\n // Otherwise auras from one shape could be overlapping another shape itself.\n\n this.shapes.forEach(shape => {\n if (shape.options.has(\"skipDraw\") && shape.options.get(\"skipDraw\")) return;\n if (layerManager.getLayer() === undefined) return;\n if (!shape.visibleInCanvas(state.canvas)) return;\n if (state.name === \"fow\" && shape.visionObstruction && layerManager.getLayer()!.name !== state.name)\n return;\n shape.drawAuras(ctx);\n });\n this.shapes.forEach(shape => {\n if (shape.options.has(\"skipDraw\") && shape.options.get(\"skipDraw\")) return;\n if (shape.labels.length === 0 && gameStore.filterNoLabel) return;\n if (\n shape.labels.length &&\n gameStore.labelFilters.length &&\n !shape.labels.some(l => gameStore.labelFilters.includes(l.uuid))\n )\n return;\n if (layerManager.getLayer() === undefined) return;\n if (!shape.visibleInCanvas(state.canvas)) return;\n if (state.name === \"fow\" && shape.visionObstruction && layerManager.getLayer()!.name !== state.name)\n return;\n shape.draw(ctx);\n });\n\n if (this.selection != null) {\n ctx.fillStyle = this.selectionColor;\n ctx.strokeStyle = this.selectionColor;\n ctx.lineWidth = this.selectionWidth;\n const z = gameStore.zoomFactor;\n this.selection.forEach(sel => {\n ctx.globalCompositeOperation = sel.globalCompositeOperation;\n const bb = sel.getBoundingBox();\n // TODO: REFACTOR THIS TO Shape.drawSelection(ctx);\n ctx.strokeRect(g2lx(bb.topLeft.x), g2ly(bb.topLeft.y), bb.w * z, bb.h * z);\n\n for (const p of sel.points) {\n ctx.beginPath();\n ctx.arc(g2lx(p[0]), g2ly(p[1]), 3, 0, 2 * Math.PI);\n ctx.fill();\n }\n ctx.beginPath();\n ctx.moveTo(g2lx(sel.points[0][0]), g2ly(sel.points[0][1]));\n for (let i = 1; i <= sel.points.length; i++) {\n const vertex = sel.points[i % sel.points.length];\n ctx.lineTo(g2lx(vertex[0]), g2ly(vertex[1]));\n }\n ctx.stroke();\n });\n }\n ctx.globalCompositeOperation = ogOP;\n this.valid = true;\n }\n }\n\n moveShapeOrder(shape: Shape, destinationIndex: number, sync: boolean): void {\n const oldIdx = this.shapes.indexOf(shape);\n if (oldIdx === destinationIndex) return;\n this.shapes.splice(oldIdx, 1);\n this.shapes.splice(destinationIndex, 0, shape);\n if (sync) socket.emit(\"Shape.Order.Set\", { shape: shape.asDict(), index: destinationIndex });\n this.invalidate(true);\n }\n}\n","import { gameStore } from \"@/game/store\";\nimport { l2g } from \"@/game/units\";\nimport { getMouse } from \"@/game/utils\";\n\nexport function scrollZoom(e: WheelEvent) {\n if (!e.target || !(e.target).tagName || (e.target).tagName !== \"CANVAS\") return;\n let delta: number;\n delta = Math.sign(e.deltaY) * -1;\n gameStore.updateZoom({ newZoomDisplay: gameStore.zoomDisplay - 0.1 * delta, zoomLocation: l2g(getMouse(e)) });\n}\n","import { render, staticRenderFns } from \"./filter.vue?vue&type=template&id=847e7ec4&scoped=true&\"\nimport script from \"./filter.vue?vue&type=script&lang=ts&\"\nexport * from \"./filter.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./filter.vue?vue&type=style&index=0&lang=css&\"\nimport style1 from \"./filter.vue?vue&type=style&index=1&id=847e7ec4&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"847e7ec4\",\n null\n \n)\n\ncomponent.options.__file = \"filter.vue\"\nexport default component.exports","import mod from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./menu.vue?vue&type=style&index=0&id=aaf3f05e&scoped=true&lang=css&\"; export default mod; export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./menu.vue?vue&type=style&index=0&id=aaf3f05e&scoped=true&lang=css&\"","import { GlobalPoint, LocalPoint, Vector } from \"@/game/geom\";\nimport { BoundingRect } from \"@/game/shapes/boundingrect\";\nimport { Shape } from \"@/game/shapes/shape\";\nimport { gameStore } from \"@/game/store\";\nimport { calculateDelta } from \"@/game/ui/tools/utils\";\nimport { g2lx, g2ly, l2g, l2gx, l2gy } from \"@/game/units\";\n\nexport abstract class BaseRect extends Shape {\n w: number;\n h: number;\n constructor(topleft: GlobalPoint, w: number, h: number, fillColour?: string, strokeColour?: string, uuid?: string) {\n super(topleft, fillColour, strokeColour, uuid);\n this.w = w;\n this.h = h;\n }\n getBaseDict() {\n return Object.assign(super.getBaseDict(), {\n width: this.w,\n height: this.h,\n });\n }\n getBoundingBox() {\n return new BoundingRect(this.refPoint, this.w, this.h);\n }\n\n get points() {\n if (this.w === 0 || this.h === 0) return [[this.refPoint.x, this.refPoint.y]];\n // note to self: topright and botleft are swapped because I'm retarded.\n const topright = this.refPoint.add(new Vector(0, this.h));\n const botright = this.refPoint.add(new Vector(this.w, this.h));\n const botleft = this.refPoint.add(new Vector(this.w, 0));\n return [\n [this.refPoint.x, this.refPoint.y],\n [topright.x, topright.y],\n [botright.x, botright.y],\n [botleft.x, botleft.y],\n ];\n }\n\n contains(point: GlobalPoint): boolean {\n return (\n this.refPoint.x <= point.x &&\n this.refPoint.x + this.w >= point.x &&\n this.refPoint.y <= point.y &&\n this.refPoint.y + this.h >= point.y\n );\n }\n center(): GlobalPoint;\n center(centerPoint: GlobalPoint): void;\n center(centerPoint?: GlobalPoint): GlobalPoint | void {\n if (centerPoint === undefined) return this.refPoint.add(new Vector(this.w / 2, this.h / 2));\n this.refPoint = new GlobalPoint(centerPoint.x - this.w / 2, centerPoint.y - this.h / 2);\n }\n\n visibleInCanvas(canvas: HTMLCanvasElement): boolean {\n if (super.visibleInCanvas(canvas)) return true;\n const coreVisible = !(\n g2lx(this.refPoint.x) > canvas.width ||\n g2ly(this.refPoint.y) > canvas.height ||\n g2lx(this.refPoint.x + this.w) < 0 ||\n g2ly(this.refPoint.y + this.h) < 0\n );\n if (coreVisible) return true;\n return false;\n }\n snapToGrid() {\n const gs = gameStore.gridSize;\n const center = this.center();\n const mx = center.x;\n const my = center.y;\n\n let targetX;\n let targetY;\n\n if ((this.w / gs) % 2 === 0) {\n targetX = Math.round(mx / gs) * gs - this.w / 2;\n } else {\n targetX = (Math.round((mx + gs / 2) / gs) - 1 / 2) * gs - this.w / 2;\n }\n if ((this.h / gs) % 2 === 0) {\n targetY = Math.round(my / gs) * gs - this.h / 2;\n } else {\n targetY = (Math.round((my + gs / 2) / gs) - 1 / 2) * gs - this.h / 2;\n }\n\n const delta = calculateDelta(new Vector(targetX - this.refPoint.x, targetY - this.refPoint.y), this);\n this.refPoint = this.refPoint.add(delta);\n\n this.invalidate(false);\n }\n resizeToGrid() {\n const gs = gameStore.gridSize;\n this.refPoint = new GlobalPoint(Math.round(this.refPoint.x / gs) * gs, Math.round(this.refPoint.y / gs) * gs);\n this.w = Math.max(Math.round(this.w / gs) * gs, gs);\n this.h = Math.max(Math.round(this.h / gs) * gs, gs);\n this.invalidate(false);\n }\n resize(resizePoint: number, point: LocalPoint) {\n const z = gameStore.zoomFactor;\n switch (resizePoint) {\n case 0: {\n this.w = g2lx(this.refPoint.x) + this.w * z - point.x;\n this.h = g2ly(this.refPoint.y) + this.h * z - point.y;\n this.refPoint = l2g(point);\n break;\n }\n case 1: {\n this.w = g2lx(this.refPoint.x) + this.w * z - point.x;\n this.h = point.y - g2ly(this.refPoint.y);\n this.refPoint = new GlobalPoint(l2gx(point.x), this.refPoint.y);\n break;\n }\n case 2: {\n this.w = point.x - g2lx(this.refPoint.x);\n this.h = point.y - g2ly(this.refPoint.y);\n break;\n }\n case 3: {\n this.w = point.x - g2lx(this.refPoint.x);\n this.h = g2ly(this.refPoint.y) + this.h * z - point.y;\n this.refPoint = new GlobalPoint(this.refPoint.x, l2gy(point.y));\n break;\n }\n }\n\n this.w /= z;\n this.h /= z;\n\n if (this.w < 0) {\n this.refPoint = this.refPoint.add(new Vector(this.w, 0));\n this.w = Math.abs(this.w);\n }\n if (this.h < 0) {\n this.refPoint = this.refPoint.add(new Vector(0, this.h));\n this.h = Math.abs(this.h);\n }\n }\n}\n","import { render, staticRenderFns } from \"./select.vue?vue&type=template&id=048b3482&\"\nimport script from \"./select.vue?vue&type=script&lang=ts&\"\nexport * from \"./select.vue?vue&type=script&lang=ts&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\ncomponent.options.__file = \"select.vue\"\nexport default component.exports","import { render, staticRenderFns } from \"./main.vue?vue&type=template&id=61eb1455&scoped=true&\"\nimport script from \"./main.vue?vue&type=script&lang=ts&\"\nexport * from \"./main.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./main.vue?vue&type=style&index=0&id=61eb1455&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"61eb1455\",\n null\n \n)\n\ncomponent.options.__file = \"main.vue\"\nexport default component.exports","import mod from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./createtoken_modal.vue?vue&type=style&index=0&id=73816298&scoped=true&lang=css&\"; export default mod; export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./createtoken_modal.vue?vue&type=style&index=0&id=73816298&scoped=true&lang=css&\"","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{attrs:{\"id\":\"AssetManager\"}},[_c('div',{attrs:{\"id\":\"titlebar\"}},[_vm._v(\"Asset Manager\")]),_c('div',{attrs:{\"id\":\"main\"}},[_c('div',{attrs:{\"id\":\"assets\"},on:{\"dragover\":function($event){$event.preventDefault();return _vm.moveDrag($event)},\"drop\":function($event){$event.preventDefault();$event.stopPropagation();_vm.stopDrag($event, _vm.currentFolder)}}},[_c('div',{attrs:{\"id\":\"breadcrumbs\"}},[_c('div',[_vm._v(\"/\")]),_vm._l((_vm.path),function(dir){return _c('div',{key:dir},[_vm._v(_vm._s(_vm.idMap.get(dir).name))])})],2),_c('div',{attrs:{\"id\":\"actionbar\"}},[_c('input',{attrs:{\"id\":\"files\",\"type\":\"file\",\"multiple\":\"\",\"hidden\":\"\"},on:{\"change\":function($event){_vm.upload()}}}),_c('div',{attrs:{\"title\":\"Create folder\"},on:{\"click\":_vm.createDirectory}},[_c('i',{staticClass:\"fas fa-plus-square\"})]),_c('div',{attrs:{\"title\":\"Upload files\"},on:{\"click\":_vm.prepareUpload}},[_c('i',{staticClass:\"fas fa-upload\"})])]),_c('div',{attrs:{\"id\":\"explorer\"}},[(_vm.path.length)?_c('div',{staticClass:\"inode folder\",on:{\"dblclick\":function($event){_vm.changeDirectory(-1)},\"dragover\":function($event){$event.preventDefault();return _vm.moveDrag($event)},\"dragleave\":function($event){$event.preventDefault();return _vm.leaveDrag($event)},\"drop\":function($event){$event.preventDefault();$event.stopPropagation();_vm.stopDrag($event, _vm.parentFolder)}}},[_c('i',{staticClass:\"fas fa-folder\",staticStyle:{\"font-size\":\"50px\"}}),_c('div',{staticClass:\"title\"},[_vm._v(\"..\")])]):_vm._e(),_vm._l((_vm.folders),function(key){return _c('div',{key:key,staticClass:\"inode folder\",class:{'inode-selected': _vm.selected.includes(key)},attrs:{\"draggable\":\"true\"},on:{\"click\":function($event){_vm.select($event, key)},\"dblclick\":function($event){_vm.changeDirectory(key)},\"contextmenu\":function($event){$event.preventDefault();_vm.$refs.cm.open($event, key)},\"dragstart\":function($event){_vm.startDrag($event, key)},\"dragover\":function($event){$event.preventDefault();return _vm.moveDrag($event)},\"dragleave\":function($event){$event.preventDefault();return _vm.leaveDrag($event)},\"drop\":function($event){$event.preventDefault();$event.stopPropagation();_vm.stopDrag($event, key)}}},[_c('i',{staticClass:\"fas fa-folder\",staticStyle:{\"font-size\":\"50px\"}}),_c('div',{staticClass:\"title\"},[_vm._v(_vm._s(_vm.idMap.get(key).name))])])}),_vm._l((_vm.files),function(file){return _c('div',{key:file,staticClass:\"inode file\",class:{'inode-selected': _vm.selected.includes(file)},attrs:{\"draggable\":\"true\"},on:{\"click\":function($event){_vm.select($event, file)},\"contextmenu\":function($event){$event.preventDefault();_vm.$refs.cm.open($event, file)},\"dragstart\":function($event){_vm.startDrag($event, file)}}},[_c('img',{attrs:{\"src\":'/static/assets/' + _vm.idMap.get(file).file_hash,\"width\":\"50\"}}),_c('div',{staticClass:\"title\"},[_vm._v(_vm._s(_vm.idMap.get(file).name))])])})],2)]),(_vm.firstSelectedFile)?_c('div',{attrs:{\"id\":\"asset-details\"}},[_c('div',{attrs:{\"id\":\"asset-detail-title\"}},[_vm._v(_vm._s(_vm.firstSelectedFile.name))]),_c('img',{attrs:{\"src\":'/static/assets/' + _vm.firstSelectedFile.file_hash}})]):_vm._e()]),_c('AssetContextMenu',{ref:\"cm\"}),_c('Prompt',{ref:\"prompt\"}),_c('ConfirmDialog',{ref:\"confirm\"})],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","export * from \"-!cache-loader?{\\\"cacheDirectory\\\":\\\"node_modules/.cache/vue-loader\\\",\\\"cacheIdentifier\\\":\\\"74f43d04-vue-loader-template\\\"}!../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./manager.vue?vue&type=template&id=5b0def98&\"","\n\n\n\n\n\n\n\n\nimport Vue from \"vue\";\nimport Component from \"vue-class-component\";\n\nimport ContextMenu from \"@/core/components/contextmenu.vue\";\n\nimport { socket } from \"@/game/api/socket\";\nimport { EventBus } from \"@/game/event-bus\";\nimport { gameStore } from \"@/game/store\";\nimport { l2gx, l2gy } from \"@/game/units\";\n\n@Component({\n components: {\n ContextMenu,\n },\n})\nexport default class SelectContext extends Vue {\n visible = false;\n x = 0;\n y = 0;\n\n get IS_DM(): boolean {\n return gameStore.IS_DM;\n }\n\n open(event: MouseEvent) {\n this.visible = true;\n this.x = event.pageX;\n this.y = event.pageY;\n this.$nextTick(() => this.$children[0].$el.focus());\n }\n close() {\n this.visible = false;\n }\n bringPlayers() {\n if (!gameStore.IS_DM) return;\n socket.emit(\"Players.Bring\", { x: l2gx(this.x), y: l2gy(this.y) });\n this.close();\n }\n createToken() {\n (this.$parent.$parent.$refs.createtokendialog).open(this.x, this.y);\n this.close();\n }\n showInitiative() {\n EventBus.$emit(\"Initiative.Show\");\n this.close();\n }\n}\n","import Axios from \"axios\";\nimport Vue from \"vue\";\nimport Component from \"vue-class-component\";\nimport { Route } from \"vue-router\";\n\nimport { coreStore } from \"@/core/store\";\n\nComponent.registerHooks([\"beforeRouteEnter\"]);\n\n@Component({})\nexport default class Logout extends Vue {\n beforeRouteEnter(to: Route, from: Route, next: ({}) => {}) {\n Axios.post(\"/api/logout\").then(() => {\n coreStore.setAuthenticated(false);\n coreStore.setUsername(\"\");\n next({ path: \"/auth/login\" });\n });\n }\n}\n","import { getModule, Module, Mutation, VuexModule } from \"vuex-module-decorators\";\n\nimport { rootStore } from \"@/store\";\n\nexport interface CoreState {\n authenticated: boolean;\n initialized: boolean;\n username: string;\n}\n\n@Module({ dynamic: true, store: rootStore, name: \"core\" })\nclass CoreStore extends VuexModule implements CoreState {\n authenticated = false;\n initialized = false;\n username = \"\";\n\n @Mutation\n setAuthenticated(auth: boolean) {\n this.authenticated = auth;\n }\n\n @Mutation\n setInitialized(init: boolean) {\n this.initialized = init;\n }\n\n @Mutation\n setUsername(username: string) {\n this.username = username;\n }\n}\n\nexport const coreStore = getModule(CoreStore);\n","import Vue from \"vue\";\n\nimport App from \"@/App.vue\";\nimport { router } from \"@/router\";\nimport { rootStore } from \"@/store\";\n\nVue.config.productionTip = false;\nVue.config.devtools = true;\nVue.config.performance = true;\n\nexport const app = new Vue({\n router,\n store: rootStore,\n render: h => h(App),\n}).$mount(\"#app\");\n\n(window).app = app;\n","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nimport Vue from \"vue\";\nimport Component from \"vue-class-component\";\n\n@Component({\n props: [\"visible\", \"left\", \"top\"],\n})\nexport default class ContextMenu extends Vue {}\n","import Axios, { AxiosError, AxiosResponse } from \"axios\";\nimport Vue from \"vue\";\nimport Component from \"vue-class-component\";\nimport { Route } from \"vue-router\";\n\n@Component({ template: \"\" })\nexport default class Initiative extends Vue {\n beforeRouteEnter(to: Route, from: Route, next: ({}) => {}) {\n Axios.post(\"/api/invite\", {\n code: to.params.code,\n })\n .then((response: AxiosResponse) => {\n next({ path: response.data.sessionUrl });\n })\n .catch((error: AxiosError) => {\n console.error(\"Invitation code could not be redeemed\");\n next({ path: \"/dashboard\" });\n });\n }\n}\n","import { render, staticRenderFns } from \"./prompt.vue?vue&type=template&id=0602c2e6&scoped=true&\"\nimport script from \"./prompt.vue?vue&type=script&lang=ts&\"\nexport * from \"./prompt.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./prompt.vue?vue&type=style&index=0&id=0602c2e6&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"0602c2e6\",\n null\n \n)\n\ncomponent.options.__file = \"prompt.vue\"\nexport default component.exports","import { GlobalPoint } from \"@/game/geom\";\nimport { gameStore } from \"@/game/store\";\n\nimport { Edge } from \"./cdt\";\nimport { drawPolygon } from \"./draw\";\nimport { PA_CDT } from \"./pa\";\nimport { Point, Sign, Triangle } from \"./tds\";\nimport { ccw, cw, orientation } from \"./triag\";\n\nexport function computeVisibility(q: GlobalPoint, target: \"vision\" | \"movement\", drawt?: boolean): number[][] {\n if (drawt === undefined) drawt = gameStore.drawTEContour;\n // console.time(\"CV\");\n const Q: Point = [q.x, q.y];\n const rawOutput: number[][] = [];\n const triangle = PA_CDT[target].locate(Q, null).loc;\n if (triangle === null) {\n console.error(\"Triangle not found\");\n return [];\n }\n // triangle.fill();\n rawOutput.push(triangle.vertices[1]!.point!);\n if (!triangle.isConstrained(0))\n expandEdge(Q, triangle.vertices[2]!.point!, triangle.vertices[1]!.point!, triangle, 0, rawOutput);\n rawOutput.push(triangle.vertices[2]!.point!);\n if (!triangle.isConstrained(1))\n expandEdge(Q, triangle.vertices[0]!.point!, triangle.vertices[2]!.point!, triangle, 1, rawOutput);\n rawOutput.push(triangle.vertices[0]!.point!);\n if (!triangle.isConstrained(2))\n expandEdge(Q, triangle.vertices[1]!.point!, triangle.vertices[0]!.point!, triangle, 2, rawOutput);\n // console.timeEnd(\"CV\");\n\n if (drawt) drawPolygon(rawOutput, \"red\");\n\n return rawOutput;\n}\n\nfunction expandEdge(\n q: Point,\n left: number[],\n right: number[],\n fh: Triangle,\n index: number,\n rawOutput: number[][],\n): void {\n // fh.edge(index).draw();\n const nfh = fh.neighbours[index]!;\n // nfh.fill(\"rgba(255, 0, 0, 0.25)\");\n const nIndex = nfh.indexT(fh);\n const rIndex = ccw(nIndex);\n const lIndex = cw(nIndex);\n const nvh = nfh.vertices[nIndex]!;\n const rvh = nfh.vertices[lIndex]!;\n const lvh = nfh.vertices[rIndex]!;\n\n const re: Edge = [nfh, rIndex];\n const le: Edge = [nfh, lIndex];\n\n const ro = orientation(q, right, nvh.point!);\n const lo = orientation(q, left, nvh.point!);\n\n // const ctx = layerManager.getLayer(\"draw\")!.ctx;\n // ctx.beginPath();\n // ctx.strokeStyle = \"red\";\n // ctx.lineJoin = \"round\";\n // ctx.moveTo(g2lx(q.x), g2ly(q.y));\n // ctx.lineTo(g2lx(left[0]), g2ly(left[1]));\n // ctx.moveTo(g2lx(q.x), g2ly(q.y));\n // ctx.lineTo(g2lx(nvh[0]), g2ly(nvh[1]));\n // ctx.strokeStyle = \"blue\";\n // ctx.moveTo(g2lx(q.x), g2ly(q.y));\n // ctx.lineTo(g2lx(right[0]), g2ly(right[1]));\n // ctx.moveTo(g2lx(q.x), g2ly(q.y));\n // ctx.lineTo(g2lx(nvh[0]), g2ly(nvh[1]));\n // ctx.closePath();\n // ctx.stroke();\n\n // Right edge is seen if the new vertex is ccw of the right ray\n if (ro === Sign.COUNTERCLOCKWISE) {\n if (re[0].isConstrained(re[1])) {\n // See if current right ray is rvh\n if (right !== rvh.point!) rawOutput.push(raySegIntersection(q, right, nvh.point!, rvh.point!));\n if (lo === Sign.COUNTERCLOCKWISE) rawOutput.push(raySegIntersection(q, left, nvh.point!, rvh.point!));\n } else {\n if (lo === Sign.COUNTERCLOCKWISE) return expandEdge(q, left, right, nfh, rIndex, rawOutput);\n else expandEdge(q, nvh.point!, right, nfh, rIndex, rawOutput);\n }\n }\n\n if (ro !== Sign.CLOCKWISE && lo !== Sign.COUNTERCLOCKWISE) {\n rawOutput.push(nvh.point!);\n }\n\n if (lo === Sign.CLOCKWISE) {\n if (le[0].isConstrained(le[1])) {\n if (ro === Sign.CLOCKWISE) {\n rawOutput.push(raySegIntersection(q, right, nvh.point!, lvh.point!));\n }\n if (left !== lvh.point!) {\n rawOutput.push(raySegIntersection(q, left, nvh.point!, lvh.point!));\n }\n return;\n } else {\n if (ro === Sign.CLOCKWISE) {\n return expandEdge(q, left, right, nfh, lIndex, rawOutput);\n } else {\n return expandEdge(q, left, nvh.point!, nfh, lIndex, rawOutput);\n }\n }\n }\n}\n\nfunction raySegIntersection(q: Point, b: Point, s: Point, t: Point) {\n const denominator = (t[1] - s[1]) * (b[0] - q[0]) - (t[0] - s[0]) * (b[1] - q[1]);\n const ua = ((t[0] - s[0]) * (q[1] - s[1]) - (t[1] - s[1]) * (q[0] - s[0])) / denominator;\n // const ub = ((b[0] - q.x) * (q.y - s[1]) - (b[1] - q.y) * (q.x - s[0])) / denominator;\n const x = q[0] + ua * (b[0] - q[0]);\n const y = q[1] + ua * (b[1] - q[1]);\n\n return [x, y];\n}\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return (_vm.selected)?_c('div',{staticClass:\"tool-detail\",style:({'--detailRight': _vm.detailRight, '--detailArrow': _vm.detailArrow})},[_c('div',[_vm._v(\"#X\")]),_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.xCount),expression:\"xCount\"}],attrs:{\"type\":\"text\"},domProps:{\"value\":(_vm.xCount)},on:{\"input\":function($event){if($event.target.composing){ return; }_vm.xCount=$event.target.value}}}),_c('div',[_vm._v(\"#Y\")]),_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.yCount),expression:\"yCount\"}],attrs:{\"type\":\"text\"},domProps:{\"value\":(_vm.yCount)},on:{\"input\":function($event){if($event.target.composing){ return; }_vm.yCount=$event.target.value}}})]):_vm._e()}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","export * from \"-!cache-loader?{\\\"cacheDirectory\\\":\\\"node_modules/.cache/vue-loader\\\",\\\"cacheIdentifier\\\":\\\"74f43d04-vue-loader-template\\\"}!../../../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./map.vue?vue&type=template&id=2104f147&\"","import { render, staticRenderFns } from \"./edit_dialog.vue?vue&type=template&id=23de098e&scoped=true&\"\nimport script from \"./edit_dialog.vue?vue&type=script&lang=ts&\"\nexport * from \"./edit_dialog.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./edit_dialog.vue?vue&type=style&index=0&id=23de098e&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"23de098e\",\n null\n \n)\n\ncomponent.options.__file = \"edit_dialog.vue\"\nexport default component.exports","export class Settings {\n static angleSteps = 4;\n static drawAngleLines = false;\n static drawFirstLightHit = false;\n static skipPlayerFOW = false;\n static skipLightFOW = false;\n\n static tempFill: string = \"fog\";\n}\n","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nimport axios, { AxiosError, AxiosResponse } from \"axios\";\nimport Vue from \"vue\";\nimport Component from \"vue-class-component\";\n\nimport { coreStore } from \"@/core/store\";\n\n@Component\nexport default class Login extends Vue {\n username = \"\";\n password = \"\";\n error = \"\";\n\n login() {\n axios\n .post(\"/api/login\", {\n username: this.username,\n password: this.password,\n })\n .then((response: AxiosResponse) => {\n coreStore.setUsername(this.username);\n coreStore.setAuthenticated(true);\n this.$router.push(this.$route.query.redirect || \"/\");\n })\n .catch((error: AxiosError) => {\n if (error.response) this.error = error.response.statusText;\n else this.error = \"Unknown error occured\";\n });\n }\n\n register() {\n axios\n .post(\"/api/register\", {\n username: this.username,\n password: this.password,\n })\n .then((response: AxiosResponse) => {\n coreStore.setUsername(this.username);\n coreStore.setAuthenticated(true);\n this.$router.push(this.$route.query.redirect || \"/\");\n })\n .catch((error: AxiosError) => {\n if (error.response) this.error = error.response.statusText;\n else this.error = \"Unknown error occured\";\n });\n }\n\n focusin(event: { target?: { nextElementSibling?: HTMLElement } }) {\n if (event.target && event.target.nextElementSibling) {\n const span = event.target.nextElementSibling;\n span.style.opacity = \"0\";\n }\n }\n\n focusout(event: { target?: { nextElementSibling?: HTMLElement } }) {\n if (event.target && event.target.nextElementSibling) {\n const span = event.target.nextElementSibling;\n span.style.opacity = \"1\";\n }\n }\n}\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('modal',{attrs:{\"visible\":_vm.visible},on:{\"close\":function($event){_vm.visible = false}},scopedSlots:_vm._u([{key:\"header\",fn:function(m){return _c('div',{staticClass:\"modal-header\",attrs:{\"draggable\":\"true\"},on:{\"dragstart\":m.dragStart,\"dragend\":m.dragEnd}},[_vm._v(\"Create basic token\")])}}])},[_c('div',{staticClass:\"modal-body\"},[_c('label',{attrs:{\"for\":\"createtokendialog-text\"}},[_vm._v(\"Text\")]),_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.text),expression:\"text\"}],attrs:{\"type\":\"text\",\"id\":\"createtokendialog-name\"},domProps:{\"value\":(_vm.text)},on:{\"input\":function($event){if($event.target.composing){ return; }_vm.text=$event.target.value}}}),_c('label',[_vm._v(\"Colours\")]),_c('div',{staticClass:\"colours\"},[_c('span',[_vm._v(\"Fill:\")]),_c('color-picker',{attrs:{\"color\":_vm.fillColour},on:{\"update:color\":function($event){_vm.fillColour=$event}}}),_c('span',[_vm._v(\"Border:\")]),_c('color-picker',{attrs:{\"color\":_vm.borderColour},on:{\"update:color\":function($event){_vm.borderColour=$event}}})],1),_c('canvas',{ref:\"canvas\",attrs:{\"width\":\"100px\",\"height\":\"100px\"}})]),_c('div',{staticClass:\"modal-footer\"},[_c('button',{on:{\"click\":_vm.submit}},[_vm._v(\"Submit\")])])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","export * from \"-!cache-loader?{\\\"cacheDirectory\\\":\\\"node_modules/.cache/vue-loader\\\",\\\"cacheIdentifier\\\":\\\"74f43d04-vue-loader-template\\\"}!../../../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./createtoken_modal.vue?vue&type=template&id=73816298&scoped=true&\"","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c(\"div\")}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","export * from \"-!cache-loader?{\\\"cacheDirectory\\\":\\\"node_modules/.cache/vue-loader\\\",\\\"cacheIdentifier\\\":\\\"74f43d04-vue-loader-template\\\"}!../../../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./tool.vue?vue&type=template&id=1e034b42&\"","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('transition',{attrs:{\"name\":\"modal\"}},[_c('div',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.visible),expression:\"visible\"}],staticClass:\"mask\",class:{'modal-mask': _vm.mask, 'dialog-mask': !_vm.mask},on:{\"click\":_vm.close,\"dragover\":function($event){$event.preventDefault();return _vm.dragOver($event)}}},[_c('div',{ref:\"container\",staticClass:\"modal-container\",on:{\"click\":function($event){$event.stopPropagation();}}},[_vm._t(\"header\",null,{dragStart:_vm.dragStart,dragEnd:_vm.dragEnd}),_vm._t(\"default\")],2)])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","export * from \"-!cache-loader?{\\\"cacheDirectory\\\":\\\"node_modules/.cache/vue-loader\\\",\\\"cacheIdentifier\\\":\\\"74f43d04-vue-loader-template\\\"}!../../../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./modal.vue?vue&type=template&id=12ed61ba&scoped=true&\"","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/ts-loader/index.js??ref--12-2!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./game.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/ts-loader/index.js??ref--12-2!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./game.vue?vue&type=script&lang=ts&\"","import Component from \"vue-class-component\";\n\nimport Tool from \"@/game/ui/tools/tool.vue\";\n\nimport { socket } from \"@/game/api/socket\";\nimport { GlobalPoint } from \"@/game/geom\";\nimport { layerManager } from \"@/game/layers/manager\";\nimport { Line } from \"@/game/shapes/line\";\nimport { Text } from \"@/game/shapes/text\";\nimport { gameStore } from \"@/game/store\";\nimport { l2g } from \"@/game/units\";\nimport { getMouse } from \"@/game/utils\";\n\n@Component\nexport class RulerTool extends Tool {\n name = \"Ruler\";\n active = false;\n startPoint: GlobalPoint | null = null;\n ruler: Line | null = null;\n text: Text | null = null;\n onMouseDown(event: MouseEvent) {\n const layer = layerManager.getLayer(\"draw\");\n if (layer === undefined) {\n console.log(\"No draw layer!\");\n return;\n }\n this.active = true;\n this.startPoint = l2g(getMouse(event));\n this.ruler = new Line(this.startPoint, this.startPoint, 3, gameStore.rulerColour);\n this.text = new Text(this.startPoint.clone(), \"\", \"bold 20px serif\");\n this.ruler.addOwner(gameStore.username);\n this.text.addOwner(gameStore.username);\n layer.addShape(this.ruler, true, true);\n layer.addShape(this.text, true, true);\n }\n onMouseMove(event: MouseEvent) {\n if (!this.active || this.ruler === null || this.startPoint === null || this.text === null) return;\n\n const layer = layerManager.getLayer(\"draw\");\n if (layer === undefined) {\n console.log(\"No draw layer!\");\n return;\n }\n const endPoint = l2g(getMouse(event));\n\n this.ruler.endPoint = endPoint;\n socket.emit(\"Shape.Update\", { shape: this.ruler!.asDict(), redraw: true, temporary: true });\n\n const diffsign = Math.sign(endPoint.x - this.startPoint.x) * Math.sign(endPoint.y - this.startPoint.y);\n const xdiff = Math.abs(endPoint.x - this.startPoint.x);\n const ydiff = Math.abs(endPoint.y - this.startPoint.y);\n const label =\n Math.round((Math.sqrt(xdiff ** 2 + ydiff ** 2) * gameStore.unitSize) / gameStore.gridSize) + \" ft\";\n const angle = Math.atan2(diffsign * ydiff, xdiff);\n const xmid = Math.min(this.startPoint.x, endPoint.x) + xdiff / 2;\n const ymid = Math.min(this.startPoint.y, endPoint.y) + ydiff / 2;\n this.text.refPoint = new GlobalPoint(xmid, ymid);\n this.text.text = label;\n this.text.angle = angle;\n socket.emit(\"Shape.Update\", { shape: this.text.asDict(), redraw: true, temporary: true });\n layer.invalidate(true);\n }\n onMouseUp(event: MouseEvent) {\n if (!this.active || this.ruler === null || this.startPoint === null || this.text === null) return;\n\n const layer = layerManager.getLayer(\"draw\");\n if (layer === undefined) {\n console.log(\"No active layer!\");\n return;\n }\n this.active = false;\n\n layer.removeShape(this.ruler, true, true);\n layer.removeShape(this.text, true, true);\n layer.invalidate(true);\n this.ruler = this.startPoint = this.text = null;\n }\n}\n","import { render, staticRenderFns } from \"./modal.vue?vue&type=template&id=12ed61ba&scoped=true&\"\nimport script from \"./modal.vue?vue&type=script&lang=ts&\"\nexport * from \"./modal.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./modal.vue?vue&type=style&index=0&id=12ed61ba&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"12ed61ba\",\n null\n \n)\n\ncomponent.options.__file = \"modal.vue\"\nexport default component.exports","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/ts-loader/index.js??ref--12-2!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./accordion.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/ts-loader/index.js??ref--12-2!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./accordion.vue?vue&type=script&lang=ts&\"","import { layerManager } from \"@/game/layers/manager\";\nimport { gameStore } from \"@/game/store\";\n\nimport { CDT } from \"./cdt\";\n\nexport let PA_CDT = {\n vision: new CDT(),\n movement: new CDT(),\n};\n\nexport function triangulate(target: \"vision\" | \"movement\", partial: boolean = false) {\n const cdt = new CDT();\n\n let shapes;\n if (target === \"vision\") shapes = gameStore.visionBlockers;\n else shapes = gameStore.movementblockers;\n\n for (const sh of shapes) {\n const shape = layerManager.UUIDMap.get(sh)!;\n if (partial && !shape.visibleInCanvas(layerManager.getLayer()!.canvas)) continue;\n for (let i = 0; i < shape.points.length; i++) {\n cdt.insertConstraint(shape.points[i], shape.points[(i + 1) % shape.points.length]);\n }\n }\n // LEFT WALL\n cdt.insertConstraint([-1e8, -1e8], [-1e8, 1e8]);\n cdt.insertConstraint([-1e8, 1e8], [-1e11, 1e8]);\n cdt.insertConstraint([-1e11, 1e8], [-1e11, -1e8]);\n cdt.insertConstraint([-1e11, -1e8], [-1e8, -1e8]);\n // TOP WALL\n cdt.insertConstraint([-1e8, -1e8], [1e8, -1e8]);\n cdt.insertConstraint([1e8, -1e8], [1e8, -1e11]);\n cdt.insertConstraint([1e8, -1e11], [-1e8, -1e11]);\n cdt.insertConstraint([-1e8, -1e11], [-1e8, -1e8]);\n // RIGHT WALL\n cdt.insertConstraint([1e8, -1e8], [1e8, 1e8]);\n cdt.insertConstraint([1e8, 1e8], [1e11, 1e8]);\n cdt.insertConstraint([1e11, 1e8], [1e11, -1e8]);\n cdt.insertConstraint([1e11, -1e8], [1e8, -1e8]);\n // BOT WALL\n cdt.insertConstraint([-1e8, 1e8], [1e8, 1e8]);\n cdt.insertConstraint([1e8, 1e8], [1e8, 1e11]);\n cdt.insertConstraint([1e8, 1e11], [-1e8, 1e11]);\n cdt.insertConstraint([-1e8, 1e11], [-1e8, 1e8]);\n PA_CDT[target] = cdt;\n (window).CDT = PA_CDT;\n}\n","import mod from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./main.vue?vue&type=style&index=0&id=61eb1455&scoped=true&lang=css&\"; export default mod; export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./main.vue?vue&type=style&index=0&id=61eb1455&scoped=true&lang=css&\"","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nimport Vue from \"vue\";\nimport Component from \"vue-class-component\";\n\nimport { Prop } from \"vue-property-decorator\";\n\nimport ColorPicker from \"@/core/components/colorpicker.vue\";\nimport Modal from \"@/core/components/modals/modal.vue\";\n\nimport { uuidv4 } from \"@/core/utils\";\nimport { socket } from \"@/game/api/socket\";\nimport { EventBus } from \"@/game/event-bus\";\nimport { layerManager } from \"@/game/layers/manager\";\nimport { Shape } from \"@/game/shapes/shape\";\nimport { gameStore } from \"@/game/store\";\n\n@Component({\n components: {\n Modal,\n \"color-picker\": ColorPicker,\n },\n})\nexport default class EditDialog extends Vue {\n @Prop() shape!: Shape;\n\n visible = false;\n\n get owned(): boolean {\n return this.shape.ownedBy();\n }\n\n mounted() {\n EventBus.$on(\"EditDialog.Open\", (shape: Shape) => {\n this.shape = shape;\n this.visible = true;\n });\n EventBus.$on(\"EditDialog.AddLabel\", (label: string) => {\n if (this.visible) {\n this.shape.labels.push(gameStore.labels[label]);\n this.updateShape(true);\n }\n });\n }\n\n beforeDestroy() {\n EventBus.$off(\"EditDialog.Open\");\n EventBus.$off(\"EditDialog.AddLabel\");\n }\n\n updated() {\n this.addEmpty();\n }\n\n addEmpty() {\n if (this.shape.owners[this.shape.owners.length - 1] !== \"\") this.shape.addOwner(\"\");\n if (\n !this.shape.trackers.length ||\n this.shape.trackers[this.shape.trackers.length - 1].name !== \"\" ||\n this.shape.trackers[this.shape.trackers.length - 1].value !== 0\n )\n this.shape.trackers.push({ uuid: uuidv4(), name: \"\", value: 0, maxvalue: 0, visible: false });\n if (\n !this.shape.auras.length ||\n this.shape.auras[this.shape.auras.length - 1].name !== \"\" ||\n this.shape.auras[this.shape.auras.length - 1].value !== 0\n )\n this.shape.auras.push({\n uuid: uuidv4(),\n name: \"\",\n value: 0,\n dim: 0,\n visionSource: false,\n colour: \"rgba(0,0,0,0)\",\n visible: false,\n });\n }\n updateShape(redraw: boolean, temporary = false) {\n if (!this.owned) return;\n socket.emit(\"Shape.Update\", { shape: this.shape.asDict(), redraw, temporary });\n if (redraw) layerManager.invalidate();\n this.addEmpty();\n }\n setToken(event: { target: HTMLInputElement }) {\n if (!this.owned) return;\n this.shape.setIsToken(event.target.checked);\n this.updateShape(true);\n }\n setVisionBlocker(event: { target: HTMLInputElement }) {\n if (!this.owned) return;\n this.shape.checkVisionSources();\n this.updateShape(true);\n }\n setMovementBlocker(event: { target: HTMLInputElement }) {\n if (!this.owned) return;\n this.shape.setMovementBlock(event.target.checked);\n this.updateShape(false);\n }\n updateAnnotation(event: { target: HTMLInputElement }) {\n if (!this.owned) return;\n const hadAnnotation = this.shape.annotation !== \"\";\n this.shape.annotation = event.target.value;\n if (this.shape.annotation !== \"\" && !hadAnnotation) {\n gameStore.annotations.push(this.shape.uuid);\n if (layerManager.hasLayer(\"draw\")) layerManager.getLayer(\"draw\")!.invalidate(true);\n } else if (this.shape.annotation === \"\" && hadAnnotation) {\n gameStore.annotations.splice(gameStore.annotations.findIndex(an => an === this.shape.uuid));\n if (layerManager.hasLayer(\"draw\")) layerManager.getLayer(\"draw\")!.invalidate(true);\n }\n this.updateShape(false);\n }\n updateOwner(event: { target: HTMLInputElement }, oldValue: string) {\n if (!this.owned) return;\n this.shape.updateOwner(oldValue, event.target.value);\n this.updateShape(gameStore.fowLOS);\n }\n removeOwner(value: string) {\n if (!this.owned) return;\n this.shape.removeOwner(value);\n this.updateShape(gameStore.fowLOS);\n }\n removeTracker(uuid: string) {\n if (!this.owned) return;\n this.shape.trackers = this.shape.trackers.filter(tr => tr.uuid !== uuid);\n this.updateShape(false);\n }\n removeAura(uuid: string) {\n if (!this.owned) return;\n this.shape.auras = this.shape.auras.filter(au => au.uuid !== uuid);\n this.shape.checkVisionSources();\n this.updateShape(true);\n }\n updateAuraVisionSource(aura: Aura) {\n if (!this.owned) return;\n aura.visionSource = !aura.visionSource;\n const i = gameStore.visionSources.findIndex(ls => ls.aura === aura.uuid);\n if (aura.visionSource && i === -1) gameStore.visionSources.push({ shape: this.shape.uuid, aura: aura.uuid });\n else if (!aura.visionSource && i >= 0) gameStore.visionSources.splice(i, 1);\n this.updateShape(true);\n }\n updateAuraColour(aura: Aura, colour: string) {\n if (!this.owned) return;\n const layer = layerManager.getLayer(this.shape.layer);\n if (layer === undefined) return;\n layer.invalidate(!aura.visionSource);\n }\n openLabelManager() {\n EventBus.$emit(\"LabelManager.Open\");\n }\n removeLabel(uuid: string) {\n if(!this.owned) return;\n this.shape.labels = this.shape.labels.filter(l => l.uuid !== uuid);\n this.updateShape(true);\n }\n}\n","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nimport Vue from \"vue\";\nimport Component from \"vue-class-component\";\n\nimport Modal from \"@/core/components/modals/modal.vue\";\n\n@Component({\n components: {\n Modal,\n },\n})\nexport default class ConfirmDialog extends Vue {\n $refs!: {\n confirm: HTMLButtonElement;\n };\n\n visible = false;\n yes = \"Yes\";\n no = \"No\";\n title = \"\";\n\n resolve = (ok: boolean) => {};\n reject = () => {};\n\n confirm() {\n this.resolve(true);\n this.close();\n }\n deny() {\n this.resolve(false);\n this.close();\n }\n close() {\n this.reject();\n this.visible = false;\n this.title = \"\";\n }\n open(title: string, yes = \"yes\", no = \"no\"): Promise {\n this.yes = yes;\n this.no = no;\n this.title = title;\n\n this.visible = true;\n this.$nextTick(() => {\n this.$refs.confirm.focus();\n });\n\n return new Promise((resolve, reject) => {\n this.resolve = resolve;\n this.reject = reject;\n });\n }\n}\n","import mod from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./initiative.vue?vue&type=style&index=0&id=af4dc61a&scoped=true&lang=css&\"; export default mod; export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./initiative.vue?vue&type=style&index=0&id=af4dc61a&scoped=true&lang=css&\"","import { render, staticRenderFns } from \"./map.vue?vue&type=template&id=2104f147&\"\nimport script from \"./map.vue?vue&type=script&lang=ts&\"\nexport * from \"./map.vue?vue&type=script&lang=ts&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\ncomponent.options.__file = \"map.vue\"\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"accordion\"},[_c('div',{attrs:{\"id\":\"header\"},on:{\"click\":function($event){$event.preventDefault();return _vm.toggleDisplay($event)}}},[_c('input',{ref:\"overall\",attrs:{\"type\":\"checkbox\"},on:{\"click\":function($event){$event.stopPropagation();return _vm.toggleCategory($event)}}}),_c('strong',[_vm._v(_vm._s(_vm.title))]),(_vm.showArrow)?[_c('span',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.showArrow && !_vm.active),expression:\"showArrow && !active\"}],staticClass:\"down-Arrow\"},[_vm._v(\"▼\")]),_c('span',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.showArrow && _vm.active),expression:\"showArrow && active\"}],staticClass:\"up-Arrow\"},[_vm._v(\"▲\")])]:_vm._e()],2),_c('div',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.active),expression:\"active\"}],attrs:{\"id\":\"body\"}},_vm._l((_vm.items),function(item){return _c('div',{key:item[0],staticClass:\"item\",on:{\"click\":function($event){_vm.toggleSelection(item[0])}}},[_c('input',{attrs:{\"type\":\"checkbox\"},domProps:{\"checked\":_vm.selected.includes(item[0])},on:{\"click\":function($event){$event.preventDefault();}}}),_vm._v(\" \"+_vm._s(item[1])+\"\\n \")])}))])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","export * from \"-!cache-loader?{\\\"cacheDirectory\\\":\\\"node_modules/.cache/vue-loader\\\",\\\"cacheIdentifier\\\":\\\"74f43d04-vue-loader-template\\\"}!../../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./accordion.vue?vue&type=template&id=0bf2b7ba&scoped=true&\"","import mod from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./filter.vue?vue&type=style&index=1&id=847e7ec4&scoped=true&lang=css&\"; export default mod; export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./filter.vue?vue&type=style&index=1&id=847e7ec4&scoped=true&lang=css&\"","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('modal',{attrs:{\"visible\":_vm.visible},on:{\"close\":_vm.close},scopedSlots:_vm._u([{key:\"header\",fn:function(m){return _c('div',{staticClass:\"modal-header\",attrs:{\"draggable\":\"true\"},on:{\"dragstart\":m.dragStart,\"dragend\":m.dragEnd}},[_vm._v(_vm._s(_vm.title))])}}])},[_c('div',{staticClass:\"modal-body\"},[_c('button',{ref:\"confirm\",on:{\"click\":_vm.confirm}},[_vm._v(_vm._s(_vm.yes))]),(!!_vm.no)?_c('button',{on:{\"click\":_vm.deny}},[_vm._v(_vm._s(_vm.no))]):_vm._e()])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","export * from \"-!cache-loader?{\\\"cacheDirectory\\\":\\\"node_modules/.cache/vue-loader\\\",\\\"cacheIdentifier\\\":\\\"74f43d04-vue-loader-template\\\"}!../../../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./confirm.vue?vue&type=template&id=1883e207&scoped=true&\"","\n\n\n\n\n\n\n\nimport Vue from \"vue\";\n\nimport Component from \"vue-class-component\";\n\nimport ContextMenu from \"@/core/components/contextmenu.vue\";\nimport ConfirmDialog from \"@/core/components/modals/confirm.vue\";\nimport Prompt from \"@/core/components/modals/prompt.vue\";\n\nimport { socket } from \"@/assetManager/socket\";\nimport { assetStore } from \"@/assetManager/store\";\nimport { getComponent, getRef } from \"@/core/utils\";\n\n@Component({\n components: {\n ContextMenu,\n },\n})\nexport default class AssetContextMenu extends Vue {\n visible = false;\n left = 0;\n top = 0;\n open(event: MouseEvent, inode: number) {\n if (!assetStore.selected.includes(inode)) getComponent().select(event, inode);\n\n this.visible = true;\n this.left = event.pageX;\n this.top = event.pageY;\n this.$nextTick(() => {\n this.$children[0].$el.focus();\n });\n }\n close() {\n this.visible = false;\n }\n rename() {\n if (assetStore.selected.length !== 1) return;\n const asset = assetStore.idMap.get(assetStore.selected[0])!;\n\n getRef(\"prompt\")\n .prompt(\"New name:\", `Renaming ${asset.name}`)\n .then(\n (name: string) => {\n socket.emit(\"Asset.Rename\", {\n asset: asset.id,\n name,\n });\n asset.name = name;\n getComponent().$forceUpdate();\n },\n () => {},\n );\n this.close();\n }\n remove() {\n if (assetStore.selected.length === 0) return;\n getRef(\"confirm\")\n .open(\"Are you sure you wish to remove this?\")\n .then(\n (result: boolean) => {\n if (result) {\n for (const sel of assetStore.selected) {\n socket.emit(\"Asset.Remove\", sel);\n if (assetStore.files.includes(sel))\n assetStore.files.splice(assetStore.files.indexOf(sel), 1);\n else assetStore.folders.splice(assetStore.folders.indexOf(sel), 1);\n }\n assetStore.clearSelected();\n }\n },\n () => {},\n );\n this.close();\n }\n}\n","import mod from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/ts-loader/index.js??ref--12-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./select.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/ts-loader/index.js??ref--12-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./select.vue?vue&type=script&lang=ts&\"","import mod from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./filter.vue?vue&type=style&index=0&lang=css&\"; export default mod; export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./filter.vue?vue&type=style&index=0&lang=css&\"","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nimport Vue from \"vue\";\nimport Component from \"vue-class-component\";\n\nimport Modal from \"@/core/components/modals/modal.vue\";\n\nimport { uuidv4 } from \"@/core/utils\";\nimport { socket } from \"@/game/api/socket\";\nimport { EventBus } from \"@/game/event-bus\";\nimport { gameStore } from \"@/game/store\";\n\n@Component({\n components: {\n Modal,\n },\n})\nexport default class LabelManager extends Vue {\n visible = false;\n newCategory = \"\";\n newName = \"\";\n search = \"\";\n\n mounted() {\n EventBus.$on(\"LabelManager.Open\", () => {\n this.visible = true;\n this.newCategory = \"\";\n this.newName = \"\";\n this.$nextTick(() => (this.$refs.search).focus());\n });\n }\n\n beforeDestroy() {\n EventBus.$off(\"LabelManager.Open\");\n }\n\n get labels() {\n const cat: {[category: string]: Label[]} = {};\n for (const uuid of Object.keys(gameStore.labels)) {\n const label = gameStore.labels[uuid];\n if (this.search.length && `${label.category.toLowerCase()}${label.name.toLowerCase()}`.search(this.search.toLowerCase()) < 0) continue;\n if (label.user !== gameStore.username) continue;\n if (!label.category) cat[''].push(label);\n else {\n if (!(label.category in cat)) cat[label.category] = [];\n cat[label.category].push(label);\n cat[label.category].sort((a, b) => a.name.localeCompare(b.name));\n }\n }\n return cat;\n }\n\n get categories() {\n return Object.keys(this.labels).sort();\n }\n\n selectLabel(label: string) {\n EventBus.$emit(\"EditDialog.AddLabel\", label);\n this.visible = false;\n }\n\n toggleVisibility(label: Label) {\n label.visible = !label.visible;\n socket.emit(\"Label.Visibility.Set\", { uuid: label.uuid, visible: label.visible });\n }\n\n addLabel() {\n if (this.newName === \"\") return;\n const label = {\n uuid: uuidv4(),\n category: this.newCategory,\n name: this.newName,\n visible: false,\n user: gameStore.username,\n };\n gameStore.addLabel(label);\n socket.emit(\"Label.Add\", label);\n this.newCategory = \"\";\n this.newName = \"\";\n }\n\n deleteLabel(uuid: string) {\n gameStore.deleteLabel({ uuid, user: gameStore.username });\n socket.emit(\"Label.Delete\", uuid);\n }\n}\n","import { ServerPolygon } from \"../comm/types/shapes\";\nimport { GlobalPoint, LocalPoint } from \"../geom\";\nimport { g2lx, g2ly, g2lz, l2g } from \"../units\";\nimport { getFogColour } from \"../utils\";\nimport { BoundingRect } from \"./boundingrect\";\nimport { Shape } from \"./shape\";\n\nexport class Polygon extends Shape {\n type = \"polygon\";\n _vertices: GlobalPoint[] = [];\n\n constructor(\n startPoint: GlobalPoint,\n vertices: GlobalPoint[] = [],\n fillColour?: string,\n strokeColour?: string,\n uuid?: string,\n ) {\n super(startPoint, fillColour, strokeColour, uuid);\n this._vertices = vertices;\n }\n\n get refPoint() {\n return this._refPoint;\n }\n set refPoint(point: GlobalPoint) {\n const delta = point.subtract(this._refPoint);\n this._refPoint = point;\n for (let i = 0; i < this._vertices.length; i++) this._vertices[i] = this._vertices[i].add(delta);\n }\n\n get vertices() {\n return [this._refPoint, ...this._vertices];\n }\n\n asDict() {\n return Object.assign(this.getBaseDict(), {\n vertices: this._vertices.map(p => ({ x: p.x, y: p.y })),\n });\n }\n\n fromDict(data: ServerPolygon) {\n super.fromDict(data);\n this._vertices = data.vertices.map(v => new GlobalPoint(v.x, v.y));\n }\n\n get points() {\n return this.vertices.map(point => [point.x, point.y]);\n }\n\n draw(ctx: CanvasRenderingContext2D) {\n super.draw(ctx);\n ctx.lineCap = \"round\";\n ctx.lineJoin = \"round\";\n\n if (this.strokeColour === \"fog\") ctx.strokeStyle = getFogColour();\n else if (this.vertices.length === 2) ctx.strokeStyle = this.fillColour;\n else ctx.strokeStyle = this.strokeColour;\n if (this.fillColour === \"fog\") ctx.fillStyle = getFogColour();\n else ctx.fillStyle = this.fillColour;\n ctx.lineWidth = g2lz(2);\n\n ctx.beginPath();\n ctx.moveTo(g2lx(this.vertices[0].x), g2ly(this.vertices[0].y));\n for (let i = 1; i <= this.vertices.length; i++) {\n const vertex = this.vertices[i % this.vertices.length];\n ctx.lineTo(g2lx(vertex.x), g2ly(vertex.y));\n }\n ctx.fill();\n ctx.stroke();\n }\n\n contains(point: GlobalPoint): boolean {\n return this.getBoundingBox().contains(point);\n }\n\n center(): GlobalPoint;\n center(centerPoint: GlobalPoint): void;\n center(centerPoint?: GlobalPoint): GlobalPoint | void {\n return this.getBoundingBox().center();\n }\n visibleInCanvas(canvas: HTMLCanvasElement): boolean {\n return this.getBoundingBox().visibleInCanvas(canvas);\n } // TODO\n snapToGrid(): void {}\n resizeToGrid(): void {}\n resize(resizePoint: number, point: LocalPoint): void {\n if (resizePoint === 0) this._refPoint = l2g(point);\n else this._vertices[resizePoint - 1] = l2g(point);\n }\n getBoundingBox(): BoundingRect {\n let minx: number = this.refPoint.x;\n let maxx: number = this.refPoint.x;\n let miny: number = this.refPoint.y;\n let maxy: number = this.refPoint.y;\n for (const p of this._vertices) {\n if (p.x < minx) minx = p.x;\n if (p.x > maxx) maxx = p.x;\n if (p.y < miny) miny = p.y;\n if (p.y > maxy) maxy = p.y;\n }\n return new BoundingRect(new GlobalPoint(minx, miny), maxx - minx, maxy - miny);\n }\n}\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return (_vm.selected)?_c('div',{staticClass:\"tool-detail\",style:({'--detailRight': _vm.detailRight, '--detailArrow': _vm.detailArrow})},[_c('div',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.IS_DM),expression:\"IS_DM\"}]},[_vm._v(\"Mode\")]),_c('div',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.IS_DM),expression:\"IS_DM\"}],staticClass:\"selectgroup\"},_vm._l((_vm.modes),function(mode){return _c('div',{key:mode,staticClass:\"option\",class:{'option-selected': _vm.modeSelect === mode},on:{\"click\":function($event){_vm.modeSelect = mode}}},[_vm._v(_vm._s(mode))])})),_c('div',[_vm._v(\"Shape\")]),_c('div',{staticClass:\"selectgroup\"},_vm._l((_vm.shapes),function(shape){return _c('div',{key:shape,staticClass:\"option\",class:{'option-selected': _vm.shapeSelect === shape},on:{\"click\":function($event){_vm.shapeSelect = shape}}},[_c('i',{staticClass:\"fas\",class:'fa-' + shape})])})),_c('div',[_vm._v(\"Colours\")]),_c('div',{staticClass:\"selectgroup\"},[_c('color-picker',{staticClass:\"option\",attrs:{\"color\":_vm.fillColour},on:{\"update:color\":function($event){_vm.fillColour=$event}}}),_c('color-picker',{staticClass:\"option\",attrs:{\"color\":_vm.borderColour},on:{\"update:color\":function($event){_vm.borderColour=$event}}})],1),_c('div',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.shapeSelect === 'paint-brush'),expression:\"shapeSelect === 'paint-brush'\"}]},[_vm._v(\"Brush size\")]),_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.brushSize),expression:\"brushSize\"},{name:\"show\",rawName:\"v-show\",value:(_vm.shapeSelect === 'paint-brush'),expression:\"shapeSelect === 'paint-brush'\"}],staticStyle:{\"max-width\":\"100px\"},attrs:{\"type\":\"text\"},domProps:{\"value\":(_vm.brushSize)},on:{\"input\":function($event){if($event.target.composing){ return; }_vm.brushSize=$event.target.value}}})]):_vm._e()}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","export * from \"-!cache-loader?{\\\"cacheDirectory\\\":\\\"node_modules/.cache/vue-loader\\\",\\\"cacheIdentifier\\\":\\\"74f43d04-vue-loader-template\\\"}!../../../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./draw.vue?vue&type=template&id=639cd890&scoped=true&\"","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"outer\",on:{\"click\":function($event){if($event.target !== $event.currentTarget){ return null; }return _vm.open($event)}}},[_c('div',{staticClass:\"current-color\",style:(_vm.transparent ? 'background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAMCAIAAADZF8uwAAAAGUlEQVQYV2M4gwH+YwCGIasIUwhT25BVBADtzYNYrHvv4gAAAABJRU5ErkJggg==)' : 'background-color:' + _vm.color),on:{\"click\":function($event){if($event.target !== $event.currentTarget){ return null; }return _vm.open($event)}}}),_c('div',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.display),expression:\"display\"}],staticClass:\"mask\",on:{\"click\":function($event){if($event.target !== $event.currentTarget){ return null; }return _vm.closePicker($event)}}}),_c('chrome-picker',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.display),expression:\"display\"}],ref:\"chromePicker\",style:({position: 'fixed', left:_vm.left + 'px', top:_vm.top + 'px', 'z-index': 9999}),attrs:{\"value\":_vm.color,\"tabindex\":\"-1\"},on:{\"input\":_vm.updateColor}})],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","export * from \"-!cache-loader?{\\\"cacheDirectory\\\":\\\"node_modules/.cache/vue-loader\\\",\\\"cacheIdentifier\\\":\\\"74f43d04-vue-loader-template\\\"}!../../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./colorpicker.vue?vue&type=template&id=d32461a4&scoped=true&\"","import { render, staticRenderFns } from \"./manager.vue?vue&type=template&id=5b0def98&\"\nimport script from \"./manager.vue?vue&type=script&lang=ts&\"\nexport * from \"./manager.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./manager.vue?vue&type=style&index=0&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\ncomponent.options.__file = \"manager.vue\"\nexport default component.exports","import mod from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/ts-loader/index.js??ref--12-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./tools.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/ts-loader/index.js??ref--12-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./tools.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./tool.vue?vue&type=template&id=1e034b42&\"\nimport script from \"./tool.vue?vue&type=script&lang=ts&\"\nexport * from \"./tool.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./tool.vue?vue&type=style&index=0&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\ncomponent.options.__file = \"tool.vue\"\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('Modal',{attrs:{\"visible\":_vm.visible},on:{\"close\":_vm.close},scopedSlots:_vm._u([{key:\"header\",fn:function(m){return _c('div',{staticClass:\"modal-header\",attrs:{\"draggable\":\"true\"},on:{\"dragstart\":m.dragStart,\"dragend\":m.dragEnd}},[_vm._v(_vm._s(_vm.title))])}}])},[_c('div',{staticClass:\"modal-body\"},[_vm._v(\"\\n \"+_vm._s(_vm.question)+\"\\n \"),_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.answer),expression:\"answer\"}],ref:\"answer\",attrs:{\"type\":\"text\"},domProps:{\"value\":(_vm.answer)},on:{\"keyup\":function($event){if(!('button' in $event)&&_vm._k($event.keyCode,\"enter\",13,$event.key,\"Enter\")){ return null; }return _vm.submit($event)},\"input\":function($event){if($event.target.composing){ return; }_vm.answer=$event.target.value}}})]),_c('div',{staticClass:\"modal-footer\"},[_c('button',{on:{\"click\":_vm.submit}},[_vm._v(\"Submit\")])])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","export * from \"-!cache-loader?{\\\"cacheDirectory\\\":\\\"node_modules/.cache/vue-loader\\\",\\\"cacheIdentifier\\\":\\\"74f43d04-vue-loader-template\\\"}!../../../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./prompt.vue?vue&type=template&id=0602c2e6&scoped=true&\"","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nimport Vue from \"vue\";\nimport Component from \"vue-class-component\";\nimport draggable from \"vuedraggable\";\nVue.component(\"draggable\", draggable);\n\nimport Modal from \"@/core/components/modals/modal.vue\";\n\nimport { uuidv4 } from \"@/core/utils\";\nimport { socket } from \"@/game/api/socket\";\nimport { InitiativeData, InitiativeEffect } from \"@/game/comm/types/general\";\nimport { EventBus } from \"@/game/event-bus\";\nimport { layerManager } from \"@/game/layers/manager\";\nimport { gameStore } from \"@/game/store\";\n\n@Component({\n components: {\n Modal,\n draggable,\n },\n})\nexport default class Initiative extends Vue {\n visible = false;\n data: InitiativeData[] = [];\n currentActor: string | null = null;\n roundCounter = 0;\n\n mounted() {\n EventBus.$on(\"Initiative.Clear\", this.clear);\n EventBus.$on(\"Initiative.Remove\", (data: string) => this.removeInitiative(data));\n EventBus.$on(\"Initiative.Show\", () => (this.visible = true));\n\n socket.on(\"Initiative.Set\", (data: InitiativeData[]) => {\n this.data = data;\n });\n socket.on(\"Initiative.Turn.Set\", (data: string) => this.setTurn(data));\n socket.on(\"Initiative.Turn.Update\", (data: string) => this.updateTurn(data, false));\n socket.on(\"Initiative.Round.Update\", (data: number) => this.setRound(data, false));\n socket.on(\"Initiative.Effect.New\", (data: { actor: string; effect: InitiativeEffect }) => {\n const actor = this.getActor(data.actor);\n if (actor === undefined) return;\n this.createEffect(actor, data.effect, false);\n });\n socket.on(\"Initiative.Effect.Update\", (data: { actor: string; effect: InitiativeEffect }) =>\n this.updateEffect(data.actor, data.effect, false),\n );\n }\n\n beforeDestroy() {\n EventBus.$off(\"Initiative.Clear\");\n EventBus.$off(\"Initiative.Remove\");\n EventBus.$off(\"Initiative.Show\");\n }\n\n // Utilities\n clear() {\n this.data = [];\n this.currentActor = null;\n }\n getActor(actorId: string) {\n return this.data.find(a => a.uuid === actorId);\n }\n contains(uuid: string) {\n return this.data.some(d => d.uuid === uuid);\n }\n owns(actor: InitiativeData): boolean {\n if (gameStore.IS_DM) return true;\n const shape = layerManager.UUIDMap.get(actor.uuid);\n // Shapes that are unknown to this client are hidden from this client but owned by other clients\n if (shape === undefined) return false;\n return shape.owners.includes(gameStore.username);\n }\n getDefaultEffect() {\n return { uuid: uuidv4(), name: \"New Effect\", turns: 10 };\n }\n fakeSetData(dataTransfer: DataTransfer) {\n dataTransfer.setData(\"Hack\", \"\");\n }\n syncInitiative(data: InitiativeData | { uuid: string }) {\n socket.emit(\"Initiative.Update\", data);\n }\n // Events\n addInitiative(data: InitiativeData) {\n const d = this.data.findIndex(a => a.uuid === data.uuid);\n if (d >= 0) return;\n if (data.initiative === undefined) data.initiative = 0;\n this.syncInitiative(data);\n }\n removeInitiative(uuid: string) {\n const d = this.data.findIndex(a => a.uuid === uuid);\n if (d < 0 || this.data[d].group) return;\n this.syncInitiative({ uuid });\n // Remove highlight\n const shape = layerManager.UUIDMap.get(uuid);\n if (shape === undefined) return;\n if (shape.showHighlight) {\n shape.showHighlight = false;\n layerManager.getLayer(shape.layer)!.invalidate(true);\n }\n }\n updateOrder() {\n if (!gameStore.IS_DM) return;\n socket.emit(\"Initiative.Set\", this.data.map(d => d.uuid));\n }\n updateTurn(actorId: string | null, sync: boolean) {\n if (!gameStore.IS_DM && sync) return;\n this.currentActor = actorId;\n const actor = this.data.find(a => a.uuid === actorId);\n if (actor === undefined) return;\n if (actor.effects) {\n for (let e = actor.effects.length - 1; e >= 0; e--) {\n if (actor.effects[e].turns <= 0) actor.effects.splice(e, 1);\n else actor.effects[e].turns--;\n }\n }\n if (sync) socket.emit(\"Initiative.Turn.Update\", actorId);\n }\n setRound(round: number, sync: boolean) {\n if (!gameStore.IS_DM && sync) return;\n this.roundCounter = round;\n if (sync) socket.emit(\"Initiative.Round.Update\", round);\n }\n setTurn(actorId: string | null) {\n this.currentActor = actorId;\n }\n nextTurn() {\n if (!gameStore.IS_DM) return;\n const order = this.data;\n const next = order[(order.findIndex(a => a.uuid === this.currentActor) + 1) % order.length];\n if (this.data[0].uuid === next.uuid) this.setRound(this.roundCounter + 1, true);\n this.updateTurn(next.uuid, true);\n }\n toggleHighlight(actor: InitiativeData, show: boolean) {\n const shape = layerManager.UUIDMap.get(actor.uuid);\n if (shape === undefined) return;\n shape.showHighlight = show;\n layerManager.getLayer(shape.layer)!.invalidate(true);\n }\n toggleOption(actor: InitiativeData, option: \"visible\" | \"group\") {\n if (!this.owns(actor)) return;\n actor[option] = !actor[option];\n this.syncInitiative(actor);\n }\n createEffect(actor: InitiativeData, effect: InitiativeEffect, sync: boolean) {\n if (!this.owns(actor)) return;\n actor.effects.push(effect);\n if (sync) socket.emit(\"Initiative.Effect.New\", { actor: actor.uuid, effect });\n }\n syncEffect(actor: InitiativeData, effect: InitiativeEffect) {\n if (!this.owns(actor)) return;\n socket.emit(\"Initiative.Effect.Update\", { actor: actor.uuid, effect });\n }\n updateEffect(actorId: string, effect: InitiativeEffect, sync: boolean) {\n const actor = this.data.find(a => a.uuid === actorId);\n if (actor === undefined) return;\n const effectIndex = actor.effects.findIndex(e => e.uuid === effect.uuid);\n if (effectIndex === undefined) return;\n actor.effects[effectIndex] = effect;\n if (sync) this.syncEffect(actor, effect);\n else this.$forceUpdate();\n }\n}\n","import { render, staticRenderFns } from \"./selection_info.vue?vue&type=template&id=674cf937&scoped=true&\"\nimport script from \"./selection_info.vue?vue&type=script&lang=ts&\"\nexport * from \"./selection_info.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./selection_info.vue?vue&type=style&index=0&id=674cf937&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"674cf937\",\n null\n \n)\n\ncomponent.options.__file = \"selection_info.vue\"\nexport default component.exports","import Vue from 'vue';\n\nimport { Action, getModule, Module, Mutation, VuexModule } from \"vuex-module-decorators\";\n\nimport { AssetList } from \"@/core/comm/types\";\nimport { socket } from \"@/game/api/socket\";\nimport { sendClientOptions } from \"@/game/api/utils\";\nimport { Note } from \"@/game/comm/types/general\";\nimport { ServerShape } from \"@/game/comm/types/shapes\";\nimport { GlobalPoint } from \"@/game/geom\";\nimport { layerManager } from \"@/game/layers/manager\";\nimport { g2l, l2g } from \"@/game/units\";\nimport { zoomValue } from \"@/game/utils\";\nimport { BoundingVolume } from \"@/game/visibility/bvh/bvh\";\nimport { triangulate } from \"@/game/visibility/te/pa\";\nimport { rootStore } from \"@/store\";\n\nexport interface GameState {\n boardInitialized: boolean;\n}\n\n@Module({ dynamic: true, store: rootStore, name: \"game\", namespaced: true })\nclass GameStore extends VuexModule implements GameState {\n // This is a limited view of selectable layers that is used to generate the layer selection UI and ability to switch layers\n // See the layerManager for proper layer management tools\n layers: string[] = [];\n selectedLayerIndex = -1;\n boardInitialized = false;\n\n locations: string[] = [];\n\n assets: AssetList = {};\n\n notes: Note[] = [];\n\n IS_DM = false;\n gridSize = 50;\n username = \"\";\n roomName = \"\";\n roomCreator = \"\";\n invitationCode = \"\";\n\n gridColour = \"rgba(0, 0, 0, 1)\";\n fowColour = \"rgba(0, 0, 0, 1)\";\n rulerColour = \"rgba(255, 0, 0, 1)\";\n panX = 0;\n panY = 0;\n\n zoomDisplay = 0.5;\n // zoomFactor = 1;\n\n unitSize = 5;\n useGrid = true;\n fullFOW = false;\n fowOpacity = 0.3;\n fowLOS = false;\n locationName = \"\";\n\n visionSources: { shape: string; aura: string }[] = [];\n visionBlockers: string[] = [];\n annotations: string[] = [];\n movementblockers: string[] = [];\n ownedtokens: string[] = [];\n\n BV = Object.freeze(new BoundingVolume([]));\n\n visionMode: \"bvh\" | \"triangle\" = \"bvh\";\n drawTEContour = false;\n visionRangeMin = 1640;\n visionRangeMax = 3281;\n\n clipboard: ServerShape[] = [];\n\n // Maps are not yet supported in Vue untill 3.X, so for now we're using a plain old object\n labels: {[uuid: string]: Label} = {};\n\n filterNoLabel = false;\n labelFilters: string[] = [];\n\n showUI = true;\n\n get selectedLayer() {\n return this.layers[this.selectedLayerIndex];\n }\n\n get zoomFactor() {\n return zoomValue(this.zoomDisplay);\n }\n\n @Mutation\n setZoomDisplay(zoom: number) {\n if (zoom === this.zoomDisplay) return;\n if (zoom < 0) zoom = 0;\n if (zoom > 1) zoom = 1;\n this.zoomDisplay = zoom;\n layerManager.invalidate();\n }\n\n @Mutation\n setVisionMode(data: { mode: \"bvh\" | \"triangle\"; sync: boolean }) {\n this.visionMode = data.mode;\n if (data.sync) socket.emit(\"Location.Options.Set\", { vision_mode: data.mode });\n }\n\n @Mutation\n setBoardInitialized(boardInitialized: boolean) {\n this.boardInitialized = boardInitialized;\n }\n\n @Mutation\n toggleUnlabeledFilter() {\n this.filterNoLabel = !this.filterNoLabel;\n }\n\n @Mutation\n addLabel(label: Label) {\n Vue.set(this.labels, label.uuid, label);\n }\n\n @Mutation\n setLabelFilters(filters: string[]) {\n this.labelFilters = filters;\n }\n\n @Mutation\n setLabelVisibility(data: { user: string; uuid: string; visible: boolean }) {\n if (!(data.uuid in this.labels)) return;\n this.labels[data.uuid].visible = data.visible;\n }\n\n @Mutation\n deleteLabel(data: { uuid: string; user: string }) {\n if (!(data.uuid in this.labels)) return;\n const label = this.labels[data.uuid];\n const updatedLayers: Set = new Set();\n for (const shape of layerManager.UUIDMap.values()) {\n const i = shape.labels.indexOf(label);\n if (i >= 0) {\n shape.labels.splice(i, 1);\n updatedLayers.add(shape.layer);\n }\n }\n for (const layer of updatedLayers)\n layerManager.getLayer(layer)!.invalidate(false);\n Vue.delete(this.labels, data.uuid);\n }\n\n @Mutation\n setDM(isDM: boolean) {\n this.IS_DM = isDM;\n }\n\n @Mutation\n setUsername(username: string) {\n this.username = username;\n }\n\n @Mutation\n setRoomName(name: string) {\n this.roomName = name;\n }\n\n @Mutation\n setRoomCreator(name: string) {\n this.roomCreator = name;\n }\n\n @Mutation\n setInvitationCode(code: string) {\n this.invitationCode = code;\n }\n\n @Mutation\n addLayer(name: string) {\n this.layers.push(name);\n if (this.selectedLayerIndex === -1) this.selectedLayerIndex = this.layers.indexOf(name);\n }\n\n @Mutation\n selectLayer(data: { name: string; sync: boolean }) {\n const index = this.layers.indexOf(data.name);\n if (index >= 0) this.selectedLayerIndex = index;\n if (data.sync) socket.emit(\"Client.ActiveLayer.Set\", data.name);\n }\n\n @Mutation\n newNote(data: { note: Note; sync: boolean }) {\n this.notes.push(data.note);\n if (data.sync) socket.emit(\"Note.New\", data.note);\n }\n\n @Mutation\n setAssets(assets: AssetList) {\n this.assets = assets;\n }\n\n @Mutation\n setLocations(locations: string[]) {\n this.locations = locations;\n }\n\n @Mutation\n resetLayerInfo() {\n this.layers = [];\n this.selectedLayerIndex = -1;\n }\n\n @Mutation\n recalculateVision(partial = false) {\n if (this.boardInitialized) {\n if (this.visionMode === \"triangle\") triangulate(\"vision\", partial);\n else this.BV = Object.freeze(new BoundingVolume(this.visionBlockers));\n }\n }\n\n @Mutation\n recalculateMovement(partial = false) {\n if (this.boardInitialized && this.visionMode === \"triangle\") triangulate(\"movement\", partial);\n }\n\n @Mutation\n updateZoom(data: { newZoomDisplay: number; zoomLocation: GlobalPoint }) {\n if (data.newZoomDisplay === this.zoomDisplay) return;\n if (data.newZoomDisplay < 0) data.newZoomDisplay = 0;\n if (data.newZoomDisplay > 1) data.newZoomDisplay = 1;\n const oldLoc = g2l(data.zoomLocation);\n this.zoomDisplay = data.newZoomDisplay;\n const newLoc = l2g(oldLoc);\n // Change the pan settings to keep the zoomLocation in the same exact location before and after the zoom.\n const diff = newLoc.subtract(data.zoomLocation);\n this.panX += diff.x;\n this.panY += diff.y;\n layerManager.invalidate();\n sendClientOptions();\n }\n\n @Mutation\n setGridColour(data: { colour: string; sync: boolean }) {\n this.gridColour = data.colour;\n layerManager.getGridLayer()!.drawGrid();\n if (data.sync) socket.emit(\"Client.Options.Set\", { gridColour: data.colour });\n }\n\n @Mutation\n setFOWColour(data: { colour: string; sync: boolean }) {\n this.fowColour = data.colour;\n layerManager.invalidate();\n if (data.sync) socket.emit(\"Client.Options.Set\", { fowColour: data.colour });\n }\n\n @Mutation\n setRulerColour(data: { colour: string; sync: boolean }) {\n this.rulerColour = data.colour;\n if (data.sync) socket.emit(\"Client.Options.Set\", { rulerColour: data.colour });\n }\n\n @Mutation\n setPanX(x: number) {\n this.panX = x;\n }\n\n @Mutation\n setPanY(y: number) {\n this.panY = y;\n }\n\n @Mutation\n increasePanX(increase: number) {\n this.panX += increase;\n }\n\n @Mutation\n increasePanY(increase: number) {\n this.panY += increase;\n }\n\n @Mutation\n setUnitSize(data: { unitSize: number; sync: boolean }) {\n if (this.unitSize !== data.unitSize && data.unitSize > 0 && data.unitSize < Infinity) {\n this.unitSize = data.unitSize;\n layerManager.invalidate();\n if (data.sync) socket.emit(\"Location.Options.Set\", { unit_size: data.unitSize });\n }\n }\n\n @Mutation\n setUseGrid(data: { useGrid: boolean; sync: boolean }) {\n if (this.useGrid !== data.useGrid) {\n this.useGrid = data.useGrid;\n const gridLayer = layerManager.getGridLayer()!;\n if (data.useGrid) gridLayer.canvas.style.display = \"block\";\n else gridLayer.canvas.style.display = \"none\";\n if (data.sync) socket.emit(\"Location.Options.Set\", { use_grid: data.useGrid });\n }\n }\n\n @Mutation\n setGridSize(data: { gridSize: number; sync: boolean }): void {\n if (this.gridSize !== data.gridSize && data.gridSize > 0) {\n this.gridSize = data.gridSize;\n const gridLayer = layerManager.getGridLayer();\n if (gridLayer !== undefined) gridLayer.drawGrid();\n if (data.sync) socket.emit(\"Gridsize.Set\", data.gridSize);\n }\n }\n\n @Mutation\n setVisionRangeMin(data: { value: number; sync: boolean }): void {\n this.visionRangeMin = data.value;\n layerManager.invalidateLight();\n if (data.sync) socket.emit(\"Location.Options.Set\", { vision_min_range: data.value });\n }\n\n @Mutation\n setVisionRangeMax(data: { value: number; sync: boolean }): void {\n this.visionRangeMax = Math.max(data.value, this.visionRangeMin);\n layerManager.invalidateLight();\n if (data.sync) socket.emit(\"Location.Options.Set\", { vision_max_range: this.visionRangeMax });\n }\n\n @Mutation\n setFullFOW(data: { fullFOW: boolean; sync: boolean }) {\n if (this.fullFOW !== data.fullFOW) {\n this.fullFOW = data.fullFOW;\n layerManager.invalidateLight();\n if (data.sync) socket.emit(\"Location.Options.Set\", { full_fow: data.fullFOW });\n }\n }\n\n @Mutation\n setFOWOpacity(data: { fowOpacity: number; sync: boolean }) {\n this.fowOpacity = data.fowOpacity;\n layerManager.invalidateLight();\n if (data.sync) socket.emit(\"Location.Options.Set\", { fow_opacity: data.fowOpacity });\n }\n\n @Mutation\n setLineOfSight(data: { fowLOS: boolean; sync: boolean }) {\n if (this.fowLOS !== data.fowLOS) {\n this.fowLOS = data.fowLOS;\n layerManager.invalidate();\n if (data.sync) socket.emit(\"Location.Options.Set\", { fow_los: data.fowLOS });\n }\n }\n\n @Mutation\n setLocationName(name: string) {\n this.locationName = name;\n }\n\n @Mutation\n updateNote(data: { note: Note; sync: boolean }) {\n const actualNote = this.notes.find(n => n.uuid === data.note.uuid);\n if (actualNote === undefined) return;\n actualNote.title = data.note.title;\n actualNote.text = data.note.text;\n if (data.sync) socket.emit(\"Note.Update\", actualNote);\n }\n\n @Mutation\n removeNote(data: { note: Note; sync: boolean }) {\n this.notes = this.notes.filter(n => n.uuid !== data.note.uuid);\n if (data.sync) socket.emit(\"Note.Remove\", data.note.uuid);\n }\n\n @Mutation\n toggleUI() {\n this.showUI = !this.showUI;\n }\n\n @Mutation\n setClipboard(clipboard: ServerShape[]) {\n this.clipboard = clipboard;\n }\n\n @Action\n clear() {\n (this.context.state).visionSources = [];\n (this.context.state).visionBlockers = [];\n (this.context.state).ownedtokens = [];\n (this.context.state).annotations = [];\n (this.context.state).movementblockers = [];\n (this.context.state).notes = [];\n this.context.commit(\"recalculateVision\");\n this.context.commit(\"recalculateMovement\");\n }\n}\n\nexport const gameStore = getModule(GameStore);\n","import mod from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./colorpicker.vue?vue&type=style&index=0&id=d32461a4&scoped=true&lang=css&\"; export default mod; export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./colorpicker.vue?vue&type=style&index=0&id=d32461a4&scoped=true&lang=css&\"","import mod from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/ts-loader/index.js??ref--12-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./confirm.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/ts-loader/index.js??ref--12-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./confirm.vue?vue&type=script&lang=ts&\"","import { ServerAura } from \"@/game/comm/types/shapes\";\n\nexport const aurasFromServer = (auras: ServerAura[]): Aura[] => {\n const result = [];\n for (const aura of auras) {\n result.push({\n uuid: aura.uuid,\n visionSource: aura.vision_source,\n visible: aura.visible,\n name: aura.name,\n value: aura.value,\n dim: aura.dim,\n colour: aura.colour,\n });\n }\n return result;\n};\n\nexport const aurasToServer = (auras: Aura[]): ServerAura[] => {\n const result = [];\n for (const aura of auras) {\n result.push({\n uuid: aura.uuid,\n vision_source: aura.visionSource,\n visible: aura.visible,\n name: aura.name,\n value: aura.value,\n dim: aura.dim,\n colour: aura.colour,\n });\n }\n return result;\n};\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('div',{attrs:{\"id\":\"toolselect\"}},[_c('ul',_vm._l((_vm.visibleTools),function(tool){return _c('li',{key:tool,ref:tool + '-selector',refInFor:true,class:{'tool-selected': _vm.currentTool === tool},on:{\"mousedown\":function($event){_vm.currentTool = tool}}},[_c('a',{attrs:{\"href\":\"#\"}},[_vm._v(_vm._s(tool))])])}))]),_c('div',[[_c('select-tool',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.currentTool === 'Select'),expression:\"currentTool === 'Select'\"}],ref:\"selectTool\"}),_c('pan-tool',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.currentTool === 'Pan'),expression:\"currentTool === 'Pan'\"}]}),_c('keep-alive',[_c('draw-tool',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.currentTool === 'Draw'),expression:\"currentTool === 'Draw'\"}]})],1),_c('ruler-tool',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.currentTool === 'Ruler'),expression:\"currentTool === 'Ruler'\"}]}),_c('map-tool',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.currentTool === 'Map'),expression:\"currentTool === 'Map'\"}]}),_c('filter-tool',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.currentTool === 'Filter'),expression:\"currentTool === 'Filter'\"}]}),_c('shape-menu',{ref:\"shapecontext\"}),_c('createtoken-dialog',{ref:\"createtokendialog\"})]],2)])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","export * from \"-!cache-loader?{\\\"cacheDirectory\\\":\\\"node_modules/.cache/vue-loader\\\",\\\"cacheIdentifier\\\":\\\"74f43d04-vue-loader-template\\\"}!../../../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./tools.vue?vue&type=template&id=cf33581e&scoped=true&\"","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/ts-loader/index.js??ref--12-2!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./contextMenu.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/ts-loader/index.js??ref--12-2!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./contextMenu.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./note.vue?vue&type=template&id=7a3669fd&scoped=true&\"\nimport script from \"./note.vue?vue&type=script&lang=ts&\"\nexport * from \"./note.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./note.vue?vue&type=style&index=0&id=7a3669fd&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"7a3669fd\",\n null\n \n)\n\ncomponent.options.__file = \"note.vue\"\nexport default component.exports","import { render, staticRenderFns } from \"./initiative.vue?vue&type=template&id=af4dc61a&scoped=true&\"\nimport script from \"./initiative.vue?vue&type=script&lang=ts&\"\nexport * from \"./initiative.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./initiative.vue?vue&type=style&index=0&id=af4dc61a&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"af4dc61a\",\n null\n \n)\n\ncomponent.options.__file = \"initiative.vue\"\nexport default component.exports","import { ServerLayer } from \"@/game/comm/types/general\";\nimport { FOWLayer } from \"@/game/layers/fow\";\nimport { FOWPlayersLayer } from \"@/game/layers/fowplayers\";\nimport { GridLayer } from \"@/game/layers/grid\";\nimport { Layer } from \"@/game/layers/layer\";\nimport { layerManager } from \"@/game/layers/manager\";\nimport { gameStore } from \"@/game/store\";\n\nexport function createLayer(layerInfo: ServerLayer) {\n // Create canvas element\n const canvas = document.createElement(\"canvas\");\n canvas.style.zIndex = layerManager.layers.length.toString();\n canvas.width = window.innerWidth;\n canvas.height = window.innerHeight;\n\n // Create the Layer instance\n let layer: Layer;\n if (layerInfo.type_ === \"grid\") layer = new GridLayer(canvas, layerInfo.name);\n else if (layerInfo.type_ === \"fow\") layer = new FOWLayer(canvas, layerInfo.name);\n else if (layerInfo.type_ === \"fow-players\") layer = new FOWPlayersLayer(canvas, layerInfo.name);\n else layer = new Layer(canvas, layerInfo.name);\n layer.selectable = layerInfo.selectable;\n layer.playerEditable = layerInfo.player_editable;\n layerManager.addLayer(layer);\n\n // Add the element to the DOM\n const layers = document.getElementById(\"layers\");\n if (layers === null) {\n console.warn(\"Layers div is missing, this will prevent the main game board from loading!\");\n return;\n }\n if (layerInfo.name !== \"fow-players\") layers.appendChild(canvas);\n\n if (layerInfo.type_ === \"grid\" && layerInfo.size) gameStore.setGridSize({ gridSize: layerInfo.size, sync: false });\n // Load layer shapes\n layer.setShapes(layerInfo.shapes);\n}\n","import { render, staticRenderFns } from \"./labels.vue?vue&type=template&id=4697341e&scoped=true&\"\nimport script from \"./labels.vue?vue&type=script&lang=ts&\"\nexport * from \"./labels.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./labels.vue?vue&type=style&index=0&id=4697341e&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"4697341e\",\n null\n \n)\n\ncomponent.options.__file = \"labels.vue\"\nexport default component.exports","import mod from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/ts-loader/index.js??ref--12-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./edit_dialog.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/ts-loader/index.js??ref--12-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./edit_dialog.vue?vue&type=script&lang=ts&\"","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('form',{on:{\"focusin\":_vm.focusin,\"focusout\":_vm.focusout,\"submit\":function($event){$event.preventDefault();return _vm.login($event)}}},[_c('fieldset',[_c('legend',{staticClass:\"legend\"},[_vm._v(\"PlanarAlly\")]),_c('div',{staticClass:\"input\"},[_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.username),expression:\"username\"}],attrs:{\"type\":\"text\",\"name\":\"username\",\"placeholder\":\"Username\",\"autocomplete\":\"username\",\"required\":\"\"},domProps:{\"value\":(_vm.username)},on:{\"input\":function($event){if($event.target.composing){ return; }_vm.username=$event.target.value}}}),_vm._m(0)]),_c('div',{staticClass:\"input\"},[_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.password),expression:\"password\"}],attrs:{\"type\":\"password\",\"name\":\"password\",\"placeholder\":\"Password\",\"autocomplete\":\"current-password\",\"required\":\"\"},domProps:{\"value\":(_vm.password)},on:{\"input\":function($event){if($event.target.composing){ return; }_vm.password=$event.target.value}}}),_vm._m(1)]),_c('div',{staticStyle:{\"display\":\"flex\"}},[_c('button',{staticStyle:{\"visibility\":\"hidden\",\"display\":\"none\"},attrs:{\"type\":\"submit\",\"name\":\"login\"}}),_c('button',{staticClass:\"submit\",attrs:{\"type\":\"button\",\"name\":\"register\",\"title\":\"Register\"},on:{\"click\":_vm.register}},[_c('i',{staticClass:\"fas fa-plus\"})]),_vm._m(2)])]),(_vm.error)?_c('div',{staticClass:\"feedback\"},[_c('p',{staticClass:\"error\"},[_c('strong',[_vm._v(\"Error:\")]),_vm._v(\"\\n \"+_vm._s(_vm.error)+\"\\n \")])]):_vm._e()])}\nvar staticRenderFns = [function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('span',[_c('i',{staticClass:\"fas fa-user-circle\"})])},function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('span',[_c('i',{staticClass:\"fas fa-lock\"})])},function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('button',{staticClass:\"submit\",attrs:{\"type\":\"submit\",\"name\":\"login\",\"title\":\"Login\"}},[_c('i',{staticClass:\"fas fa-arrow-right\"})])}]\n\nexport { render, staticRenderFns }","export * from \"-!cache-loader?{\\\"cacheDirectory\\\":\\\"node_modules/.cache/vue-loader\\\",\\\"cacheIdentifier\\\":\\\"74f43d04-vue-loader-template\\\"}!../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./login.vue?vue&type=template&id=bc30fc14&scoped=true&\"","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nimport Vue from \"vue\";\nimport Component from \"vue-class-component\";\n\nimport Prompt from \"@/core/components/modals/prompt.vue\";\nimport EditDialog from \"@/game/ui/selection/edit_dialog.vue\";\n\nimport { getRef } from \"@/core/utils\";\nimport { socket } from \"@/game/api/socket\";\nimport { EventBus } from \"@/game/event-bus\";\nimport { layerManager } from \"@/game/layers/manager\";\nimport { Shape } from \"@/game/shapes/shape\";\n\n@Component({\n components: {\n \"edit-dialog\": EditDialog,\n },\n})\nexport default class SelectionInfo extends Vue {\n shape: Shape | null = null;\n\n mounted() {\n EventBus.$on(\"SelectionInfo.Shape.Set\", (shape: Shape | null) => {\n this.shape = shape;\n });\n }\n\n beforeDestroy() {\n EventBus.$off(\"SelectionInfo.Shape.Set\");\n }\n\n openEditDialog() {\n (this.$refs.editDialog).visible = true;\n }\n changeValue(object: Tracker | Aura, redraw: boolean) {\n if (this.shape === null) return;\n getRef(\"prompt\")\n .prompt(`New ${object.name} value:`, `Updating ${object.name}`)\n .then(\n (value: string) => {\n if (this.shape === null) return;\n const ogValue = object.value;\n if (value[0] === \"+\" || value[0] === \"-\") object.value += parseInt(value, 10);\n else object.value = parseInt(value, 10);\n if (isNaN(object.value)) object.value = ogValue;\n socket.emit(\"Shape.Update\", { shape: this.shape.asDict(), redraw, temporary: false });\n if (redraw) layerManager.invalidate();\n },\n () => {},\n );\n }\n}\n","import { AssetList } from \"@/core/comm/types\";\nimport { socket } from \"@/game/api/socket\";\nimport { BoardInfo, Note, ServerClient, ServerLocation } from \"@/game/comm/types/general\";\nimport { ServerShape } from \"@/game/comm/types/shapes\";\nimport { EventBus } from \"@/game/event-bus\";\nimport { GlobalPoint } from \"@/game/geom\";\nimport { layerManager } from \"@/game/layers/manager\";\nimport { createLayer } from \"@/game/layers/utils\";\nimport { gameManager } from \"@/game/manager\";\nimport { gameStore } from \"@/game/store\";\nimport { router } from \"@/router\";\nimport { zoomDisplay } from \"../utils\";\n\nsocket.on(\"connect\", () => {\n console.log(\"Connected\");\n});\nsocket.on(\"disconnect\", () => {\n console.log(\"Disconnected\");\n});\nsocket.on(\"connect_error\", (error: any) => {\n console.error(\"Could not connect to game session.\");\n router.push(\"/dashboard\");\n});\nsocket.on(\"error\", (error: any) => {\n console.error(\"Game session does not exist.\");\n router.push(\"/dashboard\");\n});\nsocket.on(\"redirect\", (destination: string) => {\n console.log(\"redirecting\");\n router.push(destination);\n});\nsocket.on(\"Room.Info.Set\", (data: { name: string; creator: string; invitationCode: string }) => {\n gameStore.setRoomName(data.name);\n gameStore.setRoomCreator(data.creator);\n gameStore.setInvitationCode(data.invitationCode);\n});\nsocket.on(\"Username.Set\", (username: string) => {\n gameStore.setUsername(username);\n gameStore.setDM(username === window.location.pathname.split(\"/\")[2]);\n});\nsocket.on(\"Client.Options.Set\", (options: ServerClient) => {\n gameStore.setGridColour({ colour: options.grid_colour, sync: false });\n gameStore.setFOWColour({ colour: options.fow_colour, sync: false });\n gameStore.setRulerColour({ colour: options.ruler_colour, sync: false });\n gameStore.setPanX(options.pan_x);\n gameStore.setPanY(options.pan_y);\n gameStore.setZoomDisplay(zoomDisplay(options.zoom_factor));\n // gameStore.setZoomDisplay(0.5);\n if (options.active_layer) layerManager.selectLayer(options.active_layer, false);\n if (layerManager.getGridLayer() !== undefined) layerManager.getGridLayer()!.invalidate();\n});\nsocket.on(\"Location.Set\", (data: Partial) => {\n if (data.name !== undefined) gameStore.setLocationName(data.name);\n if (data.unit_size !== undefined) gameStore.setUnitSize({ unitSize: data.unit_size, sync: false });\n if (data.use_grid !== undefined) gameStore.setUseGrid({ useGrid: data.use_grid, sync: false });\n if (data.full_fow !== undefined) gameStore.setFullFOW({ fullFOW: data.full_fow, sync: false });\n if (data.fow_opacity !== undefined) gameStore.setFOWOpacity({ fowOpacity: data.fow_opacity, sync: false });\n if (data.fow_los !== undefined) gameStore.setLineOfSight({ fowLOS: data.fow_los, sync: false });\n if (data.vision_min_range !== undefined) gameStore.setVisionRangeMin({ value: data.vision_min_range, sync: false });\n if (data.vision_max_range !== undefined) gameStore.setVisionRangeMax({ value: data.vision_max_range, sync: false });\n if (data.vision_mode !== undefined) {\n gameStore.setVisionMode({ mode: data.vision_mode, sync: false });\n gameStore.recalculateVision();\n gameStore.recalculateMovement();\n }\n});\nsocket.on(\"Position.Set\", (data: { x: number; y: number }) => {\n gameManager.setCenterPosition(new GlobalPoint(data.x, data.y));\n});\nsocket.on(\"Notes.Set\", (notes: Note[]) => {\n for (const note of notes) gameStore.newNote({ note, sync: false });\n});\nsocket.on(\"Asset.List.Set\", (assets: AssetList) => {\n gameStore.setAssets(assets);\n});\nsocket.on(\"Board.Set\", (locationInfo: BoardInfo) => {\n gameStore.clear();\n gameStore.setLocations(locationInfo.locations);\n document.getElementById(\"layers\")!.innerHTML = \"\";\n gameStore.resetLayerInfo();\n layerManager.reset();\n for (const layer of locationInfo.layers) createLayer(layer);\n // Force the correct opacity render on other layers.\n layerManager.selectLayer(layerManager.getLayer()!.name, false);\n EventBus.$emit(\"Initiative.Clear\");\n gameStore.recalculateVision();\n gameStore.recalculateMovement();\n gameStore.setBoardInitialized(true);\n});\nsocket.on(\"Gridsize.Set\", (gridSize: number) => {\n gameStore.setGridSize({ gridSize, sync: false });\n});\nsocket.on(\"Shape.Add\", (shape: ServerShape) => {\n gameManager.addShape(shape);\n});\nsocket.on(\"Shape.Remove\", (shape: ServerShape) => {\n if (!layerManager.UUIDMap.has(shape.uuid)) {\n console.log(`Attempted to remove an unknown shape`);\n return;\n }\n if (!layerManager.hasLayer(shape.layer)) {\n console.log(`Attempted to remove shape from an unknown layer ${shape.layer}`);\n return;\n }\n const layer = layerManager.getLayer(shape.layer)!;\n layer.removeShape(layerManager.UUIDMap.get(shape.uuid)!, false);\n layer.invalidate(false);\n});\nsocket.on(\"Shape.Order.Set\", (data: { shape: ServerShape; index: number }) => {\n if (!layerManager.UUIDMap.has(data.shape.uuid)) {\n console.log(`Attempted to move the shape order of an unknown shape`);\n return;\n }\n if (!layerManager.hasLayer(data.shape.layer)) {\n console.log(`Attempted to remove shape from an unknown layer ${data.shape.layer}`);\n return;\n }\n const shape = layerManager.UUIDMap.get(data.shape.uuid)!;\n const layer = layerManager.getLayer(shape.layer)!;\n layer.moveShapeOrder(shape, data.index, false);\n});\nsocket.on(\"Shape.Layer.Change\", (data: { uuid: string; layer: string }) => {\n const shape = layerManager.UUIDMap.get(data.uuid);\n if (shape === undefined) return;\n shape.moveLayer(data.layer, false);\n});\nsocket.on(\"Shape.Update\", (data: { shape: ServerShape; redraw: boolean; move: boolean, temporary: boolean }) => {\n gameManager.updateShape(data);\n});\nsocket.on(\"Temp.Clear\", (shapes: ServerShape[]) => {\n shapes.forEach(shape => {\n if (!layerManager.UUIDMap.has(shape.uuid)) {\n console.log(\"Attempted to remove an unknown temporary shape\");\n return;\n }\n if (!layerManager.hasLayer(shape.layer)) {\n console.log(`Attempted to remove shape from an unknown layer ${shape.layer}`);\n return;\n }\n const realShape = layerManager.UUIDMap.get(shape.uuid)!;\n layerManager.getLayer(shape.layer)!.removeShape(realShape, false);\n });\n});\nsocket.on(\"Labels.Set\", (labels: Label[]) => {\n for (const label of labels) gameStore.addLabel(label);\n});\nsocket.on(\"Label.Visibility.Set\", (data: { user: string; uuid: string; visible: boolean }) => {\n gameStore.setLabelVisibility(data);\n});\nsocket.on(\"Label.Add\", (data: Label) => {\n gameStore.addLabel(data);\n});\nsocket.on(\"Label.Delete\", (data: { user: string; uuid: string }) => {\n gameStore.deleteLabel(data);\n});\nsocket.on(\"Labels.Filter.Add\", (uuid: string) => {\n gameStore.labelFilters.push(uuid);\n layerManager.invalidate();\n})\nsocket.on(\"Labels.Filter.Remove\", (uuid: string) => {\n const idx = gameStore.labelFilters.indexOf(uuid);\n if (idx >= 0) {\n gameStore.labelFilters.splice(idx, 1);\n layerManager.invalidate();\n }\n})\nsocket.on(\"Labels.Filters.Set\", (filters: string[]) => {\n gameStore.setLabelFilters(filters);\n})\n"],"sourceRoot":""} \ No newline at end of file diff --git a/server/static/js/app-legacy.b2080500.js b/server/static/js/app-legacy.b2080500.js new file mode 100644 index 000000000..03c63fd7e --- /dev/null +++ b/server/static/js/app-legacy.b2080500.js @@ -0,0 +1,2 @@ +(function(e){function t(t){for(var s,r,a=t[0],l=t[1],c=t[2],d=0,h=[];de.fillText(t.text,t.x,t.y)),e.restore()}contains(e){return!1}center(e){}visibleInCanvas(e){return this.getBoundingBox().visibleInCanvas(e)}snapToGrid(){}resizeToGrid(){}resize(e,t){}getMaxHeight(e){const t=this.getLines(e),i=30;return i*t.length}getMaxWidth(e){const t=this.getLines(e),i=t.map(t=>e.measureText(t.text).width);return Math.max(...i)}getLines(e){const t=this.text.split("\n"),i=[],s=e.canvas.width,n=30,o=0;let r=0;for(const a of t){let t="";const l=a.split(" ");for(const a of l){const l=t+a+" ",c=e.measureText(l),u=c.width;u>s?(e.fillText(t,o,r),i.push({text:t,x:o,y:r}),t=a+" ",r+=n):t=l}i.push({text:t,x:o,y:r}),r+=n}return i}}t.Text=r},"01be":function(e,t,i){"use strict";var s=i("919a"),n=i.n(s);n.a},"033f":function(e,t,i){"use strict";i.r(t);var s=i("a1f4"),n=i("a68b");for(var o in n)"default"!==o&&function(e){i.d(t,e,function(){return n[e]})}(o);i("7997");var r=i("2877"),a=Object(r["a"])(n["default"],s["a"],s["b"],!1,null,"759e5a8a",null);a.options.__file="shapecontext.vue",t["default"]=a.exports},"034f":function(e,t,i){"use strict";var s=i("64a9"),n=i.n(s);n.a},"052c":function(e,t,i){"use strict";var s=i("54ac"),n=i.n(s);n.a},"0584":function(e,t,i){"use strict";var s=i("de21"),n=i.n(s);n.a},"0634":function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0});const s=i("9ab4"),n=s.__importDefault(i("66cb")),o=s.__importDefault(i("a026")),r=s.__importDefault(i("65d9")),a=i("c345a"),l=i("60a3");let c=class extends o.default{constructor(){super(...arguments),this.display=!1,this.left=0,this.top=0,this.transparent=!1}mounted(){this.transparent=0===this.$refs.chromePicker.val.rgba.a,this.setPosition()}open(){this.display||this.disabled||(this.setPosition(),this.display=!0,this.$nextTick(()=>this.$children[0].$el.focus()))}updateColor(e){this.transparent=0===e.rgba.a;const t=n.default(e.rgba).toRgbString();this.$emit("update:color",t),this.$emit("input",t)}closePicker(){this.display=!1,this.$emit("change",this.color)}setPosition(){const e=this.$el.getBoundingClientRect();e.right+224>window.innerWidth?this.left=e.left-224:this.left=e.right,e.bottom+242>window.innerHeight?this.top=e.top-242:this.top=e.bottom}};s.__decorate([l.Prop(String)],c.prototype,"color",void 0),s.__decorate([l.Prop(Boolean)],c.prototype,"disabled",void 0),c=s.__decorate([r.default({components:{"chrome-picker":a.Chrome}})],c),t.default=c},"07f5":function(e,t,i){"use strict";i.r(t);var s=i("412c"),n=i("d588");for(var o in n)"default"!==o&&function(e){i.d(t,e,function(){return n[e]})}(o);i("561b"),i("b62e");var r=i("2877"),a=Object(r["a"])(n["default"],s["a"],s["b"],!1,null,"05b88da7",null);a.options.__file="game.vue",t["default"]=a.exports},"0a75":function(e,t,i){},"0bc6":function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0});const s=i("9ab4"),n=s.__importDefault(i("8055"));function o(e){t.socket.io.opts.query=`user=${e.params.creator}&room=${e.params.room}`,t.socket.connect()}t.socket=n.default(location.protocol+"//"+location.host+"/planarally",{autoConnect:!1}),t.createConnection=o},"0cf7":function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0});const s=i("9ab4"),n=s.__importDefault(i("a026")),o=s.__importDefault(i("65d9")),r=s.__importDefault(i("4aec")),a=s.__importDefault(i("a535")),l=s.__importDefault(i("cec2")),c=i("5338"),u=i("2d5b"),d=i("4a5b");let h=class extends n.default{constructor(){super(...arguments),this.path=[],this.draggingSelection=!1}get folders(){return u.assetStore.folders}get files(){return u.assetStore.files}get selected(){return u.assetStore.selected}get idMap(){return u.assetStore.idMap}get currentFolder(){return this.path.length?this.path[this.path.length-1]:u.assetStore.root}get parentFolder(){let e=this.path[this.path.length-2];return void 0===e&&(e=u.assetStore.root),e}get firstSelectedFile(){for(const e of u.assetStore.selected)if(u.assetStore.idMap.get(e).file_hash)return u.assetStore.idMap.get(e);return null}changeDirectory(e){e<0?this.path.pop():this.path.push(e),u.assetStore.clearSelected(),c.socket.emit("Folder.Get",this.currentFolder)}createDirectory(){const e=window.prompt("New folder name");null!==e&&c.socket.emit("Folder.Create",{name:e,parent:this.currentFolder})}moveInode(e,t){u.assetStore.files.includes(e)?u.assetStore.files.splice(u.assetStore.files.indexOf(e),1):u.assetStore.folders.splice(u.assetStore.folders.indexOf(e),1),u.assetStore.idMap.delete(e),c.socket.emit("Inode.Move",{inode:e,target:t})}select(e,t){if(e.shiftKey&&u.assetStore.selected.length>0){const e=[...u.assetStore.files,...u.assetStore.folders],i=e.indexOf(u.assetStore.selected[u.assetStore.selected.length-1]),s=e.indexOf(t);for(let t=i;t!==s;i0&&this.upload(e.dataTransfer.files,t);this.draggingSelection=!1}prepareUpload(){document.getElementById("files").click()}upload(e,t){const i=document.getElementById("files").files;if(void 0===e){if(!i)return;e=i}void 0===t&&(t=this.currentFolder);const s=1e5;for(const n of e){const e=d.uuidv4(),i=Math.ceil(n.size/s);for(let o=0;o{c.socket.emit("Asset.Upload",{name:n.name,directory:t,data:r.result,slice:o,totalSlices:i,uuid:e})})}}}};h=s.__decorate([o.default({components:{Prompt:l.default,ConfirmDialog:a.default,AssetContextMenu:r.default},beforeRouteEnter(e,t,i){c.socket.connect(),i()},beforeRouteLeave(e,t,i){c.socket.disconnect(),i()}})],h),t.default=h},"0ddd":function(e,t,i){"use strict";i.r(t);var s=i("8f54"),n=i("4bc3");for(var o in n)"default"!==o&&function(e){i.d(t,e,function(){return n[e]})}(o);i("9dd4");var r=i("2877"),a=Object(r["a"])(n["default"],s["a"],s["b"],!1,null,"6d718094",null);a.options.__file="asset_node.vue",t["default"]=a.exports},1:function(e,t){},"104d":function(e,t,i){"use strict";var s=i("5722"),n=i.n(s);n.a},1077:function(e,t,i){"use strict";i.r(t);var s=i("f994"),n=i("1eee");for(var o in n)"default"!==o&&function(e){i.d(t,e,function(){return n[e]})}(o);i("3cd3");var r=i("2877"),a=Object(r["a"])(n["default"],s["a"],s["b"],!1,null,"bc30fc14",null);a.options.__file="login.vue",t["default"]=a.exports},1216:function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0});const s=i("6f92"),n=i("92b1"),o=i("98ef"),r=i("4aee");function a(e,t){const i=s.layerManager.getLayer("draw");if(void 0===i)return;const o=i.ctx;o.lineJoin="round",o.lineJoin="round",o.beginPath(),o.strokeStyle=void 0===t?`rgb(${255*Math.random()}, ${255*Math.random()}, ${255*Math.random()})`:t,o.moveTo(n.g2lx(e[0][0]),n.g2ly(e[0][1]));for(const s of e)o.lineTo(n.g2lx(s[0]),n.g2ly(s[1]));o.closePath(),o.stroke()}function l(e,t){const i=s.layerManager.getLayer("draw");if(void 0===i)return;const n=i.ctx;n.lineJoin="round",n.lineJoin="round",n.beginPath(),n.strokeStyle=void 0===t?`rgb(${255*Math.random()}, ${255*Math.random()}, ${255*Math.random()})`:t,n.moveTo(e[0][0],e[0][1]);for(const s of e)n.lineTo(s[0],s[1]);n.closePath(),n.stroke()}function c(e,t){return t?e:n.g2lx(e)}function u(e,t){return t?e:n.g2ly(e)}t.drawPolygon=a,t.drawPolygonL=l;let d=0,h=0;function f(e,t,i,s,n){e.beginPath(),e.strokeStyle=s?"rgba(255, 0, 0, 0.30)":"rgba(0, 0, 0, 0.30)",e.moveTo(c(t[0],n),u(t[1],n)),e.lineTo(c(i[0],n),u(i[1],n)),e.closePath(),e.stroke()}function p(e,t=!0,i=!0,n=0){d=0,h=0;let a=0;const l=s.layerManager.getLayer("draw");if(void 0===l)return;const p=l.ctx;i&&p.clearRect(0,0,2e3,1e3),p.lineJoin="round",p.lineJoin="round";const g=new o.EdgeIterator(e);while(g.valid)g.next(),g.collect();g.collect();do{const e=g.edge.first.vertices[r.ccw(g.edge.second)].point,t=g.edge.first.vertices[r.cw(g.edge.second)].point;if(n>0){if(e[0]===-1/0||t[0]===-1/0){g.next();continue}h++,g.edge.first.constraints[g.edge.second]?(d++,2===n&&console.log(`Edge: (*) ${e} > ${t}`)):2===n&&console.log(`Edge: ${e} > ${t}`)}do{g.next(),g.collect()}while(g.valid)}while(null!==g.pos);for(const s of e.triangles){if(s.isInfinite())continue;a++;const e=[];p.fillStyle="red",void 0!==s.vertices[0]&&(e.push(s.vertices[0].point),p.beginPath(),p.arc(c(s.vertices[0].point[0],t),u(s.vertices[0].point[1],t),5,0,2*Math.PI),p.closePath(),p.fill()),void 0!==s.vertices[1]&&(e.push(s.vertices[1].point),p.arc(c(s.vertices[1].point[0],t),u(s.vertices[1].point[1],t),5,0,2*Math.PI),p.closePath(),p.fill()),void 0!==s.vertices[2]&&(e.push(s.vertices[2].point),p.arc(c(s.vertices[2].point[0],t),u(s.vertices[2].point[1],t),5,0,2*Math.PI),p.closePath(),p.fill()),2===n&&console.log("[T] ",...e,s.constraints),p.moveTo(c(s.vertices[0].point[0],t),u(s.vertices[0].point[1],t)),void 0!==s.vertices[0]&&void 0!==s.vertices[1]&&f(p,s.vertices[0].point,s.vertices[1].point,s.constraints[2],t),void 0!==s.vertices[1]&&void 0!==s.vertices[2]&&f(p,s.vertices[1].point,s.vertices[2].point,s.constraints[0],t),void 0!==s.vertices[2]&&void 0!==s.vertices[0]&&f(p,s.vertices[2].point,s.vertices[0].point,s.constraints[1],t)}n>0&&(console.log(`Edges: ${d}/${h}`),console.log(`Faces: ${a}`))}window.DP=a,window.DPL=l,window.DPT=p},1289:function(e,t,i){"use strict";i.r(t);var s=i("df64"),n=i("d677");for(var o in n)"default"!==o&&function(e){i.d(t,e,function(){return n[e]})}(o);i("8790");var r=i("2877"),a=Object(r["a"])(n["default"],s["a"],s["b"],!1,null,"0bf2b7ba",null);a.options.__file="accordion.vue",t["default"]=a.exports},"12d3":function(e,t,i){"use strict";var s=i("a260"),n=i.n(s);n.a},1327:function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0});const s=i("9ab4"),n=s.__importStar(i("66cb")),o=i("4a5b"),r=i("4709"),a=i("f10f"),l=i("92b1");class c extends r.Circle{constructor(e,t,i,s,n,o,r){super(e,t,n,o,r),this.type="circulartoken",this.text=i,this.font=s}asDict(){return Object.assign(this.getBaseDict(),{radius:this.r,text:this.text,font:this.font})}fromDict(e){super.fromDict(e),this.r=e.radius,this.text=e.text,this.font=e.font}draw(e){super.draw(e),e.font=this.font,e.save();const t=l.g2l(this.center());e.textAlign="center",e.textBaseline="middle";const i=o.calcFontScale(e,this.text,l.g2lz(this.r),l.g2lz(this.r)),s=0;e.transform(i,s,-s,i,t.x,t.y),e.fillStyle=n.mostReadable(this.fillColour,["#000","#fff"]).toHexString(),e.fillText(this.text,0,0),e.restore()}getInitiativeRepr(){return{uuid:this.uuid,visible:!a.gameStore.IS_DM,group:!1,source:""===this.name||"Unknown shape"===this.name?this.text:this.name,has_img:!1,effects:[],index:1/0}}}t.CircularToken=c},1625:function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0});const s=i("8f0a"),n=i("6f92"),o=i("b2ed"),r=i("0180"),a=i("f10f"),l=i("92b1");class c{constructor(){this.shown=!1;const e=new s.GlobalPoint(0,0);this.annotationText=new r.Text(e,"","bold 20px serif",0,"rgba(230, 230, 230, 1)"),this.annotationRect=new o.Rect(e,0,0,"rgba(0, 0, 0, 0.6)")}setActiveText(e){if(void 0===this.layer){if(!n.layerManager.hasLayer("draw"))return void console.warn("There is no draw layer to draw annotations on!");this.layer=n.layerManager.getLayer("draw"),this.layer.addShape(this.annotationRect,!1),this.layer.addShape(this.annotationText,!1)}this.shown=""!==e,this.annotationText.refPoint=l.l2g(new s.LocalPoint(this.layer.canvas.width/2,50)),this.annotationText.text=e;const t=this.shown?this.annotationText.getMaxWidth(this.layer.ctx)+10:0,i=this.shown?this.annotationText.getMaxHeight(this.layer.ctx)+10:0;this.annotationRect.refPoint=l.l2g(new s.LocalPoint(this.layer.canvas.width/2-t/2,30)),this.annotationRect.w=t/a.gameStore.zoomFactor,this.annotationRect.h=i/a.gameStore.zoomFactor,this.layer.invalidate(!0)}}t.AnnotationManager=c},"19f9":function(e,t,i){"use strict";i.r(t);var s=i("844e"),n=i("8cd4");for(var o in n)"default"!==o&&function(e){i.d(t,e,function(){return n[e]})}(o);i("052c");var r=i("2877"),a=Object(r["a"])(n["default"],s["a"],s["b"],!1,null,"13f3fb33",null);a.options.__file="menu.vue",t["default"]=a.exports},"1c76":function(e,t,i){"use strict";i.r(t);var s=i("2c88"),n=i("300e");for(var o in n)"default"!==o&&function(e){i.d(t,e,function(){return n[e]})}(o);i("7f1e");var r=i("2877"),a=Object(r["a"])(n["default"],s["a"],s["b"],!1,null,null,null);a.options.__file="contextmenu.vue",t["default"]=a.exports},"1dd6":function(e,t,i){"use strict";i.r(t);var s=i("5ae5"),n=i.n(s);for(var o in s)"default"!==o&&function(e){i.d(t,e,function(){return s[e]})}(o);t["default"]=n.a},"1eee":function(e,t,i){"use strict";i.r(t);var s=i("d30b"),n=i.n(s);for(var o in s)"default"!==o&&function(e){i.d(t,e,function(){return s[e]})}(o);t["default"]=n.a},"1fd5":function(e,t,i){"use strict";var s=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("Modal",{attrs:{visible:e.visible,mask:!1},on:{close:function(t){e.visible=!1}},scopedSlots:e._u([{key:"header",fn:function(t){return i("div",{staticClass:"modal-header",attrs:{draggable:"true"},on:{dragstart:t.dragStart,dragend:t.dragEnd}},[i("div",[e._v("Label manager")]),i("div",{staticClass:"header-close",on:{click:function(t){e.visible=!1}}},[i("i",{staticClass:"far fa-window-close"})])])}}])},[i("div",{staticClass:"modal-body"},[i("div",{staticClass:"grid"},[i("div",{staticClass:"header"},[i("abbr",{attrs:{title:"Category"}},[e._v("Cat.")])]),i("div",{staticClass:"header name"},[e._v("Name")]),i("div",{staticClass:"header"},[i("abbr",{attrs:{title:"Visible"}},[e._v("Vis.")])]),i("div",{staticClass:"header"},[i("abbr",{attrs:{title:"Delete"}},[e._v("Del.")])]),i("div",{staticClass:"separator spanrow",staticStyle:{margin:"0 0 7px"}}),i("input",{directives:[{name:"model",rawName:"v-model",value:e.search,expression:"search"}],ref:"search",staticClass:"spanrow",attrs:{type:"text",placeholder:"search"},domProps:{value:e.search},on:{input:function(t){t.target.composing||(e.search=t.target.value)}}})]),i("div",{staticClass:"grid scroll"},[e._l(e.categories,function(t){return[e._l(e.labels[t],function(t){return[i("div",{key:"row-"+t.uuid,staticClass:"row",on:{click:function(i){e.selectLabel(t.uuid)}}},[t.category?[i("div",{key:"cat-"+t.uuid},[e._v(e._s(t.category))]),i("div",{key:"name-"+t.uuid,staticClass:"name"},[e._v(e._s(t.name))])]:e._e(),t.category?e._e():[i("div",{key:"cat-"+t.uuid}),i("div",{key:"name-"+t.uuid,staticClass:"name"},[e._v(e._s(t.name))])],i("div",{key:"visible-"+t.uuid,class:{"lower-opacity":!t.visible},style:{textAlign:"center"},on:{click:function(i){i.stopPropagation(),e.toggleVisibility(t)}}},[i("i",{staticClass:"fas fa-eye"})]),i("div",{key:"delete-"+t.uuid,on:{click:function(i){i.stopPropagation(),e.deleteLabel(t.uuid)}}},[i("i",{staticClass:"fas fa-trash-alt"})])],2)]})]}),0===e.labels.length?[i("div",{attrs:{id:"no-labels"}},[e._v("No labels exist yet")])]:e._e()],2),i("div",{staticClass:"grid"},[i("div",{staticClass:"separator spanrow"}),i("input",{directives:[{name:"model",rawName:"v-model.trim",value:e.newCategory,expression:"newCategory",modifiers:{trim:!0}}],attrs:{type:"text"},domProps:{value:e.newCategory},on:{input:function(t){t.target.composing||(e.newCategory=t.target.value.trim())},blur:function(t){e.$forceUpdate()}}}),i("input",{directives:[{name:"model",rawName:"v-model.trim",value:e.newName,expression:"newName",modifiers:{trim:!0}}],attrs:{type:"text"},domProps:{value:e.newName},on:{input:function(t){t.target.composing||(e.newName=t.target.value.trim())},blur:function(t){e.$forceUpdate()}}}),i("button",{attrs:{id:"addLabelButton"},on:{click:function(t){return t.stopPropagation(),e.addLabel(t)}}},[e._v("Add")])])])])},n=[];i.d(t,"a",function(){return s}),i.d(t,"b",function(){return n})},"206a":function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0});const s=i("8f0a"),n=i("6f92"),o=i("6c30"),r=i("4709"),a=i("1327"),l=i("5e7c"),c=i("574e"),u=i("b2ed"),d=i("0180"),h=i("e4ea");function f(e){let t;const i=new s.GlobalPoint(e.x,e.y);if("rect"===e.type_){const s=e;t=new u.Rect(i,s.width,s.height,s.fill_colour,s.stroke_colour,s.uuid)}else if("circle"===e.type_){const s=e;t=new r.Circle(i,s.radius,s.fill_colour,s.stroke_colour,s.uuid)}else if("circulartoken"===e.type_){const s=e;t=new a.CircularToken(i,s.radius,s.text,s.font,s.fill_colour,s.stroke_colour,s.uuid)}else if("line"===e.type_){const n=e;t=new l.Line(i,new s.GlobalPoint(n.x2,n.y2),n.line_width,n.stroke_colour,n.uuid)}else if("multiline"===e.type_){const n=e;t=new c.MultiLine(i,n.points.map(e=>new s.GlobalPoint(e.x,e.y)),n.line_width,n.stroke_colour,n.uuid)}else if("polygon"===e.type_){const n=e;t=new h.Polygon(i,n.vertices.map(e=>new s.GlobalPoint(e.x,e.y)),n.fill_colour,n.stroke_colour,n.uuid)}else if("text"===e.type_){const s=e;t=new d.Text(i,s.text,s.font,s.angle,s.fill_colour,s.stroke_colour,s.uuid)}else{if("assetrect"!==e.type_)return;{const s=e,r=new Image(s.width,s.height);s.src.startsWith("http")?r.src=new URL(s.src).pathname:r.src=s.src,t=new o.Asset(r,i,s.width,s.height,s.uuid),r.onload=(()=>{n.layerManager.getLayer(e.layer).invalidate(!1)})}}return t.fromDict(e),t}t.createShapeFromDict=f},"223d":function(e,t,i){"use strict";var s=i("e756"),n=i.n(s);n.a},"22bd":function(e,t,i){"use strict";var s=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("SelectContext",{ref:"selectcontext"})},n=[];i.d(t,"a",function(){return s}),i.d(t,"b",function(){return n})},2469:function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0});const s=i("9ab4"),n=s.__importDefault(i("66cb")),o=i("4a5b"),r=i("0bc6"),a=i("f312"),l=i("8f0a"),c=i("6f92"),u=i("f10f"),d=i("92b1");class h{constructor(e,t,i,s){this.fillColour="#000",this.strokeColour="rgba(0,0,0,0)",this.name="Unknown shape",this.nameVisible=!0,this.trackers=[],this.auras=[],this.labels=[],this._owners=[],this.visionObstruction=!1,this.movementObstruction=!1,this.isToken=!1,this.showHighlight=!1,this.annotation="",this.globalCompositeOperation="source-over",this.options=new Map,this._refPoint=e,this.uuid=s||o.uuidv4(),void 0!==t&&(this.fillColour=t),void 0!==i&&(this.strokeColour=i)}get refPoint(){return this._refPoint}set refPoint(e){this._refPoint=e}visibleInCanvas(e){return!1}getPointIndex(e,t=0){for(const[i,s]of this.points.entries())if(Math.abs(e.x-s[0])<=t&&Math.abs(e.y-s[1])<=t)return i;return-1}getPointOrientation(e){const t=l.GlobalPoint.fromArray(this.points[(this.points.length+e-1)%this.points.length]),i=l.GlobalPoint.fromArray(this.points[e]),s=l.GlobalPoint.fromArray(this.points[(e+1)%this.points.length]),n=s.subtract(t),o=t.add(n.multiply(.5));return i.subtract(o).normalize()}invalidate(e){const t=c.layerManager.getLayer(this.layer);t&&t.invalidate(e)}checkVisionSources(e=!0){const t=this,i=u.gameStore.visionBlockers.indexOf(this.uuid);let s=!1;this.visionObstruction&&-1===i?(u.gameStore.visionBlockers.push(this.uuid),s=!0):!this.visionObstruction&&i>=0&&(u.gameStore.visionBlockers.splice(i,1),s=!0),s&&e&&u.gameStore.recalculateVision(),this.auras.forEach(e=>{const i=u.gameStore.visionSources,s=i.findIndex(t=>t.aura===e.uuid);e.visionSource&&-1===s?i.push({shape:t.uuid,aura:e.uuid}):!e.visionSource&&s>=0&&i.splice(s,1)});for(let n=u.gameStore.visionSources.length-1;n>=0;n--){const e=u.gameStore.visionSources[n];e.shape===t.uuid&&(t.auras.some(t=>t.uuid===e.aura&&t.visionSource)||u.gameStore.visionSources.splice(n,1))}}setMovementBlock(e,t=!0){this.movementObstruction=e||!1;const i=u.gameStore.movementblockers.indexOf(this.uuid);let s=!1;this.movementObstruction&&-1===i?(u.gameStore.movementblockers.push(this.uuid),s=!0):!this.movementObstruction&&i>=0&&(u.gameStore.movementblockers.splice(i,1),s=!0),s&&t&&u.gameStore.recalculateMovement()}setIsToken(e){if(this.isToken=e,this.ownedBy()){const e=u.gameStore.ownedtokens.indexOf(this.uuid);this.isToken&&-1===e?u.gameStore.ownedtokens.push(this.uuid):!this.isToken&&e>=0&&u.gameStore.ownedtokens.splice(e,1)}}getBaseDict(){return{type_:this.type,uuid:this.uuid,x:this.refPoint.x,y:this.refPoint.y,layer:this.layer,draw_operator:this.globalCompositeOperation,movement_obstruction:this.movementObstruction,vision_obstruction:this.visionObstruction,auras:a.aurasToServer(this.auras),trackers:this.trackers,labels:this.labels,owners:this._owners,fill_colour:this.fillColour,stroke_colour:this.strokeColour,name:this.name,name_visible:this.nameVisible,annotation:this.annotation,is_token:this.isToken,options:JSON.stringify([...this.options])}}fromDict(e){this.layer=e.layer,this.globalCompositeOperation=e.draw_operator,this.movementObstruction=e.movement_obstruction,this.visionObstruction=e.vision_obstruction,this.auras=a.aurasFromServer(e.auras),this.trackers=e.trackers,this.labels=e.labels,this._owners=e.owners,this.isToken=e.is_token,this.nameVisible=e.name_visible,e.annotation&&(this.annotation=e.annotation),e.name&&(this.name=e.name),e.options&&(this.options=new Map(JSON.parse(e.options)))}draw(e){if(void 0!==this.globalCompositeOperation?e.globalCompositeOperation=this.globalCompositeOperation:e.globalCompositeOperation="source-over",this.showHighlight){const t=this.getBoundingBox();e.strokeStyle="red",e.strokeRect(d.g2lx(t.topLeft.x)-5,d.g2ly(t.topLeft.y)-5,d.g2lz(t.w)+10,d.g2lz(t.h)+10)}}drawAuras(e){for(const i of this.auras){if(0===i.value&&0===i.dim)return;e.beginPath();const s=d.g2l(this.center()),o=d.g2lr(i.value+i.dim);if(0===i.dim)e.fillStyle=i.colour;else{const t=e.createRadialGradient(s.x,s.y,d.g2lr(i.value),s.x,s.y,d.g2lr(i.value+i.dim)),o=n.default(i.colour);e.fillStyle=t,t.addColorStop(0,i.colour),t.addColorStop(1,o.setAlpha(0).toRgbString())}if(i.visionSource&&void 0!==i.lastPath)try{e.fill(i.lastPath)}catch(t){e.arc(s.x,s.y,o,0,2*Math.PI),e.fill(),console.warn(t)}else e.arc(s.x,s.y,o,0,2*Math.PI),e.fill()}}getInitiativeRepr(){return{uuid:this.uuid,visible:!u.gameStore.IS_DM,group:!1,source:this.name,has_img:!1,effects:[],index:1/0}}moveLayer(e,t){const i=c.layerManager.getLayer(this.layer),s=c.layerManager.getLayer(e);void 0!==i&&void 0!==s&&(this.layer=e,i.shapes.splice(i.shapes.indexOf(this),1),s.shapes.push(this),i.invalidate(!0),s.invalidate(!1),t&&r.socket.emit("Shape.Layer.Change",{uuid:this.uuid,layer:e}))}get owners(){return Object.freeze(this._owners.slice())}ownedBy(e){return void 0===e&&(e=u.gameStore.username),u.gameStore.IS_DM||this._owners.includes(e)||u.gameStore.FAKE_PLAYER&&u.gameStore.activeTokens.includes(this.uuid)}addOwner(e){this._owners.includes(e)||this._owners.push(e)}updateOwner(e,t){const i=this._owners.findIndex(t=>t===e);i>=0?this._owners.splice(i,1,t):this.addOwner(t)}removeOwner(e){const t=this._owners.findIndex(t=>t===e);this._owners.splice(t,1)}}t.Shape=h},"255e":function(e,t,i){"use strict";i.r(t);var s=i("851c"),n=i.n(s);for(var o in s)"default"!==o&&function(e){i.d(t,e,function(){return s[e]})}(o);t["default"]=n.a},2686:function(e,t,i){"use strict";var s=function(){var e=this,t=e.$createElement,i=e._self._c||t;return null!==e.note?i("modal",{attrs:{visible:e.visible,mask:!1},on:{close:function(t){e.visible=!1}},scopedSlots:e._u([{key:"header",fn:function(t){return i("div",{staticClass:"modal-header",attrs:{draggable:"true"},on:{dragstart:t.dragStart,dragend:t.dragEnd}},[i("span",{on:{click:function(t){e.$refs.title.select()}}},[i("i",{staticClass:"fas fa-pencil-alt",staticStyle:{"font-size":"15px"}})]),i("input",{directives:[{name:"model",rawName:"v-model",value:e.note.title,expression:"note.title"}],ref:"title",domProps:{value:e.note.title},on:{change:e.updateNote,input:function(t){t.target.composing||e.$set(e.note,"title",t.target.value)}}}),i("div",{staticClass:"header-close",on:{click:function(t){e.visible=!1}}},[i("i",{staticClass:"far fa-window-close"})])])}}])},[i("div",{staticClass:"modal-body"},[i("textarea",{directives:[{name:"model",rawName:"v-model",value:e.note.text,expression:"note.text"}],ref:"textarea",style:{height:e.calcHeight()},domProps:{value:e.note.text},on:{change:e.updateNote,input:function(t){t.target.composing||e.$set(e.note,"text",t.target.value)}}})]),i("div",{staticClass:"modal-footer"},[i("button",{on:{click:e.removeNote}},[i("i",{staticClass:"far fa-trash-alt"}),e._v(" Remove\n ")])])]):e._e()},n=[];i.d(t,"a",function(){return s}),i.d(t,"b",function(){return n})},"26a5":function(e,t,i){"use strict";var s=i("f2d0"),n=i.n(s);n.a},2756:function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0});const s=i("9ab4"),n=s.__importDefault(i("65d9")),o=s.__importDefault(i("496c")),r=s.__importDefault(i("ea6a")),a=i("4a5b"),l=i("0bc6"),c=i("8f0a"),u=i("6f92"),d=i("b2ed"),h=i("f10f"),f=i("2838"),p=i("92b1"),g=i("5a5c");var v;(function(e){e[e["Noop"]=0]="Noop",e[e["Resize"]=1]="Resize",e[e["Drag"]=2]="Drag",e[e["GroupSelect"]=3]="GroupSelect"})(v=t.SelectOperations||(t.SelectOperations={}));const m=new c.GlobalPoint(-1e3,-1e3);let y=class extends r.default{constructor(){super(...arguments),this.name="Select",this.showContextMenu=!1,this.active=!1,this.mode=v.Noop,this.resizePoint=0,this.deltaChanged=!1,this.dragRay=new c.Ray(new c.LocalPoint(0,0),new c.Vector(0,0)),this.selectionStartPoint=m,this.selectionHelper=new d.Rect(m,0,0)}created(){this.selectionHelper.globalCompositeOperation="source-over"}onMouseDown(e){const t=u.layerManager.getLayer();if(void 0===t)return void console.log("No active layer!");this.selectionHelper.owners.includes(h.gameStore.username)||this.selectionHelper.addOwner(h.gameStore.username);const i=g.getMouse(e),s=p.l2g(i);let n,o=!1;n=t.selection.length?t.shapes.concat(t.selection):t.shapes;for(let r=n.length-1;r>=0;r--){const e=n[r];if(this.resizePoint=e.getPointIndex(s,p.l2gz(3)),this.resizePoint>=0){t.selection=[e],a.getRef("selectionInfo").shape=e,this.mode=v.Resize,t.invalidate(!0),o=!0;break}if(e.contains(s)){const s=e;-1===t.selection.indexOf(s)&&(t.selection=[s],a.getRef("selectionInfo").shape=s),this.mode=v.Drag;const n=p.g2l(s.refPoint);this.dragRay=new c.Ray(n,i.subtract(n)),t.invalidate(!0),o=!0;break}}if(!o){this.mode=v.GroupSelect;for(const e of t.selection)a.getRef("selectionInfo").shape=e;this.selectionStartPoint=s,this.selectionHelper.refPoint=this.selectionStartPoint,this.selectionHelper.w=0,this.selectionHelper.h=0,t.selection=[this.selectionHelper],t.invalidate(!0)}this.active=!0}onMouseMove(e){const t=u.layerManager.getLayer();if(void 0===t)return void console.log("No active layer!");const i=g.getMouse(e),s=p.l2g(i);if(this.deltaChanged=!1,this.mode===v.GroupSelect){const e=s;this.selectionHelper.w=Math.abs(e.x-this.selectionStartPoint.x),this.selectionHelper.h=Math.abs(e.y-this.selectionStartPoint.y),this.selectionHelper.refPoint=new c.GlobalPoint(Math.min(this.selectionStartPoint.x,e.x),Math.min(this.selectionStartPoint.y,e.y)),t.invalidate(!0)}else if(t.selection.length){const n=p.g2l(t.selection[t.selection.length-1].refPoint),o=n.add(this.dragRay.direction);let r=i.subtract(o).multiply(1/h.gameStore.zoomFactor);const a=r;if(this.mode===v.Drag){if("tokens"===t.name&&(!e.shiftKey||!h.gameStore.IS_DM))for(const e of t.selection)e.ownedBy()&&e.uuid!==this.selectionHelper.uuid&&(r=f.calculateDelta(r,e),r!==a&&(this.deltaChanged=!0));for(const e of t.selection)e.ownedBy()&&(e.refPoint=e.refPoint.add(r),e!==this.selectionHelper&&(e.visionObstruction&&h.gameStore.recalculateVision(!0),l.socket.emit("Shape.Update",{shape:e.asDict(),redraw:!0,temporary:!0})));t.invalidate(!1)}else if(this.mode===v.Resize)for(const e of t.selection)e.ownedBy()&&(e.resize(this.resizePoint,i),e!==this.selectionHelper&&(e.visionObstruction&&h.gameStore.recalculateVision(!0),l.socket.emit("Shape.Update",{shape:e.asDict(),redraw:!0,temporary:!0})),t.invalidate(!1),this.updateCursor(t,s));else this.updateCursor(t,s)}else document.body.style.cursor="default"}onMouseUp(e){if(!this.active)return;if(void 0===u.layerManager.getLayer())return void console.log("No active layer!");const t=u.layerManager.getLayer();this.mode===v.GroupSelect?(t.clearSelection(),t.shapes.forEach(e=>{if(!e.ownedBy())return;if(e===this.selectionHelper)return;const i=e.getBoundingBox();e.ownedBy()&&this.selectionHelper.refPoint.x<=i.topRight.x&&this.selectionHelper.refPoint.x+this.selectionHelper.w>=i.topLeft.x&&this.selectionHelper.refPoint.y<=i.botLeft.y&&this.selectionHelper.refPoint.y+this.selectionHelper.h>=i.topLeft.y&&t.selection.push(e)}),t.selection.length>0&&t.selection.push(this.selectionHelper),t.invalidate(!0)):t.selection.length&&t.selection.forEach(i=>{if(i.ownedBy()){if(this.mode===v.Drag){if(this.dragRay.origin.x===p.g2lx(i.refPoint.x)&&this.dragRay.origin.y===p.g2ly(i.refPoint.y))return;!h.gameStore.useGrid||e.altKey||this.deltaChanged||i.snapToGrid(),i!==this.selectionHelper&&(i.visionObstruction&&h.gameStore.recalculateVision(),i.movementObstruction&&h.gameStore.recalculateMovement(),l.socket.emit("Shape.Update",{shape:i.asDict(),redraw:!0,temporary:!1})),t.invalidate(!1)}this.mode===v.Resize&&(h.gameStore.useGrid&&!e.altKey&&i.resizeToGrid(),i!==this.selectionHelper&&(i.visionObstruction&&h.gameStore.recalculateVision(),i.movementObstruction&&h.gameStore.recalculateMovement(),l.socket.emit("Shape.Update",{shape:i.asDict(),redraw:!0,temporary:!1})),t.invalidate(!1))}}),this.mode=v.Noop,this.active=!1}onContextMenu(e){if(void 0===u.layerManager.getLayer())return void console.log("No active layer!");const t=u.layerManager.getLayer(),i=g.getMouse(e),s=p.l2g(i);for(const n of t.selection)if(n.contains(s)&&n!==this.selectionHelper)return t.selection=[n],a.getRef("selectionInfo").shape=n,t.invalidate(!0),void this.$parent.$refs.shapecontext.open(e,n);this.$refs.selectcontext.open(e)}updateCursor(e,t){for(const i of e.selection){const e=i.getPointIndex(t,p.l2gz(3));if(e<0)document.body.style.cursor="default";else{let t=i.getPointOrientation(e).angle();t<0&&(t+=360);const s=22.5;(t>=315+s||t=135+s&&t<225-s)&&(document.body.style.cursor="ew-resize"),(t>=45+s&&t<135-s||t>=225+s&&t<315-s)&&(document.body.style.cursor="ns-resize"),(t>=s&&t<90-s||t>=180+s&&t<270-s)&&(document.body.style.cursor="nwse-resize"),(t>=90+s&&t<180-s||t>=270+s&&t<360-s)&&(document.body.style.cursor="nesw-resize")}}}};y=s.__decorate([n.default({components:{SelectContext:o.default}})],y),t.default=y},2838:function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0});const s=i("8f0a"),n=i("6f92"),o=i("f10f"),r=i("d6be"),a=i("98ef"),l=i("4aee");function c(e,t,i){if(0===e.x&&0===e.y)return e;if("bvh"===o.gameStore.visionMode){void 0===i&&(i=[]);const r=t.getBoundingBox(),a=r.offset(e);let l=!1;for(const t of o.gameStore.movementblockers){if(i.includes(t))continue;const o=n.layerManager.UUIDMap.get(t),c=o.getBoundingBox();let u=c.intersectsWithInner(a);if(!u){const t=s.Ray.fromPoints(r.topLeft.add(e.normalize()),a.topLeft),i=t.direction.inverse(),n=[i.x<0,i.y<0];u=c.intersectP(t,i,n).hit}if(u){const n=c.center(),o=r.center(),a=o.subtract(n),u=new s.Vector(1,0),d=new s.Vector(0,1);let h=a.dot(u),f=a.dot(d);h>c.w/2&&(h=c.w/2),h<-c.w/2&&(h=-c.w/2),f>c.h/2&&(f=c.h/2),f<-c.h/2&&(f=-c.h/2);const p=n.add(u.multiply(h)).add(d.multiply(f));p.x===r.topLeft.x||p.x===r.topRight.x?e=new s.Vector(0,e.y):p.y===r.topLeft.y||p.y===r.botLeft.y?e=new s.Vector(e.x,0):p.xr.topRight.x?e=new s.Vector(p.x-r.topRight.x,e.y):p.yr.botLeft.y&&(e=new s.Vector(e.x,p.y-r.botLeft.y)),l=!0,i.push(t);break}}return l&&(e=c(e,t,i)),e}{const i=r.PA_CDT.movement.locate(t.center().asArray(),null).loc;for(const s of t.points){const t=r.PA_CDT.movement.locate(s,i),n=t.loc;null!==n&&(e=u(s,n,e))}return e}}function u(e,t,i,n=[]){const o=new s.GlobalPoint(e[0],e[1]),r=o.add(i).asArray();if(t.contains(r))return i;n.push(t);for(let c=0;c<3;c++){if(n.includes(t.neighbours[c]))continue;const d=t.vertices[l.cw(c)].point,h=t.vertices[l.ccw(c)].point,f=l.intersection(e,r,d,h);if(null===f)continue;if(!t.isConstrained(c))return u(e,t.neighbours[c],i,n);if(f[0]===o.x&&f[1]===o.y){l.orientation;const t=l.orientation(e,r,h);if(t===a.Sign.LEFT_TURN)continue;if(t===a.Sign.ZERO)continue}let p=new s.GlobalPoint(f[0],f[1]).subtract(o).multiply(.8);p.length()<1&&(p=new s.Vector(0,0)),p.length()!["__files"].includes(e)).sort(a.alphSort)}get files(){return this.asset.__files?this.asset.__files.concat().sort((e,t)=>e.name.toLowerCase()>t.name.toLowerCase()?1:-1):[]}toggle(e){for(let t=0;tthis.$children[0].$el.focus())}close(){this.visible=!1,this.shape=null}getLayers(){return c.layerManager.layers.filter(e=>e.selectable&&(u.gameStore.IS_DM||e.playerEditable))}getActiveLayer(){return c.layerManager.getLayer()}getInitiativeWord(){return null===this.shape?"":a.getRef("initiative").contains(this.shape.uuid)?"Show":"Add"}setLayer(e){null!==this.shape&&(this.shape.moveLayer(e,!0),this.close())}moveToBack(){if(null===this.shape)return;const e=this.getActiveLayer();e.moveShapeOrder(this.shape,0,!0),this.close()}moveToFront(){if(null===this.shape)return;const e=this.getActiveLayer();e.moveShapeOrder(this.shape,e.shapes.length-1,!0),this.close()}addInitiative(){if(null===this.shape)return;const e=a.getRef("initiative");e.contains(this.shape.uuid)||e.addInitiative(this.shape.getInitiativeRepr()),e.visible=!0,this.close()}openEditDialog(){l.EventBus.$emit("EditDialog.Open",this.shape),this.close()}};d=s.__decorate([o.default({components:{ContextMenu:r.default}})],d),t.default=d},3481:function(e,t,i){"use strict";i.r(t);var s=i("47e6"),n=i.n(s);for(var o in s)"default"!==o&&function(e){i.d(t,e,function(){return s[e]})}(o);t["default"]=n.a},"38c9":function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0});const s=i("bab4"),n=i("f10f");class o extends s.Layer{invalidate(){this.valid=!1}draw(e){this.valid||this.drawGrid()}drawGrid(){const e=this.ctx;this.clear(),e.beginPath();const t=n.gameStore.gridSize;for(let i=0;ir.layerManager.UUIDMap.get(e))}toggle(e){this.selection.includes(e)?a.gameStore.removeActiveToken(e):a.gameStore.addActiveToken(e)}};l=s.__decorate([n.default],l),t.default=l},"3cd3":function(e,t,i){"use strict";var s=i("b0c0"),n=i.n(s);n.a},"3dfd":function(e,t,i){"use strict";i.r(t);var s=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{attrs:{id:"app"}},[i("router-view",{ref:"activeComponent"})],1)},n=[],o=(i("034f"),i("2877")),r={},a=Object(o["a"])(r,s,n,!1,null,null,null);a.options.__file="App.vue";t["default"]=a.exports},"3eaf":function(e,t,i){},"412c":function(e,t,i){"use strict";var s=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{attrs:{id:"main"},on:{mouseleave:e.mouseleave,wheel:e.zoom}},[e.showUI?i("menu-bar"):e._e(),i("div",{attrs:{id:"board"}},[e.ready.manager?[i("tool-bar",{directives:[{name:"show",rawName:"v-show",value:e.showUI,expression:"showUI"}],ref:"tools"})]:e._e(),i("div",{attrs:{id:"layers"},on:{mousedown:e.mousedown,mouseup:e.mouseup,mousemove:e.mousemove,contextmenu:function(t){return t.preventDefault(),t.stopPropagation(),e.contextmenu(t)},dragover:function(e){e.preventDefault()},drop:function(t){return t.preventDefault(),t.stopPropagation(),e.drop(t)}}}),i("div",{directives:[{name:"show",rawName:"v-show",value:e.showUI&&e.layers.length>1,expression:"showUI && layers.length>1"}],attrs:{id:"layerselect"}},[i("ul",e._l(e.layers,function(t){return i("li",{key:t.name,class:{"layer-selected":t===e.selectedLayer},on:{mousedown:function(i){e.selectLayer(t)}}},[i("a",{attrs:{href:"#"}},[e._v(e._s(t))])])}))])],2),i("selection-info",{directives:[{name:"show",rawName:"v-show",value:e.showUI,expression:"showUI"}],ref:"selectionInfo"}),i("initiative-dialog",{ref:"initiative",attrs:{id:"initiativedialog"}}),i("note-dialog",{ref:"note"}),i("label-dialog",{ref:"labels"}),i("zoom-slider",{directives:[{name:"show",rawName:"v-show",value:e.showUI,expression:"showUI"}],attrs:{id:"zoomer",height:6,width:200,min:0,max:1,interval:.1,"dot-width":8,"dot-height":20,"tooltip-dir":"bottom",tooltip:"hover",formatter:e.zoomDisplay.toFixed(1),"slider-style":{"border-radius":"15%"},"bg-style":{"background-color":"#fff","box-shadow":"0.5px 0.5px 3px 1px rgba(0, 0, 0, .36)"},"process-style":{"background-color":"#fff"}},model:{value:e.zoomDisplay,callback:function(t){e.zoomDisplay=t},expression:"zoomDisplay"}}),i("prompt-dialog",{ref:"prompt"}),i("confirm-dialog",{ref:"confirm"})],1)},n=[];i.d(t,"a",function(){return s}),i.d(t,"b",function(){return n})},4185:function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0});const s=i("8f0a"),n=i("bab4"),o=i("6f92"),r=i("d1ec"),a=i("4709"),l=i("f10f"),c=i("92b1"),u=i("5a5c"),d=i("cee3");class h extends n.Layer{constructor(e,t){super(e,t),this.isVisionLayer=!0,this.preFogShapes=[],this.virtualCanvas=document.createElement("canvas"),this.virtualCanvas.width=window.innerWidth,this.virtualCanvas.height=window.innerHeight,this.vCtx=this.virtualCanvas.getContext("2d")}addShape(e,t,i,s=!0){super.addShape(e,t,i,s),e.options.has("preFogShape")&&e.options.get("preFogShape")&&this.preFogShapes.push(e)}removeShape(e,t,i){if(e.options.has("preFogShape")&&e.options.get("preFogShape")){const t=this.preFogShapes.findIndex(t=>t.uuid===e.uuid);this.preFogShapes.splice(t,1)}super.removeShape(e,t,i)}draw(){if(!this.valid){const e=this.ctx;if(r.Settings.skipLightFOW)return e.clearRect(0,0,this.canvas.width,this.canvas.height),void(this.valid=!0);const t=e.globalCompositeOperation;e.clearRect(0,0,this.canvas.width,this.canvas.height),e.fillStyle="rgba(0, 0, 0, 1)";const i=o.layerManager.getLayer("draw").ctx;(r.Settings.drawAngleLines||r.Settings.drawFirstLightHit)&&i.clearRect(0,0,i.canvas.width,i.canvas.height),l.gameStore.fullFOW&&o.layerManager.hasLayer("tokens")&&o.layerManager.getLayer("tokens").shapes.forEach(t=>{if(!t.ownedBy()||!t.isToken)return;const i=t.getBoundingBox(),s=c.g2l(t.center()),n=.8*c.g2lz(i.w);e.beginPath(),e.arc(s.x,s.y,n,0,2*Math.PI);const o=e.createRadialGradient(s.x,s.y,n/2,s.x,s.y,n);o.addColorStop(0,"rgba(0, 0, 0, 1)"),o.addColorStop(1,"rgba(0, 0, 0, 0)"),e.fillStyle=o,e.fill()}),this.vCtx.clearRect(0,0,window.innerWidth,window.innerHeight);for(const n of l.gameStore.visionSources){const t=o.layerManager.UUIDMap.get(n.shape);if(void 0===t)continue;const u=t.auras.find(e=>e.uuid===n.aura);if(void 0===u)continue;const h=c.getUnitDistance(u.value+u.dim),f=t.center(),p=c.g2l(f),g=new a.Circle(f,h);if(g.visibleInCanvas(e.canvas))if("bvh"===l.gameStore.visionMode){let t=-1;const n=new Path2D;let o;n.moveTo(p.x,p.y);for(let a=0;a<2*Math.PI;a+=r.Settings.angleSteps/180*Math.PI){const d=new s.GlobalPoint(f.x+h*Math.cos(a),f.y+h*Math.sin(a));r.Settings.drawAngleLines&&(i.beginPath(),i.moveTo(c.g2lx(f.x),c.g2ly(f.y)),i.lineTo(c.g2lx(d.x),c.g2ly(d.y)),i.stroke());const g=s.Ray.fromPoints(f,d),v=l.gameStore.BV.intersect(g);if(0===a&&(o=v.hit?v.intersect:d),v.hit)-1!==t&&(n.arc(p.x,p.y,c.g2lr(u.value+u.dim),t,a),t=-1),n.lineTo(c.g2lx(v.intersect.x),c.g2ly(v.intersect.y));else if(-1===t){t=a;const i=c.g2l(d);e.lineTo(i.x,i.y)}}if(-1===t?n.lineTo(c.g2lx(o.x),c.g2ly(o.y)):n.arc(p.x,p.y,c.g2lr(u.value+u.dim),t,2*Math.PI),l.gameStore.fullFOW){if(u.dim>0){const t=e.createRadialGradient(p.x,p.y,c.g2lr(u.value),p.x,p.y,c.g2lr(u.value+u.dim));t.addColorStop(0,"rgba(0, 0, 0, 1)"),t.addColorStop(1,"rgba(0, 0, 0, 0)"),e.fillStyle=t}else e.fillStyle="rgba(0, 0, 0, 1)";e.fill(n)}u.lastPath=n}else{this.vCtx.globalCompositeOperation="source-over",this.vCtx.fillStyle="rgba(0, 0, 0, 1)";const t=d.computeVisibility(f,"vision");this.vCtx.beginPath(),this.vCtx.moveTo(c.g2lx(t[0][0]),c.g2ly(t[0][1]));for(const e of t)this.vCtx.lineTo(c.g2lx(e[0]),c.g2ly(e[1]));if(this.vCtx.closePath(),this.vCtx.fill(),u.dim>0){const e=this.vCtx.createRadialGradient(p.x,p.y,c.g2lr(u.value),p.x,p.y,c.g2lr(u.value+u.dim));e.addColorStop(0,"rgba(0, 0, 0, 1)"),e.addColorStop(1,"rgba(0, 0, 0, 0)"),this.vCtx.fillStyle=e}else this.vCtx.fillStyle="rgba(0, 0, 0, 1)";this.vCtx.globalCompositeOperation="source-in",this.vCtx.beginPath(),this.vCtx.arc(p.x,p.y,c.g2lr(u.value+u.dim),0,2*Math.PI),this.vCtx.fill(),e.drawImage(this.virtualCanvas,0,0)}}l.gameStore.fowLOS&&(e.globalCompositeOperation="source-in",e.drawImage(o.layerManager.getLayer("fow-players").canvas,0,0));for(const s of this.preFogShapes){if(!s.visibleInCanvas(this.canvas))continue;const t=s.globalCompositeOperation;l.gameStore.fullFOW||("source-over"===s.globalCompositeOperation?s.globalCompositeOperation="destination-out":"destination-out"===s.globalCompositeOperation&&(s.globalCompositeOperation="source-over")),s.draw(e),s.globalCompositeOperation=t}l.gameStore.fullFOW&&(e.globalCompositeOperation="source-out",e.fillStyle=u.getFogColour(),e.fillRect(0,0,e.canvas.width,e.canvas.height)),super.draw(!1),e.globalCompositeOperation=t}}}t.FOWLayer=h},4486:function(e,t,i){"use strict";i.r(t);var s=i("a097"),n=i.n(s);for(var o in s)"default"!==o&&function(e){i.d(t,e,function(){return s[e]})}(o);t["default"]=n.a},"45fb":function(e,t,i){"use strict";var s=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("Modal",{attrs:{visible:e.visible,mask:!1},on:{close:function(t){e.visible=!1}},scopedSlots:e._u([{key:"header",fn:function(t){return i("div",{staticClass:"modal-header",attrs:{draggable:"true"},on:{dragstart:t.dragStart,dragend:t.dragEnd}},[i("div",[e._v("Edit asset")]),i("div",{staticClass:"header-close",on:{click:function(t){e.visible=!1}}},[i("i",{staticClass:"far fa-window-close"})])])}}])},[i("div",{staticClass:"modal-body"},[i("div",{staticClass:"grid"},[i("label",{attrs:{for:"shapeselectiondialog-name"}},[e._v("Name")]),i("input",{directives:[{name:"model",rawName:"v-model",value:e.shape.name,expression:"shape.name"}],staticStyle:{"grid-column":"numerator / remove"},attrs:{type:"text",id:"shapeselectiondialog-name",disabled:!e.owned},domProps:{value:e.shape.name},on:{change:function(t){e.updateShape(!1)},input:function(t){t.target.composing||e.$set(e.shape,"name",t.target.value)}}}),i("div",{style:{opacity:e.shape.nameVisible?1:.3,textAlign:"center"},attrs:{disabled:!e.owned},on:{click:function(t){e.shape.nameVisible=!e.shape.nameVisible,e.updateShape(!1)}}},[i("i",{staticClass:"fas fa-eye"})]),i("label",{attrs:{for:"shapeselectiondialog-istoken"}},[e._v("Is a token")]),i("input",{staticClass:"styled-checkbox",staticStyle:{"grid-column-start":"remove"},attrs:{type:"checkbox",id:"shapeselectiondialog-istoken",disabled:!e.owned},domProps:{checked:e.shape.isToken},on:{click:e.setToken}}),i("label",{attrs:{for:"shapeselectiondialog-visionblocker"}},[e._v("Blocks vision/light")]),i("input",{directives:[{name:"model",rawName:"v-model",value:e.shape.visionObstruction,expression:"shape.visionObstruction"}],staticStyle:{"grid-column-start":"remove"},attrs:{type:"checkbox",id:"shapeselectiondialog-visionblocker",disabled:!e.owned},domProps:{checked:Array.isArray(e.shape.visionObstruction)?e._i(e.shape.visionObstruction,null)>-1:e.shape.visionObstruction},on:{change:[function(t){var i=e.shape.visionObstruction,s=t.target,n=!!s.checked;if(Array.isArray(i)){var o=null,r=e._i(i,o);s.checked?r<0&&e.$set(e.shape,"visionObstruction",i.concat([o])):r>-1&&e.$set(e.shape,"visionObstruction",i.slice(0,r).concat(i.slice(r+1)))}else e.$set(e.shape,"visionObstruction",n)},e.setVisionBlocker]}}),i("label",{attrs:{for:"shapeselectiondialog-moveblocker"}},[e._v("Blocks movement")]),i("input",{staticStyle:{"grid-column-start":"remove"},attrs:{type:"checkbox",id:"shapeselectiondialog-moveblocker",disabled:!e.owned},domProps:{checked:e.shape.movementObstruction},on:{click:e.setMovementBlocker}}),i("label",{attrs:{for:"shapeselectiondialog-strokecolour"}},[e._v("Border colour")]),i("color-picker",{staticStyle:{"grid-column-start":"remove"},attrs:{color:e.shape.strokeColour,disabled:!e.owned},on:{"update:color":function(t){e.$set(e.shape,"strokeColour",t)},input:function(t){e.updateShape(!0,!0)},change:function(t){e.updateShape(!0)}}}),i("label",{attrs:{for:"shapeselectiondialog-fillcolour"}},[e._v("Fill colour")]),i("color-picker",{staticStyle:{"grid-column-start":"remove"},attrs:{color:e.shape.fillColour,disabled:!e.owned},on:{"update:color":function(t){e.$set(e.shape,"fillColour",t)},input:function(t){e.updateShape(!0,!0)},change:function(t){e.updateShape(!0)}}}),i("div",{staticClass:"spanrow header"},[e._v("Access")]),e._l(e.shape.owners,function(t){return[i("input",{key:t,staticStyle:{"grid-column-start":"name"},attrs:{type:"text",placeholder:"name",disabled:!e.owned},domProps:{value:t},on:{change:function(i){e.updateOwner(i,t)}}}),""!==t?i("div",{key:"remove-"+t,style:{opacity:e.owned?1:.3,textAlign:"center",gridColumnStart:"remove"},attrs:{disabled:!e.owned},on:{click:function(i){e.removeOwner(t)}}},[i("i",{staticClass:"fas fa-trash-alt"})]):e._e()]}),i("div",{staticClass:"spanrow header"},[e._v("Trackers")]),e._l(e.shape.trackers,function(t){return[i("input",{directives:[{name:"model",rawName:"v-model",value:t.name,expression:"tracker.name"}],key:"name-"+t.uuid,staticStyle:{"grid-column-start":"name"},attrs:{type:"text",placeholder:"name",disabled:!e.owned},domProps:{value:t.name},on:{change:function(t){e.updateShape(!1)},input:function(i){i.target.composing||e.$set(t,"name",i.target.value)}}}),i("input",{directives:[{name:"model",rawName:"v-model.number",value:t.value,expression:"tracker.value",modifiers:{number:!0}}],key:"value-"+t.uuid,attrs:{type:"text",title:"Current value",disabled:!e.owned},domProps:{value:t.value},on:{change:function(t){e.updateShape(!1)},input:function(i){i.target.composing||e.$set(t,"value",e._n(i.target.value))},blur:function(t){e.$forceUpdate()}}}),i("span",{key:"fspan-"+t.uuid},[e._v("/")]),i("input",{directives:[{name:"model",rawName:"v-model.number",value:t.maxvalue,expression:"tracker.maxvalue",modifiers:{number:!0}}],key:"maxvalue-"+t.uuid,attrs:{type:"text",title:"Current value",disabled:!e.owned},domProps:{value:t.maxvalue},on:{change:function(t){e.updateShape(!1)},input:function(i){i.target.composing||e.$set(t,"maxvalue",e._n(i.target.value))},blur:function(t){e.$forceUpdate()}}}),i("span",{key:"sspan-"+t.uuid}),i("div",{key:"visibility-"+t.uuid,style:{opacity:t.visible?1:.3,textAlign:"center"},attrs:{disabled:!e.owned},on:{click:function(i){t.visible=!t.visible,e.updateShape(!1)}}},[i("i",{staticClass:"fas fa-eye"})]),i("span",{key:"tspan-"+t.uuid}),""!==t.name||0!==t.value?i("div",{key:"remove-"+t.uuid,style:{opacity:e.owned?1:.3,textAlign:"center"},attrs:{disabled:!e.owned},on:{click:function(i){e.removeTracker(t.uuid)}}},[i("i",{staticClass:"fas fa-trash-alt"})]):e._e()]}),i("div",{staticClass:"spanrow header"},[e._v("Auras")]),e._l(e.shape.auras,function(t){return[i("input",{directives:[{name:"model",rawName:"v-model",value:t.name,expression:"aura.name"}],key:"name-"+t.uuid,staticStyle:{"grid-column-start":"name"},attrs:{type:"text",placeholder:"name",disabled:!e.owned},domProps:{value:t.name},on:{change:function(t){e.updateShape(!1)},input:function(i){i.target.composing||e.$set(t,"name",i.target.value)}}}),i("input",{directives:[{name:"model",rawName:"v-model.number",value:t.value,expression:"aura.value",modifiers:{number:!0}}],key:"value-"+t.uuid,attrs:{type:"text",title:"Current value",disabled:!e.owned},domProps:{value:t.value},on:{change:function(t){e.updateShape(!0)},input:function(i){i.target.composing||e.$set(t,"value",e._n(i.target.value))},blur:function(t){e.$forceUpdate()}}}),i("span",{key:"fspan-"+t.uuid},[e._v("/")]),i("input",{directives:[{name:"model",rawName:"v-model.number",value:t.dim,expression:"aura.dim",modifiers:{number:!0}}],key:"dimvalue-"+t.uuid,attrs:{type:"text",title:"Dim value",disabled:!e.owned},domProps:{value:t.dim},on:{change:function(t){e.updateShape(!0)},input:function(i){i.target.composing||e.$set(t,"dim",e._n(i.target.value))},blur:function(t){e.$forceUpdate()}}}),i("color-picker",{key:"colour-"+t.uuid,attrs:{color:t.colour,disabled:!e.owned},on:{"update:color":function(i){e.$set(t,"colour",i)},input:function(i){e.updateAuraColour(t,i)},change:function(t){e.updateShape(!0)}}}),i("div",{key:"visibility-"+t.uuid,style:{opacity:t.visible?1:.3,textAlign:"center"},attrs:{disabled:!e.owned},on:{click:function(i){t.visible=!t.visible,e.updateShape(!0)}}},[i("i",{staticClass:"fas fa-eye"})]),i("div",{key:"visionsource-"+t.uuid,style:{opacity:t.visionSource?1:.3,textAlign:"center"},attrs:{disabled:!e.owned},on:{click:function(i){e.updateAuraVisionSource(t)}}},[i("i",{staticClass:"fas fa-lightbulb"})]),""!==t.name||0!==t.value?i("div",{key:"remove-"+t.uuid,style:{opacity:e.owned?1:.3,textAlign:"center"},attrs:{disabled:!e.owned},on:{click:function(i){e.removeAura(t.uuid)}}},[i("i",{staticClass:"fas fa-trash-alt"})]):e._e()]}),i("div",{staticClass:"spanrow header"},[e._v("Labels")]),i("div",{staticClass:"spanrow",attrs:{id:"labels"}},[e._l(e.shape.labels,function(t){return i("div",{key:t.uuid,staticClass:"label"},[t.category?[i("div",{staticClass:"label-user"},[e._v(e._s(t.category))]),i("div",{staticClass:"label-main",on:{click:function(i){e.removeLabel(t.uuid)}}},[e._v(e._s(t.name))])]:e._e(),t.category?e._e():[i("div",{staticClass:"label-main",on:{click:function(i){e.removeLabel(t.uuid)}}},[e._v(e._s(t.name))])]],2)}),e.owned?i("div",{staticClass:"label",attrs:{id:"label-add"}},[i("div",{staticClass:"label-main",on:{click:e.openLabelManager}},[e._v("+")])]):e._e()],2),i("div",{staticClass:"spanrow header"},[e._v("Annotation")]),i("textarea",{staticClass:"spanrow",attrs:{disabled:!e.owned},domProps:{value:e.shape.annotation},on:{change:e.updateAnnotation}})],2)])])},n=[];i.d(t,"a",function(){return s}),i.d(t,"b",function(){return n})},4709:function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0});const s=i("8f0a"),n=i("8db6"),o=i("2469"),r=i("f10f"),a=i("2838"),l=i("92b1"),c=i("5a5c");class u extends o.Shape{constructor(e,t,i,s,n){super(e,i,s,n),this.type="circle",this.r=t||1}asDict(){return Object.assign(this.getBaseDict(),{radius:this.r})}fromDict(e){super.fromDict(e),this.r=e.radius}getBoundingBox(){return new n.BoundingRect(new s.GlobalPoint(this.refPoint.x-this.r,this.refPoint.y-this.r),2*this.r,2*this.r)}get points(){return this.getBoundingBox().points}draw(e){super.draw(e),e.beginPath(),"fog"===this.fillColour?e.fillStyle=c.getFogColour():e.fillStyle=this.fillColour;const t=l.g2l(this.refPoint);e.arc(t.x,t.y,l.g2lz(this.r),0,2*Math.PI),e.fill(),"rgba(0, 0, 0, 0)"!==this.strokeColour&&(e.beginPath(),e.lineWidth=l.g2lz(5),e.strokeStyle=this.strokeColour,e.arc(t.x,t.y,l.g2lz(this.r),0,2*Math.PI),e.stroke())}contains(e){return Math.pow(e.x-this.refPoint.x,2)+Math.pow(e.y-this.refPoint.y,2){const t=16*Math.random()|0,i="x"===e?t:3&t|8;return i.toString(16)})}function o(e){return e.charAt(0).toUpperCase()+e.slice(1)}function r(e,t){return e.toLowerCase()t(e)?i[1].push(e):i[0].push(e)),i}function u(e,t,i,s){const n=.2*Number(e.font.split("px")[0]),o=e.measureText(t).width;return Math.min(i/o,s/n)}function d(e){return encodeURIComponent(e).replace(/[!'()*]/g,e=>{return"%"+e.charCodeAt(0).toString(16)})}t.uuidv4=n,t.capitalize=o,t.alphSort=r,t.getHTMLFont=a,t.getHTMLTextWidth=l,t.partition=c,t.calcFontScale=u,t.fixedEncodeURIComponent=d;class h{constructor(){this.keys=[],this.values=[]}get length(){return this.keys.length}get(e){return this.values[this.keys.indexOf(e)]}getIndexValue(e){return this.values[e]}getIndexKey(e){return this.keys[e]}set(e,t){this.keys.push(e),this.values.push(t)}has(e){return this.indexOf(e)>=0}indexOf(e){return this.keys.indexOf(e)}remove(e){const t=this.indexOf(e);this.keys.splice(t,1),this.values.splice(t,1)}}function f(){return s.app.$children[0].$refs.activeComponent}function p(e){const t=s.app.$children[0].$refs.activeComponent;return t.$refs[e]}t.OrderedMap=h,t.getComponent=f,t.getRef=p},"4aec":function(e,t,i){"use strict";i.r(t);var s=i("a755"),n=i("f51a");for(var o in n)"default"!==o&&function(e){i.d(t,e,function(){return n[e]})}(o);var r=i("2877"),a=Object(r["a"])(n["default"],s["a"],s["b"],!1,null,null,null);a.options.__file="contextMenu.vue",t["default"]=a.exports},"4aee":function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0});const s=i("98ef");function n(e){return(e+2)%3}function o(e){return(e+1)%3}function r(e,t){const i=new s.EdgeCirculator(e,null);if(i.valid)do{const n=3-i.t.indexV(e)-i.ri,o=i.t.vertices[n];if(!o.infinite){if(o===t)return{includes:!0,vi:t,fr:i.t,i:i.ri};{const n=c(e.point,t.point,o.point);if(n===s.Sign.COLLINEAR&&a(e.point,o.point,t.point))return{includes:!0,vi:o,fr:i.t,i:i.ri}}}}while(i.next());return{includes:!1}}function a(e,t,i){let n,o;return l(0,e,i)===s.Sign.EQUAL?(n=l(1,e,t),o=l(1,t,i)):(n=l(0,e,t),o=l(0,t,i)),n===s.Sign.SMALLER&&o===s.Sign.SMALLER||n===s.Sign.LARGER&&o===s.Sign.LARGER}function l(e,t,i){return t[e]i[e]?s.Sign.LARGER:s.Sign.EQUAL}function c(e,t,i){const n=e[0],o=e[1],r=t[0],a=t[1],l=i[0],c=i[1],d=r-n,h=a-o,f=l-n,p=c-o,g=u(d,h,f,p);let v=Math.abs(d),m=Math.abs(h);const y=Math.abs(f),b=Math.abs(p);if(vm&&([v,m]=[m,v]),v<2e-162&&0===v)return s.Sign.ZERO;if(m<1e153){const e=Number.EPSILON*v*m;if(g>e)return s.Sign.POSITIVE;if(g<-e)return s.Sign.NEGATIVE}return s.Sign.ZERO}function u(e,t,i,s){return e*s-t*i}function d(e,t,i){return u(t[0]-e[0],t[1]-e[1],i[0]-e[0],i[1]-e[1])<0}function h(e,t,i){if(!e.isInfinite())return f(e.vertices[0].point,e.vertices[1].point,e.vertices[2].point,t,i);throw new Error("SSS")}function f(e,t,i,n,o){const r=m(e,t,i,n);if(r!==s.Sign.ON_ORIENTED_BOUNDARY||!o)return r;const a=[e,t,i,n];a.sort((e,t)=>e[0]-t[0]||e[1]-t[1]);for(const l of a.reverse()){if(l===n)return s.Sign.ON_NEGATIVE_SIDE;let o=c(e,t,n);if(l===i&&o!==s.Sign.COLLINEAR)return o;if(o=c(e,n,i),l===t&&o!==s.Sign.COLLINEAR)return o;if(o=c(n,t,i),l===e&&o!==s.Sign.COLLINEAR)return o}return s.Sign.ON_NEGATIVE_SIDE}function p(e,t){return e[0]===t[0]&&e[1]===t[1]}function g(e,t){return e[0]y&&([m,y]=[y,m]),m<1e-73&&0===m)return s.Sign.ON_ORIENTED_BOUNDARY;if(y<1e76){const e=Number.EPSILON*m*y*(y*y);if(v>e)return s.Sign.ON_POSITIVE_SIDE;if(v<-e)return s.Sign.ON_NEGATIVE_SIDE}return s.Sign.ZERO}function y(e,t,i,n){switch(c(e,t,i)){case s.Sign.LEFT_TURN:return c(i,n,t)!==s.Sign.RIGHT_TURN;case s.Sign.RIGHT_TURN:return c(i,n,t)!==s.Sign.LEFT_TURN;case s.Sign.COLLINEAR:return!0}}function b(e,t,i,n){switch(c(e,t,i)){case s.Sign.LEFT_TURN:return c(e,t,n)!==s.Sign.LEFT_TURN;case s.Sign.RIGHT_TURN:return c(e,t,n)!==s.Sign.RIGHT_TURN;case s.Sign.COLLINEAR:return!0}}function _(e,t,i,s){const n=x(e,t,i,s);switch(n.intersectionType){case w.POINT:return n.point;case w.NO_INTERSECTION:return null}throw new Error("sdfgighowen")}var w;function S(e,t){if(e[0]===t[0])return[1,0,-e[0]];if(e[1]===t[1])return[0,1,-e[1]];const i=t[0]-e[0],s=t[1]-e[1];return[-s,i,-i*e[1]+s*e[0]]}function x(e,t,i,s){if(!C(e,t,i,s))return{intersectionType:w.NO_INTERSECTION,point:null};const n=S(e,t),o=S(i,s),r=M(n,o);switch(r.intersectionType){case w.POINT:return r}throw new Error("gzseuihgpib")}function M(e,t){const i=e[0]*t[1]-t[0]*e[1],s=e[1]*t[2]-t[1]*e[2],n=t[0]*e[2]-e[0]*t[2];return{intersectionType:w.POINT,point:[s/i,n/i]}}function C(e,t,i,n){if(g(e,t)){if(g(i,n)){if(g(t,i)||g(n,e))return!1}else if(g(t,n)||g(i,e))return!1}else if(g(i,n)){if(g(e,i)||g(n,t))return!1}else if(g(e,n)||g(i,t))return!1;if(g(e,t))if(g(i,n))switch(v(e,i)){case s.Sign.SMALLER:switch(v(t,i)){case s.Sign.SMALLER:return!1;case s.Sign.EQUAL:return!0;default:switch(v(t,n)){case s.Sign.SMALLER:return y(e,t,i,n);case s.Sign.EQUAL:return!0;default:return b(e,t,i,n)}}case s.Sign.EQUAL:return!0;default:switch(v(n,e)){case s.Sign.SMALLER:return!1;case s.Sign.EQUAL:return!0;default:switch(v(n,t)){case s.Sign.SMALLER:return y(i,n,e,t);case s.Sign.EQUAL:return!0;default:return b(i,n,e,t)}}}else switch(v(e,n)){case s.Sign.SMALLER:switch(v(t,n)){case s.Sign.SMALLER:return!1;case s.Sign.EQUAL:return!0;default:switch(v(t,i)){case s.Sign.SMALLER:return y(e,t,n,i);case s.Sign.EQUAL:return!0;default:return b(e,t,n,i)}}case s.Sign.EQUAL:return!0;default:switch(v(i,e)){case s.Sign.SMALLER:return!1;case s.Sign.EQUAL:return!0;default:switch(v(i,t)){case s.Sign.SMALLER:return y(n,i,e,t);case s.Sign.EQUAL:return!0;default:return b(n,i,e,t)}}}else if(g(i,n))switch(v(t,i)){case s.Sign.SMALLER:switch(v(e,i)){case s.Sign.SMALLER:return!1;case s.Sign.EQUAL:return!0;default:switch(v(e,n)){case s.Sign.SMALLER:return y(t,e,i,n);case s.Sign.EQUAL:return!0;default:return b(t,e,i,n)}}case s.Sign.EQUAL:return!0;default:switch(v(n,t)){case s.Sign.SMALLER:return!1;case s.Sign.EQUAL:return!0;default:switch(v(n,e)){case s.Sign.SMALLER:return y(i,n,t,e);case s.Sign.EQUAL:return!0;default:return b(i,n,t,e)}}}else switch(v(t,n)){case s.Sign.SMALLER:switch(v(e,n)){case s.Sign.SMALLER:return!1;case s.Sign.EQUAL:return!0;default:switch(v(e,i)){case s.Sign.SMALLER:return y(t,e,n,i);case s.Sign.EQUAL:return!0;default:return b(t,e,n,i)}}case s.Sign.EQUAL:return!0;default:switch(v(i,t)){case s.Sign.SMALLER:return!1;case s.Sign.EQUAL:return!0;default:switch(v(i,e)){case s.Sign.SMALLER:return y(n,i,t,e);case s.Sign.EQUAL:return!0;default:return b(n,i,t,e)}}}}function k(e){if(e!==e)return e;if(e===-1/0)return-Number.MAX_VALUE;if(e===1/0)return 1/0;if(e===+Number.MAX_VALUE)return 1/0;let t=e*(e<0?1-Number.EPSILON/2:1+Number.EPSILON);t===e&&(t=Number.MIN_VALUE*Number.EPSILON>0?e+Number.MIN_VALUE*Number.EPSILON:e+Number.MIN_VALUE),t===1/0&&(t=+Number.MAX_VALUE);const i=e+(t-e)/2;ewindow.innerWidth-100&&(t=window.innerWidth-100),i<0&&(i=0),i>window.innerHeight-100&&(i=window.innerHeight-100),this.$refs.container.style.left=t+"px",this.$refs.container.style.top=i+"px",this.$refs.container.style.display="block"}dragOver(e){this.dragging&&(this.$refs.container.style.display="none")}};s.__decorate([r.Prop(Boolean)],a.prototype,"visible",void 0),s.__decorate([r.Prop({type:Boolean,default:!0})],a.prototype,"mask",void 0),a=s.__decorate([o.default],a),t.default=a},5338:function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0});const s=i("9ab4"),n=s.__importDefault(i("8055")),o=i("2d5b");t.socket=n.default(location.protocol+"//"+location.host+"/pa_assetmgmt",{autoConnect:!1}),t.socket.on("connect",()=>{console.log("Connected")}),t.socket.on("disconnect",()=>{console.log("Disconnected")}),t.socket.on("redirect",e=>{console.log("redirecting"),window.location.href=e}),t.socket.on("Folder.Root.Set",e=>{o.assetStore.setRoot(e)}),t.socket.on("Folder.Set",e=>{if(o.assetStore.clear(),e.children)for(const t of e.children)o.assetStore.idMap.set(t.id,t),t.file_hash?o.assetStore.files.push(t.id):o.assetStore.folders.push(t.id)}),t.socket.on("Folder.Create",e=>{o.assetStore.folders.push(e.id),o.assetStore.idMap.set(e.id,e)}),t.socket.on("Asset.Upload.Finish",e=>{o.assetStore.idMap.set(e.id,e),o.assetStore.files.push(e.id)})},5394:function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0});const s=i("9ab4"),n=s.__importDefault(i("65d9")),o=s.__importDefault(i("1289")),r=s.__importDefault(i("ea6a")),a=i("0bc6"),l=i("6f92"),c=i("f10f");let u=class extends r.default{constructor(){super(...arguments),this.name="Filter",this.active=!1}get labels(){const e={"":[]};for(const t of Object.keys(c.gameStore.labels)){const i=c.gameStore.labels[t];i.category?(i.category in e||(e[i.category]=[]),e[i.category].push([i.uuid,i.name]),e[i.category].sort((e,t)=>e[1].localeCompare(t[1]))):e[""].push([i.uuid,i.name])}return e}get initalValues(){const e={};for(const t of Object.keys(this.labels))e[t]=c.gameStore.labelFilters.filter(e=>this.labels[t].map(e=>e[0]).includes(e));return e}get categories(){return Object.keys(this.labels).sort()}isFilter(e){return c.gameStore.labelFilters.includes(e)}toggleFilter(e){const t=c.gameStore.labelFilters.indexOf(e);t>=0?c.gameStore.labelFilters.splice(t,1):c.gameStore.labelFilters.push(e),l.layerManager.invalidate()}toggleUnlabeled(){c.gameStore.toggleUnlabeledFilter(),l.layerManager.invalidate()}updateSelection(e){if(e.title in this.labels){for(const[t,i]of this.labels[e.title]){const i=c.gameStore.labelFilters.indexOf(t),s=e.selection.includes(t);i>=0&&!s?(c.gameStore.labelFilters.splice(i,1),a.socket.emit("Labels.Filter.Remove",t)):i<0&&s&&(c.gameStore.labelFilters.push(t),a.socket.emit("Labels.Filter.Add",t))}l.layerManager.invalidate()}}};u=s.__decorate([n.default({components:{accordion:o.default}})],u),t.default=u},"53ec":function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0});const s=i("9ab4"),n=s.__importDefault(i("a026")),o=s.__importDefault(i("65d9")),r=i("60a3");let a=class extends n.default{constructor(){super(...arguments),this.selected=[],this.active=!1}mounted(){this.selected=this.initialValues,this.updateCategory()}toggleDisplay(e){this.active=!this.active}toggleCategory(){const e=this.$refs.overall;e.checked?this.selected=this.items.map(e=>e[0]):this.selected=[],this.$emit("selectionupdate",{title:this.title,selection:this.selected})}updateCategory(){const e=this.$refs.overall;0===this.selected.length?(e.checked=!1,e.indeterminate=!1):this.selected.length===this.items.length?(e.checked=!0,e.indeterminate=!1):(e.checked=!1,e.indeterminate=!0)}toggleSelection(e){const t=this.selected.indexOf(e);-1===t?this.selected.push(e):this.selected.splice(t,1),this.updateCategory(),this.$emit("selectionupdate",{title:this.title,selection:this.selected})}};s.__decorate([r.Prop(String)],a.prototype,"title",void 0),s.__decorate([r.Prop({default:!0,type:Boolean})],a.prototype,"showArrow",void 0),s.__decorate([r.Prop({default:()=>[]})],a.prototype,"items",void 0),s.__decorate([r.Prop({default:()=>[]})],a.prototype,"initialValues",void 0),a=s.__decorate([o.default],a),t.default=a},5459:function(e,t,i){"use strict";var s=function(){var e=this,t=e.$createElement,i=e._self._c||t;return e.selected?i("div",{staticClass:"tool-detail",style:{"--detailRight":e.detailRight,"--detailArrow":e.detailArrow}},e._l(e.tokens,function(t){return i("div",{key:t.uuid,staticClass:"token",class:{selected:e.selection.includes(t.uuid)},on:{click:function(i){e.toggle(t.uuid)}}},[t.src?i("img",{attrs:{src:t.src,width:"30px",height:"30px"}}):e._e(),i("div",[e._v(e._s(t.name))])])})):e._e()},n=[];i.d(t,"a",function(){return s}),i.d(t,"b",function(){return n})},"54ac":function(e,t,i){},"561b":function(e,t,i){"use strict";var s=i("a450"),n=i.n(s);n.a},5722:function(e,t,i){},"574e":function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0});const s=i("8f0a"),n=i("8db6"),o=i("2469"),r=i("92b1"),a=i("5a5c");class l extends o.Shape{constructor(e,t,i,s,n){super(e,"rgba(0, 0, 0, 0)",s||"#000",n),this.type="multiline",this._points=[],this._points=t||[],this.lineWidth=i||3}get refPoint(){return this._refPoint}set refPoint(e){const t=e.subtract(this._refPoint);this._refPoint=e;for(let i=0;i({x:e.x,y:e.y}))})}fromDict(e){super.fromDict(e),this._points=e.points.map(e=>new s.GlobalPoint(e.x,e.y))}get points(){return this._points.map(e=>[e.x,e.y])}getBoundingBox(){let e=this.refPoint.x,t=this.refPoint.x,i=this.refPoint.y,o=this.refPoint.y;for(const s of this._points)s.xt&&(t=s.x),s.yo&&(o=s.y);return new n.BoundingRect(new s.GlobalPoint(e,i),t-e,o-i)}draw(e){super.draw(e),e.beginPath(),e.lineCap="round",e.lineJoin="round",e.moveTo(r.g2lx(this.refPoint.x),r.g2ly(this.refPoint.y));for(const t of this._points)e.lineTo(r.g2lx(t.x),r.g2ly(t.y));"fog"===this.strokeColour?e.strokeStyle=a.getFogColour():e.strokeStyle=this.strokeColour,e.lineWidth=r.g2lz(this.lineWidth),e.stroke()}contains(e){return this.getBoundingBox().contains(e)}center(e){return this.getBoundingBox().center()}visibleInCanvas(e){return this.getBoundingBox().visibleInCanvas(e)}snapToGrid(){}resizeToGrid(){}resize(e,t){0===e?this._refPoint=r.l2g(t):this._points[e-1]=r.l2g(t)}}t.MultiLine=l},"59d8":function(e,t,i){"use strict";i.r(t);var s=i("e5ca"),n=i("6f8d");for(var o in n)"default"!==o&&function(e){i.d(t,e,function(){return n[e]})}(o);i("a7b3");var r=i("2877"),a=Object(r["a"])(n["default"],s["a"],s["b"],!1,null,"639cd890",null);a.options.__file="draw.vue",t["default"]=a.exports},"5a5c":function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0});const s=i("9ab4"),n=s.__importDefault(i("66cb")),o=i("8f0a"),r=i("f10f");function a(e){return new o.LocalPoint(e.pageX,e.pageY)}function l(e=!1){const t=n.default(r.gameStore.fowColour);return r.gameStore.IS_DM?t.setAlpha(e?1:r.gameStore.fowOpacity):t.setAlpha(1),t.toRgbString()}function c(e){return 1/(-5/3+28/15*Math.exp(1.83*e))}function u(e){return Math.log(15/28*(1/e+5/3))/1.83}t.getMouse=a,t.getFogColour=l,t.zoomValue=c,t.zoomDisplay=u},"5a81":function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0});const s=i("9ab4"),n=s.__importStar(i("66cb")),o=s.__importDefault(i("a026")),r=s.__importDefault(i("65d9")),a=i("2f62"),l=s.__importDefault(i("3b36")),c=s.__importDefault(i("d65f")),u=i("4a5b"),d=i("8f0a"),h=i("6f92"),f=i("1327"),p=i("f10f"),g=i("92b1"),v=i("60a3");let m=class extends o.default{constructor(){super(...arguments),this.x=0,this.y=0,this.visible=!1,this.text="X",this.fillColour="rgba(255, 255, 255, 1)",this.borderColour="rgba(0, 0, 0, 1)"}mounted(){this.updatePreview()}onTextChange(e,t){this.updatePreview()}onFillChange(e,t){this.updatePreview()}onBorderChange(e,t){this.updatePreview()}open(e,t){this.visible=!0,this.x=e,this.y=t}submit(){const e=h.layerManager.getLayer();if(void 0===e)return;const t=new f.CircularToken(g.l2g(new d.LocalPoint(this.x,this.y)),g.getUnitDistance(p.gameStore.unitSize/2),this.text,"10px serif",this.fillColour,this.borderColour);t.addOwner(p.gameStore.username),e.addShape(t,!0),e.invalidate(!1),this.visible=!1}updatePreview(){const e=this.$refs.canvas.getContext("2d");e.clearRect(0,0,e.canvas.width,e.canvas.height),e.beginPath();const t={x:e.canvas.width/2,y:e.canvas.height/2},i=.9*Math.min(t.x,t.y);e.fillStyle=this.fillColour,e.arc(t.x,t.y,i,0,2*Math.PI),e.fill(),"rgba(0, 0, 0, 0)"!==this.borderColour&&(e.beginPath(),e.lineWidth=5,e.strokeStyle=this.borderColour,e.arc(t.x,t.y,i,0,2*Math.PI),e.stroke()),e.save(),e.textAlign="center",e.textBaseline="middle";const s=u.calcFontScale(e,this.text,i,i),o=0;e.transform(s,o,-o,s,t.x,t.y),e.fillStyle=n.mostReadable(this.fillColour,["#000","#fff"]).toHexString(),e.fillText(this.text,0,0),e.restore()}};s.__decorate([v.Watch("text")],m.prototype,"onTextChange",null),s.__decorate([v.Watch("fillColour")],m.prototype,"onFillChange",null),s.__decorate([v.Watch("borderColour")],m.prototype,"onBorderChange",null),m=s.__decorate([r.default({components:{Modal:c.default,"color-picker":l.default},computed:Object.assign({},a.mapState("game",["unitSize"]))})],m),t.default=m},"5ae5":function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0});const s=i("9ab4"),n=s.__importDefault(i("a026")),o=s.__importDefault(i("65d9")),r=s.__importDefault(i("d65f")),a=i("4a5b"),l=i("f10f");let c=class extends n.default{constructor(){super(...arguments),this.visible=!1,this.note=null}open(e){this.visible=!0,this.note=e}calcHeight(){if(this.$refs.textarea){const e=this.$refs.textarea;return e.style.height="auto",e.style.height=e.scrollHeight+"px",e.scrollHeight+"px"}return"100px"}updateNote(){this.note&&l.gameStore.updateNote({note:this.note,sync:!0})}removeNote(){a.getRef("confirm").open("Are you sure you wish to remove this?").then(e=>{e&&this.note&&(l.gameStore.removeNote({note:this.note,sync:!0}),this.visible=!1)},()=>{})}};c=s.__decorate([o.default({components:{Modal:r.default}})],c),t.default=c},"5b69":function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0});const s=i("9ab4"),n=s.__importDefault(i("65d9")),o=i("60a3"),r=s.__importDefault(i("3b36")),a=s.__importDefault(i("ea6a")),l=i("0bc6"),c=i("8f0a"),u=i("6f92"),d=i("4709"),h=i("5e7c"),f=i("574e"),p=i("e4ea"),g=i("b2ed"),v=i("f10f"),m=i("92b1"),y=i("5a5c");let b=class extends a.default{constructor(){super(...arguments),this.name="Draw",this.active=!1,this.startPoint=null,this.shape=null,this.brushHelper=null,this.ruler=null,this.fillColour="rgba(0, 0, 0, 1)",this.borderColour="rgba(255, 255, 255, 0)",this.shapeSelect="square",this.shapes=["square","circle","draw-polygon","paint-brush"],this.modeSelect="normal",this.modes=["normal","reveal","hide"],this.brushSize=m.getUnitDistance(v.gameStore.unitSize)}get helperSize(){return"paint-brush"===this.shapeSelect?this.brushSize/2:m.getUnitDistance(this.unitSize)/8}get IS_DM(){return v.gameStore.IS_DM}get unitSize(){return v.gameStore.unitSize}get useGrid(){return v.gameStore.useGrid}onFillChange(){this.brushHelper&&(this.brushHelper.fillColour=this.fillColour)}onModeUpdate(e,t){this.onModeChange(e,t)}setupBrush(){null!==this.brushHelper&&("reveal"===this.modeSelect||"hide"===this.modeSelect?(this.brushHelper.options.set("preFogShape",!0),this.brushHelper.options.set("skipDraw",!0),this.brushHelper.fillColour="rgba(0, 0, 0, 1)","reveal"===this.modeSelect?this.brushHelper.globalCompositeOperation="source-over":"hide"===this.modeSelect&&(this.brushHelper.globalCompositeOperation="destination-out")):(this.brushHelper.options.delete("preFogShape"),this.brushHelper.options.delete("skipDraw"),this.brushHelper.globalCompositeOperation="source-over",this.brushHelper.fillColour=this.fillColour))}onModeChange(e,t){if(null===this.brushHelper)return;const i=u.layerManager.getLayer("fow"),s=u.layerManager.getLayer();void 0!==i&&void 0!==s&&(this.setupBrush(),"normal"!==e&&"normal"===t?(s.removeShape(this.brushHelper,!1),i.addShape(this.brushHelper,!1)):"normal"===e&&"normal"!==t&&(s.addShape(this.brushHelper,!1),i.removeShape(this.brushHelper,!1)))}getLayer(){return"normal"===this.modeSelect?u.layerManager.getLayer():u.layerManager.getLayer("fow")}onMouseDown(e){const t=this.getLayer();if(void 0!==t){if(this.active)null!==this.shape&&this.shape instanceof p.Polygon&&this.shape._vertices.push(m.l2g(y.getMouse(e)));else{switch(this.startPoint=m.l2g(y.getMouse(e)),this.active=!0,this.shapeSelect){case"square":this.shape=new g.Rect(this.startPoint.clone(),0,0,this.fillColour,this.borderColour);break;case"circle":this.shape=new d.Circle(this.startPoint.clone(),this.helperSize,this.fillColour,this.borderColour);break;case"paint-brush":this.shape=new f.MultiLine(this.startPoint.clone(),[],this.brushSize),this.shape.fillColour=this.fillColour;break;case"draw-polygon":this.shape=new p.Polygon(this.startPoint.clone(),[],this.fillColour,this.borderColour);break;default:return}"normal"!==this.modeSelect&&(this.shape.options.set("preFogShape",!0),this.shape.options.set("skipDraw",!0),this.shape.fillColour="rgba(0, 0, 0, 1)"),"reveal"===this.modeSelect?this.shape.globalCompositeOperation="source-over":"hide"===this.modeSelect&&(this.shape.globalCompositeOperation="destination-out"),this.shape.addOwner(v.gameStore.username),"fow"===t.name&&"normal"===this.modeSelect&&(this.shape.visionObstruction=!0,this.shape.movementObstruction=!0),t.addShape(this.shape,!0,!1,!1),this.pushBrushBack()}if(null!==this.shape&&this.shape instanceof p.Polygon){const i=m.l2g(y.getMouse(e));null===this.ruler?(this.ruler=new h.Line(i,i,3,"black"),t.addShape(this.ruler,!1)):(this.ruler.refPoint=i,this.ruler.endPoint=i),this.shape.visionObstruction&&v.gameStore.recalculateVision(!0),t.invalidate(!1),l.socket.emit("Shape.Update",{shape:this.shape.asDict(),redraw:!0,temporary:!0})}}else console.log("No active layer!")}onMouseMove(e){const t=m.l2g(y.getMouse(e)),i=this.getLayer();if(void 0!==i){if(null!==this.brushHelper&&(this.brushHelper.r=this.helperSize,this.brushHelper.refPoint=t,this.active||i.invalidate(!1)),this.active&&null!==this.startPoint&&null!==this.shape){switch(this.shapeSelect){case"square":this.shape.w=Math.abs(t.x-this.startPoint.x),this.shape.h=Math.abs(t.y-this.startPoint.y),this.shape.refPoint=new c.GlobalPoint(Math.min(this.startPoint.x,t.x),Math.min(this.startPoint.y,t.y));break;case"circle":this.shape.r=t.subtract(this.startPoint).length();break;case"paint-brush":this.shape._points.push(t);break;case"draw-polygon":this.ruler.endPoint=t;break}this.shape instanceof p.Polygon||(l.socket.emit("Shape.Update",{shape:this.shape.asDict(),redraw:!0,temporary:!0}),this.shape.visionObstruction&&v.gameStore.recalculateVision(!0)),i.invalidate(!1)}}else console.log("No active layer!")}onMouseUp(e){!this.active||null===this.shape||this.shape instanceof p.Polygon||(!e.altKey&&this.useGrid&&this.shape.resizeToGrid(),this.finaliseShape())}onContextMenu(e){if(!this.active||null===this.shape||!(this.shape instanceof p.Polygon))return;const t=this.getLayer();void 0!==t?(t.removeShape(this.ruler,!1),this.ruler=null,this.finaliseShape()):console.log("No active layer!")}finaliseShape(){null!==this.shape&&(this.shape.visionObstruction&&v.gameStore.recalculateVision(),this.shape.movementObstruction&&v.gameStore.recalculateMovement(),l.socket.emit("Shape.Update",{shape:this.shape.asDict(),redraw:!0,temporary:!1}),this.active=!1)}onSelect(){const e=this.getLayer();void 0!==e&&(this.brushHelper=new d.Circle(new c.GlobalPoint(-1e3,-1e3),this.brushSize/2,this.fillColour),this.setupBrush(),e.addShape(this.brushHelper,!1))}onDeselect(){const e=this.getLayer();null!==this.brushHelper&&void 0!==e&&e.removeShape(this.brushHelper,!1),this.active&&void 0!==e&&null!==this.shape&&(e.removeShape(this.shape,!0,!1),this.shape=null,this.active=!1,e.invalidate(!1))}pushBrushBack(){const e=this.getLayer();void 0!==e?(null!==this.brushHelper&&e.removeShape(this.brushHelper,!1),this.brushHelper=new d.Circle(new c.GlobalPoint(-1e3,-1e3),this.brushSize/2,this.fillColour),this.setupBrush(),e.addShape(this.brushHelper,!1)):console.log("No active layer!")}};s.__decorate([o.Watch("fillColour")],b.prototype,"onFillChange",null),s.__decorate([o.Watch("modeSelect")],b.prototype,"onModeUpdate",null),b=s.__decorate([n.default({components:{"color-picker":r.default}})],b),t.default=b},"5e7c":function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0});const s=i("8f0a"),n=i("8db6"),o=i("2469"),r=i("92b1");class a extends o.Shape{constructor(e,t,i,s,n){super(e,"rgba(0, 0, 0, 0)",s||"#000",n),this.type="line",this.endPoint=t,this.lineWidth=void 0===i?1:i}asDict(){return Object.assign(this.getBaseDict(),{x2:this.endPoint.x,y2:this.endPoint.y,line_width:this.lineWidth})}get points(){return[[this.refPoint.x,this.refPoint.y],[this.endPoint.x,this.endPoint.y]]}getBoundingBox(){return new n.BoundingRect(new s.GlobalPoint(Math.min(this.refPoint.x,this.endPoint.x),Math.min(this.refPoint.y,this.endPoint.y)),Math.abs(this.refPoint.x-this.endPoint.x),Math.abs(this.refPoint.y-this.endPoint.y))}draw(e){super.draw(e),e.strokeStyle=this.strokeColour,e.beginPath(),e.moveTo(r.g2lx(this.refPoint.x),r.g2ly(this.refPoint.y)),e.lineTo(r.g2lx(this.endPoint.x),r.g2ly(this.endPoint.y)),e.lineWidth=this.lineWidth,e.stroke()}contains(e){return!1}center(e){}visibleInCanvas(e){return this.getBoundingBox().visibleInCanvas(e)}snapToGrid(){}resizeToGrid(){}resize(e,t){0===e?this.refPoint=r.l2g(t):this.endPoint=r.l2g(t)}}t.Line=a},"5f86":function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0});const s=i("9ab4"),n=s.__importDefault(i("bc3a")),o=s.__importDefault(i("a026")),r=s.__importDefault(i("8c4f"));o.default.use(r.default);const a=s.__importDefault(i("e914")),l=s.__importDefault(i("1077")),c=s.__importDefault(i("cad7")),u=s.__importDefault(i("47f7")),d=s.__importDefault(i("c6b4")),h=s.__importDefault(i("07f5")),f=s.__importDefault(i("ce87")),p=i("cc67");t.router=new r.default({mode:"history",base:"/",routes:[{path:"/",redirect:"/dashboard"},{path:"/_load",name:"load",component:u.default},{path:"/assets",component:a.default,meta:{auth:!0}},{path:"/auth",component:{template:""},children:[{path:"login",component:l.default},{path:"logout",component:c.default}]},{path:"/invite/:code",component:f.default,meta:{auth:!0}},{path:"/dashboard",component:d.default,meta:{auth:!0}},{path:"/game/:creator/:room",component:h.default,meta:{auth:!0}}]}),t.router.beforeEach((e,i,s)=>{p.coreStore.initialized||"/_load"===e.path?e.matched.some(e=>e.meta.auth)&&!p.coreStore.authenticated?s({path:"/auth/login",query:{redirect:e.path}}):s():(s({path:"/_load"}),n.default.get("/api/auth").then(i=>{i.data.auth&&(p.coreStore.setAuthenticated(!0),p.coreStore.setUsername(i.data.username)),p.coreStore.setInitialized(!0),t.router.push(e.path)}).catch(()=>{console.error("Authentication check could not be fulfilled.")}))})},"5fa9":function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0});const s=i("9ab4"),n=s.__importDefault(i("a026")),o=s.__importDefault(i("65d9"));let r=class extends n.default{constructor(){super(...arguments),this.name="",this.selected=!1,this.active=!1}get detailRight(){const e=this.$parent.$refs[this.name+"-selector"][0].getBoundingClientRect(),t=e.left+e.width/2;return`${window.innerWidth-Math.min(window.innerWidth-25,t+75)}px`}get detailArrow(){const e=this.$parent.$refs[this.name+"-selector"][0].getBoundingClientRect(),t=e.left+e.width/2,i=Math.min(window.innerWidth-25,t+75);return`${i-t-14}px`}created(){this.$parent.$on("mousedown",(e,t)=>{t===this.name&&this.onMouseDown(e)}),this.$parent.$on("mouseup",(e,t)=>{t===this.name&&this.onMouseUp(e)}),this.$parent.$on("mousemove",(e,t)=>{t===this.name&&this.onMouseMove(e)}),this.$parent.$on("contextmenu",(e,t)=>{t===this.name&&this.onContextMenu(e)}),this.$parent.$on("tools-select-change",(e,t)=>{t===this.name?(this.selected=!1,this.onDeselect()):e===this.name&&(this.selected=!0,this.onSelect())})}onSelect(){}onDeselect(){}onMouseDown(e){}onMouseUp(e){}onMouseMove(e){}onContextMenu(e){}};r=s.__decorate([o.default],r),t.default=r},"602f":function(e,t,i){},6100:function(e,t,i){"use strict";i.r(t);var s=i("f974"),n=i("e94f");for(var o in n)"default"!==o&&function(e){i.d(t,e,function(){return n[e]})}(o);i("d75e");var r=i("2877"),a=Object(r["a"])(n["default"],s["a"],s["b"],!1,null,"b6e1f51c",null);a.options.__file="tools.vue",t["default"]=a.exports},6465:function(e,t,i){"use strict";i.r(t);var s=i("5fa9"),n=i.n(s);for(var o in s)"default"!==o&&function(e){i.d(t,e,function(){return s[e]})}(o);t["default"]=n.a},"64a9":function(e,t,i){},6542:function(e,t,i){},"6c30":function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0});const s=i("c266"),n=i("f10f"),o=i("92b1");class r extends s.BaseRect{constructor(e,t,i,s,n){super(t,i,s,void 0,void 0,n),this.type="assetrect",this.src="",this.img=e}asDict(){return Object.assign(this.getBaseDict(),{src:this.src})}fromDict(e){super.fromDict(e),this.src=e.src}draw(e){super.draw(e);try{e.drawImage(this.img,o.g2lx(this.refPoint.x),o.g2ly(this.refPoint.y),o.g2lz(this.w),o.g2lz(this.h))}catch(t){console.warn(`Shape ${this.uuid} could not load the image ${this.src}`)}}getInitiativeRepr(){return{uuid:this.uuid,visible:!n.gameStore.IS_DM,group:!1,source:this.src,has_img:!0,effects:[],index:1/0}}}t.Asset=r},"6e4a":function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0});const s=i("98ef"),n=i("4aee");class o{constructor(){this.tds=new s.TDS}insertConstraint(e,t){const i=this.insert(e),s=this.insert(t);i!==s&&this.insertConstraintV(i,s)}insertConstraintV(e,t){const i=[[e,t]];while(i.length>0){const e=i.pop(),t=n.edgeInfo(e[0],e[1]);if(t.includes){this.markConstraint(t.fr,t.i),t.vi!==e[1]&&i.push([t.vi,e[1]]);continue}const s=this.findIntersectedFaces(e[0],e[1]);s.found?s.vi!==e[0]&&s.vi!==e[1]?(i.push([e[0],s.vi]),i.push([s.vi,e[1]])):i.push(e):(this.triangulateHole(s.intersectedFaces,s.listAB,s.listBA),s.vi!==e[1]&&i.push([s.vi,e[1]]))}}triangulateHole(e,t,i){const s=[];this.triangulateHole2(e,t,i,s),this.propagatingFlipE(s)}triangulateHole2(e,t,i,s){if(t.length>0){this.triangulateHalfHole(t,s),this.triangulateHalfHole(i,s);const n=t[0][0],o=i[0][0];n.neighbours[2]=o,o.neighbours[2]=n,n.constraints[2]=!0,o.constraints[2]=!0;while(e.length>0)this.tds.deleteTriangle(e.shift())}}triangulateHalfHole(e,t){let i,o,r=0;const a=()=>e[r],l=()=>e[i],c=a()[0].vertices[n.ccw(a()[1])];let u,d,h,f,p,g;i=r,++i;do{d=a()[0],p=a()[1],null!==d.neighbours[p]&&(u=d.neighbours[p],f=n.cw(u.indexV(d.vertices[n.cw(p)])),d=u.neighbours[f],p=this.tds.mirrorIndex(u,f)),h=l()[0],g=l()[1],null!==h.neighbours[g]&&(u=h.neighbours[g],f=n.cw(u.indexV(h.vertices[n.cw(g)])),h=u.neighbours[f],g=this.tds.mirrorIndex(u,f));const v=d.vertices[n.ccw(p)],m=d.vertices[n.cw(p)],y=h.vertices[n.cw(g)],b=n.orientation(v.point,m.point,y.point);switch(b){case s.Sign.RIGHT_TURN:{const s=this.tds.createTriangle(v,y,m,null,null,null);t.push([s,2]),s.neighbours[1]=d,s.neighbours[0]=h,d.neighbours[p]=s,h.neighbours[g]=s,d.isConstrained(p)&&(s.constraints[1]=!0),h.isConstrained(g)&&(s.constraints[0]=!0),v.triangle=s,m.triangle=s,y.triangle=s,o=r+1,e.splice(r,0,[s,2]),e.splice(Math.max(o,i),1),e.splice(Math.min(o,i),1),i=r,v!==c?--r:++i;break}case s.Sign.LEFT_TURN:case s.Sign.COLLINEAR:++r,++i;break}}while(i0){t=r[0][0],a=r[0][1],l=t.neighbours[a],c=this.tds.mirrorIndex(t,a),u=[t,a],r.splice(r.findIndex(e=>e[0]===u[0]&&e[1]===u[1]),1),d[0]=[t,n.cw(a)],d[1]=[t,n.ccw(a)],d[2]=[l,n.cw(c)],d[3]=[l,n.ccw(c)];for(const e of d){const t=e[0],i=e[1];s=[t.neighbours[i],this.tds.mirrorIndex(t,i)],this.lessEdge(e,s)?r.splice(r.findIndex(t=>t[0]===e[0]&&t[1]===e[1]),1):r.splice(r.findIndex(e=>e[0]===s[0]&&e[1]===s[1]),1)}this.flip(t,a);for(const e of d){const t=e[0],i=e[1];this.isFlipable(t,i)&&(s=[t.neighbours[i],this.tds.mirrorIndex(t,i)],this.lessEdge(e,s)?r.push(e):r.push(s))}}}flip(e,t){const i=e.neighbours[t],s=this.tds.mirrorIndex(e,t),o=e.neighbours[n.cw(t)],r=this.tds.mirrorIndex(e,n.cw(t)),a=e.neighbours[n.ccw(t)],l=this.tds.mirrorIndex(e,n.ccw(t)),c=i.neighbours[n.cw(s)],u=this.tds.mirrorIndex(i,n.cw(s)),d=i.neighbours[n.ccw(s)],h=this.tds.mirrorIndex(i,n.ccw(s));this.tds.flip(e,t),e.constraints[e.indexT(i)]=!1,i.constraints[i.indexT(e)]=!1,o.neighbours[r].constraints[this.tds.mirrorIndex(o,r)]=o.constraints[r],a.neighbours[l].constraints[this.tds.mirrorIndex(a,l)]=a.constraints[l],c.neighbours[u].constraints[this.tds.mirrorIndex(c,u)]=c.constraints[u],d.neighbours[h].constraints[this.tds.mirrorIndex(d,h)]=d.constraints[h]}isFlipable(e,t,i=!0){const o=e.neighbours[t];return!e.isInfinite()&&!o.isInfinite()&&(!e.constraints[t]&&n.sideOfOrientedCircle(o,e.vertices[t].point,i)===s.Sign.ON_POSITIVE_SIDE)}insertb(e,t,i,o){let r,a,l=!1;i===s.LocateType.EDGE&&t.isConstrained(o)&&(l=!0,r=t.vertices[n.ccw(o)],a=t.vertices[n.cw(o)]);const c=this.insertc(e,t,i,o);return l?this.updateConstraintsIncident(c,r,a):i!==s.LocateType.VERTEX&&this.clearConstraintsIncident(c),2===this.tds.dimension&&this.updateConstraintsOpposite(c),c}updateConstraintsIncident(e,t,i){if(0!==this.tds.dimension)if(1===this.tds.dimension){const t=new s.EdgeCirculator(e,null);do{t.t.constraints[2]=!0}while(t.next())}else{const o=new s.FaceCirculator(e,null);do{const s=o.t.indexV(e),r=n.cw(s),a=n.ccw(s);o.t.vertices[r]===t||o.t.vertices[r]===i?(o.t.constraints[a]=!0,o.t.constraints[r]=!1):(o.t.constraints[a]=!1,o.t.constraints[r]=!0)}while(o.next())}}clearConstraintsIncident(e){const t=new s.EdgeCirculator(e,null);if(t.valid)do{const e=t.t,i=t.ri;e.constraints[i]=!1,2===this.tds.dimension&&(e.neighbours[i].constraints[this.tds.mirrorIndex(e,i)]=!1)}while(t.next())}insertc(e,t,i,n){if(1===this.tds.vertices.length)return this.insertFirst(e);if(2===this.tds.vertices.length)return i===s.LocateType.VERTEX?this.tds.finiteVertex:this.insertSecond(e);switch(i){case s.LocateType.VERTEX:return t.vertices[n];case s.LocateType.OUTSIDE_AFFINE_HULL:return this.insertOutsideAffineHull(e);case s.LocateType.OUTSIDE_CONVEX_HULL:return this.insertOutsideConvexHull(e,t);case s.LocateType.EDGE:return this.insertInEdge(e,t,n);case s.LocateType.FACE:return this.insertInFace(e,t)}throw new Error("qwe")}insertInEdge(e,t,i){const s=this.tds.insertInEdge(t,i);return s.point=e,s}insertInFace(e,t){const i=this.tds.insertInFace(t);return i.point=e,i}insertFirst(e){const t=this.tds.insertDimUp();return t.point=e,t}insertSecond(e){const t=this.tds.insertDimUp(this.tds._infinite,!0);return t.point=e,t}insertOutsideAffineHull(e){let t=!1;if(1===this.tds.dimension){const i=this.tds.finiteEdge.first,o=n.orientation(i.vertices[0].point,i.vertices[1].point,e);t=o===s.Sign.COUNTERCLOCKWISE}const i=this.tds.insertDimUp(this.tds._infinite,t);return i.point=e,i}insertOutsideConvexHull(e,t){let i;if(1===this.tds.dimension)throw new Error("sdfasdasd");return i=this.insertOutsideConvexHull2(e,t),i.point=e,i}insertOutsideConvexHull2(e,t){let i=t.indexV(this.tds._infinite);const o=[],r=[];let a=new s.FaceCirculator(this.tds._infinite,t),l=!1;while(!l){a.prev(),i=a.t.indexV(this.tds._infinite);const t=a.t.vertices[n.ccw(i)].point,r=a.t.vertices[n.cw(i)].point;n.orientation(e,t,r)===s.Sign.LEFT_TURN?o.push(a.t):l=!0}a=new s.FaceCirculator(this.tds._infinite,t),l=!1;while(!l){a.next(),i=a.t.indexV(this.tds._infinite);const t=a.t.vertices[n.ccw(i)].point,o=a.t.vertices[n.cw(i)].point;n.orientation(e,t,o)===s.Sign.LEFT_TURN?r.push(a.t):l=!0}const c=this.tds.insertInFace(t);let u;c.point=e;while(o.length>0)u=o[0],i=n.ccw(u.indexV(this.tds._infinite)),this.tds.flip(u,i),o.shift();while(r.length>0)u=r[0],i=n.cw(u.indexV(this.tds._infinite)),this.tds.flip(u,i),r.shift();a=new s.FaceCirculator(c,null);while(!a.t.isInfinite())a.next();return this.tds._infinite.triangle=a.t,c}locate(e,t){let i=0,o=0;if(this.tds.dimension<0)return i=s.LocateType.OUTSIDE_AFFINE_HULL,o=4,{loc:null,lt:i,li:o};if(0===this.tds.dimension)return i=n.xyEqual(e,this.tds.finiteVertex.triangle.vertices[0].point)?s.LocateType.VERTEX:s.LocateType.OUTSIDE_AFFINE_HULL,o=4,{loc:null,lt:i,li:o};if(1===this.tds.dimension)return this.marchLocate1D(e);if(null===t){const e=this.tds._infinite.triangle;t=e.neighbours[e.indexV(this.tds._infinite)]}else t.isInfinite()&&(t=t.neighbours[t.indexV(this.tds._infinite)]);return this.marchLocate2D(t,e)}marchLocate1D(e){const t=this.tds._infinite.triangle,i=t.indexV(this.tds._infinite),o=t.neighbours[i],r=n.orientation(o.vertices[0].point,o.vertices[1].point,e);if(r===s.Sign.RIGHT_TURN||r===s.Sign.LEFT_TURN)return{loc:new s.Triangle,lt:s.LocateType.OUTSIDE_AFFINE_HULL,li:4};const a=o.indexT(t);if(n.collinearBetween(e,o.vertices[1-a].point,o.vertices[a].point))return{loc:t,lt:s.LocateType.OUTSIDE_CONVEX_HULL,li:i};if(n.xyEqual(e,o.vertices[1-a].point))return{loc:o,lt:s.LocateType.VERTEX,li:1-a};throw new Error("sdfsdf")}marchLocate2D(e,t){let i,o,r=null,a=!0;while(1){if(e.isInfinite())return{loc:e,lt:s.LocateType.OUTSIDE_CONVEX_HULL,li:e.indexV(this.tds._infinite)};const l=0,c=e.vertices[0].point,u=e.vertices[1].point,d=e.vertices[2].point;let h,f,p;if(a){if(r=e,a=!1,h=n.orientation(c,u,t),h===s.Sign.NEGATIVE){e=e.neighbours[2];continue}if(f=n.orientation(u,d,t),f===s.Sign.NEGATIVE){e=e.neighbours[0];continue}if(p=n.orientation(d,c,t),p===s.Sign.NEGATIVE){e=e.neighbours[1];continue}}else if(l)if(e.neighbours[0]===r){if(r=e,h=n.orientation(c,u,t),h===s.Sign.NEGATIVE){e=e.neighbours[2];continue}if(p=n.orientation(d,c,t),p===s.Sign.NEGATIVE){e=e.neighbours[1];continue}f=s.Sign.POSITIVE}else if(e.neighbours[1]===r){if(r=e,f=n.orientation(u,d,t),f===s.Sign.NEGATIVE){e=e.neighbours[0];continue}if(h=n.orientation(c,u,t),h===s.Sign.NEGATIVE){e=e.neighbours[2];continue}p=s.Sign.POSITIVE}else{if(r=e,p=n.orientation(d,c,t),p===s.Sign.NEGATIVE){e=e.neighbours[1];continue}if(f=n.orientation(u,d,t),f===s.Sign.NEGATIVE){e=e.neighbours[0];continue}h=s.Sign.POSITIVE}else if(e.neighbours[0]===r){if(r=e,p=n.orientation(d,c,t),p===s.Sign.NEGATIVE){e=e.neighbours[1];continue}if(h=n.orientation(c,u,t),h===s.Sign.NEGATIVE){e=e.neighbours[2];continue}f=s.Sign.POSITIVE}else if(e.neighbours[1]===r){if(r=e,h=n.orientation(c,u,t),h===s.Sign.NEGATIVE){e=e.neighbours[2];continue}if(f=n.orientation(u,d,t),f===s.Sign.NEGATIVE){e=e.neighbours[0];continue}p=s.Sign.POSITIVE}else{if(r=e,f=n.orientation(u,d,t),f===s.Sign.NEGATIVE){e=e.neighbours[0];continue}if(p=n.orientation(d,c,t),p===s.Sign.NEGATIVE){e=e.neighbours[1];continue}h=s.Sign.POSITIVE}const g=(h===s.Sign.COLLINEAR?1:0)+(f===s.Sign.COLLINEAR?1:0)+(p===s.Sign.COLLINEAR?1:0);switch(g){case 0:i=s.LocateType.FACE,o=4;break;case 1:i=s.LocateType.EDGE,o=h===s.Sign.COLLINEAR?2:f===s.Sign.COLLINEAR?0:1;break;case 2:i=s.LocateType.VERTEX,o=h!==s.Sign.COLLINEAR?2:f!==s.Sign.COLLINEAR?0:1;break}if(void 0===i||void 0===o)throw new Error("ert");return{loc:e,lt:i,li:o}}}iLocate(e,t){if(this.tds.dimension<2)return t;if(null===t){const e=this.tds._infinite.triangle;t=e.neighbours[e.indexV(this.tds._infinite)]}else t.isInfinite()&&(t=t.neighbours[t.indexV(this.tds._infinite)]);let i=null,s=t,o=!0,r=2500;while(1){if(!r--)return s;if(s.isInfinite())return s;const t=s.vertices[0].point,a=s.vertices[1].point,l=s.vertices[2].point;if(o){if(i=s,o=!1,n.hasInexactNegativeOrientation(t,a,e)){s=s.neighbours[2];continue}if(n.hasInexactNegativeOrientation(a,l,e)){s=s.neighbours[0];continue}if(n.hasInexactNegativeOrientation(l,t,e)){s=s.neighbours[1];continue}}else if(s.neighbours[0]===i){if(i=s,n.hasInexactNegativeOrientation(t,a,e)){s=s.neighbours[2];continue}if(n.hasInexactNegativeOrientation(l,t,e)){s=s.neighbours[1];continue}}else if(s.neighbours[1]===i){if(i=s,n.hasInexactNegativeOrientation(t,a,e)){s=s.neighbours[2];continue}if(n.hasInexactNegativeOrientation(a,l,e)){s=s.neighbours[0];continue}}else{if(i=s,n.hasInexactNegativeOrientation(l,t,e)){s=s.neighbours[1];continue}if(n.hasInexactNegativeOrientation(a,l,e)){s=s.neighbours[0];continue}}break}return s}}t.CDT=o},"6f8d":function(e,t,i){"use strict";i.r(t);var s=i("5b69"),n=i.n(s);for(var o in s)"default"!==o&&function(e){i.d(t,e,function(){return s[e]})}(o);t["default"]=n.a},"6f92":function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0});const s=i("8f0a"),n=i("6c30"),o=i("f10f"),r=i("92b1");class a{constructor(){this.layers=[],this.width=window.innerWidth,this.height=window.innerHeight,this.UUIDMap=new Map,this.interval=30,this.drawLoop=(()=>{for(let e=this.layers.length-1;e>=0;e--)this.layers[e].draw();requestAnimationFrame(this.drawLoop)}),requestAnimationFrame(this.drawLoop)}reset(){this.layers=[],this.UUIDMap=new Map}setWidth(e){this.width=e;for(const t of this.layers)t.canvas.width=e,t.width=e}setHeight(e){this.height=e;for(const t of this.layers)t.canvas.height=e,t.height=e}addLayer(e){this.layers.push(e),(o.gameStore.IS_DM||e.playerEditable)&&e.selectable&&o.gameStore.addLayer(e.name)}hasLayer(e){return this.layers.some(t=>t.name===e)}getLayer(e){e=void 0===e?o.gameStore.selectedLayer:e;for(const t of this.layers)if(t.name===e)return t}selectLayer(e,t=!0){let i=!1;for(const s of this.layers)s.selectable&&(i&&"fow"!==s.name?s.ctx.globalAlpha=.3:s.ctx.globalAlpha=1,e===s.name&&(o.gameStore.selectLayer({name:e,sync:t}),i=!0),s.clearSelection(),s.invalidate(!0))}getGridLayer(){return this.getLayer("grid")}hasSelection(){const e=this.getSelection();return void 0!==e&&e.length>0}getSelection(){const e=this.getLayer();if(void 0!==e)return e.selection}invalidate(){for(let e=this.layers.length-1;e>=0;e--)this.layers[e].invalidate(!0)}invalidateLight(){for(let e=this.layers.length-1;e>=0;e--)this.layers[e].isVisionLayer&&this.layers[e].invalidate(!0)}dropAsset(e){const t=this.getLayer();if(void 0===t||null===e||null===e.dataTransfer)return;const i=document.createElement("img");i.src=e.dataTransfer.getData("text/plain");const a=new n.Asset(i,new s.GlobalPoint(r.l2gx(e.clientX),r.l2gy(e.clientY)),r.l2gz(i.width),r.l2gz(i.height));if(a.src=new URL(i.src).pathname,o.gameStore.useGrid){const e=o.gameStore.gridSize;a.refPoint=new s.GlobalPoint(Math.round(a.refPoint.x/e)*e,Math.round(a.refPoint.y/e)*e),a.w=Math.max(Math.round(a.w/e)*e,e),a.h=Math.max(Math.round(a.h/e)*e,e)}t.addShape(a,!0)}}t.layerManager=new a,window.lm=t.layerManager},7018:function(e,t,i){"use strict";i.r(t);var s=i("ebb9"),n=i.n(s);for(var o in s)"default"!==o&&function(e){i.d(t,e,function(){return s[e]})}(o);t["default"]=n.a},7420:function(e,t,i){"use strict";i.r(t);var s=i("d320"),n=i("778b");for(var o in n)"default"!==o&&function(e){i.d(t,e,function(){return n[e]})}(o);i("c969");var r=i("2877"),a=Object(r["a"])(n["default"],s["a"],s["b"],!1,null,"73816298",null);a.options.__file="createtoken_modal.vue",t["default"]=a.exports},"76b3":function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0});class s{constructor(e,t){this.children=[],this.nPrimitives=e,this.bbox=t}}t.BoundingNode=s;class n extends s{constructor(e,t,i){super(t,i),this.firstPrimOffset=e}}t.LeafNode=n;class o extends s{constructor(e,t,i){super(0,t.bbox.union(i.bbox)),this.dimension=e,this.children.push(t),this.children.push(i)}}t.InteriorNode=o},"778b":function(e,t,i){"use strict";i.r(t);var s=i("5a81"),n=i.n(s);for(var o in s)"default"!==o&&function(e){i.d(t,e,function(){return s[e]})}(o);t["default"]=n.a},"77a6":function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0});const s=i("4a5b"),n=i("0bc6"),o=i("2b48"),r=i("af17"),a=i("8f0a"),l=i("6f92"),c=i("206a"),u=i("f10f"),d=i("2838");function h(e){if(e.target instanceof HTMLInputElement||e.target instanceof HTMLTextAreaElement);else if("Delete"===e.key||"Del"===e.key||"Backspace"===e.key){if(void 0===l.layerManager.getLayer)return void console.log("No active layer selected for delete operation");const e=l.layerManager.getLayer();for(let t=e.selection.length-1;t>=0;t--){const i=e.selection[t];s.getRef("tools").$refs.selectTool.selectionHelper.uuid!==i.uuid?(e.removeShape(i,!0,!1),r.EventBus.$emit("SelectionInfo.Shape.Set",null),r.EventBus.$emit("Initiative.Remove",i.uuid)):e.selection.splice(t,1)}}}function f(e){if(e.target instanceof HTMLInputElement||e.target instanceof HTMLTextAreaElement)65===e.keyCode&&e.ctrlKey&&e.target.select();else if(e.keyCode>=37&&e.keyCode<=40){const t=Math.round(u.gameStore.gridSize);let i=t*(e.keyCode%2),r=t*(e.keyCode%2?0:1);if(l.layerManager.hasSelection()){const t=l.layerManager.getSelection();i*=e.keyCode<=38?-1:1,r*=e.keyCode<=38?-1:1;let o=new a.Vector(i,r);if(!e.shiftKey||!u.gameStore.IS_DM)for(const e of t)s.getRef("tools").$refs.selectTool.selectionHelper.uuid!==e.uuid&&(o=d.calculateDelta(o,e));for(const e of t)s.getRef("tools").$refs.selectTool.selectionHelper.uuid!==e.uuid&&(e.refPoint=e.refPoint.add(o),n.socket.emit("Shape.Position.Update",{shape:e.asDict(),redraw:!0,temporary:!1}));u.gameStore.recalculateVision(),l.layerManager.getLayer().invalidate(!1)}else u.gameStore.increasePanX(i*(e.keyCode<=38?1:-1)),u.gameStore.increasePanY(r*(e.keyCode<=38?1:-1)),l.layerManager.invalidate(),o.sendClientOptions()}else if(68===e.keyCode){const e=l.layerManager.getLayer();e&&(e.clearSelection(),e.invalidate(!0))}else if("u"===e.key&&e.ctrlKey)e.preventDefault(),e.stopPropagation(),u.gameStore.toggleUI();else if("c"===e.key&&e.ctrlKey){const e=l.layerManager.getLayer();if(!e)return;if(!e.selection)return;const t=[];for(const i of e.selection)s.getRef("tools").$refs.selectTool.selectionHelper.uuid!==i.uuid&&t.push(i.asDict());u.gameStore.setClipboard(t)}else if("v"===e.key&&e.ctrlKey){const e=l.layerManager.getLayer();if(!e)return;if(!u.gameStore.clipboard)return;e.selection=[];for(const t of u.gameStore.clipboard){t.x+=10,t.y+=10,t.uuid=s.uuidv4();const i=t.trackers;t.trackers=[];for(const e of i){const i=Object.assign({},e,{uuid:s.uuidv4()});t.trackers.push(i)}const n=t.auras;t.auras=[];for(const e of n){const i=Object.assign({},e,{uuid:s.uuidv4()});t.auras.push(i)}const o=c.createShapeFromDict(t);void 0!==o&&(e.addShape(o,!0),e.selection.push(o))}1===e.selection.length?r.EventBus.$emit("SelectionInfo.Shape.Set",e.selection[0]):r.EventBus.$emit("SelectionInfo.Shape.Set",null),e.invalidate(!1)}}t.onKeyUp=h,t.onKeyDown=f},"78c7":function(e,t,i){"use strict";var s=i("9227"),n=i.n(s);n.a},7997:function(e,t,i){"use strict";var s=i("39a7"),n=i.n(s);n.a},"7aaa":function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0});const s=i("9ab4"),n=s.__importDefault(i("a026")),o=s.__importDefault(i("033f")),r=s.__importDefault(i("7420")),a=s.__importDefault(i("59d8")),l=s.__importDefault(i("bea6")),c=s.__importDefault(i("dec1")),u=s.__importDefault(i("4899")),d=s.__importDefault(i("c277")),h=s.__importDefault(i("9f58")),f=i("6f92"),p=i("9cb7"),g=i("f10f"),v=i("d5df"),m=i("92b1"),y=i("5a5c"),b=s.__importDefault(i("65d9"));let _=class extends n.default{constructor(){super(...arguments),this.currentTool="Select",this.tools=["Select","Pan","Draw","Ruler","Map","Filter","Vision"],this.dmTools=["Map"]}get IS_DM(){return g.gameStore.IS_DM}get currentToolComponent(){return`${this.currentTool.toLowerCase()}-tool`}get visibleTools(){return this.tools.filter(e=>!this.dmTools.includes(e)||this.IS_DM)}toolVisible(e){return"Filter"===e?Object.keys(g.gameStore.labels).length>0:"Vision"!==e||g.gameStore.ownedtokens.length>1}mousedown(e){if("CANVAS"!==e.target.tagName)return;let t=this.currentTool;if(1===e.button)t="Pan";else if(0!==e.button)return;this.$emit("mousedown",e,t)}mouseup(e){if("CANVAS"!==e.target.tagName)return;let t=this.currentTool;if(1===e.button)t="Pan";else if(0!==e.button)return;this.$emit("mouseup",e,t)}mousemove(e){if("CANVAS"!==e.target.tagName)return;let t=this.currentTool;if(0!==(4&e.buttons))t="Pan";else if((1&e.button)>1)return;this.$emit("mousemove",e,t);let i=!1;for(const s of g.gameStore.annotations)if(f.layerManager.UUIDMap.has(s)&&f.layerManager.hasLayer("draw")){const t=f.layerManager.UUIDMap.get(s);t.contains(m.l2g(y.getMouse(e)))&&(i=!0,p.gameManager.annotationManager.setActiveText(t.annotation))}!i&&p.gameManager.annotationManager.shown&&p.gameManager.annotationManager.setActiveText("")}mouseleave(e){0!==(1&e.buttons)&&this.$emit("mouseup",e,this.currentTool)}contextmenu(e){"CANVAS"===e.target.tagName&&2===e.button&&"CANVAS"===e.target.tagName&&this.$emit("contextmenu",e,this.currentTool)}};_=s.__decorate([b.default({components:{"select-tool":d.default,"pan-tool":u.default,"draw-tool":a.default,"ruler-tool":v.RulerTool,"map-tool":c.default,"filter-tool":l.default,"vision-tool":h.default,"shape-menu":o.default,"createtoken-dialog":r.default},watch:{currentTool(e,t){this.$emit("tools-select-change",e,t)}}})],_),t.default=_},"7ba5":function(e,t,i){"use strict";i.r(t);var s=i("fbdd"),n=i.n(s);for(var o in s)"default"!==o&&function(e){i.d(t,e,function(){return s[e]})}(o);t["default"]=n.a},"7e15":function(e,t,i){"use strict";i.r(t);var s=i("52a8"),n=i.n(s);for(var o in s)"default"!==o&&function(e){i.d(t,e,function(){return s[e]})}(o);t["default"]=n.a},"7eb7":function(e,t,i){"use strict";var s=i("cd76"),n=i.n(s);n.a},"7f1e":function(e,t,i){"use strict";var s=i("fe11"),n=i.n(s);n.a},"844e":function(e,t,i){"use strict";var s=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{attrs:{id:"menuContainer"}},[i("div",{ref:"rm",style:{left:e.visible.settings?"200px":"0",top:e.visible.locations?"100px":"0"},attrs:{id:"radialmenu"}},[i("div",{staticClass:"rm-wrapper"},[i("div",{staticClass:"rm-toggler"},[i("ul",{staticClass:"rm-list",class:{"rm-list-dm":e.IS_DM}},[e.IS_DM?i("li",{staticClass:"rm-item",attrs:{id:"rm-locations"},on:{click:function(t){e.visible.locations=!e.visible.locations}}},[e._m(0)]):e._e(),i("li",{staticClass:"rm-item",attrs:{id:"rm-settings"},on:{click:function(t){e.visible.settings=!e.visible.settings}}},[e._m(1)])])]),e._m(2)])]),i("transition",{attrs:{name:"settings"},on:{enter:function(t){e.$refs.rm.style.transition="left 500ms"}}},[e.visible.settings?i("div",{ref:"settings",attrs:{id:"menu"},on:{click:e.settingsClick}},[i("div",{staticStyle:{width:"200px",height:"90%","overflow-y":"auto","overflow-x":"hidden"}},[e.IS_DM?[i("button",{staticClass:"menu-accordion"},[e._v("Assets")]),i("div",{staticClass:"menu-accordion-panel"},[i("a",{staticClass:"actionButton",attrs:{href:"/assets",target:"blank",title:"Open asset manager"}},[i("i",{staticClass:"fas fa-external-link-alt"})]),i("div",{staticClass:"directory",attrs:{id:"menu-tokens"}},[i("asset-node",{attrs:{asset:e.assets}}),e.assets?e._e():i("div",[e._v("No assets")])],1)]),i("button",{staticClass:"menu-accordion"},[e._v("Notes")]),i("div",{staticClass:"menu-accordion-panel"},[i("div",{staticClass:"menu-accordion-subpanel",attrs:{id:"menu-notes"}},[i("a",{staticClass:"actionButton",on:{click:e.createNote}},[i("i",{staticClass:"far fa-plus-square"})]),e._l(e.notes,function(t){return i("div",{key:t.uuid,staticStyle:{cursor:"pointer"},on:{click:function(i){e.openNote(t)}}},[e._v(e._s(t.title||"[?]"))])}),e.notes.length?e._e():i("div",[e._v("No notes")])],2)]),i("button",{staticClass:"menu-accordion"},[e._v("DM Options")]),i("div",{staticClass:"menu-accordion-panel"},[i("div",{staticClass:"menu-accordion-subpanel"},[i("label",{attrs:{for:"fakePlayerInput"}},[e._v("Fake player:")]),i("input",{directives:[{name:"model",rawName:"v-model",value:e.fakePlayer,expression:"fakePlayer"}],attrs:{id:"fakePlayerInput",type:"checkbox",checked:"checked"},domProps:{checked:Array.isArray(e.fakePlayer)?e._i(e.fakePlayer,null)>-1:e.fakePlayer},on:{change:function(t){var i=e.fakePlayer,s=t.target,n=!!s.checked;if(Array.isArray(i)){var o=null,r=e._i(i,o);s.checked?r<0&&(e.fakePlayer=i.concat([o])):r>-1&&(e.fakePlayer=i.slice(0,r).concat(i.slice(r+1)))}else e.fakePlayer=n}}}),i("label",{attrs:{for:"useGridInput"}},[e._v("Use grid:")]),i("input",{directives:[{name:"model",rawName:"v-model",value:e.useGrid,expression:"useGrid"}],attrs:{id:"useGridInput",type:"checkbox",checked:"checked"},domProps:{checked:Array.isArray(e.useGrid)?e._i(e.useGrid,null)>-1:e.useGrid},on:{change:function(t){var i=e.useGrid,s=t.target,n=!!s.checked;if(Array.isArray(i)){var o=null,r=e._i(i,o);s.checked?r<0&&(e.useGrid=i.concat([o])):r>-1&&(e.useGrid=i.slice(0,r).concat(i.slice(r+1)))}else e.useGrid=n}}}),i("label",{attrs:{for:"useFOWInput"}},[e._v("Fill entire canvas with FOW:")]),i("input",{directives:[{name:"model",rawName:"v-model",value:e.fullFOW,expression:"fullFOW"}],attrs:{id:"useFOWInput",type:"checkbox"},domProps:{checked:Array.isArray(e.fullFOW)?e._i(e.fullFOW,null)>-1:e.fullFOW},on:{change:function(t){var i=e.fullFOW,s=t.target,n=!!s.checked;if(Array.isArray(i)){var o=null,r=e._i(i,o);s.checked?r<0&&(e.fullFOW=i.concat([o])):r>-1&&(e.fullFOW=i.slice(0,r).concat(i.slice(r+1)))}else e.fullFOW=n}}}),i("label",{attrs:{for:"fowOpacity"}},[e._v("FOW opacity:")]),i("input",{directives:[{name:"model",rawName:"v-model.number",value:e.fowOpacity,expression:"fowOpacity",modifiers:{number:!0}}],attrs:{id:"fowOpacity",type:"number",min:"0",max:"1",step:"0.1"},domProps:{value:e.fowOpacity},on:{input:function(t){t.target.composing||(e.fowOpacity=e._n(t.target.value))},blur:function(t){e.$forceUpdate()}}}),i("label",{attrs:{for:"fowLOS"}},[e._v("Only show lights in LoS:")]),i("input",{directives:[{name:"model",rawName:"v-model",value:e.fowLOS,expression:"fowLOS"}],attrs:{id:"fowLOS",type:"checkbox"},domProps:{checked:Array.isArray(e.fowLOS)?e._i(e.fowLOS,null)>-1:e.fowLOS},on:{change:function(t){var i=e.fowLOS,s=t.target,n=!!s.checked;if(Array.isArray(i)){var o=null,r=e._i(i,o);s.checked?r<0&&(e.fowLOS=i.concat([o])):r>-1&&(e.fowLOS=i.slice(0,r).concat(i.slice(r+1)))}else e.fowLOS=n}}}),i("label",{attrs:{for:"unitSizeInput"}},[e._v("Unit Size (in ft.):")]),i("input",{directives:[{name:"model",rawName:"v-model.number",value:e.unitSize,expression:"unitSize",modifiers:{number:!0}}],attrs:{id:"unitSizeInput",type:"number"},domProps:{value:e.unitSize},on:{input:function(t){t.target.composing||(e.unitSize=e._n(t.target.value))},blur:function(t){e.$forceUpdate()}}}),i("label",{attrs:{for:"gridSizeInput"}},[e._v("Grid Size (in pixels):")]),i("input",{directives:[{name:"model",rawName:"v-model.number",value:e.gridSize,expression:"gridSize",modifiers:{number:!0}}],attrs:{id:"gridSizeInput",type:"number",min:"0"},domProps:{value:e.gridSize},on:{input:function(t){t.target.composing||(e.gridSize=e._n(t.target.value))},blur:function(t){e.$forceUpdate()}}}),i("label",{attrs:{for:"visionMode"}},[e._v("Vision Mode:")]),i("select",{attrs:{id:"visionMode"},on:{change:e.changeVisionMode}},[i("option",{domProps:{selected:"bvh"===e.$store.state.game.visionMode}},[e._v("BVH")]),i("option",{domProps:{selected:"triangle"===e.$store.state.game.visionMode}},[e._v("Triangle")])]),i("label",{attrs:{for:"vmininp"}},[e._v("Minimal full vision (ft):")]),i("input",{directives:[{name:"model",rawName:"v-model.lazy.number",value:e.visionRangeMin,expression:"visionRangeMin",modifiers:{lazy:!0,number:!0}}],attrs:{id:"vmininp",type:"number",min:"0"},domProps:{value:e.visionRangeMin},on:{change:function(t){e.visionRangeMin=e._n(t.target.value)},blur:function(t){e.$forceUpdate()}}}),i("label",{attrs:{for:"vmaxinp"}},[e._v("Maximal vision (ft):")]),i("input",{directives:[{name:"model",rawName:"v-model.lazy.number",value:e.visionRangeMax,expression:"visionRangeMax",modifiers:{lazy:!0,number:!0}}],attrs:{id:"vmaxinp",type:"number",min:"0"},domProps:{value:e.visionRangeMax},on:{change:function(t){e.visionRangeMax=e._n(t.target.value)},blur:function(t){e.$forceUpdate()}}}),i("label",{attrs:{for:"invitation"}},[e._v("Invitation Code:")]),i("input",{attrs:{id:"invitation",type:"text",readonly:"readonly"},domProps:{value:e.invitationCode}})])])]:e._e(),i("button",{staticClass:"menu-accordion"},[e._v("Client Options")]),i("div",{staticClass:"menu-accordion-panel"},[i("div",{staticClass:"menu-accordion-subpanel"},[i("label",{attrs:{for:"gridColour"}},[e._v("Grid Colour:")]),i("color-picker",{attrs:{id:"gridColour",color:e.gridColour},on:{"update:color":function(t){e.gridColour=t}}}),i("label",{attrs:{for:"fowColour"}},[e._v("FOW Colour:")]),i("color-picker",{attrs:{id:"fowColour",color:e.fowColour},on:{"update:color":function(t){e.fowColour=t}}}),i("label",{attrs:{for:"rulerColour"}},[e._v("Ruler Colour:")]),i("color-picker",{attrs:{id:"rulerColour",color:e.rulerColour},on:{"update:color":function(t){e.rulerColour=t}}})],1)])],2),i("router-link",{staticClass:"menu-accordion",staticStyle:{"text-decoration":"none",display:"inline-block",position:"absolute",bottom:"0"},attrs:{to:"/dashboard"}},[e._v("Exit")])],1):e._e()]),i("transition",{attrs:{name:"locations"},on:{enter:function(t){e.$refs.rm.style.transition="top 500ms"}}},[e.IS_DM&&e.visible.locations?i("div",{attrs:{id:"locations-menu"}},[i("div",[e._l(e.locations,function(t){return i("div",{key:t,on:{click:function(i){e.changeLocation(t)}}},[e._v(e._s(t))])}),i("div",{on:{click:e.createLocation}},[i("i",{staticClass:"fas fa-plus"})])],2)]):e._e()]),i("img",{attrs:{id:"dragImage"}})],1)},n=[function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("a",{attrs:{href:"#"}},[i("i",{staticClass:"far fa-compass"})])},function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("a",{attrs:{href:"#"}},[i("i",{staticClass:"fas fa-cog"})])},function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("span",{staticClass:"rm-topper"},[i("i",{staticClass:"icon-share-alt"})])}];i.d(t,"a",function(){return s}),i.d(t,"b",function(){return n})},"851c":function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0});const s=i("9ab4"),n=s.__importDefault(i("a026")),o=s.__importDefault(i("65d9")),r=s.__importDefault(i("d65f"));let a=class extends n.default{constructor(){super(...arguments),this.visible=!1,this.question="",this.answer="",this.title="",this.resolve=(e=>{}),this.reject=(()=>{})}submit(){this.resolve(this.answer),this.close()}close(){this.reject(),this.visible=!1,this.question="",this.answer="",this.title=""}prompt(e,t){return this.question=e,this.title=t,this.visible=!0,this.$nextTick(()=>{this.$refs.answer.focus()}),new Promise((e,t)=>{this.resolve=e,this.reject=t})}};a=s.__decorate([o.default({components:{Modal:r.default}})],a),t.default=a},8790:function(e,t,i){"use strict";var s=i("a912"),n=i.n(s);n.a},"88af":function(e,t,i){"use strict";var s=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",[e._v(e._s(e.message))])},n=[];i.d(t,"a",function(){return s}),i.d(t,"b",function(){return n})},"8cd4":function(e,t,i){"use strict";i.r(t);var s=i("9587"),n=i.n(s);for(var o in s)"default"!==o&&function(e){i.d(t,e,function(){return s[e]})}(o);t["default"]=n.a},"8db6":function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0});const s=i("8f0a"),n=i("92b1");class o{constructor(e,t,i){this.w=t,this.h=i,this.topLeft=e,this.topRight=new s.GlobalPoint(e.x+t,e.y),this.botRight=new s.GlobalPoint(e.x+t,e.y+i),this.botLeft=new s.GlobalPoint(e.x,e.y+i)}contains(e){return this.topLeft.x<=e.x&&this.topRight.x>=e.x&&this.topLeft.y<=e.y&&this.botLeft.y>=e.y}get points(){return 0===this.w||0===this.h?[[this.topLeft.x,this.topLeft.y]]:[[this.topLeft.x,this.topLeft.y],[this.botLeft.x,this.botLeft.y],[this.botRight.x,this.botRight.y],[this.topRight.x,this.topRight.y]]}offset(e){return new o(this.topLeft.add(e),this.w,this.h)}union(e){const t=Math.min(this.topLeft.x,e.topLeft.x),i=Math.max(this.topRight.x,e.topRight.x),n=Math.min(this.topLeft.y,e.topLeft.y),r=Math.max(this.botLeft.y,e.botLeft.y);return new o(new s.GlobalPoint(t,n),i-t,r-n)}getDiagCorner(e){return e?this.botRight:this.topLeft}intersectsWith(e){return!(e.topLeft.x>this.topRight.x||e.topRight.xthis.botLeft.y||e.botLeft.y=this.topRight.x||e.topRight.x<=this.topLeft.x||e.topLeft.y>=this.botLeft.y||e.botLeft.y<=this.topLeft.y)}intersectP(e,t,i){let s=t.x*(this.getDiagCorner(i[0]).x-e.origin.x),n=t.x*(this.getDiagCorner(!i[0]).x-e.origin.x);const o=t.y*(this.getDiagCorner(i[1]).y-e.origin.y),r=t.y*(this.getDiagCorner(!i[1]).y-e.origin.y);return s>r||o>n?{hit:!1,min:s,max:n}:(o>s&&(s=o),r0,min:s,max:n})}center(){return this.topLeft.add(new s.Vector(this.w/2,this.h/2))}getMaxExtent(){return this.w>this.h?0:1}visibleInCanvas(e){const t=!(n.g2lx(this.topLeft.x)>e.width||n.g2ly(this.topLeft.y)>e.height||n.g2lx(this.topRight.x)<0||n.g2ly(this.botRight.y)<0);return!!t}}t.BoundingRect=o},"8e60":function(e,t,i){"use strict";var s=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{attrs:{id:"formcontainer"}},[e.owned||e.joined?i("form",[i("fieldset",[i("legend",{staticClass:"legend"},[e._v("Your sessions")]),i("div",{staticClass:"input"},[e._l(e.owned,function(t,s){return i("router-link",{key:"o-"+s,attrs:{to:"/game/"+t[1]+"/"+t[0]}},[e._v(e._s(t[0]))])}),e._l(e.joined,function(t,s){return i("router-link",{key:"j-"+s,attrs:{to:"/game/"+t[1]+"/"+t[0]}},[e._v(e._s(t[1])+"/"+e._s(t[0]))])})],2),0===e.owned.length?i("div",{staticClass:"input"},[e._v("No active sessions")]):e._e()])]):e._e(),e._m(0),i("form",{on:{submit:function(t){return t.preventDefault(),e.createRoom(t)}}},[i("fieldset",[e.owned||e.joined?i("div",{staticClass:"input"},[e._v("Create a new session")]):i("legend",{staticClass:"legend"},[e._v("Create a session")]),i("div",{staticClass:"input"},[i("input",{directives:[{name:"model",rawName:"v-model",value:e.newSessionName,expression:"newSessionName"}],attrs:{type:"text",name:"room_name",placeholder:"Session Name"},domProps:{value:e.newSessionName},on:{input:function(t){t.target.composing||(e.newSessionName=t.target.value)}}}),e._m(1)]),e._m(2)])]),i("div",{attrs:{id:"account-options"}},[i("form",{on:{submit:function(e){e.preventDefault()}}},[i("router-link",{staticClass:"submit",attrs:{tag:"button",title:"Account Settings",to:"/account"}},[i("i",{staticClass:"fas fa-cog"})])],1),i("form",{on:{submit:function(e){e.preventDefault()}}},[i("router-link",{staticClass:"submit",attrs:{tag:"button",title:"Logout",to:"/auth/logout"}},[i("i",{staticClass:"fas fa-sign-out-alt"})])],1)])])},n=[function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("h4",[i("span",[e._v("OR")])])},function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("span",[i("i",{staticClass:"fab fa-d-and-d"})])},function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("button",{staticClass:"submit",attrs:{type:"submit",title:"Create"}},[i("i",{staticClass:"fas fa-arrow-right"})])}];i.d(t,"a",function(){return s}),i.d(t,"b",function(){return n})},"8f0a":function(e,t,i){"use strict";function s(e,t){const i=e.x-t.x,s=e.y-t.y;return Math.sqrt(i*i+s*s)}Object.defineProperty(t,"__esModule",{value:!0}),t.getPointDistance=s;class n{constructor(e,t){this.x=e,this.y=t}static fromArray(e){return new n(e[0],e[1])}add(e){return new n(this.x+e.x,this.y+e.y)}subtract(e){return new a(this.x-e.x,this.y-e.y)}clone(){return new n(this.x,this.y)}get(e){return 0===e?this.x:this.y}asArray(){return[this.x,this.y]}}t.Point=n;class o extends n{add(e){return super.add(e)}subtract(e){return super.subtract(e)}clone(){return super.clone()}static fromArray(e){return new o(e[0],e[1])}}t.GlobalPoint=o;class r extends n{add(e){return super.add(e)}subtract(e){return super.subtract(e)}clone(){return super.clone()}}t.LocalPoint=r;class a{constructor(e,t){this.x=e,this.y=t}dot(e){return this.x*e.x+this.y*e.y}inverse(){return new a(0===this.x?0:1/this.x,0===this.y?0:1/this.y)}length(){return Math.sqrt(Math.pow(this.x,2)+Math.pow(this.y,2))}normalize(){const e=this.length();return new a(this.x/e,this.y/e)}reverse(){return new a(-this.x,-this.y)}multiply(e){return new a(this.x*e,this.y*e)}angle(){return 180*Math.atan2(this.y,this.x)/Math.PI}}t.Vector=a;class l{constructor(e,t,i){this.direction=t,this.origin=e,void 0===i&&(i=1/0),this.tMax=i}static fromPoints(e,t){const i=new a(t.x-e.x,t.y-e.y);let s;return s=Math.abs(i.x)>.01?(t.x-e.x)/i.x:(t.y-e.y)/i.y,new l(e,i,s)}get(e){return new n(this.origin.x+e*this.direction.x,this.origin.y+e*this.direction.y)}getDistance(e,t){return Math.sqrt(Math.pow(t-e,2)*(Math.pow(this.direction.x,2)+Math.pow(this.direction.y,2)))}getT(e,t){return e+Math.sqrt(Math.pow(t,2)/(Math.pow(this.direction.x,2)+Math.pow(this.direction.y,2)))}}t.Ray=l},"8f54":function(e,t,i){"use strict";var s=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("ul",[e._l(e.folders,function(t){return i("li",{key:t,staticClass:"folder",on:{click:function(t){return t.stopPropagation(),e.toggle(t)}}},[e._v("\n "+e._s(t)+"\n "),i("asset-node",{attrs:{asset:e.asset[t]}})],1)}),e._l(e.files,function(t){return i("li",{key:t.name,staticClass:"file draggable token",attrs:{draggable:"true"},on:{mouseover:function(i){e.showImage=t.hash},mouseout:function(t){e.showImage=null},dragstart:function(i){e.dragStart(i,"/static/assets/"+t.hash)}}},[e._v("\n "+e._s(t.name)+"\n "),e.showImage==t.hash?i("div",{staticClass:"preview"},[i("img",{staticClass:"asset-preview-image",attrs:{src:"/static/assets/"+t.hash}})]):e._e()])})],2)},n=[];i.d(t,"a",function(){return s}),i.d(t,"b",function(){return n})},"919a":function(e,t,i){},"91df":function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0});const s=i("9ab4"),n=s.__importDefault(i("a026")),o=s.__importDefault(i("65d9")),r=s.__importDefault(i("6f79"));i("fe80");const a=i("2ef0"),l=s.__importDefault(i("a535")),c=s.__importDefault(i("cec2")),u=s.__importDefault(i("f5fe")),d=s.__importDefault(i("f74c")),h=s.__importDefault(i("19f9")),f=s.__importDefault(i("f551")),p=s.__importDefault(i("f086")),g=s.__importDefault(i("6100")),v=i("0bc6"),m=i("77a6"),y=i("bb17"),b=i("6f92"),_=i("f10f"),w=i("92b1"),S=i("8f0a");let x=class extends n.default{constructor(){super(...arguments),this.ready={manager:!1,tools:!1}}get showUI(){return _.gameStore.showUI}get IS_DM(){return _.gameStore.IS_DM}get layers(){return _.gameStore.layers}get selectedLayer(){return _.gameStore.selectedLayer}get zoomDisplay(){return _.gameStore.zoomDisplay}set zoomDisplay(e){_.gameStore.updateZoom({newZoomDisplay:e,zoomLocation:w.l2g(new S.LocalPoint(window.innerWidth/2,window.innerHeight/2))})}mounted(){window.addEventListener("resize",this.resizeWindow),window.addEventListener("keyup",m.onKeyUp),window.addEventListener("keydown",m.onKeyDown),this.ready.manager=!0}destroyed(){window.removeEventListener("resize",this.resizeWindow),window.removeEventListener("keyup",m.onKeyUp),window.removeEventListener("keydown",m.onKeyDown),this.ready.manager=!1}zoom(e){a.throttle(y.scrollZoom)(e)}resizeWindow(){b.layerManager.setWidth(window.innerWidth),b.layerManager.setHeight(window.innerHeight),b.layerManager.invalidate()}mousedown(e){this.$refs.tools.mousedown(e)}mouseup(e){this.$refs.tools.mouseup(e)}mousemove(e){this.$refs.tools.mousemove(e)}mouseleave(e){this.$refs.tools.mouseleave(e)}contextmenu(e){this.$refs.tools.contextmenu(e)}selectLayer(e){b.layerManager.selectLayer(e)}drop(e){if(null!==e&&null!==e.dataTransfer)if(e.dataTransfer.files.length>0)this.$refs.confirm.open("Uploading files should be done through the asset manager.","Ok","").then(()=>{},()=>{});else{if(""===e.dataTransfer.getData("text/plain"))return;b.layerManager.dropAsset(e)}}};x=s.__decorate([o.default({components:{"tool-bar":g.default,"selection-info":p.default,"prompt-dialog":c.default,"confirm-dialog":l.default,"menu-bar":h.default,"initiative-dialog":u.default,"zoom-slider":r.default,"note-dialog":f.default,"label-dialog":d.default},beforeRouteEnter(e,t,i){v.createConnection(e),i()},beforeRouteLeave(e,t,i){v.socket.disconnect(),i()}})],x),t.default=x},9227:function(e,t,i){},"92b1":function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0});const s=i("8f0a"),n=i("f10f");function o(e){const t=n.gameStore.zoomFactor,i=n.gameStore.panX,o=n.gameStore.panY;return new s.LocalPoint((e.x+i)*t,(e.y+o)*t)}function r(e){return o(new s.GlobalPoint(e,0)).x}function a(e){return o(new s.GlobalPoint(0,e)).y}function l(e){return e*n.gameStore.zoomFactor}function c(e){return e/n.gameStore.unitSize*n.gameStore.gridSize}function u(e){return l(c(e))}function d(e){const t=n.gameStore.zoomFactor,i=n.gameStore.panX,o=n.gameStore.panY;return e instanceof s.LocalPoint?new s.GlobalPoint(e.x/t-i,e.y/t-o):new s.Ray(d(e.origin),e.direction.multiply(1/t),e.tMax)}function h(e){return d(new s.LocalPoint(e,0)).x}function f(e){return d(new s.LocalPoint(0,e)).y}function p(e){return e/n.gameStore.zoomFactor}function g(e){return p(c(e))}t.g2l=o,t.g2lx=r,t.g2ly=a,t.g2lz=l,t.getUnitDistance=c,t.g2lr=u,t.l2g=d,t.l2gx=h,t.l2gy=f,t.l2gz=p,t.l2gr=g,window.g2lx=r,window.g2ly=a},9587:function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0});const s=i("9ab4"),n=s.__importDefault(i("a026")),o=s.__importDefault(i("65d9")),r=i("2f62"),a=s.__importDefault(i("3b36")),l=s.__importDefault(i("0ddd")),c=i("4a5b"),u=i("0bc6"),d=i("6f92"),h=i("f10f");let f=class extends n.default{constructor(){super(...arguments),this.visible={settings:!1,locations:!1}}get IS_DM(){return h.gameStore.IS_DM||h.gameStore.FAKE_PLAYER}get fakePlayer(){return h.gameStore.FAKE_PLAYER}set fakePlayer(e){h.gameStore.setFakePlayer(e)}get useGrid(){return h.gameStore.useGrid}set useGrid(e){h.gameStore.setUseGrid({useGrid:e,sync:!0})}get fullFOW(){return h.gameStore.fullFOW}set fullFOW(e){h.gameStore.setFullFOW({fullFOW:e,sync:!0})}get fowOpacity(){return h.gameStore.fowOpacity}set fowOpacity(e){"number"===typeof e&&h.gameStore.setFOWOpacity({fowOpacity:e,sync:!0})}get fowLOS(){return h.gameStore.fowLOS}set fowLOS(e){h.gameStore.setLineOfSight({fowLOS:e,sync:!0})}get unitSize(){return h.gameStore.unitSize}set unitSize(e){"number"===typeof e&&h.gameStore.setUnitSize({unitSize:e,sync:!0})}get gridSize(){return h.gameStore.gridSize}set gridSize(e){"number"===typeof e&&h.gameStore.setGridSize({gridSize:e,sync:!0})}get gridColour(){return h.gameStore.gridColour}set gridColour(e){h.gameStore.setGridColour({colour:e,sync:!0})}get fowColour(){return h.gameStore.fowColour}set fowColour(e){h.gameStore.setFOWColour({colour:e,sync:!0})}get rulerColour(){return h.gameStore.rulerColour}set rulerColour(e){h.gameStore.setRulerColour({colour:e,sync:!0})}get visionRangeMin(){return h.gameStore.visionRangeMin}set visionRangeMin(e){"number"===typeof e&&h.gameStore.setVisionRangeMin({value:e,sync:!0})}get visionRangeMax(){return h.gameStore.visionRangeMax}set visionRangeMax(e){"number"===typeof e&&h.gameStore.setVisionRangeMax({value:e,sync:!0})}settingsClick(e){if(e.target.classList.contains("menu-accordion")){e.target.classList.toggle("menu-accordion-active");const t=e.target.nextElementSibling;null!==t&&(t.style.display=""===t.style.display?"block":"")}}changeLocation(e){u.socket.emit("Location.Change",e)}createLocation(){c.getRef("prompt").prompt("New location name:","Create new location").then(e=>{u.socket.emit("Location.New",e)},()=>{})}createNote(){const e={title:"New note",text:"",uuid:c.uuidv4()};h.gameStore.newNote({note:e,sync:!0}),this.openNote(e)}openNote(e){c.getRef("note").open(e)}changeVisionMode(e){const t=e.target.value.toLowerCase();"bvh"!==t&&"triangle"!==t||(h.gameStore.setVisionMode({mode:t,sync:!0}),h.gameStore.recalculateVision(),h.gameStore.recalculateMovement(),d.layerManager.invalidate())}};f=s.__decorate([o.default({components:{"color-picker":a.default,"asset-node":l.default},computed:Object.assign({},r.mapState("game",["invitationCode","locations","assets","notes"]))})],f),t.default=f},"979e":function(e,t,i){"use strict";i.r(t);var s=i("0634"),n=i.n(s);for(var o in s)"default"!==o&&function(e){i.d(t,e,function(){return s[e]})}(o);t["default"]=n.a},9845:function(e,t,i){"use strict";var s=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("ContextMenu",{attrs:{visible:e.visible,left:e.x+"px",top:e.y+"px"},on:{close:e.close}},[e.IS_DM?i("li",{on:{click:e.bringPlayers}},[e._v("Bring players")]):e._e(),i("li",{on:{click:e.createToken}},[e._v("Create basic token")]),i("li",{on:{click:e.showInitiative}},[e._v("Show initiative")])])},n=[];i.d(t,"a",function(){return s}),i.d(t,"b",function(){return n})},"98ef":function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0});const s=i("4aee");let n;var o,r;function a(){return[t.INFINITE,t.INFINITE]}t.INFINITE=-Infinity,function(e){e[e["NEGATIVE"]=-1]="NEGATIVE",e[e["ZERO"]=0]="ZERO",e[e["POSITIVE"]=1]="POSITIVE",e[e["RIGHT_TURN"]=-1]="RIGHT_TURN",e[e["LEFT_TURN"]=1]="LEFT_TURN",e[e["SMALLER"]=-1]="SMALLER",e[e["EQUAL"]=0]="EQUAL",e[e["LARGER"]=1]="LARGER",e[e["CLOCKWISE"]=-1]="CLOCKWISE",e[e["COUNTERCLOCKWISE"]=1]="COUNTERCLOCKWISE",e[e["COLLINEAR"]=0]="COLLINEAR",e[e["COPLANAR"]=0]="COPLANAR",e[e["DEGENERATE"]=0]="DEGENERATE",e[e["ON_NEGATIVE_SIDE"]=-1]="ON_NEGATIVE_SIDE",e[e["ON_ORIENTED_BOUNDARY"]=0]="ON_ORIENTED_BOUNDARY",e[e["ON_POSITIVE_SIDE"]=1]="ON_POSITIVE_SIDE"}(o=t.Sign||(t.Sign={})),function(e){e[e["UNDEFINED"]=-1]="UNDEFINED",e[e["VERTEX_VERTEX"]=0]="VERTEX_VERTEX",e[e["VERTEX_EDGE"]=1]="VERTEX_EDGE",e[e["EDGE_VERTEX"]=2]="EDGE_VERTEX",e[e["EDGE_EDGE"]=3]="EDGE_EDGE"}(r||(r={}));class l{constructor(...e){this.vertices=[],this.neighbours=[null,null,null],this.constraints=[!1,!1,!1],this.uid=l._counter++,this.vertices=e}from(e){return this.vertices=e.vertices.slice(0,e.vertices.length),this.neighbours=e.neighbours.slice(0,e.neighbours.length),this.constraints=e.constraints.slice(0,e.constraints.length),this}get dimension(){return this.vertices.length-1}addVertex(e){void 0===e&&console.log("UNDEFINED HIERE"),this.vertices.push(e),e.triangle=this}isConstrained(e){return this.constraints[e]}reorient(){this.vertices=[this.vertices[1],this.vertices[0],this.vertices[2]].slice(0,this.vertices.length),this.neighbours=[this.neighbours[1],this.neighbours[0],this.neighbours[2]],this.constraints=[this.constraints[1],this.constraints[0],this.constraints[2]]}indexV(e){return this.vertices.indexOf(e)}indexT(e){return this.neighbours.indexOf(e)}isInfinite(e){return void 0===e?this.vertices.includes(n):this.vertices[s.ccw(e)].infinite||this.vertices[s.cw(e)].infinite}contains(e){const t=-this.vertices[1].point[1]*this.vertices[2].point[0]+this.vertices[0].point[1]*(-this.vertices[1].point[0]+this.vertices[2].point[0])+this.vertices[0].point[0]*(this.vertices[1].point[1]-this.vertices[2].point[1])+this.vertices[1].point[0]*this.vertices[2].point[1],i=t<0?-1:1,s=(this.vertices[0].point[1]*this.vertices[2].point[0]-this.vertices[0].point[0]*this.vertices[2].point[1]+(this.vertices[2].point[1]-this.vertices[0].point[1])*e[0]+(this.vertices[0].point[0]-this.vertices[2].point[0])*e[1])*i;if(s<0)return!1;const n=(this.vertices[0].point[0]*this.vertices[1].point[1]-this.vertices[0].point[1]*this.vertices[1].point[0]+(this.vertices[0].point[1]-this.vertices[1].point[1])*e[0]+(this.vertices[1].point[0]-this.vertices[0].point[0])*e[1])*i;return n>0&&s+nt!==e)}setAdjacency(e,t,i,s){e.neighbours[t]=i,i.neighbours[s]=e}get finiteVertex(){return this.vertices[1]}get infiniteVertex(){const e=new c(a());return e.infinite=!0,e}get finiteEdge(){if(this.dimension<1)throw new Error("aspo");const e=new d(this);while(e.valid)e.next();return e.collect()}insertDimUp(e=new c,t=!0){const i=this.createVertex();let s,n;switch(this.dimension++,this.dimension){case 0:s=this.triangles[0],n=new l(i),this.triangles.push(n),this.setAdjacency(s,0,n,0),i.triangle=n;break;case 1:case 2:{const o=[],r=this.triangles.slice(0,this.triangles.length);for(const t of r){const s=(new l).from(t);this.triangles.push(s),t.vertices[this.dimension]=i,s.vertices[this.dimension]=e,this.setAdjacency(t,this.dimension,s,this.dimension),t.vertices.includes(e)&&o.push(s)}for(const e of r){const t=e.neighbours[this.dimension];for(let i=0;ie.center.center().get(r)0){if(i=!0,s=e.tMax=d.min,n=d.max,0===o||t)break;r=a[--o]}else c[u.dimension]?(a[o++]=r+1,r=u.secondChildOffset):(a[o++]=u.secondChildOffset,r++);else{if(0===o)break;r=a[--o]}}return{hit:i,intersect:e.get(s),tMin:s,tMax:n}}compact(){this.offset=0,null!==this.root&&this.flatten(this.root)}flatten(e){const t=this.offset,i=this.offset++;if(0===e.nPrimitives){this.flatten(e.children[0]);const i=this.flatten(e.children[1]);this.nodes[t]={bbox:e.bbox,dimension:e.dimension,nPrimitives:0,secondChildOffset:i}}else this.nodes[t]={bbox:e.bbox,primitivesOffset:e.firstPrimOffset,nPrimitives:e.nPrimitives};return i}createLeaf(e,t,i,s){const n=this.orderedPrims.length;for(let o=e;o1?i("li",[e._v("Layer\n "),i("ul",e._l(e.getLayers(),function(t){return i("li",{key:t.name,style:[e.getActiveLayer().name===t.name?{"background-color":"#82c8a0"}:{}],on:{click:function(i){e.setLayer(t.name)}}},[e._v(e._s(t.name))])}))]):e._e(),i("li",{on:{click:e.moveToBack}},[e._v("Move to back")]),i("li",{on:{click:e.moveToFront}},[e._v("Move to front")]),i("li",{on:{click:e.addInitiative}},[e._v(e._s(e.getInitiativeWord())+" initiative")]),i("li",{on:{click:e.openEditDialog}},[e._v("Show properties")])]):e._e()},n=[];i.d(t,"a",function(){return s}),i.d(t,"b",function(){return n})},a260:function(e,t,i){},a37b:function(e,t,i){},a450:function(e,t,i){},a474:function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0});const s=i("9ab4"),n=s.__importDefault(i("bc3a")),o=s.__importDefault(i("a026")),r=s.__importDefault(i("65d9")),a=i("cc67");r.default.registerHooks(["beforeRouteEnter"]);let l=class extends o.default{constructor(){super(...arguments),this.owned=[],this.joined=[],this.error="",this.newSessionName=""}beforeRouteEnter(e,t,i){n.default.get("/api/rooms").then(e=>{i(t=>{t.owned=e.data.owned,t.joined=e.data.joined})}).catch(e=>{i(t=>{t.error=e.message})})}createRoom(e){n.default.post("/api/rooms",{name:this.newSessionName}).then(e=>{this.$router.push(`/game/${a.coreStore.username}/${this.newSessionName}`)}).catch(e=>{this.error=e.message})}};l=s.__decorate([r.default],l),t.default=l},a535:function(e,t,i){"use strict";i.r(t);var s=i("e06e"),n=i("f30c");for(var o in n)"default"!==o&&function(e){i.d(t,e,function(){return n[e]})}(o);i("223d");var r=i("2877"),a=Object(r["a"])(n["default"],s["a"],s["b"],!1,null,"1883e207",null);a.options.__file="confirm.vue",t["default"]=a.exports},a68b:function(e,t,i){"use strict";i.r(t);var s=i("308b"),n=i.n(s);for(var o in s)"default"!==o&&function(e){i.d(t,e,function(){return s[e]})}(o);t["default"]=n.a},a755:function(e,t,i){"use strict";var s=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("ContextMenu",{attrs:{visible:e.visible,left:e.left+"px",top:e.top+"px"},on:{close:e.close}},[i("li",{on:{click:e.rename}},[e._v("Rename")]),i("li",{on:{click:e.remove}},[e._v("Remove")])])},n=[];i.d(t,"a",function(){return s}),i.d(t,"b",function(){return n})},a7b3:function(e,t,i){"use strict";var s=i("6542"),n=i.n(s);n.a},a912:function(e,t,i){},aa69:function(e,t,i){"use strict";i.r(t);var s=i("0cf7"),n=i.n(s);for(var o in s)"default"!==o&&function(e){i.d(t,e,function(){return s[e]})}(o);t["default"]=n.a},af17:function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0});const s=i("9ab4"),n=s.__importDefault(i("a026"));t.EventBus=new n.default},b0ac:function(e,t,i){"use strict";i.r(t);var s=i("a474"),n=i.n(s);for(var o in s)"default"!==o&&function(e){i.d(t,e,function(){return s[e]})}(o);t["default"]=n.a},b0c0:function(e,t,i){},b2ed:function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0});const s=i("c266"),n=i("f10f"),o=i("92b1"),r=i("5a5c");class a extends s.BaseRect{constructor(e,t,i,s,n,o){super(e,t,i,s,n,o),this.type="rect"}asDict(){return super.getBaseDict()}draw(e){super.draw(e),"fog"===this.fillColour?e.fillStyle=r.getFogColour():e.fillStyle=this.fillColour;const t=n.gameStore.zoomFactor,i=o.g2l(this.refPoint);e.fillRect(i.x,i.y,this.w*t,this.h*t),"rgba(0, 0, 0, 0)"!==this.strokeColour&&(e.strokeStyle=this.strokeColour,e.lineWidth=5,e.strokeRect(i.x,i.y,this.w*t,this.h*t))}}t.Rect=a},b599:function(e,t,i){},b62e:function(e,t,i){"use strict";var s=i("3eaf"),n=i.n(s);n.a},b6bc:function(e,t,i){"use strict";i.r(t);var s=i("5394"),n=i.n(s);for(var o in s)"default"!==o&&function(e){i.d(t,e,function(){return s[e]})}(o);t["default"]=n.a},b809:function(e,t,i){"use strict";i.r(t);var s=i("ca56"),n=i.n(s);for(var o in s)"default"!==o&&function(e){i.d(t,e,function(){return s[e]})}(o);t["default"]=n.a},b906:function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0});const s=i("8f0a"),n=i("bab4"),o=i("6f92"),r=i("d1ec"),a=i("f10f"),l=i("92b1"),c=i("cee3");class u extends n.Layer{constructor(){super(...arguments),this.isVisionLayer=!0}draw(){if(!this.valid){const t=this.ctx;if(!a.gameStore.fowLOS||r.Settings.skipPlayerFOW)return t.clearRect(0,0,this.canvas.width,this.canvas.height),void(this.valid=!0);t.clearRect(0,0,this.canvas.width,this.canvas.height);const i=t.globalCompositeOperation;t.fillStyle="rgba(0, 0, 0, 1)",a.gameStore.IS_DM||super.draw(!a.gameStore.fullFOW);const n=t.canvas.width+t.canvas.height;for(const u of a.gameStore.activeTokens){const i=o.layerManager.UUIDMap.get(u);if(void 0===i)continue;const d=i.center(),h=l.g2l(d);if("bvh"===a.gameStore.visionMode){t.beginPath();let e=-1;for(let i=0;i<2*Math.PI;i+=r.Settings.angleSteps/2/180*Math.PI){const o=Math.cos(i),r=Math.sin(i),c=new s.Ray(d,new s.Vector(o,r)),u=a.gameStore.BV.intersect(c);u.hit?(-1!==e&&(t.arc(h.x,h.y,n,e,i),e=-1),t.lineTo(l.g2lx(u.intersect.x),l.g2ly(u.intersect.y))):-1===e&&(t.lineTo(h.x+n*o,h.y+n*r),e=i)}-1!==e?t.arc(h.x,h.y,n,e,2*Math.PI):t.closePath(),t.fill()}else{{const e=t.createRadialGradient(h.x,h.y,l.g2lr(a.gameStore.visionRangeMin),h.x,h.y,l.g2lr(a.gameStore.visionRangeMax));e.addColorStop(0,"rgba(0, 0, 0, 1)"),e.addColorStop(1,"rgba(0, 0, 0, 0)"),t.fillStyle=e}try{const s=c.computeVisibility(i.center(),"vision");t.beginPath(),t.moveTo(l.g2lx(s[0][0]),l.g2ly(s[0][1]));for(const e of s)t.lineTo(l.g2lx(e[0]),l.g2ly(e[1]));t.closePath(),t.fill()}catch(e){}}}a.gameStore.IS_DM&&super.draw(!a.gameStore.fullFOW),t.globalCompositeOperation=i}}}t.FOWPlayersLayer=u},bab4:function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0});const s=i("0bc6"),n=i("af17"),o=i("6f92"),r=i("206a"),a=i("f10f"),l=i("92b1");class c{constructor(e,t){this.selectable=!1,this.playerEditable=!1,this.isVisionLayer=!1,this.valid=!1,this.shapes=[],this.selection=[],this.selectionColor="#CC0000",this.selectionWidth=2,this.canvas=e,this.name=t,this.width=e.width,this.height=e.height,this.ctx=e.getContext("2d")}invalidate(e){this.valid=!1,e||o.layerManager.invalidateLight()}addShape(e,t,i,n=!0){void 0===i&&(i=!1),e.layer=this.name,this.shapes.push(e),o.layerManager.UUIDMap.set(e.uuid,e),e.checkVisionSources(n),e.setMovementBlock(e.movementObstruction,n),e.ownedBy(a.gameStore.username)&&e.isToken&&a.gameStore.ownedtokens.push(e.uuid),e.annotation.length&&a.gameStore.annotations.push(e.uuid),t&&s.socket.emit("Shape.Add",{shape:e.asDict(),temporary:i}),n&&this.invalidate(!t)}setShapes(e){for(const t of e){const e=r.createShapeFromDict(t);if(void 0===e)return void console.log(`Shape with unknown type ${t.type_} could not be added`);this.addShape(e,!1,!1,!1)}this.clearSelection(),this.invalidate(!1)}removeShape(e,t,i){void 0===i&&(i=!1),this.shapes.splice(this.shapes.indexOf(e),1),t&&s.socket.emit("Shape.Remove",{shape:e.asDict(),temporary:i});const n=a.gameStore.visionSources.findIndex(t=>t.shape===e.uuid),r=a.gameStore.visionBlockers.findIndex(t=>t===e.uuid),l=a.gameStore.movementblockers.findIndex(t=>t===e.uuid),c=a.gameStore.annotations.findIndex(t=>t===e.uuid);n>=0&&a.gameStore.visionSources.splice(n,1),r>=0&&a.gameStore.visionBlockers.splice(r,1),l>=0&&a.gameStore.movementblockers.splice(l,1),c>=0&&a.gameStore.annotations.splice(c,1);const u=a.gameStore.annotations.indexOf(e.uuid);u>=0&&a.gameStore.annotations.splice(u,1);const d=a.gameStore.ownedtokens.indexOf(e.uuid);d>=0&&a.gameStore.ownedtokens.splice(d,1),o.layerManager.UUIDMap.delete(e.uuid);const h=this.selection.indexOf(e);h>=0&&this.selection.splice(h,1),r>=0&&a.gameStore.recalculateVision(),l>=0&&a.gameStore.recalculateMovement(),this.invalidate(!t)}clear(){this.ctx.clearRect(0,0,this.width,this.height)}clearSelection(){this.selection=[],n.EventBus.$emit("SelectionInfo.Shape.Set",null)}draw(e){if(!this.valid){const t=this.ctx,i=t.globalCompositeOperation;e=void 0===e||e,e&&this.clear();const s=this;if(this.shapes.forEach(e=>{e.options.has("skipDraw")&&e.options.get("skipDraw")||void 0!==o.layerManager.getLayer()&&e.visibleInCanvas(s.canvas)&&("fow"===s.name&&e.visionObstruction&&o.layerManager.getLayer().name!==s.name||e.drawAuras(t))}),this.shapes.forEach(e=>{e.options.has("skipDraw")&&e.options.get("skipDraw")||0===e.labels.length&&a.gameStore.filterNoLabel||e.labels.length&&a.gameStore.labelFilters.length&&!e.labels.some(e=>a.gameStore.labelFilters.includes(e.uuid))||void 0!==o.layerManager.getLayer()&&e.visibleInCanvas(s.canvas)&&("fow"===s.name&&e.visionObstruction&&o.layerManager.getLayer().name!==s.name||e.draw(t))}),null!=this.selection){t.fillStyle=this.selectionColor,t.strokeStyle=this.selectionColor,t.lineWidth=this.selectionWidth;const e=a.gameStore.zoomFactor;this.selection.forEach(i=>{t.globalCompositeOperation=i.globalCompositeOperation;const s=i.getBoundingBox();t.strokeRect(l.g2lx(s.topLeft.x),l.g2ly(s.topLeft.y),s.w*e,s.h*e);for(const e of i.points)t.beginPath(),t.arc(l.g2lx(e[0]),l.g2ly(e[1]),3,0,2*Math.PI),t.fill();t.beginPath(),t.moveTo(l.g2lx(i.points[0][0]),l.g2ly(i.points[0][1]));for(let e=1;e<=i.points.length;e++){const s=i.points[e%i.points.length];t.lineTo(l.g2lx(s[0]),l.g2ly(s[1]))}t.stroke()})}t.globalCompositeOperation=i,this.valid=!0}}moveShapeOrder(e,t,i){const n=this.shapes.indexOf(e);n!==t&&(this.shapes.splice(n,1),this.shapes.splice(t,0,e),i&&s.socket.emit("Shape.Order.Set",{shape:e.asDict(),index:t}),this.invalidate(!0))}}t.Layer=c},bb17:function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0});const s=i("f10f"),n=i("92b1"),o=i("5a5c");function r(e){if(!e.target||!e.target.tagName||"CANVAS"!==e.target.tagName)return;let t;t=-1*Math.sign(e.deltaY),s.gameStore.updateZoom({newZoomDisplay:s.gameStore.zoomDisplay-.1*t,zoomLocation:n.l2g(o.getMouse(e))})}t.scrollZoom=r},bea6:function(e,t,i){"use strict";i.r(t);var s=i("e8bb"),n=i("b6bc");for(var o in n)"default"!==o&&function(e){i.d(t,e,function(){return n[e]})}(o);i("e3f5"),i("99ea");var r=i("2877"),a=Object(r["a"])(n["default"],s["a"],s["b"],!1,null,"dca395d6",null);a.options.__file="filter.vue",t["default"]=a.exports},c266:function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0});const s=i("8f0a"),n=i("8db6"),o=i("2469"),r=i("f10f"),a=i("2838"),l=i("92b1");class c extends o.Shape{constructor(e,t,i,s,n,o){super(e,s,n,o),this.w=t,this.h=i}getBaseDict(){return Object.assign(super.getBaseDict(),{width:this.w,height:this.h})}getBoundingBox(){return new n.BoundingRect(this.refPoint,this.w,this.h)}get points(){if(0===this.w||0===this.h)return[[this.refPoint.x,this.refPoint.y]];const e=this.refPoint.add(new s.Vector(0,this.h)),t=this.refPoint.add(new s.Vector(this.w,this.h)),i=this.refPoint.add(new s.Vector(this.w,0));return[[this.refPoint.x,this.refPoint.y],[e.x,e.y],[t.x,t.y],[i.x,i.y]]}contains(e){return this.refPoint.x<=e.x&&this.refPoint.x+this.w>=e.x&&this.refPoint.y<=e.y&&this.refPoint.y+this.h>=e.y}center(e){if(void 0===e)return this.refPoint.add(new s.Vector(this.w/2,this.h/2));this.refPoint=new s.GlobalPoint(e.x-this.w/2,e.y-this.h/2)}visibleInCanvas(e){if(super.visibleInCanvas(e))return!0;const t=!(l.g2lx(this.refPoint.x)>e.width||l.g2ly(this.refPoint.y)>e.height||l.g2lx(this.refPoint.x+this.w)<0||l.g2ly(this.refPoint.y+this.h)<0);return!!t}snapToGrid(){const e=r.gameStore.gridSize,t=this.center(),i=t.x,n=t.y;let o,l;o=this.w/e%2===0?Math.round(i/e)*e-this.w/2:(Math.round((i+e/2)/e)-.5)*e-this.w/2,l=this.h/e%2===0?Math.round(n/e)*e-this.h/2:(Math.round((n+e/2)/e)-.5)*e-this.h/2;const c=a.calculateDelta(new s.Vector(o-this.refPoint.x,l-this.refPoint.y),this);this.refPoint=this.refPoint.add(c),this.invalidate(!1)}resizeToGrid(){const e=r.gameStore.gridSize;this.refPoint=new s.GlobalPoint(Math.round(this.refPoint.x/e)*e,Math.round(this.refPoint.y/e)*e),this.w=Math.max(Math.round(this.w/e)*e,e),this.h=Math.max(Math.round(this.h/e)*e,e),this.invalidate(!1)}resize(e,t){const i=r.gameStore.zoomFactor;switch(e){case 0:this.w=l.g2lx(this.refPoint.x)+this.w*i-t.x,this.h=l.g2ly(this.refPoint.y)+this.h*i-t.y,this.refPoint=l.l2g(t);break;case 1:this.w=l.g2lx(this.refPoint.x)+this.w*i-t.x,this.h=t.y-l.g2ly(this.refPoint.y),this.refPoint=new s.GlobalPoint(l.l2gx(t.x),this.refPoint.y);break;case 2:this.w=t.x-l.g2lx(this.refPoint.x),this.h=t.y-l.g2ly(this.refPoint.y);break;case 3:this.w=t.x-l.g2lx(this.refPoint.x),this.h=l.g2ly(this.refPoint.y)+this.h*i-t.y,this.refPoint=new s.GlobalPoint(this.refPoint.x,l.l2gy(t.y));break}this.w/=i,this.h/=i,this.w<0&&(this.refPoint=this.refPoint.add(new s.Vector(this.w,0)),this.w=Math.abs(this.w)),this.h<0&&(this.refPoint=this.refPoint.add(new s.Vector(0,this.h)),this.h=Math.abs(this.h))}}t.BaseRect=c},c277:function(e,t,i){"use strict";i.r(t);var s=i("22bd"),n=i("e27a");for(var o in n)"default"!==o&&function(e){i.d(t,e,function(){return n[e]})}(o);var r=i("2877"),a=Object(r["a"])(n["default"],s["a"],s["b"],!1,null,null,null);a.options.__file="select.vue",t["default"]=a.exports},c31c:function(e,t,i){},c5ff:function(e,t,i){},c6b4:function(e,t,i){"use strict";i.r(t);var s=i("8e60"),n=i("b0ac");for(var o in n)"default"!==o&&function(e){i.d(t,e,function(){return n[e]})}(o);i("d767");var r=i("2877"),a=Object(r["a"])(n["default"],s["a"],s["b"],!1,null,"61eb1455",null);a.options.__file="main.vue",t["default"]=a.exports},c969:function(e,t,i){"use strict";var s=i("3a20"),n=i.n(s);n.a},c9a2:function(e,t,i){"use strict";var s=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{attrs:{id:"AssetManager"}},[i("div",{attrs:{id:"titlebar"}},[e._v("Asset Manager")]),i("div",{attrs:{id:"main"}},[i("div",{attrs:{id:"assets"},on:{dragover:function(t){return t.preventDefault(),e.moveDrag(t)},drop:function(t){t.preventDefault(),t.stopPropagation(),e.stopDrag(t,e.currentFolder)}}},[i("div",{attrs:{id:"breadcrumbs"}},[i("div",[e._v("/")]),e._l(e.path,function(t){return i("div",{key:t},[e._v(e._s(e.idMap.get(t).name))])})],2),i("div",{attrs:{id:"actionbar"}},[i("input",{attrs:{id:"files",type:"file",multiple:"",hidden:""},on:{change:function(t){e.upload()}}}),i("div",{attrs:{title:"Create folder"},on:{click:e.createDirectory}},[i("i",{staticClass:"fas fa-plus-square"})]),i("div",{attrs:{title:"Upload files"},on:{click:e.prepareUpload}},[i("i",{staticClass:"fas fa-upload"})])]),i("div",{attrs:{id:"explorer"}},[e.path.length?i("div",{staticClass:"inode folder",on:{dblclick:function(t){e.changeDirectory(-1)},dragover:function(t){return t.preventDefault(),e.moveDrag(t)},dragleave:function(t){return t.preventDefault(),e.leaveDrag(t)},drop:function(t){t.preventDefault(),t.stopPropagation(),e.stopDrag(t,e.parentFolder)}}},[i("i",{staticClass:"fas fa-folder",staticStyle:{"font-size":"50px"}}),i("div",{staticClass:"title"},[e._v("..")])]):e._e(),e._l(e.folders,function(t){return i("div",{key:t,staticClass:"inode folder",class:{"inode-selected":e.selected.includes(t)},attrs:{draggable:"true"},on:{click:function(i){e.select(i,t)},dblclick:function(i){e.changeDirectory(t)},contextmenu:function(i){i.preventDefault(),e.$refs.cm.open(i,t)},dragstart:function(i){e.startDrag(i,t)},dragover:function(t){return t.preventDefault(),e.moveDrag(t)},dragleave:function(t){return t.preventDefault(),e.leaveDrag(t)},drop:function(i){i.preventDefault(),i.stopPropagation(),e.stopDrag(i,t)}}},[i("i",{staticClass:"fas fa-folder",staticStyle:{"font-size":"50px"}}),i("div",{staticClass:"title"},[e._v(e._s(e.idMap.get(t).name))])])}),e._l(e.files,function(t){return i("div",{key:t,staticClass:"inode file",class:{"inode-selected":e.selected.includes(t)},attrs:{draggable:"true"},on:{click:function(i){e.select(i,t)},contextmenu:function(i){i.preventDefault(),e.$refs.cm.open(i,t)},dragstart:function(i){e.startDrag(i,t)}}},[i("img",{attrs:{src:"/static/assets/"+e.idMap.get(t).file_hash,width:"50"}}),i("div",{staticClass:"title"},[e._v(e._s(e.idMap.get(t).name))])])})],2)]),e.firstSelectedFile?i("div",{attrs:{id:"asset-details"}},[i("div",{attrs:{id:"asset-detail-title"}},[e._v(e._s(e.firstSelectedFile.name))]),i("img",{attrs:{src:"/static/assets/"+e.firstSelectedFile.file_hash}})]):e._e()]),i("AssetContextMenu",{ref:"cm"}),i("Prompt",{ref:"prompt"}),i("ConfirmDialog",{ref:"confirm"})],1)},n=[];i.d(t,"a",function(){return s}),i.d(t,"b",function(){return n})},ca56:function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0});const s=i("9ab4"),n=s.__importDefault(i("a026")),o=s.__importDefault(i("65d9")),r=s.__importDefault(i("1c76")),a=i("0bc6"),l=i("af17"),c=i("f10f"),u=i("92b1");let d=class extends n.default{constructor(){super(...arguments),this.visible=!1,this.x=0,this.y=0}get IS_DM(){return c.gameStore.IS_DM}open(e){this.visible=!0,this.x=e.pageX,this.y=e.pageY,this.$nextTick(()=>this.$children[0].$el.focus())}close(){this.visible=!1}bringPlayers(){c.gameStore.IS_DM&&(a.socket.emit("Players.Bring",{x:u.l2gx(this.x),y:u.l2gy(this.y)}),this.close())}createToken(){this.$parent.$parent.$refs.createtokendialog.open(this.x,this.y),this.close()}showInitiative(){l.EventBus.$emit("Initiative.Show"),this.close()}};d=s.__decorate([o.default({components:{ContextMenu:r.default}})],d),t.default=d},cad7:function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0});const s=i("9ab4"),n=s.__importDefault(i("bc3a")),o=s.__importDefault(i("a026")),r=s.__importDefault(i("65d9")),a=i("cc67");r.default.registerHooks(["beforeRouteEnter"]);let l=class extends o.default{beforeRouteEnter(e,t,i){n.default.post("/api/logout").then(()=>{a.coreStore.setAuthenticated(!1),a.coreStore.setUsername(""),i({path:"/auth/login"})})}};l=s.__decorate([r.default({})],l),t.default=l},cc67:function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0});const s=i("9ab4"),n=i("6fc5"),o=i("3a0b");let r=class extends n.VuexModule{constructor(){super(...arguments),this.authenticated=!1,this.initialized=!1,this.username=""}setAuthenticated(e){this.authenticated=e}setInitialized(e){this.initialized=e}setUsername(e){this.username=e}};s.__decorate([n.Mutation],r.prototype,"setAuthenticated",null),s.__decorate([n.Mutation],r.prototype,"setInitialized",null),s.__decorate([n.Mutation],r.prototype,"setUsername",null),r=s.__decorate([n.Module({dynamic:!0,store:o.rootStore,name:"core"})],r),t.coreStore=n.getModule(r)},cd49:function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0});const s=i("9ab4"),n=s.__importDefault(i("a026")),o=s.__importDefault(i("3dfd")),r=i("5f86"),a=i("3a0b");n.default.config.productionTip=!1,n.default.config.devtools=!0,n.default.config.performance=!0,t.app=new n.default({router:r.router,store:a.rootStore,render:e=>e(o.default)}).$mount("#app"),window.app=t.app},cd76:function(e,t,i){},cde6:function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0});const s=i("9ab4"),n=s.__importDefault(i("a026")),o=s.__importDefault(i("65d9"));let r=class extends n.default{};r=s.__decorate([o.default({props:["visible","left","top"]})],r),t.default=r},ce87:function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0});const s=i("9ab4"),n=s.__importDefault(i("bc3a")),o=s.__importDefault(i("a026")),r=s.__importDefault(i("65d9"));let a=class extends o.default{beforeRouteEnter(e,t,i){n.default.post("/api/invite",{code:e.params.code}).then(e=>{i({path:e.data.sessionUrl})}).catch(e=>{console.error("Invitation code could not be redeemed"),i({path:"/dashboard"})})}};a=s.__decorate([r.default({template:""})],a),t.default=a},cec2:function(e,t,i){"use strict";i.r(t);var s=i("eb57"),n=i("255e");for(var o in n)"default"!==o&&function(e){i.d(t,e,function(){return n[e]})}(o);i("0584");var r=i("2877"),a=Object(r["a"])(n["default"],s["a"],s["b"],!1,null,"0602c2e6",null);a.options.__file="prompt.vue",t["default"]=a.exports},cee3:function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0});const s=i("f10f"),n=i("1216"),o=i("d6be"),r=i("98ef"),a=i("4aee");function l(e,t,i){void 0===i&&(i=s.gameStore.drawTEContour);const r=[e.x,e.y],a=[],l=o.PA_CDT[t].locate(r,null).loc;return null===l?(console.error("Triangle not found"),[]):(a.push(l.vertices[1].point),l.isConstrained(0)||c(r,l.vertices[2].point,l.vertices[1].point,l,0,a),a.push(l.vertices[2].point),l.isConstrained(1)||c(r,l.vertices[0].point,l.vertices[2].point,l,1,a),a.push(l.vertices[0].point),l.isConstrained(2)||c(r,l.vertices[1].point,l.vertices[0].point,l,2,a),i&&n.drawPolygon(a,"red"),a)}function c(e,t,i,s,n,o){const l=s.neighbours[n],d=l.indexT(s),h=a.ccw(d),f=a.cw(d),p=l.vertices[d],g=l.vertices[f],v=l.vertices[h],m=[l,h],y=[l,f],b=a.orientation(e,i,p.point),_=a.orientation(e,t,p.point);if(b===r.Sign.COUNTERCLOCKWISE)if(m[0].isConstrained(m[1]))i!==g.point&&o.push(u(e,i,p.point,g.point)),_===r.Sign.COUNTERCLOCKWISE&&o.push(u(e,t,p.point,g.point));else{if(_===r.Sign.COUNTERCLOCKWISE)return c(e,t,i,l,h,o);c(e,p.point,i,l,h,o)}if(b!==r.Sign.CLOCKWISE&&_!==r.Sign.COUNTERCLOCKWISE&&o.push(p.point),_===r.Sign.CLOCKWISE)return y[0].isConstrained(y[1])?(b===r.Sign.CLOCKWISE&&o.push(u(e,i,p.point,v.point)),void(t!==v.point&&o.push(u(e,t,p.point,v.point)))):b===r.Sign.CLOCKWISE?c(e,t,i,l,f,o):c(e,t,p.point,l,f,o)}function u(e,t,i,s){const n=(s[1]-i[1])*(t[0]-e[0])-(s[0]-i[0])*(t[1]-e[1]),o=((s[0]-i[0])*(e[1]-i[1])-(s[1]-i[1])*(e[0]-i[0]))/n,r=e[0]+o*(t[0]-e[0]),a=e[1]+o*(t[1]-e[1]);return[r,a]}t.computeVisibility=l},cf8f:function(e,t,i){"use strict";var s=function(){var e=this,t=e.$createElement,i=e._self._c||t;return e.selected?i("div",{staticClass:"tool-detail",style:{"--detailRight":e.detailRight,"--detailArrow":e.detailArrow}},[i("div",[e._v("#X")]),i("input",{directives:[{name:"model",rawName:"v-model",value:e.xCount,expression:"xCount"}],attrs:{type:"text"},domProps:{value:e.xCount},on:{input:function(t){t.target.composing||(e.xCount=t.target.value)}}}),i("div",[e._v("#Y")]),i("input",{directives:[{name:"model",rawName:"v-model",value:e.yCount,expression:"yCount"}],attrs:{type:"text"},domProps:{value:e.yCount},on:{input:function(t){t.target.composing||(e.yCount=t.target.value)}}})]):e._e()},n=[];i.d(t,"a",function(){return s}),i.d(t,"b",function(){return n})},d065:function(e,t,i){"use strict";i.r(t);var s=i("45fb"),n=i("f8b3");for(var o in n)"default"!==o&&function(e){i.d(t,e,function(){return n[e]})}(o);i("514b");var r=i("2877"),a=Object(r["a"])(n["default"],s["a"],s["b"],!1,null,"23de098e",null);a.options.__file="edit_dialog.vue",t["default"]=a.exports},d1ec:function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0});class s{}s.angleSteps=4,s.drawAngleLines=!1,s.drawFirstLightHit=!1,s.skipPlayerFOW=!1,s.skipLightFOW=!1,s.tempFill="fog",t.Settings=s},d30b:function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0});const s=i("9ab4"),n=s.__importDefault(i("bc3a")),o=s.__importDefault(i("a026")),r=s.__importDefault(i("65d9")),a=i("cc67");let l=class extends o.default{constructor(){super(...arguments),this.username="",this.password="",this.error=""}login(){n.default.post("/api/login",{username:this.username,password:this.password}).then(e=>{a.coreStore.setUsername(this.username),a.coreStore.setAuthenticated(!0),this.$router.push(this.$route.query.redirect||"/")}).catch(e=>{e.response?this.error=e.response.statusText:this.error="Unknown error occured"})}register(){n.default.post("/api/register",{username:this.username,password:this.password}).then(e=>{a.coreStore.setUsername(this.username),a.coreStore.setAuthenticated(!0),this.$router.push(this.$route.query.redirect||"/")}).catch(e=>{e.response?this.error=e.response.statusText:this.error="Unknown error occured"})}focusin(e){if(e.target&&e.target.nextElementSibling){const t=e.target.nextElementSibling;t.style.opacity="0"}}focusout(e){if(e.target&&e.target.nextElementSibling){const t=e.target.nextElementSibling;t.style.opacity="1"}}};l=s.__decorate([r.default],l),t.default=l},d320:function(e,t,i){"use strict";var s=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("modal",{attrs:{visible:e.visible},on:{close:function(t){e.visible=!1}},scopedSlots:e._u([{key:"header",fn:function(t){return i("div",{staticClass:"modal-header",attrs:{draggable:"true"},on:{dragstart:t.dragStart,dragend:t.dragEnd}},[e._v("Create basic token")])}}])},[i("div",{staticClass:"modal-body"},[i("label",{attrs:{for:"createtokendialog-text"}},[e._v("Text")]),i("input",{directives:[{name:"model",rawName:"v-model",value:e.text,expression:"text"}],attrs:{type:"text",id:"createtokendialog-name"},domProps:{value:e.text},on:{input:function(t){t.target.composing||(e.text=t.target.value)}}}),i("label",[e._v("Colours")]),i("div",{staticClass:"colours"},[i("span",[e._v("Fill:")]),i("color-picker",{attrs:{color:e.fillColour},on:{"update:color":function(t){e.fillColour=t}}}),i("span",[e._v("Border:")]),i("color-picker",{attrs:{color:e.borderColour},on:{"update:color":function(t){e.borderColour=t}}})],1),i("canvas",{ref:"canvas",attrs:{width:"100px",height:"100px"}})]),i("div",{staticClass:"modal-footer"},[i("button",{on:{click:e.submit}},[e._v("Submit")])])])},n=[];i.d(t,"a",function(){return s}),i.d(t,"b",function(){return n})},d323:function(e,t,i){"use strict";var s=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div")},n=[];i.d(t,"a",function(){return s}),i.d(t,"b",function(){return n})},d445:function(e,t,i){"use strict";var s=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("transition",{attrs:{name:"modal"}},[i("div",{directives:[{name:"show",rawName:"v-show",value:e.visible,expression:"visible"}],staticClass:"mask",class:{"modal-mask":e.mask,"dialog-mask":!e.mask},on:{click:e.close,dragover:function(t){return t.preventDefault(),e.dragOver(t)}}},[i("div",{ref:"container",staticClass:"modal-container",on:{click:function(e){e.stopPropagation()}}},[e._t("header",null,{dragStart:e.dragStart,dragEnd:e.dragEnd}),e._t("default")],2)])])},n=[];i.d(t,"a",function(){return s}),i.d(t,"b",function(){return n})},d588:function(e,t,i){"use strict";i.r(t);var s=i("91df"),n=i.n(s);for(var o in s)"default"!==o&&function(e){i.d(t,e,function(){return s[e]})}(o);t["default"]=n.a},d5df:function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0});const s=i("9ab4"),n=s.__importDefault(i("65d9")),o=s.__importDefault(i("ea6a")),r=i("0bc6"),a=i("8f0a"),l=i("6f92"),c=i("5e7c"),u=i("0180"),d=i("f10f"),h=i("92b1"),f=i("5a5c");let p=class extends o.default{constructor(){super(...arguments),this.name="Ruler",this.active=!1,this.startPoint=null,this.ruler=null,this.text=null}onMouseDown(e){const t=l.layerManager.getLayer("draw");void 0!==t?(this.active=!0,this.startPoint=h.l2g(f.getMouse(e)),this.ruler=new c.Line(this.startPoint,this.startPoint,3,d.gameStore.rulerColour),this.text=new u.Text(this.startPoint.clone(),"","bold 20px serif"),this.ruler.addOwner(d.gameStore.username),this.text.addOwner(d.gameStore.username),t.addShape(this.ruler,!0,!0),t.addShape(this.text,!0,!0)):console.log("No draw layer!")}onMouseMove(e){if(!this.active||null===this.ruler||null===this.startPoint||null===this.text)return;const t=l.layerManager.getLayer("draw");if(void 0===t)return void console.log("No draw layer!");const i=h.l2g(f.getMouse(e));this.ruler.endPoint=i,r.socket.emit("Shape.Update",{shape:this.ruler.asDict(),redraw:!0,temporary:!0});const s=Math.sign(i.x-this.startPoint.x)*Math.sign(i.y-this.startPoint.y),n=Math.abs(i.x-this.startPoint.x),o=Math.abs(i.y-this.startPoint.y),c=Math.round(Math.sqrt(Math.pow(n,2)+Math.pow(o,2))*d.gameStore.unitSize/d.gameStore.gridSize)+" ft",u=Math.atan2(s*o,n),p=Math.min(this.startPoint.x,i.x)+n/2,g=Math.min(this.startPoint.y,i.y)+o/2;this.text.refPoint=new a.GlobalPoint(p,g),this.text.text=c,this.text.angle=u,r.socket.emit("Shape.Update",{shape:this.text.asDict(),redraw:!0,temporary:!0}),t.invalidate(!0)}onMouseUp(e){if(!this.active||null===this.ruler||null===this.startPoint||null===this.text)return;const t=l.layerManager.getLayer("draw");void 0!==t?(this.active=!1,t.removeShape(this.ruler,!0,!0),t.removeShape(this.text,!0,!0),t.invalidate(!0),this.ruler=this.startPoint=this.text=null):console.log("No active layer!")}};p=s.__decorate([n.default],p),t.RulerTool=p},d65f:function(e,t,i){"use strict";i.r(t);var s=i("d445"),n=i("7e15");for(var o in n)"default"!==o&&function(e){i.d(t,e,function(){return n[e]})}(o);i("26a5");var r=i("2877"),a=Object(r["a"])(n["default"],s["a"],s["b"],!1,null,"12ed61ba",null);a.options.__file="modal.vue",t["default"]=a.exports},d677:function(e,t,i){"use strict";i.r(t);var s=i("53ec"),n=i.n(s);for(var o in s)"default"!==o&&function(e){i.d(t,e,function(){return s[e]})}(o);t["default"]=n.a},d6be:function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0});const s=i("6f92"),n=i("f10f"),o=i("6e4a");function r(e,i=!1){const r=new o.CDT;let a;a="vision"===e?n.gameStore.visionBlockers:n.gameStore.movementblockers;for(const t of a){const e=s.layerManager.UUIDMap.get(t);if(!i||e.visibleInCanvas(s.layerManager.getLayer().canvas))for(let t=0;t{this.shape=e,this.visible=!0}),d.EventBus.$on("EditDialog.AddLabel",e=>{this.visible&&(this.shape.labels.push(f.gameStore.labels[e]),this.updateShape(!0))})}beforeDestroy(){d.EventBus.$off("EditDialog.Open"),d.EventBus.$off("EditDialog.AddLabel")}updated(){this.addEmpty()}addEmpty(){""!==this.shape.owners[this.shape.owners.length-1]&&this.shape.addOwner(""),this.shape.trackers.length&&""===this.shape.trackers[this.shape.trackers.length-1].name&&0===this.shape.trackers[this.shape.trackers.length-1].value||this.shape.trackers.push({uuid:c.uuidv4(),name:"",value:0,maxvalue:0,visible:!1}),this.shape.auras.length&&""===this.shape.auras[this.shape.auras.length-1].name&&0===this.shape.auras[this.shape.auras.length-1].value||this.shape.auras.push({uuid:c.uuidv4(),name:"",value:0,dim:0,visionSource:!1,colour:"rgba(0,0,0,0)",visible:!1})}updateShape(e,t=!1){this.owned&&(u.socket.emit("Shape.Update",{shape:this.shape.asDict(),redraw:e,temporary:t}),e&&h.layerManager.invalidate(),this.addEmpty())}setToken(e){this.owned&&(this.shape.setIsToken(e.target.checked),this.updateShape(!0))}setVisionBlocker(e){this.owned&&(this.shape.checkVisionSources(),this.updateShape(!0))}setMovementBlocker(e){this.owned&&(this.shape.setMovementBlock(e.target.checked),this.updateShape(!1))}updateAnnotation(e){if(!this.owned)return;const t=""!==this.shape.annotation;this.shape.annotation=e.target.value,""===this.shape.annotation||t?""===this.shape.annotation&&t&&(f.gameStore.annotations.splice(f.gameStore.annotations.findIndex(e=>e===this.shape.uuid)),h.layerManager.hasLayer("draw")&&h.layerManager.getLayer("draw").invalidate(!0)):(f.gameStore.annotations.push(this.shape.uuid),h.layerManager.hasLayer("draw")&&h.layerManager.getLayer("draw").invalidate(!0)),this.updateShape(!1)}updateOwner(e,t){this.owned&&(this.shape.updateOwner(t,e.target.value),this.updateShape(f.gameStore.fowLOS))}removeOwner(e){this.owned&&(this.shape.removeOwner(e),this.updateShape(f.gameStore.fowLOS))}removeTracker(e){this.owned&&(this.shape.trackers=this.shape.trackers.filter(t=>t.uuid!==e),this.updateShape(!1))}removeAura(e){this.owned&&(this.shape.auras=this.shape.auras.filter(t=>t.uuid!==e),this.shape.checkVisionSources(),this.updateShape(!0))}updateAuraVisionSource(e){if(!this.owned)return;e.visionSource=!e.visionSource;const t=f.gameStore.visionSources.findIndex(t=>t.aura===e.uuid);e.visionSource&&-1===t?f.gameStore.visionSources.push({shape:this.shape.uuid,aura:e.uuid}):!e.visionSource&&t>=0&&f.gameStore.visionSources.splice(t,1),this.updateShape(!0)}updateAuraColour(e,t){if(!this.owned)return;const i=h.layerManager.getLayer(this.shape.layer);void 0!==i&&i.invalidate(!e.visionSource)}openLabelManager(){d.EventBus.$emit("LabelManager.Open")}removeLabel(e){this.owned&&(this.shape.labels=this.shape.labels.filter(t=>t.uuid!==e),this.updateShape(!0))}};s.__decorate([r.Prop()],p.prototype,"shape",void 0),p=s.__decorate([o.default({components:{Modal:l.default,"color-picker":a.default}})],p),t.default=p},dc37:function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0});const s=i("9ab4"),n=s.__importDefault(i("a026")),o=s.__importDefault(i("65d9")),r=s.__importDefault(i("d65f"));let a=class extends n.default{constructor(){super(...arguments),this.visible=!1,this.yes="Yes",this.no="No",this.title="",this.resolve=(e=>{}),this.reject=(()=>{})}confirm(){this.resolve(!0),this.close()}deny(){this.resolve(!1),this.close()}close(){this.reject(),this.visible=!1,this.title=""}open(e,t="yes",i="no"){return this.yes=t,this.no=i,this.title=e,this.visible=!0,this.$nextTick(()=>{this.$refs.confirm.focus()}),new Promise((e,t)=>{this.resolve=e,this.reject=t})}};a=s.__decorate([o.default({components:{Modal:r.default}})],a),t.default=a},de21:function(e,t,i){},dec1:function(e,t,i){"use strict";i.r(t);var s=i("cf8f"),n=i("3481");for(var o in n)"default"!==o&&function(e){i.d(t,e,function(){return n[e]})}(o);var r=i("2877"),a=Object(r["a"])(n["default"],s["a"],s["b"],!1,null,null,null);a.options.__file="map.vue",t["default"]=a.exports},df64:function(e,t,i){"use strict";var s=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{staticClass:"accordion"},[i("div",{attrs:{id:"header"},on:{click:function(t){return t.preventDefault(),e.toggleDisplay(t)}}},[i("input",{ref:"overall",attrs:{type:"checkbox"},on:{click:function(t){return t.stopPropagation(),e.toggleCategory(t)}}}),i("strong",[e._v(e._s(e.title))]),e.showArrow?[i("span",{directives:[{name:"show",rawName:"v-show",value:e.showArrow&&!e.active,expression:"showArrow && !active"}],staticClass:"down-Arrow"},[e._v("▼")]),i("span",{directives:[{name:"show",rawName:"v-show",value:e.showArrow&&e.active,expression:"showArrow && active"}],staticClass:"up-Arrow"},[e._v("▲")])]:e._e()],2),i("div",{directives:[{name:"show",rawName:"v-show",value:e.active,expression:"active"}],attrs:{id:"body"}},e._l(e.items,function(t){return i("div",{key:t[0],staticClass:"item",on:{click:function(i){e.toggleSelection(t[0])}}},[i("input",{attrs:{type:"checkbox"},domProps:{checked:e.selected.includes(t[0])},on:{click:function(e){e.preventDefault()}}}),e._v(" "+e._s(t[1])+"\n ")])}))])},n=[];i.d(t,"a",function(){return s}),i.d(t,"b",function(){return n})},e06e:function(e,t,i){"use strict";var s=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("modal",{attrs:{visible:e.visible},on:{close:e.close},scopedSlots:e._u([{key:"header",fn:function(t){return i("div",{staticClass:"modal-header",attrs:{draggable:"true"},on:{dragstart:t.dragStart,dragend:t.dragEnd}},[e._v(e._s(e.title))])}}])},[i("div",{staticClass:"modal-body"},[i("button",{ref:"confirm",on:{click:e.confirm}},[e._v(e._s(e.yes))]),e.no?i("button",{on:{click:e.deny}},[e._v(e._s(e.no))]):e._e()])])},n=[];i.d(t,"a",function(){return s}),i.d(t,"b",function(){return n})},e0e9:function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0});const s=i("9ab4"),n=s.__importDefault(i("a026")),o=s.__importDefault(i("65d9")),r=s.__importDefault(i("1c76")),a=i("5338"),l=i("2d5b"),c=i("4a5b");let u=class extends n.default{constructor(){super(...arguments),this.visible=!1,this.left=0,this.top=0}open(e,t){l.assetStore.selected.includes(t)||c.getComponent().select(e,t),this.visible=!0,this.left=e.pageX,this.top=e.pageY,this.$nextTick(()=>{this.$children[0].$el.focus()})}close(){this.visible=!1}rename(){if(1!==l.assetStore.selected.length)return;const e=l.assetStore.idMap.get(l.assetStore.selected[0]);c.getRef("prompt").prompt("New name:",`Renaming ${e.name}`).then(t=>{a.socket.emit("Asset.Rename",{asset:e.id,name:t}),e.name=t,c.getComponent().$forceUpdate()},()=>{}),this.close()}remove(){0!==l.assetStore.selected.length&&(c.getRef("confirm").open("Are you sure you wish to remove this?").then(e=>{if(e){for(const e of l.assetStore.selected)a.socket.emit("Asset.Remove",e),l.assetStore.files.includes(e)?l.assetStore.files.splice(l.assetStore.files.indexOf(e),1):l.assetStore.folders.splice(l.assetStore.folders.indexOf(e),1);l.assetStore.clearSelected()}},()=>{}),this.close())}};u=s.__decorate([o.default({components:{ContextMenu:r.default}})],u),t.default=u},e27a:function(e,t,i){"use strict";i.r(t);var s=i("2756"),n=i.n(s);for(var o in s)"default"!==o&&function(e){i.d(t,e,function(){return s[e]})}(o);t["default"]=n.a},e3f5:function(e,t,i){"use strict";var s=i("a126"),n=i.n(s);n.a},e4b0:function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0});const s=i("9ab4"),n=s.__importDefault(i("a026")),o=s.__importDefault(i("65d9")),r=s.__importDefault(i("d65f")),a=i("4a5b"),l=i("0bc6"),c=i("af17"),u=i("f10f");let d=class extends n.default{constructor(){super(...arguments),this.visible=!1,this.newCategory="",this.newName="",this.search=""}mounted(){c.EventBus.$on("LabelManager.Open",()=>{this.visible=!0,this.newCategory="",this.newName="",this.$nextTick(()=>this.$refs.search.focus())})}beforeDestroy(){c.EventBus.$off("LabelManager.Open")}get labels(){const e={"":[]};for(const t of Object.keys(u.gameStore.labels)){const i=u.gameStore.labels[t];this.search.length&&`${i.category.toLowerCase()}${i.name.toLowerCase()}`.search(this.search.toLowerCase())<0||i.user===u.gameStore.username&&(i.category?(i.category in e||(e[i.category]=[]),e[i.category].push(i),e[i.category].sort((e,t)=>e.name.localeCompare(t.name))):e[""].push(i))}return e}get categories(){return Object.keys(this.labels).sort()}selectLabel(e){c.EventBus.$emit("EditDialog.AddLabel",e),this.visible=!1}toggleVisibility(e){e.visible=!e.visible,l.socket.emit("Label.Visibility.Set",{uuid:e.uuid,visible:e.visible})}addLabel(){if(""===this.newName)return;const e={uuid:a.uuidv4(),category:this.newCategory,name:this.newName,visible:!1,user:u.gameStore.username};u.gameStore.addLabel(e),l.socket.emit("Label.Add",e),this.newCategory="",this.newName=""}deleteLabel(e){u.gameStore.deleteLabel({uuid:e,user:u.gameStore.username}),l.socket.emit("Label.Delete",e)}};d=s.__decorate([o.default({components:{Modal:r.default}})],d),t.default=d},e4ea:function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0});const s=i("8f0a"),n=i("92b1"),o=i("5a5c"),r=i("8db6"),a=i("2469");class l extends a.Shape{constructor(e,t=[],i,s,n){super(e,i,s,n),this.type="polygon",this._vertices=[],this._vertices=t}get refPoint(){return this._refPoint}set refPoint(e){const t=e.subtract(this._refPoint);this._refPoint=e;for(let i=0;i({x:e.x,y:e.y}))})}fromDict(e){super.fromDict(e),this._vertices=e.vertices.map(e=>new s.GlobalPoint(e.x,e.y))}get points(){return this.vertices.map(e=>[e.x,e.y])}draw(e){super.draw(e),e.lineCap="round",e.lineJoin="round","fog"===this.strokeColour?e.strokeStyle=o.getFogColour():2===this.vertices.length?e.strokeStyle=this.fillColour:e.strokeStyle=this.strokeColour,"fog"===this.fillColour?e.fillStyle=o.getFogColour():e.fillStyle=this.fillColour,e.lineWidth=n.g2lz(2),e.beginPath(),e.moveTo(n.g2lx(this.vertices[0].x),n.g2ly(this.vertices[0].y));for(let t=1;t<=this.vertices.length;t++){const i=this.vertices[t%this.vertices.length];e.lineTo(n.g2lx(i.x),n.g2ly(i.y))}e.fill(),e.stroke()}contains(e){return this.getBoundingBox().contains(e)}center(e){return this.getBoundingBox().center()}visibleInCanvas(e){return this.getBoundingBox().visibleInCanvas(e)}snapToGrid(){}resizeToGrid(){}resize(e,t){0===e?this._refPoint=n.l2g(t):this._vertices[e-1]=n.l2g(t)}getBoundingBox(){let e=this.refPoint.x,t=this.refPoint.x,i=this.refPoint.y,n=this.refPoint.y;for(const s of this._vertices)s.xt&&(t=s.x),s.yn&&(n=s.y);return new r.BoundingRect(new s.GlobalPoint(e,i),t-e,n-i)}}t.Polygon=l},e5ca:function(e,t,i){"use strict";var s=function(){var e=this,t=e.$createElement,i=e._self._c||t;return e.selected?i("div",{staticClass:"tool-detail",style:{"--detailRight":e.detailRight,"--detailArrow":e.detailArrow}},[i("div",{directives:[{name:"show",rawName:"v-show",value:e.IS_DM,expression:"IS_DM"}]},[e._v("Mode")]),i("div",{directives:[{name:"show",rawName:"v-show",value:e.IS_DM,expression:"IS_DM"}],staticClass:"selectgroup"},e._l(e.modes,function(t){return i("div",{key:t,staticClass:"option",class:{"option-selected":e.modeSelect===t},on:{click:function(i){e.modeSelect=t}}},[e._v(e._s(t))])})),i("div",[e._v("Shape")]),i("div",{staticClass:"selectgroup"},e._l(e.shapes,function(t){return i("div",{key:t,staticClass:"option",class:{"option-selected":e.shapeSelect===t},on:{click:function(i){e.shapeSelect=t}}},[i("i",{staticClass:"fas",class:"fa-"+t})])})),i("div",[e._v("Colours")]),i("div",{staticClass:"selectgroup"},[i("color-picker",{staticClass:"option",attrs:{color:e.fillColour},on:{"update:color":function(t){e.fillColour=t}}}),i("color-picker",{staticClass:"option",attrs:{color:e.borderColour},on:{"update:color":function(t){e.borderColour=t}}})],1),i("div",{directives:[{name:"show",rawName:"v-show",value:"paint-brush"===e.shapeSelect,expression:"shapeSelect === 'paint-brush'"}]},[e._v("Brush size")]),i("input",{directives:[{name:"model",rawName:"v-model",value:e.brushSize,expression:"brushSize"},{name:"show",rawName:"v-show",value:"paint-brush"===e.shapeSelect,expression:"shapeSelect === 'paint-brush'"}],staticStyle:{"max-width":"100px"},attrs:{type:"text"},domProps:{value:e.brushSize},on:{input:function(t){t.target.composing||(e.brushSize=t.target.value)}}})]):e._e()},n=[];i.d(t,"a",function(){return s}),i.d(t,"b",function(){return n})},e756:function(e,t,i){},e7db:function(e,t,i){"use strict";var s=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{staticClass:"outer",on:{click:function(t){return t.target!==t.currentTarget?null:e.open(t)}}},[i("div",{staticClass:"current-color",style:e.transparent?"background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAMCAIAAADZF8uwAAAAGUlEQVQYV2M4gwH+YwCGIasIUwhT25BVBADtzYNYrHvv4gAAAABJRU5ErkJggg==)":"background-color:"+e.color,on:{click:function(t){return t.target!==t.currentTarget?null:e.open(t)}}}),i("div",{directives:[{name:"show",rawName:"v-show",value:e.display,expression:"display"}],staticClass:"mask",on:{click:function(t){return t.target!==t.currentTarget?null:e.closePicker(t)}}}),i("chrome-picker",{directives:[{name:"show",rawName:"v-show",value:e.display,expression:"display"}],ref:"chromePicker",style:{position:"fixed",left:e.left+"px",top:e.top+"px","z-index":9999},attrs:{value:e.color,tabindex:"-1"},on:{input:e.updateColor}})],1)},n=[];i.d(t,"a",function(){return s}),i.d(t,"b",function(){return n})},e8bb:function(e,t,i){"use strict";var s=function(){var e=this,t=e.$createElement,i=e._self._c||t;return e.selected?i("div",{staticClass:"tool-detail",style:{"--detailRight":e.detailRight,"--detailArrow":e.detailArrow}},[i("div",{attrs:{id:"accordion-container"}},e._l(e.categories,function(t){return i("accordion",{key:t,attrs:{title:""===t?"no category":t,showArrow:!1,items:e.labels[t],initialValues:e.initalValues[t]},on:{selectionupdate:e.updateSelection}})}))]):e._e()},n=[];i.d(t,"a",function(){return s}),i.d(t,"b",function(){return n})},e914:function(e,t,i){"use strict";i.r(t);var s=i("c9a2"),n=i("aa69");for(var o in n)"default"!==o&&function(e){i.d(t,e,function(){return n[e]})}(o);i("78c7");var r=i("2877"),a=Object(r["a"])(n["default"],s["a"],s["b"],!1,null,null,null);a.options.__file="manager.vue",t["default"]=a.exports},e94f:function(e,t,i){"use strict";i.r(t);var s=i("7aaa"),n=i.n(s);for(var o in s)"default"!==o&&function(e){i.d(t,e,function(){return s[e]})}(o);t["default"]=n.a},ea6a:function(e,t,i){"use strict";i.r(t);var s=i("d323"),n=i("6465");for(var o in n)"default"!==o&&function(e){i.d(t,e,function(){return n[e]})}(o);i("12d3");var r=i("2877"),a=Object(r["a"])(n["default"],s["a"],s["b"],!1,null,null,null);a.options.__file="tool.vue",t["default"]=a.exports},ea7c:function(e,t,i){"use strict";var s=i("2dad"),n=i.n(s);n.a},eb57:function(e,t,i){"use strict";var s=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("Modal",{attrs:{visible:e.visible},on:{close:e.close},scopedSlots:e._u([{key:"header",fn:function(t){return i("div",{staticClass:"modal-header",attrs:{draggable:"true"},on:{dragstart:t.dragStart,dragend:t.dragEnd}},[e._v(e._s(e.title))])}}])},[i("div",{staticClass:"modal-body"},[e._v("\n "+e._s(e.question)+"\n "),i("input",{directives:[{name:"model",rawName:"v-model",value:e.answer,expression:"answer"}],ref:"answer",attrs:{type:"text"},domProps:{value:e.answer},on:{keyup:function(t){return"button"in t||!e._k(t.keyCode,"enter",13,t.key,"Enter")?e.submit(t):null},input:function(t){t.target.composing||(e.answer=t.target.value)}}})]),i("div",{staticClass:"modal-footer"},[i("button",{on:{click:e.submit}},[e._v("Submit")])])])},n=[];i.d(t,"a",function(){return s}),i.d(t,"b",function(){return n})},ebb9:function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0});const s=i("9ab4"),n=s.__importDefault(i("a026")),o=s.__importDefault(i("65d9")),r=s.__importDefault(i("1516"));n.default.component("draggable",r.default);const a=s.__importDefault(i("d65f")),l=i("4a5b"),c=i("0bc6"),u=i("af17"),d=i("6f92"),h=i("f10f"),f=i("9cb7");let p=class extends n.default{constructor(){super(...arguments),this.visible=!1,this.data=[],this.currentActor=null,this.roundCounter=0,this.visionLock=!1,this.cameraLock=!1,this._activeTokens=[]}mounted(){u.EventBus.$on("Initiative.Clear",this.clear),u.EventBus.$on("Initiative.Remove",e=>this.removeInitiative(e)),u.EventBus.$on("Initiative.Show",()=>this.visible=!0),c.socket.on("Initiative.Set",e=>{this.data=e}),c.socket.on("Initiative.Turn.Set",e=>this.setTurn(e)),c.socket.on("Initiative.Turn.Update",e=>this.updateTurn(e,!1)),c.socket.on("Initiative.Round.Update",e=>this.setRound(e,!1)),c.socket.on("Initiative.Effect.New",e=>{const t=this.getActor(e.actor);void 0!==t&&this.createEffect(t,e.effect,!1)}),c.socket.on("Initiative.Effect.Update",e=>this.updateEffect(e.actor,e.effect,!1))}beforeDestroy(){u.EventBus.$off("Initiative.Clear"),u.EventBus.$off("Initiative.Remove"),u.EventBus.$off("Initiative.Show")}clear(){this.data=[],this.currentActor=null}getActor(e){return this.data.find(t=>t.uuid===e)}contains(e){return this.data.some(t=>t.uuid===e)}owns(e){if(h.gameStore.IS_DM)return!0;const t=d.layerManager.UUIDMap.get(e.uuid);return void 0!==t&&t.owners.includes(h.gameStore.username)}getDefaultEffect(){return{uuid:l.uuidv4(),name:"New Effect",turns:10}}fakeSetData(e){e.setData("Hack","")}syncInitiative(e){c.socket.emit("Initiative.Update",e)}addInitiative(e){const t=this.data.findIndex(t=>t.uuid===e.uuid);t>=0||(void 0===e.initiative&&(e.initiative=0),this.syncInitiative(e))}removeInitiative(e){const t=this.data.findIndex(t=>t.uuid===e);if(t<0||this.data[t].group)return;this.syncInitiative({uuid:e});const i=d.layerManager.UUIDMap.get(e);void 0!==i&&i.showHighlight&&(i.showHighlight=!1,d.layerManager.getLayer(i.layer).invalidate(!0))}updateOrder(){h.gameStore.IS_DM&&c.socket.emit("Initiative.Set",this.data.map(e=>e.uuid))}updateTurn(e,t){if(!h.gameStore.IS_DM&&t)return;this.currentActor=e;const i=this.data.find(t=>t.uuid===e);if(void 0!==i){if(i.effects)for(let e=i.effects.length-1;e>=0;e--)i.effects[e].turns<=0?i.effects.splice(e,1):i.effects[e].turns--;if(this.visionLock&&(null!==e&&h.gameStore.ownedtokens.includes(e)?h.gameStore.setActiveTokens([e]):h.gameStore.setActiveTokens([])),this.cameraLock&&null!==e){const t=d.layerManager.UUIDMap.get(e);void 0!==t&&t.ownedBy()&&f.gameManager.setCenterPosition(t.center())}t&&c.socket.emit("Initiative.Turn.Update",e)}}setRound(e,t){!h.gameStore.IS_DM&&t||(this.roundCounter=e,t&&c.socket.emit("Initiative.Round.Update",e))}setTurn(e){this.currentActor=e}nextTurn(){if(!h.gameStore.IS_DM)return;const e=this.data,t=e[(e.findIndex(e=>e.uuid===this.currentActor)+1)%e.length];this.data[0].uuid===t.uuid&&this.setRound(this.roundCounter+1,!0),this.updateTurn(t.uuid,!0)}toggleHighlight(e,t){const i=d.layerManager.UUIDMap.get(e.uuid);void 0!==i&&(i.showHighlight=t,d.layerManager.getLayer(i.layer).invalidate(!0))}toggleOption(e,t){this.owns(e)&&(e[t]=!e[t],this.syncInitiative(e))}createEffect(e,t,i){this.owns(e)&&(e.effects.push(t),i&&c.socket.emit("Initiative.Effect.New",{actor:e.uuid,effect:t}))}syncEffect(e,t){this.owns(e)&&c.socket.emit("Initiative.Effect.Update",{actor:e.uuid,effect:t})}updateEffect(e,t,i){const s=this.data.find(t=>t.uuid===e);if(void 0===s)return;const n=s.effects.findIndex(e=>e.uuid===t.uuid);void 0!==n&&(s.effects[n]=t,i?this.syncEffect(s,t):this.$forceUpdate())}toggleVisionLock(){this.visionLock=!this.visionLock,this.visionLock?(this._activeTokens=[...h.gameStore._activeTokens],null!==this.currentActor&&h.gameStore.ownedtokens.includes(this.currentActor)&&h.gameStore.setActiveTokens([this.currentActor])):h.gameStore.setActiveTokens(this._activeTokens)}};p=s.__decorate([o.default({components:{Modal:a.default,draggable:r.default}})],p),t.default=p},ee96:function(e,t,i){},f086:function(e,t,i){"use strict";i.r(t);var s=i("a112"),n=i("7ba5");for(var o in n)"default"!==o&&function(e){i.d(t,e,function(){return n[e]})}(o);i("01be");var r=i("2877"),a=Object(r["a"])(n["default"],s["a"],s["b"],!1,null,"674cf937",null);a.options.__file="selection_info.vue",t["default"]=a.exports},f10f:function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0});const s=i("9ab4"),n=s.__importDefault(i("a026")),o=i("6fc5"),r=i("0bc6"),a=i("2b48"),l=i("6f92"),c=i("92b1"),u=i("5a5c"),d=i("99e3"),h=i("d6be"),f=i("3a0b");let p=class extends o.VuexModule{constructor(){super(...arguments),this.layers=[],this.selectedLayerIndex=-1,this.boardInitialized=!1,this.locations=[],this.assets={},this.notes=[],this.IS_DM=!1,this.FAKE_PLAYER=!1,this.gridSize=50,this.username="",this.roomName="",this.roomCreator="",this.invitationCode="",this.gridColour="rgba(0, 0, 0, 1)",this.fowColour="rgba(0, 0, 0, 1)",this.rulerColour="rgba(255, 0, 0, 1)",this.panX=0,this.panY=0,this.zoomDisplay=.5,this.unitSize=5,this.useGrid=!0,this.fullFOW=!1,this.fowOpacity=.3,this.fowLOS=!1,this.locationName="",this.visionSources=[],this.visionBlockers=[],this.annotations=[],this.movementblockers=[],this.ownedtokens=[],this._activeTokens=[],this.BV=Object.freeze(new d.BoundingVolume([])),this.visionMode="bvh",this.drawTEContour=!1,this.visionRangeMin=1640,this.visionRangeMax=3281,this.clipboard=[],this.labels={},this.filterNoLabel=!1,this.labelFilters=[],this.showUI=!0}get selectedLayer(){return this.layers[this.selectedLayerIndex]}get zoomFactor(){return u.zoomValue(this.zoomDisplay)}get activeTokens(){return 0===this._activeTokens.length?this.ownedtokens:this._activeTokens}setFakePlayer(e){this.FAKE_PLAYER=e,this.IS_DM=!e,l.layerManager.invalidate()}setZoomDisplay(e){e!==this.zoomDisplay&&(e<0&&(e=0),e>1&&(e=1),this.zoomDisplay=e,l.layerManager.invalidate())}setVisionMode(e){this.visionMode=e.mode,e.sync&&r.socket.emit("Location.Options.Set",{vision_mode:e.mode})}setBoardInitialized(e){this.boardInitialized=e}toggleUnlabeledFilter(){this.filterNoLabel=!this.filterNoLabel}addLabel(e){n.default.set(this.labels,e.uuid,e)}setLabelFilters(e){this.labelFilters=e}setLabelVisibility(e){e.uuid in this.labels&&(this.labels[e.uuid].visible=e.visible)}deleteLabel(e){if(!(e.uuid in this.labels))return;const t=this.labels[e.uuid],i=new Set;for(const s of l.layerManager.UUIDMap.values()){const e=s.labels.indexOf(t);e>=0&&(s.labels.splice(e,1),i.add(s.layer))}for(const s of i)l.layerManager.getLayer(s).invalidate(!1);n.default.delete(this.labels,e.uuid)}setDM(e){this.IS_DM=e}setUsername(e){this.username=e}setRoomName(e){this.roomName=e}setRoomCreator(e){this.roomCreator=e}setInvitationCode(e){this.invitationCode=e}addLayer(e){this.layers.push(e),-1===this.selectedLayerIndex&&(this.selectedLayerIndex=this.layers.indexOf(e))}selectLayer(e){const t=this.layers.indexOf(e.name);t>=0&&(this.selectedLayerIndex=t),e.sync&&r.socket.emit("Client.ActiveLayer.Set",e.name)}newNote(e){this.notes.push(e.note),e.sync&&r.socket.emit("Note.New",e.note)}setAssets(e){this.assets=e}setLocations(e){this.locations=e}resetLayerInfo(){this.layers=[],this.selectedLayerIndex=-1}recalculateVision(e=!1){this.boardInitialized&&("triangle"===this.visionMode?h.triangulate("vision",e):this.BV=Object.freeze(new d.BoundingVolume(this.visionBlockers)))}recalculateMovement(e=!1){this.boardInitialized&&"triangle"===this.visionMode&&h.triangulate("movement",e)}updateZoom(e){if(e.newZoomDisplay===this.zoomDisplay)return;e.newZoomDisplay<0&&(e.newZoomDisplay=0),e.newZoomDisplay>1&&(e.newZoomDisplay=1);const t=c.g2l(e.zoomLocation);this.zoomDisplay=e.newZoomDisplay;const i=c.l2g(t),s=i.subtract(e.zoomLocation);this.panX+=s.x,this.panY+=s.y,l.layerManager.invalidate(),a.sendClientOptions()}setGridColour(e){this.gridColour=e.colour,l.layerManager.getGridLayer().drawGrid(),e.sync&&r.socket.emit("Client.Options.Set",{gridColour:e.colour})}setFOWColour(e){this.fowColour=e.colour,l.layerManager.invalidate(),e.sync&&r.socket.emit("Client.Options.Set",{fowColour:e.colour})}setRulerColour(e){this.rulerColour=e.colour,e.sync&&r.socket.emit("Client.Options.Set",{rulerColour:e.colour})}setPanX(e){this.panX=e}setPanY(e){this.panY=e}increasePanX(e){this.panX+=e}increasePanY(e){this.panY+=e}setUnitSize(e){this.unitSize!==e.unitSize&&e.unitSize>0&&e.unitSize<1/0&&(this.unitSize=e.unitSize,l.layerManager.invalidate(),e.sync&&r.socket.emit("Location.Options.Set",{unit_size:e.unitSize}))}setUseGrid(e){if(this.useGrid!==e.useGrid){this.useGrid=e.useGrid;const t=l.layerManager.getGridLayer();e.useGrid?t.canvas.style.display="block":t.canvas.style.display="none",e.sync&&r.socket.emit("Location.Options.Set",{use_grid:e.useGrid})}}setGridSize(e){if(this.gridSize!==e.gridSize&&e.gridSize>0){this.gridSize=e.gridSize;const t=l.layerManager.getGridLayer();void 0!==t&&t.drawGrid(),e.sync&&r.socket.emit("Gridsize.Set",e.gridSize)}}setVisionRangeMin(e){this.visionRangeMin=e.value,l.layerManager.invalidateLight(),e.sync&&r.socket.emit("Location.Options.Set",{vision_min_range:e.value})}setVisionRangeMax(e){this.visionRangeMax=Math.max(e.value,this.visionRangeMin),l.layerManager.invalidateLight(),e.sync&&r.socket.emit("Location.Options.Set",{vision_max_range:this.visionRangeMax})}setFullFOW(e){this.fullFOW!==e.fullFOW&&(this.fullFOW=e.fullFOW,l.layerManager.invalidateLight(),e.sync&&r.socket.emit("Location.Options.Set",{full_fow:e.fullFOW}))}setFOWOpacity(e){this.fowOpacity=e.fowOpacity,l.layerManager.invalidateLight(),e.sync&&r.socket.emit("Location.Options.Set",{fow_opacity:e.fowOpacity})}setLineOfSight(e){this.fowLOS!==e.fowLOS&&(this.fowLOS=e.fowLOS,l.layerManager.invalidate(),e.sync&&r.socket.emit("Location.Options.Set",{fow_los:e.fowLOS}))}setLocationName(e){this.locationName=e}updateNote(e){const t=this.notes.find(t=>t.uuid===e.note.uuid);void 0!==t&&(t.title=e.note.title,t.text=e.note.text,e.sync&&r.socket.emit("Note.Update",t))}removeNote(e){this.notes=this.notes.filter(t=>t.uuid!==e.note.uuid),e.sync&&r.socket.emit("Note.Remove",e.note.uuid)}toggleUI(){this.showUI=!this.showUI}setClipboard(e){this.clipboard=e}setActiveTokens(e){this._activeTokens=e,l.layerManager.invalidateLight()}addActiveToken(e){this._activeTokens.push(e),l.layerManager.invalidateLight()}removeActiveToken(e){0===this._activeTokens.length&&(this._activeTokens=[...this.ownedtokens]),this._activeTokens.splice(this._activeTokens.indexOf(e),1),l.layerManager.invalidateLight()}clear(){this.context.state.visionSources=[],this.context.state.visionBlockers=[],this.context.state.ownedtokens=[],this.context.state.annotations=[],this.context.state.movementblockers=[],this.context.state.notes=[],this.context.commit("recalculateVision"),this.context.commit("recalculateMovement")}};s.__decorate([o.Mutation],p.prototype,"setFakePlayer",null),s.__decorate([o.Mutation],p.prototype,"setZoomDisplay",null),s.__decorate([o.Mutation],p.prototype,"setVisionMode",null),s.__decorate([o.Mutation],p.prototype,"setBoardInitialized",null),s.__decorate([o.Mutation],p.prototype,"toggleUnlabeledFilter",null),s.__decorate([o.Mutation],p.prototype,"addLabel",null),s.__decorate([o.Mutation],p.prototype,"setLabelFilters",null),s.__decorate([o.Mutation],p.prototype,"setLabelVisibility",null),s.__decorate([o.Mutation],p.prototype,"deleteLabel",null),s.__decorate([o.Mutation],p.prototype,"setDM",null),s.__decorate([o.Mutation],p.prototype,"setUsername",null),s.__decorate([o.Mutation],p.prototype,"setRoomName",null),s.__decorate([o.Mutation],p.prototype,"setRoomCreator",null),s.__decorate([o.Mutation],p.prototype,"setInvitationCode",null),s.__decorate([o.Mutation],p.prototype,"addLayer",null),s.__decorate([o.Mutation],p.prototype,"selectLayer",null),s.__decorate([o.Mutation],p.prototype,"newNote",null),s.__decorate([o.Mutation],p.prototype,"setAssets",null),s.__decorate([o.Mutation],p.prototype,"setLocations",null),s.__decorate([o.Mutation],p.prototype,"resetLayerInfo",null),s.__decorate([o.Mutation],p.prototype,"recalculateVision",null),s.__decorate([o.Mutation],p.prototype,"recalculateMovement",null),s.__decorate([o.Mutation],p.prototype,"updateZoom",null),s.__decorate([o.Mutation],p.prototype,"setGridColour",null),s.__decorate([o.Mutation],p.prototype,"setFOWColour",null),s.__decorate([o.Mutation],p.prototype,"setRulerColour",null),s.__decorate([o.Mutation],p.prototype,"setPanX",null),s.__decorate([o.Mutation],p.prototype,"setPanY",null),s.__decorate([o.Mutation],p.prototype,"increasePanX",null),s.__decorate([o.Mutation],p.prototype,"increasePanY",null),s.__decorate([o.Mutation],p.prototype,"setUnitSize",null),s.__decorate([o.Mutation],p.prototype,"setUseGrid",null),s.__decorate([o.Mutation],p.prototype,"setGridSize",null),s.__decorate([o.Mutation],p.prototype,"setVisionRangeMin",null),s.__decorate([o.Mutation],p.prototype,"setVisionRangeMax",null),s.__decorate([o.Mutation],p.prototype,"setFullFOW",null),s.__decorate([o.Mutation],p.prototype,"setFOWOpacity",null),s.__decorate([o.Mutation],p.prototype,"setLineOfSight",null),s.__decorate([o.Mutation],p.prototype,"setLocationName",null),s.__decorate([o.Mutation],p.prototype,"updateNote",null),s.__decorate([o.Mutation],p.prototype,"removeNote",null),s.__decorate([o.Mutation],p.prototype,"toggleUI",null),s.__decorate([o.Mutation],p.prototype,"setClipboard",null),s.__decorate([o.Mutation],p.prototype,"setActiveTokens",null),s.__decorate([o.Mutation],p.prototype,"addActiveToken",null),s.__decorate([o.Mutation],p.prototype,"removeActiveToken",null),s.__decorate([o.Action],p.prototype,"clear",null),p=s.__decorate([o.Module({dynamic:!0,store:f.rootStore,name:"game",namespaced:!0})],p),t.gameStore=o.getModule(p)},f19c:function(e,t,i){"use strict";var s=i("602f"),n=i.n(s);n.a},f2d0:function(e,t,i){},f30c:function(e,t,i){"use strict";i.r(t);var s=i("dc37"),n=i.n(s);for(var o in s)"default"!==o&&function(e){i.d(t,e,function(){return s[e]})}(o);t["default"]=n.a},f312:function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.aurasFromServer=(e=>{const t=[];for(const i of e)t.push({uuid:i.uuid,visionSource:i.vision_source,visible:i.visible,name:i.name,value:i.value,dim:i.dim,colour:i.colour});return t}),t.aurasToServer=(e=>{const t=[];for(const i of e)t.push({uuid:i.uuid,vision_source:i.visionSource,visible:i.visible,name:i.name,value:i.value,dim:i.dim,colour:i.colour});return t})},f51a:function(e,t,i){"use strict";i.r(t);var s=i("e0e9"),n=i.n(s);for(var o in s)"default"!==o&&function(e){i.d(t,e,function(){return s[e]})}(o);t["default"]=n.a},f551:function(e,t,i){"use strict";i.r(t);var s=i("2686"),n=i("1dd6");for(var o in n)"default"!==o&&function(e){i.d(t,e,function(){return n[e]})}(o);i("28b6");var r=i("2877"),a=Object(r["a"])(n["default"],s["a"],s["b"],!1,null,"7a3669fd",null);a.options.__file="note.vue",t["default"]=a.exports},f5fe:function(e,t,i){"use strict";i.r(t);var s=i("a014"),n=i("7018");for(var o in n)"default"!==o&&function(e){i.d(t,e,function(){return n[e]})}(o);i("ea7c");var r=i("2877"),a=Object(r["a"])(n["default"],s["a"],s["b"],!1,null,"07fc8ff2",null);a.options.__file="initiative.vue",t["default"]=a.exports},f692:function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0});const s=i("4185"),n=i("b906"),o=i("38c9"),r=i("bab4"),a=i("6f92"),l=i("f10f");function c(e){const t=document.createElement("canvas");let i;t.style.zIndex=a.layerManager.layers.length.toString(),t.width=window.innerWidth,t.height=window.innerHeight,i="grid"===e.type_?new o.GridLayer(t,e.name):"fow"===e.type_?new s.FOWLayer(t,e.name):"fow-players"===e.type_?new n.FOWPlayersLayer(t,e.name):new r.Layer(t,e.name),i.selectable=e.selectable,i.playerEditable=e.player_editable,a.layerManager.addLayer(i);const c=document.getElementById("layers");null!==c?("fow-players"!==e.name&&c.appendChild(t),"grid"===e.type_&&e.size&&l.gameStore.setGridSize({gridSize:e.size,sync:!1}),i.setShapes(e.shapes)):console.warn("Layers div is missing, this will prevent the main game board from loading!")}t.createLayer=c},f74c:function(e,t,i){"use strict";i.r(t);var s=i("1fd5"),n=i("29a2");for(var o in n)"default"!==o&&function(e){i.d(t,e,function(){return n[e]})}(o);i("7eb7");var r=i("2877"),a=Object(r["a"])(n["default"],s["a"],s["b"],!1,null,"e477c214",null);a.options.__file="labels.vue",t["default"]=a.exports},f8b3:function(e,t,i){"use strict";i.r(t);var s=i("d8ee"),n=i.n(s);for(var o in s)"default"!==o&&function(e){i.d(t,e,function(){return s[e]})}(o);t["default"]=n.a},f974:function(e,t,i){"use strict";var s=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",[i("div",{attrs:{id:"toolselect"}},[i("ul",e._l(e.visibleTools,function(t){return i("li",{directives:[{name:"show",rawName:"v-show",value:e.toolVisible(t),expression:"toolVisible(tool)"}],key:t,ref:t+"-selector",refInFor:!0,class:{"tool-selected":e.currentTool===t},on:{mousedown:function(i){e.currentTool=t}}},[i("a",{attrs:{href:"#"}},[e._v(e._s(t))])])}))]),i("div",[[i("select-tool",{directives:[{name:"show",rawName:"v-show",value:"Select"===e.currentTool,expression:"currentTool === 'Select'"}],ref:"selectTool"}),i("pan-tool",{directives:[{name:"show",rawName:"v-show",value:"Pan"===e.currentTool,expression:"currentTool === 'Pan'"}]}),i("keep-alive",[i("draw-tool",{directives:[{name:"show",rawName:"v-show",value:"Draw"===e.currentTool,expression:"currentTool === 'Draw'"}]})],1),i("ruler-tool",{directives:[{name:"show",rawName:"v-show",value:"Ruler"===e.currentTool,expression:"currentTool === 'Ruler'"}]}),i("map-tool",{directives:[{name:"show",rawName:"v-show",value:"Map"===e.currentTool,expression:"currentTool === 'Map'"}]}),i("filter-tool",{directives:[{name:"show",rawName:"v-show",value:"Filter"===e.currentTool,expression:"currentTool === 'Filter'"}]}),i("vision-tool",{directives:[{name:"show",rawName:"v-show",value:"Vision"===e.currentTool,expression:"currentTool === 'Vision'"}]}),i("shape-menu",{ref:"shapecontext"}),i("createtoken-dialog",{ref:"createtokendialog"})]],2)])},n=[];i.d(t,"a",function(){return s}),i.d(t,"b",function(){return n})},f994:function(e,t,i){"use strict";var s=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("form",{on:{focusin:e.focusin,focusout:e.focusout,submit:function(t){return t.preventDefault(),e.login(t)}}},[i("fieldset",[i("legend",{staticClass:"legend"},[e._v("PlanarAlly")]),i("div",{staticClass:"input"},[i("input",{directives:[{name:"model",rawName:"v-model",value:e.username,expression:"username"}],attrs:{type:"text",name:"username",placeholder:"Username",autocomplete:"username",required:""},domProps:{value:e.username},on:{input:function(t){t.target.composing||(e.username=t.target.value)}}}),e._m(0)]),i("div",{staticClass:"input"},[i("input",{directives:[{name:"model",rawName:"v-model",value:e.password,expression:"password"}],attrs:{type:"password",name:"password",placeholder:"Password",autocomplete:"current-password",required:""},domProps:{value:e.password},on:{input:function(t){t.target.composing||(e.password=t.target.value)}}}),e._m(1)]),i("div",{staticStyle:{display:"flex"}},[i("button",{staticStyle:{visibility:"hidden",display:"none"},attrs:{type:"submit",name:"login"}}),i("button",{staticClass:"submit",attrs:{type:"button",name:"register",title:"Register"},on:{click:e.register}},[i("i",{staticClass:"fas fa-plus"})]),e._m(2)])]),e.error?i("div",{staticClass:"feedback"},[i("p",{staticClass:"error"},[i("strong",[e._v("Error:")]),e._v("\n "+e._s(e.error)+"\n ")])]):e._e()])},n=[function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("span",[i("i",{staticClass:"fas fa-user-circle"})])},function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("span",[i("i",{staticClass:"fas fa-lock"})])},function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("button",{staticClass:"submit",attrs:{type:"submit",name:"login",title:"Login"}},[i("i",{staticClass:"fas fa-arrow-right"})])}];i.d(t,"a",function(){return s}),i.d(t,"b",function(){return n})},fbdd:function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0});const s=i("9ab4"),n=s.__importDefault(i("a026")),o=s.__importDefault(i("65d9")),r=s.__importDefault(i("d065")),a=i("4a5b"),l=i("0bc6"),c=i("af17"),u=i("6f92");let d=class extends n.default{constructor(){super(...arguments),this.shape=null}mounted(){c.EventBus.$on("SelectionInfo.Shape.Set",e=>{this.shape=e})}beforeDestroy(){c.EventBus.$off("SelectionInfo.Shape.Set")}openEditDialog(){this.$refs.editDialog.visible=!0}changeValue(e,t){null!==this.shape&&a.getRef("prompt").prompt(`New ${e.name} value:`,`Updating ${e.name}`).then(i=>{if(null===this.shape)return;const s=e.value;"+"===i[0]||"-"===i[0]?e.value+=parseInt(i,10):e.value=parseInt(i,10),isNaN(e.value)&&(e.value=s),l.socket.emit("Shape.Update",{shape:this.shape.asDict(),redraw:t,temporary:!1}),t&&u.layerManager.invalidate()},()=>{})}};d=s.__decorate([o.default({components:{"edit-dialog":r.default}})],d),t.default=d},fcac:function(e,t,i){},fe11:function(e,t,i){},fe80:function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0});const s=i("0bc6"),n=i("af17"),o=i("8f0a"),r=i("6f92"),a=i("f692"),l=i("9cb7"),c=i("f10f"),u=i("5f86"),d=i("5a5c");s.socket.on("connect",()=>{console.log("Connected")}),s.socket.on("disconnect",()=>{console.log("Disconnected")}),s.socket.on("connect_error",e=>{console.error("Could not connect to game session."),u.router.push("/dashboard")}),s.socket.on("error",e=>{console.error("Game session does not exist."),u.router.push("/dashboard")}),s.socket.on("redirect",e=>{console.log("redirecting"),u.router.push(e)}),s.socket.on("Room.Info.Set",e=>{c.gameStore.setRoomName(e.name),c.gameStore.setRoomCreator(e.creator),c.gameStore.setInvitationCode(e.invitationCode)}),s.socket.on("Username.Set",e=>{c.gameStore.setUsername(e),c.gameStore.setDM(e===window.location.pathname.split("/")[2])}),s.socket.on("Client.Options.Set",e=>{c.gameStore.setGridColour({colour:e.grid_colour,sync:!1}),c.gameStore.setFOWColour({colour:e.fow_colour,sync:!1}),c.gameStore.setRulerColour({colour:e.ruler_colour,sync:!1}),c.gameStore.setPanX(e.pan_x),c.gameStore.setPanY(e.pan_y),c.gameStore.setZoomDisplay(d.zoomDisplay(e.zoom_factor)),e.active_layer&&r.layerManager.selectLayer(e.active_layer,!1),void 0!==r.layerManager.getGridLayer()&&r.layerManager.getGridLayer().invalidate()}),s.socket.on("Location.Set",e=>{void 0!==e.name&&c.gameStore.setLocationName(e.name),void 0!==e.unit_size&&c.gameStore.setUnitSize({unitSize:e.unit_size,sync:!1}),void 0!==e.use_grid&&c.gameStore.setUseGrid({useGrid:e.use_grid,sync:!1}),void 0!==e.full_fow&&c.gameStore.setFullFOW({fullFOW:e.full_fow,sync:!1}),void 0!==e.fow_opacity&&c.gameStore.setFOWOpacity({fowOpacity:e.fow_opacity,sync:!1}),void 0!==e.fow_los&&c.gameStore.setLineOfSight({fowLOS:e.fow_los,sync:!1}),void 0!==e.vision_min_range&&c.gameStore.setVisionRangeMin({value:e.vision_min_range,sync:!1}),void 0!==e.vision_max_range&&c.gameStore.setVisionRangeMax({value:e.vision_max_range,sync:!1}),void 0!==e.vision_mode&&(c.gameStore.setVisionMode({mode:e.vision_mode,sync:!1}),c.gameStore.recalculateVision(),c.gameStore.recalculateMovement())}),s.socket.on("Position.Set",e=>{l.gameManager.setCenterPosition(new o.GlobalPoint(e.x,e.y))}),s.socket.on("Notes.Set",e=>{for(const t of e)c.gameStore.newNote({note:t,sync:!1})}),s.socket.on("Asset.List.Set",e=>{c.gameStore.setAssets(e)}),s.socket.on("Board.Set",e=>{c.gameStore.clear(),c.gameStore.setLocations(e.locations),document.getElementById("layers").innerHTML="",c.gameStore.resetLayerInfo(),r.layerManager.reset();for(const t of e.layers)a.createLayer(t);r.layerManager.selectLayer(r.layerManager.getLayer().name,!1),n.EventBus.$emit("Initiative.Clear"),c.gameStore.recalculateVision(),c.gameStore.recalculateMovement(),c.gameStore.setBoardInitialized(!0)}),s.socket.on("Gridsize.Set",e=>{c.gameStore.setGridSize({gridSize:e,sync:!1})}),s.socket.on("Shape.Add",e=>{l.gameManager.addShape(e)}),s.socket.on("Shape.Remove",e=>{if(!r.layerManager.UUIDMap.has(e.uuid))return void console.log("Attempted to remove an unknown shape");if(!r.layerManager.hasLayer(e.layer))return void console.log(`Attempted to remove shape from an unknown layer ${e.layer}`);const t=r.layerManager.getLayer(e.layer);t.removeShape(r.layerManager.UUIDMap.get(e.uuid),!1),t.invalidate(!1)}),s.socket.on("Shape.Order.Set",e=>{if(!r.layerManager.UUIDMap.has(e.shape.uuid))return void console.log("Attempted to move the shape order of an unknown shape");if(!r.layerManager.hasLayer(e.shape.layer))return void console.log(`Attempted to remove shape from an unknown layer ${e.shape.layer}`);const t=r.layerManager.UUIDMap.get(e.shape.uuid),i=r.layerManager.getLayer(t.layer);i.moveShapeOrder(t,e.index,!1)}),s.socket.on("Shape.Layer.Change",e=>{const t=r.layerManager.UUIDMap.get(e.uuid);void 0!==t&&t.moveLayer(e.layer,!1)}),s.socket.on("Shape.Update",e=>{l.gameManager.updateShape(e)}),s.socket.on("Temp.Clear",e=>{e.forEach(e=>{if(!r.layerManager.UUIDMap.has(e.uuid))return void console.log("Attempted to remove an unknown temporary shape");if(!r.layerManager.hasLayer(e.layer))return void console.log(`Attempted to remove shape from an unknown layer ${e.layer}`);const t=r.layerManager.UUIDMap.get(e.uuid);r.layerManager.getLayer(e.layer).removeShape(t,!1)})}),s.socket.on("Labels.Set",e=>{for(const t of e)c.gameStore.addLabel(t)}),s.socket.on("Label.Visibility.Set",e=>{c.gameStore.setLabelVisibility(e)}),s.socket.on("Label.Add",e=>{c.gameStore.addLabel(e)}),s.socket.on("Label.Delete",e=>{c.gameStore.deleteLabel(e)}),s.socket.on("Labels.Filter.Add",e=>{c.gameStore.labelFilters.push(e),r.layerManager.invalidate()}),s.socket.on("Labels.Filter.Remove",e=>{const t=c.gameStore.labelFilters.indexOf(e);t>=0&&(c.gameStore.labelFilters.splice(t,1),r.layerManager.invalidate())}),s.socket.on("Labels.Filters.Set",e=>{c.gameStore.setLabelFilters(e)})}}); +//# sourceMappingURL=app-legacy.b2080500.js.map \ No newline at end of file diff --git a/server/static/js/app-legacy.b2080500.js.map b/server/static/js/app-legacy.b2080500.js.map new file mode 100644 index 000000000..f9c847b49 --- /dev/null +++ b/server/static/js/app-legacy.b2080500.js.map @@ -0,0 +1 @@ +{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./src/game/shapes/text.ts","webpack:///./src/game/ui/selection/selection_info.vue?cd1b","webpack:///./src/game/ui/selection/shapecontext.vue","webpack:///./src/App.vue?5b85","webpack:///./src/game/ui/menu/menu.vue?1580","webpack:///./src/core/components/modals/prompt.vue?d33d","webpack:///./src/core/components/colorpicker.vue?4d88","webpack:///./src/game/game.vue","webpack:///./src/game/api/socket.ts","webpack:///./src/assetManager/manager.vue?5633","webpack:///./src/game/ui/menu/asset_node.vue","webpack:///./src/game/ui/tools/selectcontext.vue?02dc","webpack:///./src/auth/login.vue","webpack:///./src/game/visibility/te/draw.ts","webpack:///./src/core/components/accordion.vue","webpack:///./src/game/ui/tools/tool.vue?5b17","webpack:///./src/game/shapes/circulartoken.ts","webpack:///./src/game/ui/annotation.ts","webpack:///./src/game/ui/menu/menu.vue","webpack:///./src/core/components/contextmenu.vue","webpack:///./src/game/ui/note.vue?49b7","webpack:///./src/auth/login.vue?c159","webpack:///./src/game/ui/labels.vue?e17e","webpack:///./src/game/ui/labels.vue?1ecb","webpack:///./src/game/shapes/utils.ts","webpack:///./src/core/components/modals/confirm.vue?e6fb","webpack:///./src/game/ui/tools/select.vue?aed4","webpack:///./src/game/ui/tools/select.vue?29b9","webpack:///./src/game/shapes/shape.ts","webpack:///./src/core/components/modals/prompt.vue?d457","webpack:///./src/game/ui/note.vue?a34d","webpack:///./src/game/ui/note.vue?23aa","webpack:///./src/core/components/modals/modal.vue?33b9","webpack:///./src/game/ui/tools/select.vue?49f9","webpack:///./src/game/ui/tools/utils.ts","webpack:///./src/game/ui/note.vue?a508","webpack:///./src/game/ui/labels.vue?15af","webpack:///./src/game/ui/tools/vision.vue?4f0c","webpack:///./src/game/api/utils.ts","webpack:///./src/game/ui/menu/asset_node.vue?f519","webpack:///./src/core/components/contextmenu.vue?f03a","webpack:///./src/core/components/contextmenu.vue?7efa","webpack:///./src/assetManager/store.ts","webpack:///./src/core/components/contextmenu.vue?50e1","webpack:///./src/game/ui/selection/shapecontext.vue?1cf6","webpack:///./src/game/ui/tools/map.vue?284a","webpack:///./src/game/layers/grid.ts","webpack:///./src/store.ts","webpack:///./src/core/components/colorpicker.vue","webpack:///./src/game/ui/tools/vision.vue?48bb","webpack:///./src/auth/login.vue?3521","webpack:///./src/App.vue?2e53","webpack:///./src/App.vue","webpack:///./src/game/game.vue?b3a0","webpack:///./src/game/game.vue?f5c6","webpack:///./src/game/layers/fow.ts","webpack:///./src/core/components/load.vue?18c2","webpack:///./src/game/ui/selection/edit_dialog.vue?db09","webpack:///./src/game/ui/selection/edit_dialog.vue?6334","webpack:///./src/game/shapes/circle.ts","webpack:///./src/game/ui/tools/map.vue?a3ab","webpack:///./src/core/components/load.vue","webpack:///./src/game/ui/tools/pan.ts","webpack:///./src/game/ui/tools/selectcontext.vue","webpack:///./src/core/utils.ts","webpack:///./src/assetManager/contextMenu.vue","webpack:///./src/game/visibility/te/triag.ts","webpack:///./src/game/ui/menu/asset_node.vue?1f27","webpack:///./src/game/ui/tools/vision.vue?d25b","webpack:///./src/game/ui/selection/edit_dialog.vue?1206","webpack:///./src/core/components/modals/modal.vue?44ae","webpack:///./src/assetManager/socket.ts","webpack:///./src/game/ui/tools/filter.vue?ee60","webpack:///./src/core/components/accordion.vue?3e09","webpack:///./src/game/ui/tools/vision.vue?2e9f","webpack:///./src/game/ui/tools/vision.vue?9b57","webpack:///./src/game/game.vue?5550","webpack:///./src/game/shapes/multiline.ts","webpack:///./src/game/ui/tools/draw.vue","webpack:///./src/game/utils.ts","webpack:///./src/game/ui/tools/createtoken_modal.vue?d0df","webpack:///./src/game/ui/note.vue?f9bd","webpack:///./src/game/ui/tools/draw.vue?b96d","webpack:///./src/game/shapes/line.ts","webpack:///./src/router.ts","webpack:///./src/game/ui/tools/tool.vue?d136","webpack:///./src/game/ui/tools/tools.vue","webpack:///./src/game/ui/tools/tool.vue?8ce3","webpack:///./src/game/shapes/asset.ts","webpack:///./src/game/visibility/te/cdt.ts","webpack:///./src/game/ui/tools/draw.vue?1261","webpack:///./src/game/layers/manager.ts","webpack:///./src/game/ui/initiative.vue?c7e1","webpack:///./src/game/ui/tools/createtoken_modal.vue","webpack:///./src/game/visibility/bvh/node.ts","webpack:///./src/game/ui/tools/createtoken_modal.vue?f918","webpack:///./src/game/events/keyboard.ts","webpack:///./src/assetManager/manager.vue?433f","webpack:///./src/game/ui/selection/shapecontext.vue?17f5","webpack:///./src/game/ui/tools/tools.vue?25b2","webpack:///./src/game/ui/selection/selection_info.vue?2310","webpack:///./src/core/components/modals/modal.vue?09d2","webpack:///./src/game/ui/labels.vue?e465","webpack:///./src/core/components/contextmenu.vue?a0a2","webpack:///./src/game/ui/menu/menu.vue?8bfc","webpack:///./src/game/ui/menu/menu.vue?ae2a","webpack:///./src/core/components/modals/prompt.vue?4e1b","webpack:///./src/core/components/accordion.vue?3d26","webpack:///./src/core/components/load.vue?4ab2","webpack:///./src/core/components/load.vue?0f87","webpack:///./src/game/ui/menu/menu.vue?8b23","webpack:///./src/game/shapes/boundingrect.ts","webpack:///./src/dashboard/main.vue?5e14","webpack:///./src/dashboard/main.vue?94d1","webpack:///./src/game/geom.ts","webpack:///./src/game/ui/menu/asset_node.vue?c55a","webpack:///./src/game/ui/menu/asset_node.vue?3fe9","webpack:///./src/game/game.vue?5592","webpack:///./src/game/units.ts","webpack:///./src/game/ui/menu/menu.vue?ae57","webpack:///./src/core/components/colorpicker.vue?1682","webpack:///./src/game/ui/tools/selectcontext.vue?0020","webpack:///./src/game/ui/tools/selectcontext.vue?758c","webpack:///./src/game/visibility/te/tds.ts","webpack:///./src/game/visibility/bvh/bvh.ts","webpack:///./src/game/ui/tools/filter.vue?1da1","webpack:///./src/game/manager.ts","webpack:///./src/game/ui/menu/asset_node.vue?0d0e","webpack:///./src/game/ui/tools/vision.vue","webpack:///./src/game/ui/initiative.vue?0d27","webpack:///./src/game/ui/initiative.vue?3968","webpack:///./src/core/components/load.vue?8cd0","webpack:///./src/game/ui/selection/selection_info.vue?7cd0","webpack:///./src/game/ui/selection/selection_info.vue?4f48","webpack:///./src/game/ui/selection/shapecontext.vue?4b66","webpack:///./src/game/ui/selection/shapecontext.vue?0558","webpack:///./src/dashboard/main.vue?3f72","webpack:///./src/core/components/modals/confirm.vue","webpack:///./src/game/ui/selection/shapecontext.vue?aac0","webpack:///./src/assetManager/contextMenu.vue?c131","webpack:///./src/assetManager/contextMenu.vue?a185","webpack:///./src/game/ui/tools/draw.vue?60f4","webpack:///./src/assetManager/manager.vue?a11e","webpack:///./src/game/event-bus.ts","webpack:///./src/dashboard/main.vue?d5a9","webpack:///./src/game/shapes/rect.ts","webpack:///./src/game/game.vue?b235","webpack:///./src/game/ui/tools/filter.vue?b0f4","webpack:///./src/game/ui/tools/selectcontext.vue?6f66","webpack:///./src/game/layers/fowplayers.ts","webpack:///./src/game/layers/layer.ts","webpack:///./src/game/events/mouse.ts","webpack:///./src/game/ui/tools/filter.vue","webpack:///./src/game/shapes/baserect.ts","webpack:///./src/game/ui/tools/select.vue","webpack:///./src/dashboard/main.vue","webpack:///./src/game/ui/tools/createtoken_modal.vue?6f0b","webpack:///./src/assetManager/manager.vue?765a","webpack:///./src/assetManager/manager.vue?a045","webpack:///./src/game/ui/tools/selectcontext.vue?d61f","webpack:///./src/auth/logout.ts","webpack:///./src/core/store.ts","webpack:///./src/main.ts","webpack:///./src/core/components/contextmenu.vue?f402","webpack:///./src/invitation/invitation.ts","webpack:///./src/core/components/modals/prompt.vue","webpack:///./src/game/visibility/te/te.ts","webpack:///./src/game/ui/tools/map.vue?f96f","webpack:///./src/game/ui/tools/map.vue?7f60","webpack:///./src/game/ui/selection/edit_dialog.vue","webpack:///./src/game/settings.ts","webpack:///./src/auth/login.vue?283c","webpack:///./src/game/ui/tools/createtoken_modal.vue?e7b2","webpack:///./src/game/ui/tools/createtoken_modal.vue?5fcc","webpack:///./src/game/ui/tools/tool.vue?6323","webpack:///./src/game/ui/tools/tool.vue?f5ba","webpack:///./src/core/components/modals/modal.vue?1854","webpack:///./src/core/components/modals/modal.vue?e329","webpack:///./src/game/game.vue?d01c","webpack:///./src/game/ui/tools/ruler.ts","webpack:///./src/core/components/modals/modal.vue","webpack:///./src/core/components/accordion.vue?4b34","webpack:///./src/game/visibility/te/pa.ts","webpack:///./src/game/ui/tools/tools.vue?4580","webpack:///./src/dashboard/main.vue?1359","webpack:///./src/game/ui/selection/edit_dialog.vue?9a84","webpack:///./src/core/components/modals/confirm.vue?f9ee","webpack:///./src/game/ui/tools/map.vue","webpack:///./src/core/components/accordion.vue?c7e6","webpack:///./src/core/components/accordion.vue?6229","webpack:///./src/core/components/modals/confirm.vue?e141","webpack:///./src/core/components/modals/confirm.vue?be48","webpack:///./src/assetManager/contextMenu.vue?1b1b","webpack:///./src/game/ui/tools/select.vue?b7fd","webpack:///./src/game/ui/tools/filter.vue?6447","webpack:///./src/game/ui/labels.vue?8d8f","webpack:///./src/game/shapes/polygon.ts","webpack:///./src/game/ui/tools/draw.vue?1866","webpack:///./src/game/ui/tools/draw.vue?03b4","webpack:///./src/core/components/colorpicker.vue?0fbc","webpack:///./src/core/components/colorpicker.vue?fb27","webpack:///./src/game/ui/tools/filter.vue?a607","webpack:///./src/game/ui/tools/filter.vue?fa63","webpack:///./src/assetManager/manager.vue","webpack:///./src/game/ui/tools/tools.vue?fa4a","webpack:///./src/game/ui/tools/tool.vue","webpack:///./src/game/ui/initiative.vue?4ce1","webpack:///./src/core/components/modals/prompt.vue?0a11","webpack:///./src/core/components/modals/prompt.vue?36e2","webpack:///./src/game/ui/initiative.vue?36c8","webpack:///./src/game/ui/selection/selection_info.vue","webpack:///./src/game/store.ts","webpack:///./src/core/components/colorpicker.vue?4d99","webpack:///./src/core/components/modals/confirm.vue?a22f","webpack:///./src/game/comm/conversion/aura.ts","webpack:///./src/assetManager/contextMenu.vue?1e9a","webpack:///./src/game/ui/note.vue","webpack:///./src/game/ui/initiative.vue","webpack:///./src/game/layers/utils.ts","webpack:///./src/game/ui/labels.vue","webpack:///./src/game/ui/selection/edit_dialog.vue?3800","webpack:///./src/game/ui/tools/tools.vue?0ab0","webpack:///./src/game/ui/tools/tools.vue?c2f7","webpack:///./src/auth/login.vue?e4a1","webpack:///./src/auth/login.vue?8f9e","webpack:///./src/game/ui/selection/selection_info.vue?5d62","webpack:///./src/game/api/events.ts"],"names":["webpackJsonpCallback","data","moduleId","chunkId","chunkIds","moreModules","executeModules","i","resolves","length","installedChunks","push","Object","prototype","hasOwnProperty","call","modules","parentJsonpFunction","shift","deferredModules","apply","checkDeferredModules","result","deferredModule","fulfilled","j","depId","splice","__webpack_require__","s","installedModules","app","exports","module","l","m","c","d","name","getter","o","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","p","jsonpArray","window","oldJsonpFunction","slice","boundingrect_1","shape_1","units_1","Text","Shape","[object Object]","position","text","font","angle","fillColour","strokeColour","uuid","super","this","type","assign","getBaseDict","points","refPoint","x","y","BoundingRect","ctx","draw","fillStyle","save","dest","g2l","translate","rotate","textAlign","getLines","map","line","fillText","restore","point","centerPoint","canvas","getBoundingBox","visibleInCanvas","resizePoint","lines","lineHeight","widths","measureText","width","Math","max","split","allLines","maxWidth","targetLine","words","word","testLine","metrics","testWidth","_node_modules_mini_css_extract_plugin_dist_loader_js_ref_6_oneOf_1_0_node_modules_css_loader_index_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_6_oneOf_1_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_selection_info_vue_vue_type_style_index_0_id_674cf937_scoped_true_lang_css___WEBPACK_IMPORTED_MODULE_0__","_node_modules_mini_css_extract_plugin_dist_loader_js_ref_6_oneOf_1_0_node_modules_css_loader_index_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_6_oneOf_1_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_selection_info_vue_vue_type_style_index_0_id_674cf937_scoped_true_lang_css___WEBPACK_IMPORTED_MODULE_0___default","__webpack_exports__","_shapecontext_vue_vue_type_template_id_759e5a8a_scoped_true___WEBPACK_IMPORTED_MODULE_0__","_shapecontext_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__","__WEBPACK_IMPORT_KEY__","_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_3__","component","options","__file","_node_modules_mini_css_extract_plugin_dist_loader_js_ref_6_oneOf_1_0_node_modules_css_loader_index_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_6_oneOf_1_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_App_vue_vue_type_style_index_0_lang_css___WEBPACK_IMPORTED_MODULE_0__","_node_modules_mini_css_extract_plugin_dist_loader_js_ref_6_oneOf_1_0_node_modules_css_loader_index_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_6_oneOf_1_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_App_vue_vue_type_style_index_0_lang_css___WEBPACK_IMPORTED_MODULE_0___default","_node_modules_mini_css_extract_plugin_dist_loader_js_ref_6_oneOf_1_0_node_modules_css_loader_index_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_6_oneOf_1_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_menu_vue_vue_type_style_index_0_id_13f3fb33_scoped_true_lang_css___WEBPACK_IMPORTED_MODULE_0__","_node_modules_mini_css_extract_plugin_dist_loader_js_ref_6_oneOf_1_0_node_modules_css_loader_index_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_6_oneOf_1_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_menu_vue_vue_type_style_index_0_id_13f3fb33_scoped_true_lang_css___WEBPACK_IMPORTED_MODULE_0___default","_node_modules_mini_css_extract_plugin_dist_loader_js_ref_6_oneOf_1_0_node_modules_css_loader_index_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_6_oneOf_1_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_prompt_vue_vue_type_style_index_0_id_0602c2e6_scoped_true_lang_css___WEBPACK_IMPORTED_MODULE_0__","_node_modules_mini_css_extract_plugin_dist_loader_js_ref_6_oneOf_1_0_node_modules_css_loader_index_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_6_oneOf_1_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_prompt_vue_vue_type_style_index_0_id_0602c2e6_scoped_true_lang_css___WEBPACK_IMPORTED_MODULE_0___default","tinycolor2_1","tslib_1","__importDefault","vue_1","vue_class_component_1","vue_color_1","vue_property_decorator_1","ColorPicker","default","display","left","top","transparent","$refs","chromePicker","val","rgba","a","setPosition","disabled","$nextTick","$children","$el","focus","newColor","toRgbString","$emit","color","rect","getBoundingClientRect","right","innerWidth","bottom","innerHeight","__decorate","Prop","String","Boolean","components","chrome-picker","Chrome","_game_vue_vue_type_template_id_05b88da7_scoped_true___WEBPACK_IMPORTED_MODULE_0__","_game_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__","_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_4__","socket_io_client_1","createConnection","route","socket","io","opts","query","params","creator","room","connect","location","protocol","host","autoConnect","contextMenu_vue_1","confirm_vue_1","prompt_vue_1","socket_1","store_1","utils_1","AssetManager","path","draggingSelection","folders","assetStore","files","selected","idMap","currentFolder","root","parentFolder","parent","undefined","firstSelectedFile","sel","file_hash","nextFolder","pop","clearSelected","emit","prompt","inode","target","includes","indexOf","delete","event","shiftKey","inodes","start","end","ctrlKey","file","dataTransfer","setData","dropEffect","classList","contains","add","remove","moveInode","upload","document","getElementById","click","fls","CHUNK_SIZE","uuidv4","slices","ceil","size","fr","FileReader","readAsArrayBuffer","min","onload","e","directory","totalSlices","Prompt","ConfirmDialog","AssetContextMenu","to","from","next","disconnect","_asset_node_vue_vue_type_template_id_6d718094_scoped_true___WEBPACK_IMPORTED_MODULE_0__","_asset_node_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__","_node_modules_mini_css_extract_plugin_dist_loader_js_ref_6_oneOf_1_0_node_modules_css_loader_index_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_6_oneOf_1_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_selectcontext_vue_vue_type_style_index_0_id_44a31e42_scoped_true_lang_css___WEBPACK_IMPORTED_MODULE_0__","_node_modules_mini_css_extract_plugin_dist_loader_js_ref_6_oneOf_1_0_node_modules_css_loader_index_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_6_oneOf_1_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_selectcontext_vue_vue_type_style_index_0_id_44a31e42_scoped_true_lang_css___WEBPACK_IMPORTED_MODULE_0___default","_login_vue_vue_type_template_id_bc30fc14_scoped_true___WEBPACK_IMPORTED_MODULE_0__","_login_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__","manager_1","tds_1","triag_1","drawPolygon","polygon","colour","dl","layerManager","getLayer","lineJoin","beginPath","strokeStyle","random","moveTo","g2lx","g2ly","lineTo","closePath","stroke","drawPolygonL","xx","local","yy","I","J","drl","constrained","drawPolygonT","tds","clear","logs","T","clearRect","ei","EdgeIterator","valid","collect","fromP","edge","first","vertices","ccw","second","toP","cw","Infinity","constraints","console","log","pos","triangles","isInfinite","po","arc","PI","fill","DP","DPL","DPT","_accordion_vue_vue_type_template_id_0bf2b7ba_scoped_true___WEBPACK_IMPORTED_MODULE_0__","_accordion_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__","_node_modules_mini_css_extract_plugin_dist_loader_js_ref_6_oneOf_1_0_node_modules_css_loader_index_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_6_oneOf_1_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_tool_vue_vue_type_style_index_0_lang_css___WEBPACK_IMPORTED_MODULE_0__","_node_modules_mini_css_extract_plugin_dist_loader_js_ref_6_oneOf_1_0_node_modules_css_loader_index_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_6_oneOf_1_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_tool_vue_vue_type_style_index_0_lang_css___WEBPACK_IMPORTED_MODULE_0___default","tinycolor","__importStar","circle_1","CircularToken","Circle","center","radius","fromDict","textBaseline","xs","calcFontScale","g2lz","ys","transform","mostReadable","toHexString","visible","gameStore","IS_DM","group","source","has_img","effects","index","geom_1","rect_1","text_1","AnnotationManager","shown","origin","GlobalPoint","annotationText","annotationRect","Rect","layer","hasLayer","warn","addShape","l2g","LocalPoint","getMaxWidth","height","getMaxHeight","w","zoomFactor","h","invalidate","_menu_vue_vue_type_template_id_13f3fb33_scoped_true___WEBPACK_IMPORTED_MODULE_0__","_menu_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__","_contextmenu_vue_vue_type_template_id_256dde9c___WEBPACK_IMPORTED_MODULE_0__","_contextmenu_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__","_node_modules_cache_loader_dist_cjs_js_ref_12_0_node_modules_thread_loader_dist_cjs_js_node_modules_ts_loader_index_js_ref_12_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_note_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__","_node_modules_cache_loader_dist_cjs_js_ref_12_0_node_modules_thread_loader_dist_cjs_js_node_modules_ts_loader_index_js_ref_12_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_note_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0___default","_node_modules_cache_loader_dist_cjs_js_ref_12_0_node_modules_thread_loader_dist_cjs_js_node_modules_ts_loader_index_js_ref_12_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_login_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__","_node_modules_cache_loader_dist_cjs_js_ref_12_0_node_modules_thread_loader_dist_cjs_js_node_modules_ts_loader_index_js_ref_12_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_login_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0___default","render","_vm","_h","$createElement","_c","_self","attrs","mask","on","close","$event","scopedSlots","_u","fn","staticClass","draggable","dragstart","dragStart","dragend","dragEnd","_v","title","staticStyle","margin","directives","rawName","expression","ref","placeholder","domProps","input","composing","search","_l","category","labels","label","selectLabel","_s","_e","class","lower-opacity","style","stopPropagation","toggleVisibility","deleteLabel","id","modifiers","trim","newCategory","blur","$forceUpdate","newName","addLabel","staticRenderFns","asset_1","circulartoken_1","line_1","multiline_1","polygon_1","createShapeFromDict","shape","sh","type_","fill_colour","stroke_colour","circ","token","Line","x2","y2","line_width","multiline","MultiLine","Polygon","v","asset","img","Image","src","startsWith","URL","pathname","Asset","_node_modules_mini_css_extract_plugin_dist_loader_js_ref_6_oneOf_1_0_node_modules_css_loader_index_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_6_oneOf_1_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_confirm_vue_vue_type_style_index_0_id_1883e207_scoped_true_lang_css___WEBPACK_IMPORTED_MODULE_0__","_node_modules_mini_css_extract_plugin_dist_loader_js_ref_6_oneOf_1_0_node_modules_css_loader_index_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_6_oneOf_1_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_confirm_vue_vue_type_style_index_0_id_1883e207_scoped_true_lang_css___WEBPACK_IMPORTED_MODULE_0___default","aura_1","nameVisible","trackers","auras","_owners","visionObstruction","movementObstruction","isToken","showHighlight","annotation","globalCompositeOperation","Map","_refPoint","delta","idx","entries","abs","prev","fromArray","vec","subtract","mid","multiply","normalize","skipLightUpdate","recalculate","self","obstructionIndex","visionBlockers","update","recalculateVision","forEach","au","ls","visionSources","findIndex","aura","visionSource","some","blocksMovement","movementblockers","recalculateMovement","ownedBy","ownedtokens","draw_operator","movement_obstruction","vision_obstruction","aurasToServer","owners","name_visible","is_token","JSON","stringify","aurasFromServer","parse","bbox","strokeRect","topLeft","dim","loc","innerRange","g2lr","gradient","createRadialGradient","tc","addColorStop","setAlpha","lastPath","sync","oldLayer","newLayer","shapes","freeze","username","FAKE_PLAYER","activeTokens","owner","oldValue","newValue","ownerIndex","addOwner","_node_modules_cache_loader_dist_cjs_js_ref_12_0_node_modules_thread_loader_dist_cjs_js_node_modules_ts_loader_index_js_ref_12_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_prompt_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__","_node_modules_cache_loader_dist_cjs_js_ref_12_0_node_modules_thread_loader_dist_cjs_js_node_modules_ts_loader_index_js_ref_12_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_prompt_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0___default","note","select","font-size","change","updateNote","$set","calcHeight","removeNote","_node_modules_mini_css_extract_plugin_dist_loader_js_ref_6_oneOf_1_0_node_modules_css_loader_index_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_6_oneOf_1_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_modal_vue_vue_type_style_index_0_id_12ed61ba_scoped_true_lang_css___WEBPACK_IMPORTED_MODULE_0__","_node_modules_mini_css_extract_plugin_dist_loader_js_ref_6_oneOf_1_0_node_modules_css_loader_index_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_6_oneOf_1_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_modal_vue_vue_type_style_index_0_id_12ed61ba_scoped_true_lang_css___WEBPACK_IMPORTED_MODULE_0___default","selectcontext_vue_1","tool_vue_1","utils_2","utils_3","SelectOperations","SelectTool","showContextMenu","active","Noop","deltaChanged","dragRay","Ray","Vector","selectionStartPoint","selectionHelper","mouse","getMouse","globalMouse","selectionStack","hit","selection","concat","getPointIndex","l2gz","getRef","Resize","Drag","localRefPoint","GroupSelect","endPoint","og","direction","ogDelta","calculateDelta","asDict","redraw","temporary","resize","updateCursor","body","cursor","clearSelection","topRight","botLeft","useGrid","altKey","snapToGrid","resizeToGrid","$parent","shapecontext","open","selectcontext","getPointOrientation","SelectContext","pa_1","done","visionMode","ogSelBBox","newSelBBox","offset","refine","movementBlocker","blocker","UUIDMap","blockerBBox","found","intersectsWithInner","ray","fromPoints","invDir","inverse","dirIsNegative","intersectP","bCenter","sCenter","ux","uy","dx","dot","dy","centerTriangle","PA_CDT","movement","locate","asArray","lt","triangle","checkTriangle","skip","endpoint","neighbours","_cw","_ccw","ix","intersection","isConstrained","orientation","Sign","LEFT_TURN","ZERO","newDelta","_node_modules_mini_css_extract_plugin_dist_loader_js_ref_6_oneOf_1_0_node_modules_css_loader_index_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_6_oneOf_1_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_note_vue_vue_type_style_index_0_id_7a3669fd_scoped_true_lang_css___WEBPACK_IMPORTED_MODULE_0__","_node_modules_mini_css_extract_plugin_dist_loader_js_ref_6_oneOf_1_0_node_modules_css_loader_index_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_6_oneOf_1_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_note_vue_vue_type_style_index_0_id_7a3669fd_scoped_true_lang_css___WEBPACK_IMPORTED_MODULE_0___default","_node_modules_cache_loader_dist_cjs_js_ref_12_0_node_modules_thread_loader_dist_cjs_js_node_modules_ts_loader_index_js_ref_12_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_labels_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__","_node_modules_cache_loader_dist_cjs_js_ref_12_0_node_modules_thread_loader_dist_cjs_js_node_modules_ts_loader_index_js_ref_12_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_labels_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0___default","_node_modules_cache_loader_dist_cjs_js_ref_12_0_node_modules_thread_loader_dist_cjs_js_node_modules_ts_loader_index_js_ref_12_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_vision_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__","_node_modules_cache_loader_dist_cjs_js_ref_12_0_node_modules_thread_loader_dist_cjs_js_node_modules_ts_loader_index_js_ref_12_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_vision_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0___default","sendClientOptions","locationOptions","panX","panY","AssetNode","showImage","keys","filter","el","sort","alphSort","__files","b","toLowerCase","children","imageSource","querySelector","setDragImage","tabindex","_t","vuex_module_decorators_1","AssetStore","VuexModule","Mutation","Module","dynamic","store","rootStore","namespaced","getModule","_node_modules_cache_loader_dist_cjs_js_ref_12_0_node_modules_thread_loader_dist_cjs_js_node_modules_ts_loader_index_js_ref_12_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_contextmenu_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__","_node_modules_cache_loader_dist_cjs_js_ref_12_0_node_modules_thread_loader_dist_cjs_js_node_modules_ts_loader_index_js_ref_12_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_contextmenu_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0___default","contextmenu_vue_1","event_bus_1","ShapeContext","activeLayer","pageX","pageY","layers","selectable","playerEditable","moveLayer","getActiveLayer","moveShapeOrder","initiative","addInitiative","getInitiativeRepr","EventBus","ContextMenu","_node_modules_cache_loader_dist_cjs_js_ref_12_0_node_modules_thread_loader_dist_cjs_js_node_modules_ts_loader_index_js_ref_12_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_map_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__","_node_modules_cache_loader_dist_cjs_js_ref_12_0_node_modules_thread_loader_dist_cjs_js_node_modules_ts_loader_index_js_ref_12_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_map_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0___default","layer_1","GridLayer","Layer","doClear","drawGrid","gs","gridSize","gridColour","lineWidth","vuex_1","use","Store","_colorpicker_vue_vue_type_template_id_d32461a4_scoped_true___WEBPACK_IMPORTED_MODULE_0__","_colorpicker_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__","VisionTool","tokens","removeActiveToken","addActiveToken","_node_modules_mini_css_extract_plugin_dist_loader_js_ref_6_oneOf_1_0_node_modules_css_loader_index_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_6_oneOf_1_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_login_vue_vue_type_style_index_0_id_bc30fc14_scoped_true_lang_css___WEBPACK_IMPORTED_MODULE_0__","_node_modules_mini_css_extract_plugin_dist_loader_js_ref_6_oneOf_1_0_node_modules_css_loader_index_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_6_oneOf_1_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_login_vue_vue_type_style_index_0_id_bc30fc14_scoped_true_lang_css___WEBPACK_IMPORTED_MODULE_0___default","script","componentNormalizer","mouseleave","wheel","zoom","ready","mousedown","mouseup","mousemove","contextmenu","preventDefault","dragover","drop","showUI","layer-selected","selectedLayer","selectLayer","href","interval","dot-width","dot-height","tooltip-dir","tooltip","formatter","zoomDisplay","toFixed","slider-style","border-radius","bg-style","background-color","box-shadow","process-style","model","callback","$$v","settings_1","te_1","FOWLayer","isVisionLayer","preFogShapes","virtualCanvas","createElement","vCtx","getContext","has","removeShape","Settings","skipLightFOW","originalOperation","dctx","drawAngleLines","drawFirstLightHit","fullFOW","bb","lcenter","alm","light","find","auraLength","getUnitDistance","auraCircle","lastArcAngle","Path2D","firstPoint","angleSteps","anglePoint","cos","sin","lightRay","hitResult","BV","intersect","computeVisibility","drawImage","fowLOS","preShape","ogComposite","getFogColour","fillRect","_node_modules_cache_loader_dist_cjs_js_ref_12_0_node_modules_thread_loader_dist_cjs_js_node_modules_ts_loader_index_js_ref_12_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_load_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__","_node_modules_cache_loader_dist_cjs_js_ref_12_0_node_modules_thread_loader_dist_cjs_js_node_modules_ts_loader_index_js_ref_12_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_load_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0___default","for","grid-column","owned","updateShape","opacity","grid-column-start","checked","setToken","Array","isArray","_i","$$a","$$el","$$c","$$i","setVisionBlocker","setMovementBlocker","update:color","updateOwner","gridColumnStart","removeOwner","tracker","number","_n","removeTracker","updateAuraColour","updateAuraVisionSource","removeAura","removeLabel","openLabelManager","updateAnnotation","pow","targetX","targetY","round","diff","sqrt","baserect_1","MapTool","xCount","yCount","startPoint","clone","BaseRect","_load_vue_vue_type_template_id_ff095222___WEBPACK_IMPORTED_MODULE_0__","_load_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__","_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__","PanTool","panStart","distance","increasePanX","increasePanY","_selectcontext_vue_vue_type_template_id_44a31e42_scoped_true___WEBPACK_IMPORTED_MODULE_0__","_selectcontext_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__","main_1","replace","toString","capitalize","charAt","toUpperCase","getHTMLFont","element","parentElement","getComputedStyle","getPropertyValue","getHTMLTextWidth","fakeElement","appendChild","partition","arr","predicate","ret","Number","fontWidth","fixedEncodeURIComponent","str","encodeURIComponent","charCodeAt","OrderedMap","values","getComponent","activeComponent","_contextMenu_vue_vue_type_template_id_606797b4___WEBPACK_IMPORTED_MODULE_0__","_contextMenu_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__","edgeInfo","va","vb","ec","EdgeCirculator","indv","indexV","ri","infinite","vi","orient","COLLINEAR","collinearBetween","q","cPQ","cQR","compare","EQUAL","SMALLER","LARGER","px","py","qx","qy","rx","ry","pqx","pqy","prx","pry","det","determinant","maxX","maxY","aprX","aprY","eps","EPSILON","POSITIVE","NEGATIVE","a00","a01","a10","a11","hasInexactNegativeOrientation","sideOfOrientedCircle","perturb","sideOfOrientedCircleP","Error","p0","p1","p2","os","getOrientedSide","ON_ORIENTED_BOUNDARY","reverse","ON_NEGATIVE_SIDE","xyEqual","xySmaller","xyCompare","qpx","qpy","rpx","rpy","tpx","tpy","tqx","tqy","rqx","rqy","maxx","maxy","arpx","arpy","atqx","atqy","atpx","atpy","arqx","arqy","ON_POSITIVE_SIDE","segSegDoIntersectCrossing","p3","p4","RIGHT_TURN","segSegDoIntersectContained","pa","pb","pc","pd","getIntersectionType","intersectionType","IntersectionType","POINT","NO_INTERSECTION","getLine","doIntersect","l1","l2","info","getIntersectionTypeLine","la","lb","denom","nom1","nom2","A1","A2","B1","B2","nextUp","MAX_VALUE","MIN_VALUE","ulp","_node_modules_cache_loader_dist_cjs_js_ref_12_0_node_modules_thread_loader_dist_cjs_js_node_modules_ts_loader_index_js_ref_12_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_asset_node_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__","_node_modules_cache_loader_dist_cjs_js_ref_12_0_node_modules_thread_loader_dist_cjs_js_node_modules_ts_loader_index_js_ref_12_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_asset_node_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0___default","_node_modules_mini_css_extract_plugin_dist_loader_js_ref_6_oneOf_1_0_node_modules_css_loader_index_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_6_oneOf_1_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_vision_vue_vue_type_style_index_0_id_46baf892_scoped_true_lang_css___WEBPACK_IMPORTED_MODULE_0__","_node_modules_mini_css_extract_plugin_dist_loader_js_ref_6_oneOf_1_0_node_modules_css_loader_index_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_6_oneOf_1_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_vision_vue_vue_type_style_index_0_id_46baf892_scoped_true_lang_css___WEBPACK_IMPORTED_MODULE_0___default","_node_modules_mini_css_extract_plugin_dist_loader_js_ref_6_oneOf_1_0_node_modules_css_loader_index_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_6_oneOf_1_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_edit_dialog_vue_vue_type_style_index_0_id_23de098e_scoped_true_lang_css___WEBPACK_IMPORTED_MODULE_0__","_node_modules_mini_css_extract_plugin_dist_loader_js_ref_6_oneOf_1_0_node_modules_css_loader_index_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_6_oneOf_1_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_edit_dialog_vue_vue_type_style_index_0_id_23de098e_scoped_true_lang_css___WEBPACK_IMPORTED_MODULE_0___default","Modal","positioned","offsetX","offsetY","screenX","screenY","dragging","updatePosition","container","offsetWidth","offsetHeight","clientX","clientY","parseInt","destination","setRoot","folder","child","set","accordion_vue_1","FilterTool","cat","","localeCompare","initalValues","labelFilters","f","categories","toggleUnlabeledFilter","_","accordion","Accordion","initialValues","updateCategory","overall","items","indeterminate","item","--detailRight","detailRight","--detailArrow","detailArrow","toggle","_node_modules_mini_css_extract_plugin_dist_loader_js_ref_6_oneOf_1_0_node_modules_css_loader_index_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_6_oneOf_1_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_game_vue_vue_type_style_index_0_lang_css___WEBPACK_IMPORTED_MODULE_0__","_node_modules_mini_css_extract_plugin_dist_loader_js_ref_6_oneOf_1_0_node_modules_css_loader_index_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_6_oneOf_1_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_game_vue_vue_type_style_index_0_lang_css___WEBPACK_IMPORTED_MODULE_0___default","_points","minx","miny","lineCap","_draw_vue_vue_type_template_id_639cd890_scoped_true___WEBPACK_IMPORTED_MODULE_0__","_draw_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__","opposite","fowColour","fowOpacity","zoomValue","exp","colorpicker_vue_1","modal_vue_1","CreateTokenModal","borderColour","updatePreview","unitSize","Watch","color-picker","computed","mapState","NoteDialog","textarea","scrollHeight","then","DrawTool","brushHelper","ruler","shapeSelect","modeSelect","modes","brushSize","helperSize","onModeChange","fowLayer","normalLayer","setupBrush","_vertices","pushBrushBack","lastPoint","finaliseShape","axios_1","vue_router_1","manager_vue_1","login_vue_1","logout_1","load_vue_1","main_vue_1","game_vue_1","invitation_1","router","base","routes","redirect","meta","auth","template","beforeEach","coreStore","initialized","matched","record","authenticated","response","setAuthenticated","setUsername","setInitialized","catch","error","Tool","$on","tool","onMouseDown","onMouseUp","onMouseMove","onContextMenu","onDeselect","onSelect","_tools_vue_vue_type_template_id_b6e1f51c_scoped_true___WEBPACK_IMPORTED_MODULE_0__","_tools_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__","_node_modules_cache_loader_dist_cjs_js_ref_12_0_node_modules_thread_loader_dist_cjs_js_node_modules_ts_loader_index_js_ref_12_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_tool_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__","_node_modules_cache_loader_dist_cjs_js_ref_12_0_node_modules_thread_loader_dist_cjs_js_node_modules_ts_loader_index_js_ref_12_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_tool_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0___default","topleft","CDT","TDS","insert","insertConstraintV","stack","markConstraint","intersectionInfo","findIntersectedFaces","triangulateHole","intersectedFaces","listAB","listBA","edges","triangulateHole2","propagatingFlipE","triangulateHalfHole","fl","deleteTriangle","conflictBoundaries","iN","iT","iC","current","n1","n2","ind","ind1","ind2","mirrorIndex","v0","v1","v2","newlf","createTriangle","vaa","vbb","aa","lfc","LineFaceCirculator","lf","rf","indexT","unshift","previousFace","currentVertex","i1","i2","vcc","vdd","pi","BoundingBox","dilate","overlaps","removeConstrainedEdge","dimension","indf","locateInfo","iLocate","insertb","li","flipAround","propagatingFlip","depth","isFlipable","maxDepth","ni","flip","e1","e2","uid","eni","eI","edgeSet","lessEdge","indn","ed","tt","ii","u","t1","t2","t3","i3","t4","i4","insertInConstrainedEdge","LocateType","EDGE","insertc","updateConstraintsIncident","VERTEX","clearConstraintsIncident","updateConstraintsOpposite","c1","c2","fc","FaceCirculator","cwi","ccwi","insertFirst","finiteVertex","insertSecond","OUTSIDE_AFFINE_HULL","insertOutsideAffineHull","OUTSIDE_CONVEX_HULL","insertOutsideConvexHull","insertInEdge","FACE","insertInFace","insertDimUp","_infinite","conform","finiteEdge","COUNTERCLOCKWISE","insertOutsideConvexHull2","ccwlist","cwlist","th","marchLocate1D","marchLocate2D","ff","iv","pqt","Triangle","leftFirst","o0","o1","o2","sum","nTurns","_node_modules_cache_loader_dist_cjs_js_ref_12_0_node_modules_thread_loader_dist_cjs_js_node_modules_ts_loader_index_js_ref_12_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_draw_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__","_node_modules_cache_loader_dist_cjs_js_ref_12_0_node_modules_thread_loader_dist_cjs_js_node_modules_ts_loader_index_js_ref_12_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_draw_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0___default","LayerManager","drawLoop","requestAnimationFrame","addLayer","globalAlpha","getSelection","image","getData","l2gx","l2gy","lm","_node_modules_cache_loader_dist_cjs_js_ref_12_0_node_modules_thread_loader_dist_cjs_js_node_modules_ts_loader_index_js_ref_12_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_initiative_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__","_node_modules_cache_loader_dist_cjs_js_ref_12_0_node_modules_thread_loader_dist_cjs_js_node_modules_ts_loader_index_js_ref_12_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_initiative_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0___default","_createtoken_modal_vue_vue_type_template_id_73816298_scoped_true___WEBPACK_IMPORTED_MODULE_0__","_createtoken_modal_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__","BoundingNode","nPrimitives","LeafNode","firstPrimOffset","InteriorNode","union","_node_modules_cache_loader_dist_cjs_js_ref_12_0_node_modules_thread_loader_dist_cjs_js_node_modules_ts_loader_index_js_ref_12_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_createtoken_modal_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__","_node_modules_cache_loader_dist_cjs_js_ref_12_0_node_modules_thread_loader_dist_cjs_js_node_modules_ts_loader_index_js_ref_12_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_createtoken_modal_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0___default","utils_4","onKeyUp","HTMLInputElement","HTMLTextAreaElement","selectTool","onKeyDown","keyCode","hasSelection","toggleUI","clipboard","setClipboard","clip","oldTrackers","newTracker","oldAuras","newAura","_node_modules_mini_css_extract_plugin_dist_loader_js_ref_6_oneOf_1_0_node_modules_css_loader_index_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_6_oneOf_1_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_manager_vue_vue_type_style_index_0_lang_css___WEBPACK_IMPORTED_MODULE_0__","_node_modules_mini_css_extract_plugin_dist_loader_js_ref_6_oneOf_1_0_node_modules_css_loader_index_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_6_oneOf_1_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_manager_vue_vue_type_style_index_0_lang_css___WEBPACK_IMPORTED_MODULE_0___default","_node_modules_mini_css_extract_plugin_dist_loader_js_ref_6_oneOf_1_0_node_modules_css_loader_index_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_6_oneOf_1_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_shapecontext_vue_vue_type_style_index_0_id_759e5a8a_scoped_true_lang_css___WEBPACK_IMPORTED_MODULE_0__","_node_modules_mini_css_extract_plugin_dist_loader_js_ref_6_oneOf_1_0_node_modules_css_loader_index_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_6_oneOf_1_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_shapecontext_vue_vue_type_style_index_0_id_759e5a8a_scoped_true_lang_css___WEBPACK_IMPORTED_MODULE_0___default","shapecontext_vue_1","createtoken_modal_vue_1","draw_vue_1","filter_vue_1","map_vue_1","pan_1","select_vue_1","vision_vue_1","manager_2","ruler_1","Tools","currentTool","tools","dmTools","currentToolComponent","visibleTools","tagName","targetTool","button","buttons","annotations","gameManager","annotationManager","setActiveText","select-tool","pan-tool","draw-tool","ruler-tool","RulerTool","map-tool","filter-tool","vision-tool","shape-menu","createtoken-dialog","watch","_node_modules_cache_loader_dist_cjs_js_ref_12_0_node_modules_thread_loader_dist_cjs_js_node_modules_ts_loader_index_js_ref_12_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_selection_info_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__","_node_modules_cache_loader_dist_cjs_js_ref_12_0_node_modules_thread_loader_dist_cjs_js_node_modules_ts_loader_index_js_ref_12_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_selection_info_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0___default","_node_modules_cache_loader_dist_cjs_js_ref_12_0_node_modules_thread_loader_dist_cjs_js_node_modules_ts_loader_index_js_ref_12_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_modal_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__","_node_modules_cache_loader_dist_cjs_js_ref_12_0_node_modules_thread_loader_dist_cjs_js_node_modules_ts_loader_index_js_ref_12_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_modal_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0___default","_node_modules_mini_css_extract_plugin_dist_loader_js_ref_6_oneOf_1_0_node_modules_css_loader_index_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_6_oneOf_1_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_labels_vue_vue_type_style_index_0_id_e477c214_scoped_true_lang_css___WEBPACK_IMPORTED_MODULE_0__","_node_modules_mini_css_extract_plugin_dist_loader_js_ref_6_oneOf_1_0_node_modules_css_loader_index_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_6_oneOf_1_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_labels_vue_vue_type_style_index_0_id_e477c214_scoped_true_lang_css___WEBPACK_IMPORTED_MODULE_0___default","_node_modules_mini_css_extract_plugin_dist_loader_js_ref_6_oneOf_1_0_node_modules_css_loader_index_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_6_oneOf_1_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_contextmenu_vue_vue_type_style_index_0_lang_css___WEBPACK_IMPORTED_MODULE_0__","_node_modules_mini_css_extract_plugin_dist_loader_js_ref_6_oneOf_1_0_node_modules_css_loader_index_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_6_oneOf_1_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_contextmenu_vue_vue_type_style_index_0_lang_css___WEBPACK_IMPORTED_MODULE_0___default","settings","locations","rm-list-dm","_m","enter","rm","transition","settingsClick","overflow-y","overflow-x","assets","createNote","openNote","notes","fakePlayer","step","changeVisionMode","$store","state","game","lazy","visionRangeMin","visionRangeMax","readonly","invitationCode","rulerColour","text-decoration","changeLocation","createLocation","question","answer","resolve","reject","Promise","_node_modules_mini_css_extract_plugin_dist_loader_js_ref_6_oneOf_1_0_node_modules_css_loader_index_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_6_oneOf_1_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_accordion_vue_vue_type_style_index_0_id_0bf2b7ba_scoped_true_lang_css___WEBPACK_IMPORTED_MODULE_0__","_node_modules_mini_css_extract_plugin_dist_loader_js_ref_6_oneOf_1_0_node_modules_css_loader_index_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_6_oneOf_1_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_accordion_vue_vue_type_style_index_0_id_0bf2b7ba_scoped_true_lang_css___WEBPACK_IMPORTED_MODULE_0___default","message","_node_modules_cache_loader_dist_cjs_js_ref_12_0_node_modules_thread_loader_dist_cjs_js_node_modules_ts_loader_index_js_ref_12_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_menu_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__","_node_modules_cache_loader_dist_cjs_js_ref_12_0_node_modules_thread_loader_dist_cjs_js_node_modules_ts_loader_index_js_ref_12_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_menu_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0___default","botRight","vector","other","xmin","xmax","ymin","ymax","botright","dirIsNeg","txmin","getDiagCorner","txmax","tymin","tymax","tMax","coreVisible","joined","submit","createRoom","newSessionName","tag","getPointDistance","Point","scale","atan2","maxT","mouseover","hash","mouseout","vue_slider_component_1","lodash_1","initiative_vue_1","labels_vue_1","menu_vue_1","note_vue_1","selection_info_vue_1","tools_vue_1","keyboard_1","mouse_1","Game","manager","updateZoom","newZoomDisplay","zoomLocation","addEventListener","resizeWindow","removeEventListener","throttle","scrollZoom","setWidth","setHeight","confirm","dropAsset","tool-bar","selection-info","prompt-dialog","confirm-dialog","menu-bar","initiative-dialog","zoom-slider","note-dialog","label-dialog","obj","z","l2gr","asset_node_vue_1","MenuBar","setFakePlayer","setUseGrid","setFullFOW","setFOWOpacity","setLineOfSight","setUnitSize","setGridSize","setGridColour","setFOWColour","setRulerColour","setVisionRangeMin","setVisionRangeMax","nextElementSibling","newNote","setVisionMode","asset-node","_node_modules_cache_loader_dist_cjs_js_ref_12_0_node_modules_thread_loader_dist_cjs_js_node_modules_ts_loader_index_js_ref_12_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_colorpicker_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__","_node_modules_cache_loader_dist_cjs_js_ref_12_0_node_modules_thread_loader_dist_cjs_js_node_modules_ts_loader_index_js_ref_12_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_colorpicker_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0___default","bringPlayers","createToken","showInitiative","_INFINITE_VERTEX","LineFaceState","newPoint","INFINITE","_counter","vertex","A","sign","Vertex","_point","_ri","Edge","_es","associatedEdge","increment","tr","dir","UNDEFINED","_tr","ic","vt","vr","pqr","VERTEX_VERTEX","VERTEX_EDGE","EDGE_VERTEX","EDGE_EDGE","createVertex","addVertex","infiniteVertex","n0","trig","t0","i0","setAdjacency","deleteList","copy","neighbour","lfit","reorient","vCW","vCCW","tri","bl","bli","vv","g","x1","y1","dist","node_1","BoundingVolume","totalNodes","buildData","orderedPrims","nodes","recursiveBuild","compact","node","createLeaf","centroidBbox","getMaxExtent","pMid","partitionedData","flattened","stopOnFirstHit","tMin","todoOffset","nodeNum","todo","secondChildOffset","flatten","myOffset","secondOffset","primitivesOffset","_node_modules_mini_css_extract_plugin_dist_loader_js_ref_6_oneOf_1_0_node_modules_css_loader_index_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_6_oneOf_1_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_filter_vue_vue_type_style_index_1_id_dca395d6_scoped_true_lang_css___WEBPACK_IMPORTED_MODULE_0__","_node_modules_mini_css_extract_plugin_dist_loader_js_ref_6_oneOf_1_0_node_modules_css_loader_index_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_6_oneOf_1_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_filter_vue_vue_type_style_index_1_id_dca395d6_scoped_true_lang_css___WEBPACK_IMPORTED_MODULE_0___default","annotation_1","GameManager","selectedTool","oldShape","redrawInitiative","checkVisionSources","setMovementBlock","setIsToken","localPos","_node_modules_mini_css_extract_plugin_dist_loader_js_ref_6_oneOf_1_0_node_modules_css_loader_index_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_6_oneOf_1_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_asset_node_vue_vue_type_style_index_0_id_6d718094_scoped_true_lang_css___WEBPACK_IMPORTED_MODULE_0__","_node_modules_mini_css_extract_plugin_dist_loader_js_ref_6_oneOf_1_0_node_modules_css_loader_index_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_6_oneOf_1_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_asset_node_vue_vue_type_style_index_0_id_6d718094_scoped_true_lang_css___WEBPACK_IMPORTED_MODULE_0___default","_vision_vue_vue_type_template_id_46baf892_scoped_true___WEBPACK_IMPORTED_MODULE_0__","_vision_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__","fakeSetData","updateOrder","actor","flex-direction","align-items","initiative-selected","currentActor","mouseenter","toggleHighlight","notAllowed","owns","syncInitiative","createEffect","getDefaultEffect","toggleOption","removeInitiative","effect","updateEffect","turns","roundCounter","visionLock","toggleVisionLock","cameraLock","setRound","updateTurn","nextTurn","LoadComponent","openEditDialog","changeValue","maxvalue","getLayers","setLayer","moveToBack","moveToFront","getInitiativeWord","registerHooks","Dashboard","vm","err","post","$router","_confirm_vue_vue_type_template_id_1883e207_scoped_true___WEBPACK_IMPORTED_MODULE_0__","_confirm_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__","_node_modules_cache_loader_dist_cjs_js_ref_12_0_node_modules_thread_loader_dist_cjs_js_node_modules_ts_loader_index_js_ref_12_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_shapecontext_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__","_node_modules_cache_loader_dist_cjs_js_ref_12_0_node_modules_thread_loader_dist_cjs_js_node_modules_ts_loader_index_js_ref_12_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_shapecontext_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0___default","rename","_node_modules_mini_css_extract_plugin_dist_loader_js_ref_6_oneOf_1_0_node_modules_css_loader_index_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_6_oneOf_1_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_draw_vue_vue_type_style_index_0_id_639cd890_scoped_true_lang_css___WEBPACK_IMPORTED_MODULE_0__","_node_modules_mini_css_extract_plugin_dist_loader_js_ref_6_oneOf_1_0_node_modules_css_loader_index_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_6_oneOf_1_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_draw_vue_vue_type_style_index_0_id_639cd890_scoped_true_lang_css___WEBPACK_IMPORTED_MODULE_0___default","_node_modules_cache_loader_dist_cjs_js_ref_12_0_node_modules_thread_loader_dist_cjs_js_node_modules_ts_loader_index_js_ref_12_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_manager_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__","_node_modules_cache_loader_dist_cjs_js_ref_12_0_node_modules_thread_loader_dist_cjs_js_node_modules_ts_loader_index_js_ref_12_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_manager_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0___default","_node_modules_cache_loader_dist_cjs_js_ref_12_0_node_modules_thread_loader_dist_cjs_js_node_modules_ts_loader_index_js_ref_12_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_main_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__","_node_modules_cache_loader_dist_cjs_js_ref_12_0_node_modules_thread_loader_dist_cjs_js_node_modules_ts_loader_index_js_ref_12_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_main_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0___default","_node_modules_mini_css_extract_plugin_dist_loader_js_ref_6_oneOf_1_0_node_modules_css_loader_index_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_6_oneOf_1_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_game_vue_vue_type_style_index_1_id_05b88da7_scoped_true_lang_css___WEBPACK_IMPORTED_MODULE_0__","_node_modules_mini_css_extract_plugin_dist_loader_js_ref_6_oneOf_1_0_node_modules_css_loader_index_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_6_oneOf_1_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_game_vue_vue_type_style_index_1_id_05b88da7_scoped_true_lang_css___WEBPACK_IMPORTED_MODULE_0___default","_node_modules_cache_loader_dist_cjs_js_ref_12_0_node_modules_thread_loader_dist_cjs_js_node_modules_ts_loader_index_js_ref_12_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_filter_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__","_node_modules_cache_loader_dist_cjs_js_ref_12_0_node_modules_thread_loader_dist_cjs_js_node_modules_ts_loader_index_js_ref_12_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_filter_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0___default","_node_modules_cache_loader_dist_cjs_js_ref_12_0_node_modules_thread_loader_dist_cjs_js_node_modules_ts_loader_index_js_ref_12_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_selectcontext_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__","_node_modules_cache_loader_dist_cjs_js_ref_12_0_node_modules_thread_loader_dist_cjs_js_node_modules_ts_loader_index_js_ref_12_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_selectcontext_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0___default","FOWPlayersLayer","skipPlayerFOW","maxLength","tokenId","_a","selectionColor","selectionWidth","invalidateLight","serverShape","lsI","lbI","mbI","anI","annotationIndex","ownedIndex","ogOP","drawAuras","filterNoLabel","destinationIndex","oldIdx","deltaY","_filter_vue_vue_type_template_id_dca395d6_scoped_true___WEBPACK_IMPORTED_MODULE_0__","_filter_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__","topright","botleft","mx","my","_select_vue_vue_type_template_id_048b3482___WEBPACK_IMPORTED_MODULE_0__","_select_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__","_main_vue_vue_type_template_id_61eb1455_scoped_true___WEBPACK_IMPORTED_MODULE_0__","_main_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__","_node_modules_mini_css_extract_plugin_dist_loader_js_ref_6_oneOf_1_0_node_modules_css_loader_index_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_6_oneOf_1_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_createtoken_modal_vue_vue_type_style_index_0_id_73816298_scoped_true_lang_css___WEBPACK_IMPORTED_MODULE_0__","_node_modules_mini_css_extract_plugin_dist_loader_js_ref_6_oneOf_1_0_node_modules_css_loader_index_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_6_oneOf_1_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_createtoken_modal_vue_vue_type_style_index_0_id_73816298_scoped_true_lang_css___WEBPACK_IMPORTED_MODULE_0___default","moveDrag","stopDrag","multiple","hidden","createDirectory","prepareUpload","dblclick","changeDirectory","dragleave","leaveDrag","inode-selected","cm","startDrag","createtokendialog","Logout","CoreStore","init","App_vue_1","router_1","config","productionTip","devtools","performance","$mount","props","Initiative","code","sessionUrl","_prompt_vue_vue_type_template_id_0602c2e6_scoped_true___WEBPACK_IMPORTED_MODULE_0__","_prompt_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__","draw_1","drawt","drawTEContour","Q","rawOutput","expandEdge","fh","nfh","nIndex","rIndex","lIndex","nvh","rvh","lvh","re","le","ro","lo","raySegIntersection","CLOCKWISE","denominator","ua","_edit_dialog_vue_vue_type_template_id_23de098e_scoped_true___WEBPACK_IMPORTED_MODULE_0__","_edit_dialog_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__","tempFill","Login","password","$route","statusText","span","modal-mask","dialog-mask","dragOver","_node_modules_cache_loader_dist_cjs_js_ref_12_0_node_modules_thread_loader_dist_cjs_js_node_modules_ts_loader_index_js_ref_12_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_game_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__","_node_modules_cache_loader_dist_cjs_js_ref_12_0_node_modules_thread_loader_dist_cjs_js_node_modules_ts_loader_index_js_ref_12_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_game_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0___default","diffsign","xdiff","ydiff","xmid","ymid","_modal_vue_vue_type_template_id_12ed61ba_scoped_true___WEBPACK_IMPORTED_MODULE_0__","_modal_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__","_node_modules_cache_loader_dist_cjs_js_ref_12_0_node_modules_thread_loader_dist_cjs_js_node_modules_ts_loader_index_js_ref_12_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_accordion_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__","_node_modules_cache_loader_dist_cjs_js_ref_12_0_node_modules_thread_loader_dist_cjs_js_node_modules_ts_loader_index_js_ref_12_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_accordion_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0___default","cdt_1","triangulate","partial","cdt","insertConstraint","vision","_node_modules_mini_css_extract_plugin_dist_loader_js_ref_6_oneOf_1_0_node_modules_css_loader_index_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_6_oneOf_1_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_tools_vue_vue_type_style_index_0_id_b6e1f51c_scoped_true_lang_css___WEBPACK_IMPORTED_MODULE_0__","_node_modules_mini_css_extract_plugin_dist_loader_js_ref_6_oneOf_1_0_node_modules_css_loader_index_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_6_oneOf_1_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_tools_vue_vue_type_style_index_0_id_b6e1f51c_scoped_true_lang_css___WEBPACK_IMPORTED_MODULE_0___default","_node_modules_mini_css_extract_plugin_dist_loader_js_ref_6_oneOf_1_0_node_modules_css_loader_index_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_6_oneOf_1_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_main_vue_vue_type_style_index_0_id_61eb1455_scoped_true_lang_css___WEBPACK_IMPORTED_MODULE_0__","_node_modules_mini_css_extract_plugin_dist_loader_js_ref_6_oneOf_1_0_node_modules_css_loader_index_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_6_oneOf_1_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_main_vue_vue_type_style_index_0_id_61eb1455_scoped_true_lang_css___WEBPACK_IMPORTED_MODULE_0___default","EditDialog","$off","addEmpty","hadAnnotation","an","yes","no","ok","_map_vue_vue_type_template_id_2104f147___WEBPACK_IMPORTED_MODULE_0__","_map_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__","toggleDisplay","toggleCategory","showArrow","toggleSelection","deny","_node_modules_cache_loader_dist_cjs_js_ref_12_0_node_modules_thread_loader_dist_cjs_js_node_modules_ts_loader_index_js_ref_12_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_select_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__","_node_modules_cache_loader_dist_cjs_js_ref_12_0_node_modules_thread_loader_dist_cjs_js_node_modules_ts_loader_index_js_ref_12_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_select_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0___default","_node_modules_mini_css_extract_plugin_dist_loader_js_ref_6_oneOf_1_0_node_modules_css_loader_index_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_6_oneOf_1_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_filter_vue_vue_type_style_index_0_lang_css___WEBPACK_IMPORTED_MODULE_0__","_node_modules_mini_css_extract_plugin_dist_loader_js_ref_6_oneOf_1_0_node_modules_css_loader_index_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_6_oneOf_1_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_filter_vue_vue_type_style_index_0_lang_css___WEBPACK_IMPORTED_MODULE_0___default","LabelManager","user","option-selected","max-width","currentTarget","closePicker","z-index","updateColor","selectionupdate","updateSelection","_manager_vue_vue_type_template_id_5b0def98___WEBPACK_IMPORTED_MODULE_0__","_manager_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__","_node_modules_cache_loader_dist_cjs_js_ref_12_0_node_modules_thread_loader_dist_cjs_js_node_modules_ts_loader_index_js_ref_12_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_tools_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__","_node_modules_cache_loader_dist_cjs_js_ref_12_0_node_modules_thread_loader_dist_cjs_js_node_modules_ts_loader_index_js_ref_12_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_tools_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0___default","_tool_vue_vue_type_template_id_1e034b42___WEBPACK_IMPORTED_MODULE_0__","_tool_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__","_node_modules_mini_css_extract_plugin_dist_loader_js_ref_6_oneOf_1_0_node_modules_css_loader_index_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_6_oneOf_1_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_initiative_vue_vue_type_style_index_0_id_07fc8ff2_scoped_true_lang_css___WEBPACK_IMPORTED_MODULE_0__","_node_modules_mini_css_extract_plugin_dist_loader_js_ref_6_oneOf_1_0_node_modules_css_loader_index_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_6_oneOf_1_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_initiative_vue_vue_type_style_index_0_id_07fc8ff2_scoped_true_lang_css___WEBPACK_IMPORTED_MODULE_0___default","keyup","_k","vuedraggable_1","_activeTokens","setTurn","getActor","actorId","setActiveTokens","setCenterPosition","order","show","option","effectIndex","syncEffect","_selection_info_vue_vue_type_template_id_674cf937_scoped_true___WEBPACK_IMPORTED_MODULE_0__","_selection_info_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__","bvh_1","GameStore","selectedLayerIndex","boardInitialized","roomName","roomCreator","locationName","vision_mode","filters","updatedLayers","Set","isDM","oldLoc","newLoc","getGridLayer","increase","unit_size","gridLayer","use_grid","vision_min_range","vision_max_range","full_fow","fow_opacity","fow_los","actualNote","context","commit","Action","_node_modules_mini_css_extract_plugin_dist_loader_js_ref_6_oneOf_1_0_node_modules_css_loader_index_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_6_oneOf_1_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_colorpicker_vue_vue_type_style_index_0_id_d32461a4_scoped_true_lang_css___WEBPACK_IMPORTED_MODULE_0__","_node_modules_mini_css_extract_plugin_dist_loader_js_ref_6_oneOf_1_0_node_modules_css_loader_index_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_6_oneOf_1_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_colorpicker_vue_vue_type_style_index_0_id_d32461a4_scoped_true_lang_css___WEBPACK_IMPORTED_MODULE_0___default","_node_modules_cache_loader_dist_cjs_js_ref_12_0_node_modules_thread_loader_dist_cjs_js_node_modules_ts_loader_index_js_ref_12_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_confirm_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__","_node_modules_cache_loader_dist_cjs_js_ref_12_0_node_modules_thread_loader_dist_cjs_js_node_modules_ts_loader_index_js_ref_12_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_confirm_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0___default","vision_source","_node_modules_cache_loader_dist_cjs_js_ref_12_0_node_modules_thread_loader_dist_cjs_js_node_modules_ts_loader_index_js_ref_12_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_contextMenu_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__","_node_modules_cache_loader_dist_cjs_js_ref_12_0_node_modules_thread_loader_dist_cjs_js_node_modules_ts_loader_index_js_ref_12_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_contextMenu_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0___default","_note_vue_vue_type_template_id_7a3669fd_scoped_true___WEBPACK_IMPORTED_MODULE_0__","_note_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__","_initiative_vue_vue_type_template_id_07fc8ff2_scoped_true___WEBPACK_IMPORTED_MODULE_0__","_initiative_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__","fow_1","fowplayers_1","grid_1","createLayer","layerInfo","zIndex","player_editable","setShapes","_labels_vue_vue_type_template_id_e477c214_scoped_true___WEBPACK_IMPORTED_MODULE_0__","_labels_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__","_node_modules_cache_loader_dist_cjs_js_ref_12_0_node_modules_thread_loader_dist_cjs_js_node_modules_ts_loader_index_js_ref_12_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_edit_dialog_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__","_node_modules_cache_loader_dist_cjs_js_ref_12_0_node_modules_thread_loader_dist_cjs_js_node_modules_ts_loader_index_js_ref_12_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_edit_dialog_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0___default","toolVisible","refInFor","tool-selected","focusin","focusout","login","autocomplete","required","visibility","register","edit_dialog_vue_1","SelectionInfo","editDialog","ogValue","isNaN","edit-dialog","setRoomName","setRoomCreator","setInvitationCode","setDM","grid_colour","fow_colour","ruler_colour","setPanX","pan_x","setPanY","pan_y","setZoomDisplay","zoom_factor","active_layer","setLocationName","setAssets","locationInfo","setLocations","innerHTML","resetLayerInfo","reset","setBoardInitialized","realShape","setLabelVisibility","setLabelFilters"],"mappings":"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","file":"static/js/app-legacy.b2080500.js","sourcesContent":[" \t// install a JSONP callback for chunk loading\n \tfunction webpackJsonpCallback(data) {\n \t\tvar chunkIds = data[0];\n \t\tvar moreModules = data[1];\n \t\tvar executeModules = data[2];\n\n \t\t// add \"moreModules\" to the modules object,\n \t\t// then flag all \"chunkIds\" as loaded and fire callback\n \t\tvar moduleId, chunkId, i = 0, resolves = [];\n \t\tfor(;i < chunkIds.length; i++) {\n \t\t\tchunkId = chunkIds[i];\n \t\t\tif(installedChunks[chunkId]) {\n \t\t\t\tresolves.push(installedChunks[chunkId][0]);\n \t\t\t}\n \t\t\tinstalledChunks[chunkId] = 0;\n \t\t}\n \t\tfor(moduleId in moreModules) {\n \t\t\tif(Object.prototype.hasOwnProperty.call(moreModules, moduleId)) {\n \t\t\t\tmodules[moduleId] = moreModules[moduleId];\n \t\t\t}\n \t\t}\n \t\tif(parentJsonpFunction) parentJsonpFunction(data);\n\n \t\twhile(resolves.length) {\n \t\t\tresolves.shift()();\n \t\t}\n\n \t\t// add entry modules from loaded chunk to deferred list\n \t\tdeferredModules.push.apply(deferredModules, executeModules || []);\n\n \t\t// run deferred modules when all chunks ready\n \t\treturn checkDeferredModules();\n \t};\n \tfunction checkDeferredModules() {\n \t\tvar result;\n \t\tfor(var i = 0; i < deferredModules.length; i++) {\n \t\t\tvar deferredModule = deferredModules[i];\n \t\t\tvar fulfilled = true;\n \t\t\tfor(var j = 1; j < deferredModule.length; j++) {\n \t\t\t\tvar depId = deferredModule[j];\n \t\t\t\tif(installedChunks[depId] !== 0) fulfilled = false;\n \t\t\t}\n \t\t\tif(fulfilled) {\n \t\t\t\tdeferredModules.splice(i--, 1);\n \t\t\t\tresult = __webpack_require__(__webpack_require__.s = deferredModule[0]);\n \t\t\t}\n \t\t}\n \t\treturn result;\n \t}\n\n \t// The module cache\n \tvar installedModules = {};\n\n \t// object to store loaded and loading chunks\n \t// undefined = chunk not loaded, null = chunk preloaded/prefetched\n \t// Promise = chunk loading, 0 = chunk loaded\n \tvar installedChunks = {\n \t\t\"app\": 0\n \t};\n\n \tvar deferredModules = [];\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"/\";\n\n \tvar jsonpArray = window[\"webpackJsonp\"] = window[\"webpackJsonp\"] || [];\n \tvar oldJsonpFunction = jsonpArray.push.bind(jsonpArray);\n \tjsonpArray.push = webpackJsonpCallback;\n \tjsonpArray = jsonpArray.slice();\n \tfor(var i = 0; i < jsonpArray.length; i++) webpackJsonpCallback(jsonpArray[i]);\n \tvar parentJsonpFunction = oldJsonpFunction;\n\n\n \t// add entry module to deferred list\n \tdeferredModules.push([0,\"chunk-vendors\"]);\n \t// run deferred modules when ready\n \treturn checkDeferredModules();\n","import { GlobalPoint, LocalPoint } from \"@/game/geom\";\nimport { BoundingRect } from \"@/game/shapes/boundingrect\";\nimport { Shape } from \"@/game/shapes/shape\";\nimport { g2l } from \"@/game/units\";\n\nexport class Text extends Shape {\n type = \"text\";\n text: string;\n font: string;\n angle: number;\n constructor(\n position: GlobalPoint,\n text: string,\n font: string,\n angle?: number,\n fillColour?: string,\n strokeColour?: string,\n uuid?: string,\n ) {\n super(position, fillColour, strokeColour, uuid);\n this.text = text;\n this.font = font;\n this.angle = angle || 0;\n }\n asDict() {\n return Object.assign(this.getBaseDict(), {\n text: this.text,\n font: this.font,\n angle: this.angle,\n });\n }\n get points() {\n return [[this.refPoint.x, this.refPoint.y]];\n }\n getBoundingBox(): BoundingRect {\n return new BoundingRect(this.refPoint, 5, 5); // TODO: fix this bounding box\n }\n draw(ctx: CanvasRenderingContext2D) {\n super.draw(ctx);\n ctx.font = this.font;\n ctx.fillStyle = this.fillColour;\n ctx.save();\n const dest = g2l(this.refPoint);\n ctx.translate(dest.x, dest.y);\n ctx.rotate(this.angle);\n ctx.textAlign = \"center\";\n this.getLines(ctx).map(line => ctx.fillText(line.text, line.x, line.y));\n ctx.restore();\n }\n contains(point: GlobalPoint): boolean {\n return false; // TODO\n }\n\n center(): GlobalPoint;\n center(centerPoint: GlobalPoint): void;\n center(centerPoint?: GlobalPoint): GlobalPoint | void {} // TODO\n visibleInCanvas(canvas: HTMLCanvasElement): boolean {\n return this.getBoundingBox().visibleInCanvas(canvas);\n } // TODO\n snapToGrid(): void {}\n resizeToGrid(): void {}\n resize(resizePoint: number, point: LocalPoint): void {}\n\n getMaxHeight(ctx: CanvasRenderingContext2D) {\n const lines = this.getLines(ctx);\n const lineHeight = 30;\n return lineHeight * lines.length;\n }\n\n getMaxWidth(ctx: CanvasRenderingContext2D) {\n const lines = this.getLines(ctx);\n const widths = lines.map(line => ctx.measureText(line.text).width);\n return Math.max(...widths);\n }\n\n private getLines(ctx: CanvasRenderingContext2D) {\n const lines = this.text.split(\"\\n\");\n const allLines: { text: string; x: number; y: number }[] = [];\n const maxWidth = ctx.canvas.width;\n const lineHeight = 30;\n const x = 0; // this.refPoint.x;\n let y = 0; // this.refPoint.y;\n\n for (const line of lines) {\n let targetLine = \"\";\n const words = line.split(\" \");\n for (const word of words) {\n const testLine = targetLine + word + \" \";\n const metrics = ctx.measureText(testLine);\n const testWidth = metrics.width;\n if (testWidth > maxWidth) {\n ctx.fillText(targetLine, x, y);\n allLines.push({ text: targetLine, x, y });\n targetLine = word + \" \";\n y += lineHeight;\n } else {\n targetLine = testLine;\n }\n }\n allLines.push({ text: targetLine, x, y });\n y += lineHeight;\n }\n return allLines;\n }\n}\n","import mod from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./selection_info.vue?vue&type=style&index=0&id=674cf937&scoped=true&lang=css&\"; export default mod; export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./selection_info.vue?vue&type=style&index=0&id=674cf937&scoped=true&lang=css&\"","import { render, staticRenderFns } from \"./shapecontext.vue?vue&type=template&id=759e5a8a&scoped=true&\"\nimport script from \"./shapecontext.vue?vue&type=script&lang=ts&\"\nexport * from \"./shapecontext.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./shapecontext.vue?vue&type=style&index=0&id=759e5a8a&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"759e5a8a\",\n null\n \n)\n\ncomponent.options.__file = \"shapecontext.vue\"\nexport default component.exports","import mod from \"-!../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../node_modules/cache-loader/dist/cjs.js??ref--0-0!../node_modules/vue-loader/lib/index.js??vue-loader-options!./App.vue?vue&type=style&index=0&lang=css&\"; export default mod; export * from \"-!../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../node_modules/cache-loader/dist/cjs.js??ref--0-0!../node_modules/vue-loader/lib/index.js??vue-loader-options!./App.vue?vue&type=style&index=0&lang=css&\"","import mod from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./menu.vue?vue&type=style&index=0&id=13f3fb33&scoped=true&lang=css&\"; export default mod; export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./menu.vue?vue&type=style&index=0&id=13f3fb33&scoped=true&lang=css&\"","import mod from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./prompt.vue?vue&type=style&index=0&id=0602c2e6&scoped=true&lang=css&\"; export default mod; export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./prompt.vue?vue&type=style&index=0&id=0602c2e6&scoped=true&lang=css&\"","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nimport tinycolor from \"tinycolor2\";\nimport Vue from \"vue\";\nimport Component from \"vue-class-component\";\n\nimport { Chrome } from \"vue-color\";\nimport { Prop } from \"vue-property-decorator\";\n\n@Component({\n components: {\n \"chrome-picker\": Chrome,\n },\n})\nexport default class ColorPicker extends Vue {\n @Prop(String) color!: string;\n @Prop(Boolean) disabled!: boolean;\n\n display = false;\n left = 0;\n top = 0;\n transparent = false;\n\n mounted() {\n this.transparent = (this.$refs.chromePicker).val.rgba.a === 0;\n this.setPosition();\n }\n\n open() {\n if (this.display || this.disabled) return; // click on the picker itself\n this.setPosition();\n this.display = true;\n this.$nextTick(() => this.$children[0].$el.focus());\n }\n updateColor(value: { rgba: { r: number; g: number; b: number; a: number } }) {\n this.transparent = value.rgba.a === 0;\n const newColor = tinycolor(value.rgba).toRgbString();\n this.$emit(\"update:color\", newColor);\n this.$emit(\"input\", newColor);\n }\n closePicker() {\n this.display = false;\n this.$emit(\"change\", this.color);\n }\n setPosition() {\n const rect = this.$el.getBoundingClientRect();\n // 224 is the width of the picker, 242 the height\n if (rect.right + 224 > window.innerWidth) this.left = rect.left - 224;\n else this.left = rect.right;\n if (rect.bottom + 242 > window.innerHeight) this.top = rect.top - 242;\n else this.top = rect.bottom;\n }\n}\n","import { render, staticRenderFns } from \"./game.vue?vue&type=template&id=05b88da7&scoped=true&\"\nimport script from \"./game.vue?vue&type=script&lang=ts&\"\nexport * from \"./game.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./game.vue?vue&type=style&index=0&lang=css&\"\nimport style1 from \"./game.vue?vue&type=style&index=1&id=05b88da7&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"05b88da7\",\n null\n \n)\n\ncomponent.options.__file = \"game.vue\"\nexport default component.exports","import io from \"socket.io-client\";\nimport { Route } from \"vue-router\";\n\nexport const socket = io(location.protocol + \"//\" + location.host + \"/planarally\", { autoConnect: false });\n\nexport function createConnection(route: Route) {\n socket.io.opts.query = `user=${route.params.creator}&room=${route.params.room}`;\n socket.connect();\n}\n","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nimport Vue from \"vue\";\nimport Component from \"vue-class-component\";\n\nimport AssetContextMenu from \"@/assetManager/contextMenu.vue\";\nimport ConfirmDialog from \"@/core/components/modals/confirm.vue\";\nimport Prompt from \"@/core/components/modals/prompt.vue\";\n\nimport { socket } from \"@/assetManager/socket\";\nimport { assetStore } from \"@/assetManager/store\";\nimport { Asset } from \"@/core/comm/types\";\nimport { uuidv4 } from \"@/core/utils\";\n\n@Component({\n components: {\n Prompt,\n ConfirmDialog,\n AssetContextMenu,\n },\n beforeRouteEnter(to, from, next) {\n socket.connect();\n next();\n },\n beforeRouteLeave(to, from, next) {\n socket.disconnect();\n next();\n },\n})\nexport default class AssetManager extends Vue {\n path: number[] = [];\n draggingSelection = false;\n\n get folders(): number[] {\n return assetStore.folders;\n }\n\n get files(): number[] {\n return assetStore.files;\n }\n\n get selected(): number[] {\n return assetStore.selected;\n }\n\n get idMap() {\n return assetStore.idMap;\n }\n\n get currentFolder(): number {\n if (this.path.length) return this.path[this.path.length - 1];\n return assetStore.root;\n }\n get parentFolder(): number {\n let parent = this.path[this.path.length - 2];\n if (parent === undefined) parent = assetStore.root;\n return parent;\n }\n get firstSelectedFile(): Asset | null {\n for (const sel of assetStore.selected) {\n if (assetStore.idMap.get(sel)!.file_hash) {\n return assetStore.idMap.get(sel)!;\n }\n }\n return null;\n }\n changeDirectory(nextFolder: number) {\n if (nextFolder < 0) this.path.pop();\n else this.path.push(nextFolder);\n assetStore.clearSelected();\n socket.emit(\"Folder.Get\", this.currentFolder);\n }\n createDirectory() {\n const name = window.prompt(\"New folder name\");\n if (name !== null) {\n socket.emit(\"Folder.Create\", { name, parent: this.currentFolder });\n }\n }\n moveInode(inode: number, target: number) {\n if (assetStore.files.includes(inode)) assetStore.files.splice(assetStore.files.indexOf(inode), 1);\n else assetStore.folders.splice(assetStore.folders.indexOf(inode), 1);\n assetStore.idMap.delete(inode);\n socket.emit(\"Inode.Move\", { inode, target });\n }\n select(event: MouseEvent, inode: number) {\n if (event.shiftKey && assetStore.selected.length > 0) {\n const inodes = [...assetStore.files, ...assetStore.folders];\n const start = inodes.indexOf(assetStore.selected[assetStore.selected.length - 1]);\n const end = inodes.indexOf(inode);\n for (let i = start; i !== end; start < end ? i++ : i--) {\n if (i === start) continue;\n assetStore.selected.push(inodes[i]);\n }\n assetStore.selected.push(inodes[end]);\n } else {\n if (!event.ctrlKey) {\n assetStore.clearSelected();\n }\n assetStore.selected.push(inode);\n }\n }\n startDrag(event: DragEvent, file: number) {\n if (event.dataTransfer === null) return;\n event.dataTransfer.setData(\"Hack\", \"ittyHack\");\n event.dataTransfer.dropEffect = \"move\";\n if (!assetStore.selected.includes(file)) assetStore.selected.push(file);\n this.draggingSelection = true;\n }\n moveDrag(event: DragEvent) {\n if ((event.target).classList.contains(\"folder\"))\n (event.target).classList.add(\"inode-selected\");\n }\n leaveDrag(event: DragEvent) {\n if ((event.target).classList.contains(\"folder\"))\n (event.target).classList.remove(\"inode-selected\");\n }\n stopDrag(event: DragEvent, target: number) {\n (event.target).classList.remove(\"inode-selected\");\n if (this.draggingSelection) {\n if (\n (target === assetStore.root || assetStore.folders.includes(target)) &&\n !assetStore.selected.includes(target)\n ) {\n for (const inode of assetStore.selected) {\n this.moveInode(inode, target);\n }\n }\n assetStore.clearSelected();\n } else if (event.dataTransfer && event.dataTransfer.files.length > 0) {\n this.upload(event.dataTransfer.files, target);\n }\n this.draggingSelection = false;\n }\n prepareUpload() {\n document.getElementById(\"files\")!.click();\n }\n upload(fls?: FileList, target?: number) {\n const files = (document.getElementById(\"files\")!).files;\n if (fls === undefined) {\n if (files) fls = files;\n else return;\n }\n if (target === undefined) target = this.currentFolder;\n const CHUNK_SIZE = 100000;\n for (const file of fls) {\n const uuid = uuidv4();\n const slices = Math.ceil(file.size / CHUNK_SIZE);\n for (let slice = 0; slice < slices; slice++) {\n const fr = new FileReader();\n fr.readAsArrayBuffer(\n file.slice(\n slice * CHUNK_SIZE,\n slice * CHUNK_SIZE + Math.min(CHUNK_SIZE, file.size - slice * CHUNK_SIZE),\n ),\n );\n fr.onload = e => {\n socket.emit(\"Asset.Upload\", {\n name: file.name,\n directory: target,\n data: fr.result,\n slice,\n totalSlices: slices,\n uuid,\n });\n };\n }\n }\n }\n}\n","import { render, staticRenderFns } from \"./asset_node.vue?vue&type=template&id=6d718094&scoped=true&\"\nimport script from \"./asset_node.vue?vue&type=script&lang=ts&\"\nexport * from \"./asset_node.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./asset_node.vue?vue&type=style&index=0&id=6d718094&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"6d718094\",\n null\n \n)\n\ncomponent.options.__file = \"asset_node.vue\"\nexport default component.exports","import mod from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./selectcontext.vue?vue&type=style&index=0&id=44a31e42&scoped=true&lang=css&\"; export default mod; export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./selectcontext.vue?vue&type=style&index=0&id=44a31e42&scoped=true&lang=css&\"","import { render, staticRenderFns } from \"./login.vue?vue&type=template&id=bc30fc14&scoped=true&\"\nimport script from \"./login.vue?vue&type=script&lang=ts&\"\nexport * from \"./login.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./login.vue?vue&type=style&index=0&id=bc30fc14&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"bc30fc14\",\n null\n \n)\n\ncomponent.options.__file = \"login.vue\"\nexport default component.exports","import { layerManager } from \"@/game/layers/manager\";\nimport { g2lx, g2ly } from \"@/game/units\";\nimport { EdgeIterator, TDS } from \"./tds\";\nimport { ccw, cw } from \"./triag\";\n\nexport function drawPolygon(polygon: number[][], colour?: string) {\n const dl = layerManager.getLayer(\"draw\");\n if (dl === undefined) return;\n const ctx = dl.ctx;\n ctx.lineJoin = \"round\";\n // ctx.clearRect(0, 0, window.innerWidth, window.innerHeight);\n ctx.lineJoin = \"round\";\n ctx.beginPath();\n ctx.strokeStyle =\n colour === undefined ? `rgb(${Math.random() * 255}, ${Math.random() * 255}, ${Math.random() * 255})` : colour;\n ctx.moveTo(g2lx(polygon[0][0]), g2ly(polygon[0][1]));\n for (const point of polygon) {\n ctx.lineTo(g2lx(point[0]), g2ly(point[1]));\n }\n ctx.closePath();\n ctx.stroke();\n}\n\nexport function drawPolygonL(polygon: number[][], colour?: string) {\n const dl = layerManager.getLayer(\"draw\");\n if (dl === undefined) return;\n const ctx = dl.ctx;\n ctx.lineJoin = \"round\";\n // ctx.clearRect(0, 0, window.innerWidth, window.innerHeight);\n ctx.lineJoin = \"round\";\n ctx.beginPath();\n ctx.strokeStyle =\n colour === undefined ? `rgb(${Math.random() * 255}, ${Math.random() * 255}, ${Math.random() * 255})` : colour;\n ctx.moveTo(polygon[0][0], polygon[0][1]);\n for (const point of polygon) {\n ctx.lineTo(point[0], point[1]);\n }\n ctx.closePath();\n ctx.stroke();\n}\n\nfunction x(xx: number, local: boolean) {\n if (local) return xx;\n else return g2lx(xx);\n}\n\nfunction y(yy: number, local: boolean) {\n if (local) return yy;\n else return g2ly(yy);\n}\n\nlet I = 0;\nlet J = 0;\n\nfunction drl(ctx: CanvasRenderingContext2D, from: number[], to: number[], constrained: boolean, local: boolean) {\n // J++;\n // if (constrained) {\n // I++;\n // console.log(\"*\", from, to);\n // } else {\n // console.log(\" \", from, to);\n // }\n ctx.beginPath();\n ctx.strokeStyle = constrained ? \"rgba(255, 0, 0, 0.30)\" : \"rgba(0, 0, 0, 0.30)\";\n ctx.moveTo(x(from[0], local), y(from[1], local));\n ctx.lineTo(x(to[0], local), y(to[1], local));\n ctx.closePath();\n ctx.stroke();\n}\n\nfunction drawPolygonT(tds: TDS, local = true, clear = true, logs: 0 | 1 | 2 = 0) {\n I = 0;\n J = 0;\n let T = 0;\n const dl = layerManager.getLayer(\"draw\");\n if (dl === undefined) return;\n const ctx = dl.ctx;\n if (clear) ctx.clearRect(0, 0, 2000, 1000);\n ctx.lineJoin = \"round\";\n // ctx.clearRect(0, 0, window.innerWidth, window.innerHeight);\n ctx.lineJoin = \"round\";\n const ei = new EdgeIterator(tds);\n while (ei.valid) {\n ei.next();\n ei.collect();\n }\n ei.collect();\n do {\n const fromP = ei.edge.first!.vertices[ccw(ei.edge.second)]!.point!;\n const toP = ei.edge.first!.vertices[cw(ei.edge.second)]!.point!;\n if (logs > 0) {\n if (fromP[0] === -Infinity || toP[0] === -Infinity) {\n ei.next();\n continue;\n }\n J++;\n if (ei.edge.first!.constraints[ei.edge.second]) {\n I++;\n if (logs === 2) console.log(`Edge: (*) ${fromP} > ${toP}`);\n } else if (logs === 2) console.log(`Edge: ${fromP} > ${toP}`);\n }\n do {\n ei.next();\n ei.collect();\n } while (ei.valid);\n } while (ei.pos !== null);\n for (const t of tds.triangles) {\n if (t.isInfinite()) continue;\n T++;\n const po = [];\n ctx.fillStyle = \"red\";\n if (t.vertices[0] !== undefined) {\n po.push(t.vertices[0]!.point);\n ctx.beginPath();\n ctx.arc(x(t.vertices[0]!.point![0], local), y(t.vertices[0]!.point![1], local), 5, 0, 2 * Math.PI);\n ctx.closePath();\n ctx.fill();\n }\n if (t.vertices[1] !== undefined) {\n po.push(t.vertices[1]!.point);\n ctx.arc(x(t.vertices[1]!.point![0], local), y(t.vertices[1]!.point![1], local), 5, 0, 2 * Math.PI);\n ctx.closePath();\n ctx.fill();\n }\n if (t.vertices[2] !== undefined) {\n po.push(t.vertices[2]!.point);\n ctx.arc(x(t.vertices[2]!.point![0], local), y(t.vertices[2]!.point![1], local), 5, 0, 2 * Math.PI);\n ctx.closePath();\n ctx.fill();\n }\n if (logs === 2) console.log(\"[T] \", ...po, t.constraints);\n\n ctx.moveTo(x(t.vertices[0]!.point![0], local), y(t.vertices[0]!.point![1], local));\n if (t.vertices[0] !== undefined && t.vertices[1] !== undefined)\n drl(ctx, t.vertices[0]!.point!, t.vertices[1]!.point!, t.constraints[2], local);\n if (t.vertices[1] !== undefined && t.vertices[2] !== undefined)\n drl(ctx, t.vertices[1]!.point!, t.vertices[2]!.point!, t.constraints[0], local);\n if (t.vertices[2] !== undefined && t.vertices[0] !== undefined)\n drl(ctx, t.vertices[2]!.point!, t.vertices[0]!.point!, t.constraints[1], local);\n }\n if (logs > 0) {\n console.log(`Edges: ${I}/${J}`);\n console.log(`Faces: ${T}`);\n }\n}\n\n(window).DP = drawPolygon;\n(window).DPL = drawPolygonL;\n(window).DPT = drawPolygonT;\n","import { render, staticRenderFns } from \"./accordion.vue?vue&type=template&id=0bf2b7ba&scoped=true&\"\nimport script from \"./accordion.vue?vue&type=script&lang=ts&\"\nexport * from \"./accordion.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./accordion.vue?vue&type=style&index=0&id=0bf2b7ba&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"0bf2b7ba\",\n null\n \n)\n\ncomponent.options.__file = \"accordion.vue\"\nexport default component.exports","import mod from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./tool.vue?vue&type=style&index=0&lang=css&\"; export default mod; export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./tool.vue?vue&type=style&index=0&lang=css&\"","import * as tinycolor from \"tinycolor2\";\n\nimport { calcFontScale } from \"@/core/utils\";\nimport { InitiativeData } from \"@/game/comm/types/general\";\nimport { ServerCircularToken } from \"@/game/comm/types/shapes\";\nimport { GlobalPoint } from \"@/game/geom\";\nimport { Circle } from \"@/game/shapes/circle\";\nimport { gameStore } from \"@/game/store\";\nimport { g2l, g2lz } from \"@/game/units\";\n\nexport class CircularToken extends Circle {\n type = \"circulartoken\";\n text: string;\n font: string;\n constructor(\n center: GlobalPoint,\n r: number,\n text: string,\n font: string,\n fillColour?: string,\n strokeColour?: string,\n uuid?: string,\n ) {\n super(center, r, fillColour, strokeColour, uuid);\n this.text = text;\n this.font = font;\n }\n asDict(): ServerCircularToken {\n return Object.assign(this.getBaseDict(), {\n radius: this.r,\n text: this.text,\n font: this.font,\n });\n }\n fromDict(data: ServerCircularToken) {\n super.fromDict(data);\n this.r = data.radius;\n this.text = data.text;\n this.font = data.font;\n }\n draw(ctx: CanvasRenderingContext2D) {\n super.draw(ctx);\n ctx.font = this.font;\n ctx.save();\n const dest = g2l(this.center());\n ctx.textAlign = \"center\";\n ctx.textBaseline = \"middle\";\n const xs = calcFontScale(ctx, this.text, g2lz(this.r), g2lz(this.r));\n const ys = 0;\n ctx.transform(xs, ys, -ys, xs, dest.x, dest.y);\n ctx.fillStyle = tinycolor.mostReadable(this.fillColour, [\"#000\", \"#fff\"]).toHexString();\n ctx.fillText(this.text, 0, 0);\n ctx.restore();\n }\n getInitiativeRepr(): InitiativeData {\n return {\n uuid: this.uuid,\n visible: !gameStore.IS_DM,\n group: false,\n source: this.name === \"\" || this.name === \"Unknown shape\" ? this.text : this.name,\n has_img: false,\n effects: [],\n index: Infinity,\n };\n }\n}\n","import { GlobalPoint, LocalPoint } from \"@/game/geom\";\nimport { Layer } from \"@/game/layers/layer\";\nimport { layerManager } from \"@/game/layers/manager\";\nimport { Rect } from \"@/game/shapes/rect\";\nimport { Text } from \"@/game/shapes/text\";\nimport { gameStore } from \"@/game/store\";\nimport { l2g } from \"@/game/units\";\n\nexport class AnnotationManager {\n annotationText: Text;\n annotationRect: Rect;\n layer: Layer | undefined;\n shown: boolean = false;\n\n constructor() {\n const origin = new GlobalPoint(0, 0);\n this.annotationText = new Text(origin, \"\", \"bold 20px serif\", 0, \"rgba(230, 230, 230, 1)\");\n this.annotationRect = new Rect(origin, 0, 0, \"rgba(0, 0, 0, 0.6)\");\n }\n\n setActiveText(text: string) {\n if (this.layer === undefined) {\n if (layerManager.hasLayer(\"draw\")) {\n this.layer = layerManager.getLayer(\"draw\")!;\n this.layer.addShape(this.annotationRect, false);\n this.layer.addShape(this.annotationText, false);\n } else {\n console.warn(\"There is no draw layer to draw annotations on!\");\n return;\n }\n }\n this.shown = text !== \"\";\n this.annotationText.refPoint = l2g(new LocalPoint(this.layer.canvas.width / 2, 50));\n this.annotationText.text = text;\n const width = this.shown ? this.annotationText.getMaxWidth(this.layer.ctx) + 10 : 0;\n const height = this.shown ? this.annotationText.getMaxHeight(this.layer.ctx) + 10 : 0;\n this.annotationRect.refPoint = l2g(new LocalPoint(this.layer.canvas.width / 2 - width / 2, 30));\n this.annotationRect.w = width / gameStore.zoomFactor;\n this.annotationRect.h = height / gameStore.zoomFactor;\n this.layer.invalidate(true);\n }\n}\n","import { render, staticRenderFns } from \"./menu.vue?vue&type=template&id=13f3fb33&scoped=true&\"\nimport script from \"./menu.vue?vue&type=script&lang=ts&\"\nexport * from \"./menu.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./menu.vue?vue&type=style&index=0&id=13f3fb33&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"13f3fb33\",\n null\n \n)\n\ncomponent.options.__file = \"menu.vue\"\nexport default component.exports","import { render, staticRenderFns } from \"./contextmenu.vue?vue&type=template&id=256dde9c&\"\nimport script from \"./contextmenu.vue?vue&type=script&lang=ts&\"\nexport * from \"./contextmenu.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./contextmenu.vue?vue&type=style&index=0&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\ncomponent.options.__file = \"contextmenu.vue\"\nexport default component.exports","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/ts-loader/index.js??ref--12-2!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./note.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/ts-loader/index.js??ref--12-2!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./note.vue?vue&type=script&lang=ts&\"","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/ts-loader/index.js??ref--12-2!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./login.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/ts-loader/index.js??ref--12-2!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./login.vue?vue&type=script&lang=ts&\"","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('Modal',{attrs:{\"visible\":_vm.visible,\"mask\":false},on:{\"close\":function($event){_vm.visible = false}},scopedSlots:_vm._u([{key:\"header\",fn:function(m){return _c('div',{staticClass:\"modal-header\",attrs:{\"draggable\":\"true\"},on:{\"dragstart\":m.dragStart,\"dragend\":m.dragEnd}},[_c('div',[_vm._v(\"Label manager\")]),_c('div',{staticClass:\"header-close\",on:{\"click\":function($event){_vm.visible = false}}},[_c('i',{staticClass:\"far fa-window-close\"})])])}}])},[_c('div',{staticClass:\"modal-body\"},[_c('div',{staticClass:\"grid\"},[_c('div',{staticClass:\"header\"},[_c('abbr',{attrs:{\"title\":\"Category\"}},[_vm._v(\"Cat.\")])]),_c('div',{staticClass:\"header name\"},[_vm._v(\"Name\")]),_c('div',{staticClass:\"header\"},[_c('abbr',{attrs:{\"title\":\"Visible\"}},[_vm._v(\"Vis.\")])]),_c('div',{staticClass:\"header\"},[_c('abbr',{attrs:{\"title\":\"Delete\"}},[_vm._v(\"Del.\")])]),_c('div',{staticClass:\"separator spanrow\",staticStyle:{\"margin\":\"0 0 7px\"}}),_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.search),expression:\"search\"}],ref:\"search\",staticClass:\"spanrow\",attrs:{\"type\":\"text\",\"placeholder\":\"search\"},domProps:{\"value\":(_vm.search)},on:{\"input\":function($event){if($event.target.composing){ return; }_vm.search=$event.target.value}}})]),_c('div',{staticClass:\"grid scroll\"},[_vm._l((_vm.categories),function(category){return [_vm._l((_vm.labels[category]),function(label){return [_c('div',{key:'row-'+label.uuid,staticClass:\"row\",on:{\"click\":function($event){_vm.selectLabel(label.uuid)}}},[(label.category)?[_c('div',{key:'cat-'+label.uuid},[_vm._v(_vm._s(label.category))]),_c('div',{key:'name-'+label.uuid,staticClass:\"name\"},[_vm._v(_vm._s(label.name))])]:_vm._e(),(!label.category)?[_c('div',{key:'cat-'+label.uuid}),_c('div',{key:'name-'+label.uuid,staticClass:\"name\"},[_vm._v(_vm._s(label.name))])]:_vm._e(),_c('div',{key:'visible-'+label.uuid,class:{'lower-opacity': !label.visible},style:({textAlign: 'center'}),on:{\"click\":function($event){$event.stopPropagation();_vm.toggleVisibility(label)}}},[_c('i',{staticClass:\"fas fa-eye\"})]),_c('div',{key:'delete-'+label.uuid,on:{\"click\":function($event){$event.stopPropagation();_vm.deleteLabel(label.uuid)}}},[_c('i',{staticClass:\"fas fa-trash-alt\"})])],2)]})]}),(_vm.labels.length === 0)?[_c('div',{attrs:{\"id\":\"no-labels\"}},[_vm._v(\"No labels exist yet\")])]:_vm._e()],2),_c('div',{staticClass:\"grid\"},[_c('div',{staticClass:\"separator spanrow\"}),_c('input',{directives:[{name:\"model\",rawName:\"v-model.trim\",value:(_vm.newCategory),expression:\"newCategory\",modifiers:{\"trim\":true}}],attrs:{\"type\":\"text\"},domProps:{\"value\":(_vm.newCategory)},on:{\"input\":function($event){if($event.target.composing){ return; }_vm.newCategory=$event.target.value.trim()},\"blur\":function($event){_vm.$forceUpdate()}}}),_c('input',{directives:[{name:\"model\",rawName:\"v-model.trim\",value:(_vm.newName),expression:\"newName\",modifiers:{\"trim\":true}}],attrs:{\"type\":\"text\"},domProps:{\"value\":(_vm.newName)},on:{\"input\":function($event){if($event.target.composing){ return; }_vm.newName=$event.target.value.trim()},\"blur\":function($event){_vm.$forceUpdate()}}}),_c('button',{attrs:{\"id\":\"addLabelButton\"},on:{\"click\":function($event){$event.stopPropagation();return _vm.addLabel($event)}}},[_vm._v(\"Add\")])])])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","export * from \"-!cache-loader?{\\\"cacheDirectory\\\":\\\"node_modules/.cache/vue-loader\\\",\\\"cacheIdentifier\\\":\\\"74f43d04-vue-loader-template\\\"}!../../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./labels.vue?vue&type=template&id=e477c214&scoped=true&\"","import {\n ServerAsset,\n ServerCircle,\n ServerCircularToken,\n ServerLine,\n ServerMultiLine,\n ServerPolygon,\n ServerRect,\n ServerShape,\n ServerText,\n} from \"@/game/comm/types/shapes\";\nimport { GlobalPoint } from \"@/game/geom\";\nimport { layerManager } from \"@/game/layers/manager\";\nimport { Asset } from \"@/game/shapes/asset\";\nimport { Circle } from \"@/game/shapes/circle\";\nimport { CircularToken } from \"@/game/shapes/circulartoken\";\nimport { Line } from \"@/game/shapes/line\";\nimport { MultiLine } from \"@/game/shapes/multiline\";\nimport { Rect } from \"@/game/shapes/rect\";\nimport { Shape } from \"@/game/shapes/shape\";\nimport { Text } from \"@/game/shapes/text\";\nimport { Polygon } from \"./polygon\";\n\nexport function createShapeFromDict(shape: ServerShape) {\n let sh: Shape;\n\n // A fromJSON and toJSON on Shape would be cleaner but ts does not allow for static abstracts so yeah.\n\n // Shape Type specifics\n\n const refPoint = new GlobalPoint(shape.x, shape.y);\n if (shape.type_ === \"rect\") {\n const rect = shape;\n sh = new Rect(refPoint, rect.width, rect.height, rect.fill_colour, rect.stroke_colour, rect.uuid);\n } else if (shape.type_ === \"circle\") {\n const circ = shape;\n sh = new Circle(refPoint, circ.radius, circ.fill_colour, circ.stroke_colour, circ.uuid);\n } else if (shape.type_ === \"circulartoken\") {\n const token = shape;\n sh = new CircularToken(\n refPoint,\n token.radius,\n token.text,\n token.font,\n token.fill_colour,\n token.stroke_colour,\n token.uuid,\n );\n } else if (shape.type_ === \"line\") {\n const line = shape;\n sh = new Line(refPoint, new GlobalPoint(line.x2, line.y2), line.line_width, line.stroke_colour, line.uuid);\n } else if (shape.type_ === \"multiline\") {\n const multiline = shape;\n sh = new MultiLine(\n refPoint,\n multiline.points.map(p => new GlobalPoint(p.x, p.y)),\n multiline.line_width,\n multiline.stroke_colour,\n multiline.uuid,\n );\n } else if (shape.type_ === \"polygon\") {\n const polygon = shape;\n sh = new Polygon(\n refPoint,\n polygon.vertices.map(v => new GlobalPoint(v.x, v.y)),\n polygon.fill_colour,\n polygon.stroke_colour,\n polygon.uuid,\n );\n } else if (shape.type_ === \"text\") {\n const text = shape;\n sh = new Text(refPoint, text.text, text.font, text.angle, text.fill_colour, text.stroke_colour, text.uuid);\n } else if (shape.type_ === \"assetrect\") {\n const asset = shape;\n const img = new Image(asset.width, asset.height);\n if (asset.src.startsWith(\"http\")) img.src = new URL(asset.src).pathname;\n else img.src = asset.src;\n sh = new Asset(img, refPoint, asset.width, asset.height, asset.uuid);\n img.onload = () => {\n layerManager.getLayer(shape.layer)!.invalidate(false);\n };\n } else {\n return undefined;\n }\n sh.fromDict(shape);\n return sh;\n}\n","import mod from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./confirm.vue?vue&type=style&index=0&id=1883e207&scoped=true&lang=css&\"; export default mod; export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./confirm.vue?vue&type=style&index=0&id=1883e207&scoped=true&lang=css&\"","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('SelectContext',{ref:\"selectcontext\"})}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","export * from \"-!cache-loader?{\\\"cacheDirectory\\\":\\\"node_modules/.cache/vue-loader\\\",\\\"cacheIdentifier\\\":\\\"74f43d04-vue-loader-template\\\"}!../../../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./select.vue?vue&type=template&id=048b3482&\"","import tinycolor from \"tinycolor2\";\n\nimport { uuidv4 } from \"@/core/utils\";\nimport { socket } from \"@/game/api/socket\";\nimport { aurasFromServer, aurasToServer } from \"@/game/comm/conversion/aura\";\nimport { InitiativeData } from \"@/game/comm/types/general\";\nimport { ServerShape } from \"@/game/comm/types/shapes\";\nimport { GlobalPoint, LocalPoint, Vector } from \"@/game/geom\";\nimport { layerManager } from \"@/game/layers/manager\";\nimport { BoundingRect } from \"@/game/shapes/boundingrect\";\nimport { gameStore } from \"@/game/store\";\nimport { g2l, g2lr, g2lx, g2ly, g2lz } from \"@/game/units\";\n\nexport abstract class Shape {\n // Used to create class instance from server shape data\n abstract readonly type: string;\n // The unique ID of this shape\n readonly uuid: string;\n // The layer the shape is currently on\n layer!: string;\n\n // A reference point regarding that specific shape's structure\n protected _refPoint: GlobalPoint;\n\n // Fill colour of the shape\n fillColour: string = \"#000\";\n strokeColour: string = \"rgba(0,0,0,0)\";\n // The optional name associated with the shape\n name = \"Unknown shape\";\n nameVisible = true;\n\n // Associated trackers/auras/owners\n trackers: Tracker[] = [];\n auras: Aura[] = [];\n labels: Label[] = [];\n protected _owners: string[] = [];\n\n // Block light sources\n visionObstruction = false;\n // Prevent shapes from overlapping with this shape\n movementObstruction = false;\n // Does this shape represent a playable token\n isToken = false;\n // Show a highlight box\n showHighlight = false;\n\n // Mouseover annotation\n annotation: string = \"\";\n\n // Draw modus to use\n globalCompositeOperation: string = \"source-over\";\n\n // Additional options for specialized uses\n options: Map = new Map();\n\n constructor(refPoint: GlobalPoint, fillColour?: string, strokeColour?: string, uuid?: string) {\n this._refPoint = refPoint;\n this.uuid = uuid || uuidv4();\n if (fillColour !== undefined) this.fillColour = fillColour;\n if (strokeColour !== undefined) this.strokeColour = strokeColour;\n }\n\n get refPoint() {\n return this._refPoint;\n }\n set refPoint(point: GlobalPoint) {\n this._refPoint = point;\n }\n\n abstract getBoundingBox(): BoundingRect;\n\n // If inWorldCoord is\n abstract contains(point: GlobalPoint): boolean;\n\n abstract center(): GlobalPoint;\n abstract center(centerPoint: GlobalPoint): void;\n visibleInCanvas(canvas: HTMLCanvasElement): boolean {\n // for (const aura of this.auras) {\n // if (aura.value > 0) {\n // const auraCircle = new Circle(this.center(), aura.value);\n // if (auraCircle.visibleInCanvas(canvas)) return true;\n // }\n // }\n return false;\n }\n\n // Code to snap a shape to the grid\n // This is shape dependent as the shape refPoints are shape specific in\n abstract snapToGrid(): void;\n abstract resizeToGrid(): void;\n abstract resize(resizePoint: number, point: LocalPoint): void;\n\n abstract get points(): number[][];\n\n getPointIndex(p: GlobalPoint, delta = 0): number {\n for (const [idx, point] of this.points.entries()) {\n if (Math.abs(p.x - point[0]) <= delta && Math.abs(p.y - point[1]) <= delta) return idx;\n }\n return -1;\n }\n\n getPointOrientation(i: number): Vector {\n const prev = GlobalPoint.fromArray(this.points[(this.points.length + i - 1) % this.points.length]);\n const point = GlobalPoint.fromArray(this.points[i]);\n const next = GlobalPoint.fromArray(this.points[(i + 1) % this.points.length]);\n const vec = next.subtract(prev);\n const mid = prev.add(vec.multiply(0.5));\n return point.subtract(mid).normalize();\n }\n\n invalidate(skipLightUpdate: boolean) {\n const l = layerManager.getLayer(this.layer);\n if (l) l.invalidate(skipLightUpdate);\n }\n\n checkVisionSources(recalculate = true) {\n const self = this;\n const obstructionIndex = gameStore.visionBlockers.indexOf(this.uuid);\n let update = false;\n if (this.visionObstruction && obstructionIndex === -1) {\n gameStore.visionBlockers.push(this.uuid);\n update = true;\n } else if (!this.visionObstruction && obstructionIndex >= 0) {\n gameStore.visionBlockers.splice(obstructionIndex, 1);\n update = true;\n }\n if (update && recalculate) gameStore.recalculateVision();\n\n // Check if the visionsource auras are in the gameManager\n this.auras.forEach(au => {\n const ls = gameStore.visionSources;\n const i = ls.findIndex(o => o.aura === au.uuid);\n if (au.visionSource && i === -1) {\n ls.push({ shape: self.uuid, aura: au.uuid });\n } else if (!au.visionSource && i >= 0) {\n ls.splice(i, 1);\n }\n });\n // Check if anything in the gameManager referencing this shape is in fact still a visionsource\n for (let i = gameStore.visionSources.length - 1; i >= 0; i--) {\n const ls = gameStore.visionSources[i];\n if (ls.shape === self.uuid) {\n if (!self.auras.some(a => a.uuid === ls.aura && a.visionSource)) gameStore.visionSources.splice(i, 1);\n }\n }\n }\n\n setMovementBlock(blocksMovement: boolean, recalculate = true) {\n this.movementObstruction = blocksMovement || false;\n const obstructionIndex = gameStore.movementblockers.indexOf(this.uuid);\n let update = false;\n if (this.movementObstruction && obstructionIndex === -1) {\n gameStore.movementblockers.push(this.uuid);\n update = true;\n } else if (!this.movementObstruction && obstructionIndex >= 0) {\n gameStore.movementblockers.splice(obstructionIndex, 1);\n update = true;\n }\n if (update && recalculate) gameStore.recalculateMovement();\n }\n\n setIsToken(isToken: boolean) {\n this.isToken = isToken;\n if (this.ownedBy()) {\n const i = gameStore.ownedtokens.indexOf(this.uuid);\n if (this.isToken && i === -1) gameStore.ownedtokens.push(this.uuid);\n else if (!this.isToken && i >= 0) gameStore.ownedtokens.splice(i, 1);\n }\n }\n\n abstract asDict(): ServerShape;\n getBaseDict(): ServerShape {\n return {\n type_: this.type,\n uuid: this.uuid,\n x: this.refPoint.x,\n y: this.refPoint.y,\n layer: this.layer,\n draw_operator: this.globalCompositeOperation,\n movement_obstruction: this.movementObstruction,\n vision_obstruction: this.visionObstruction,\n auras: aurasToServer(this.auras),\n trackers: this.trackers,\n labels: this.labels,\n owners: this._owners,\n fill_colour: this.fillColour,\n stroke_colour: this.strokeColour,\n name: this.name,\n name_visible: this.nameVisible,\n annotation: this.annotation,\n is_token: this.isToken,\n options: JSON.stringify([...this.options]),\n };\n }\n fromDict(data: ServerShape) {\n this.layer = data.layer;\n this.globalCompositeOperation = data.draw_operator;\n this.movementObstruction = data.movement_obstruction;\n this.visionObstruction = data.vision_obstruction;\n this.auras = aurasFromServer(data.auras);\n this.trackers = data.trackers;\n this.labels = data.labels;\n this._owners = data.owners;\n this.isToken = data.is_token;\n this.nameVisible = data.name_visible;\n if (data.annotation) this.annotation = data.annotation;\n if (data.name) this.name = data.name;\n if (data.options) this.options = new Map(JSON.parse(data.options));\n }\n\n draw(ctx: CanvasRenderingContext2D) {\n if (this.globalCompositeOperation !== undefined) ctx.globalCompositeOperation = this.globalCompositeOperation;\n else ctx.globalCompositeOperation = \"source-over\";\n if (this.showHighlight) {\n const bbox = this.getBoundingBox();\n ctx.strokeStyle = \"red\";\n ctx.strokeRect(g2lx(bbox.topLeft.x) - 5, g2ly(bbox.topLeft.y) - 5, g2lz(bbox.w) + 10, g2lz(bbox.h) + 10);\n }\n }\n\n drawAuras(ctx: CanvasRenderingContext2D) {\n for (const aura of this.auras) {\n if (aura.value === 0 && aura.dim === 0) return;\n ctx.beginPath();\n\n const loc = g2l(this.center());\n const innerRange = g2lr(aura.value + aura.dim);\n\n if (aura.dim === 0) ctx.fillStyle = aura.colour;\n else {\n const gradient = ctx.createRadialGradient(\n loc.x,\n loc.y,\n g2lr(aura.value),\n loc.x,\n loc.y,\n g2lr(aura.value + aura.dim),\n );\n const tc = tinycolor(aura.colour);\n ctx.fillStyle = gradient;\n gradient.addColorStop(0, aura.colour);\n gradient.addColorStop(1, tc.setAlpha(0).toRgbString());\n }\n if (!aura.visionSource || aura.lastPath === undefined) {\n ctx.arc(loc.x, loc.y, innerRange, 0, 2 * Math.PI);\n ctx.fill();\n } else {\n try {\n ctx.fill(aura.lastPath);\n } catch (e) {\n ctx.arc(loc.x, loc.y, innerRange, 0, 2 * Math.PI);\n ctx.fill();\n console.warn(e);\n }\n }\n }\n }\n\n getInitiativeRepr(): InitiativeData {\n return {\n uuid: this.uuid,\n visible: !gameStore.IS_DM,\n group: false,\n source: this.name,\n has_img: false,\n effects: [],\n index: Infinity,\n };\n }\n\n moveLayer(layer: string, sync: boolean) {\n const oldLayer = layerManager.getLayer(this.layer);\n const newLayer = layerManager.getLayer(layer);\n if (oldLayer === undefined || newLayer === undefined) return;\n this.layer = layer;\n // Update layer shapes\n oldLayer.shapes.splice(oldLayer.shapes.indexOf(this), 1);\n newLayer.shapes.push(this);\n // Revalidate layers (light should at most be redone once)\n oldLayer.invalidate(true);\n newLayer.invalidate(false);\n // Sync!\n if (sync) socket.emit(\"Shape.Layer.Change\", { uuid: this.uuid, layer });\n }\n\n get owners() {\n return Object.freeze(this._owners.slice());\n }\n\n ownedBy(username?: string) {\n if (username === undefined) username = gameStore.username;\n return gameStore.IS_DM || this._owners.includes(username) || (gameStore.FAKE_PLAYER && gameStore.activeTokens.includes(this.uuid));\n }\n\n addOwner(owner: string) {\n if (!this._owners.includes(owner)) this._owners.push(owner);\n }\n\n updateOwner(oldValue: string, newValue: string) {\n const ownerIndex = this._owners.findIndex(o => o === oldValue);\n if (ownerIndex >= 0) this._owners.splice(ownerIndex, 1, newValue);\n else this.addOwner(newValue);\n }\n\n removeOwner(owner: string) {\n const ownerIndex = this._owners.findIndex(o => o === owner);\n this._owners.splice(ownerIndex, 1);\n }\n}\n","import mod from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/ts-loader/index.js??ref--12-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./prompt.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/ts-loader/index.js??ref--12-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./prompt.vue?vue&type=script&lang=ts&\"","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return (_vm.note !== null)?_c('modal',{attrs:{\"visible\":_vm.visible,\"mask\":false},on:{\"close\":function($event){_vm.visible = false}},scopedSlots:_vm._u([{key:\"header\",fn:function(m){return _c('div',{staticClass:\"modal-header\",attrs:{\"draggable\":\"true\"},on:{\"dragstart\":m.dragStart,\"dragend\":m.dragEnd}},[_c('span',{on:{\"click\":function($event){_vm.$refs.title.select()}}},[_c('i',{staticClass:\"fas fa-pencil-alt\",staticStyle:{\"font-size\":\"15px\"}})]),_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.note.title),expression:\"note.title\"}],ref:\"title\",domProps:{\"value\":(_vm.note.title)},on:{\"change\":_vm.updateNote,\"input\":function($event){if($event.target.composing){ return; }_vm.$set(_vm.note, \"title\", $event.target.value)}}}),_c('div',{staticClass:\"header-close\",on:{\"click\":function($event){_vm.visible = false}}},[_c('i',{staticClass:\"far fa-window-close\"})])])}}])},[_c('div',{staticClass:\"modal-body\"},[_c('textarea',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.note.text),expression:\"note.text\"}],ref:\"textarea\",style:({'height': _vm.calcHeight()}),domProps:{\"value\":(_vm.note.text)},on:{\"change\":_vm.updateNote,\"input\":function($event){if($event.target.composing){ return; }_vm.$set(_vm.note, \"text\", $event.target.value)}}})]),_c('div',{staticClass:\"modal-footer\"},[_c('button',{on:{\"click\":_vm.removeNote}},[_c('i',{staticClass:\"far fa-trash-alt\"}),_vm._v(\" Remove\\n \")])])]):_vm._e()}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","export * from \"-!cache-loader?{\\\"cacheDirectory\\\":\\\"node_modules/.cache/vue-loader\\\",\\\"cacheIdentifier\\\":\\\"74f43d04-vue-loader-template\\\"}!../../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./note.vue?vue&type=template&id=7a3669fd&scoped=true&\"","import mod from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./modal.vue?vue&type=style&index=0&id=12ed61ba&scoped=true&lang=css&\"; export default mod; export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./modal.vue?vue&type=style&index=0&id=12ed61ba&scoped=true&lang=css&\"","\n\n\n\n\nimport Component from \"vue-class-component\";\n\nimport SelectContext from \"@/game/ui/tools/selectcontext.vue\";\nimport Tool from \"@/game/ui/tools/tool.vue\";\nimport SelectionInfo from \"../selection/selection_info.vue\";\n\nimport { getRef } from \"@/core/utils\";\nimport { socket } from \"@/game/api/socket\";\nimport { GlobalPoint, LocalPoint, Ray, Vector } from \"@/game/geom\";\nimport { Layer } from \"@/game/layers/layer\";\nimport { layerManager } from \"@/game/layers/manager\";\nimport { Rect } from \"@/game/shapes/rect\";\nimport { gameStore } from \"@/game/store\";\nimport { calculateDelta } from \"@/game/ui/tools/utils\";\nimport { g2l, g2lr, g2lx, g2ly, g2lz, l2g, l2gz } from \"@/game/units\";\nimport { getMouse } from \"@/game/utils\";\n\nexport enum SelectOperations {\n Noop,\n Resize,\n Drag,\n GroupSelect,\n}\n\nconst start = new GlobalPoint(-1000, -1000);\n\n@Component({\n components: {\n SelectContext,\n },\n})\nexport default class SelectTool extends Tool {\n name = \"Select\";\n showContextMenu = false;\n active = false;\n\n mode = SelectOperations.Noop;\n resizePoint = 0;\n deltaChanged = false;\n // Because we never drag from the asset's (0, 0) coord and want a smoother drag experience\n // we keep track of the actual offset within the asset.\n dragRay = new Ray(new LocalPoint(0, 0), new Vector(0, 0));\n selectionStartPoint = start;\n selectionHelper = new Rect(start, 0, 0);\n created() {\n this.selectionHelper.globalCompositeOperation = \"source-over\";\n }\n onMouseDown(event: MouseEvent) {\n const layer = layerManager.getLayer();\n if (layer === undefined) {\n console.log(\"No active layer!\");\n return;\n }\n\n if (!this.selectionHelper.owners.includes(gameStore.username)) {\n this.selectionHelper.addOwner(gameStore.username);\n }\n\n const mouse = getMouse(event);\n const globalMouse = l2g(mouse);\n\n let hit = false;\n // The selectionStack allows for lower positioned objects that are selected to have precedence during overlap.\n let selectionStack;\n if (!layer.selection.length) selectionStack = layer.shapes;\n else selectionStack = layer.shapes.concat(layer.selection);\n for (let i = selectionStack.length - 1; i >= 0; i--) {\n const shape = selectionStack[i];\n\n this.resizePoint = shape.getPointIndex(globalMouse, l2gz(3));\n\n // Resize case, a corner is selected\n if (this.resizePoint >= 0) {\n layer.selection = [shape];\n getRef(\"selectionInfo\").shape = shape;\n this.mode = SelectOperations.Resize;\n layer.invalidate(true);\n hit = true;\n break;\n\n // Drag case, a shape is selected\n } else if (shape.contains(globalMouse)) {\n const selection = shape;\n if (layer.selection.indexOf(selection) === -1) {\n layer.selection = [selection];\n getRef(\"selectionInfo\").shape = selection;\n }\n this.mode = SelectOperations.Drag;\n const localRefPoint = g2l(selection.refPoint);\n this.dragRay = new Ray(localRefPoint, mouse.subtract(localRefPoint));\n layer.invalidate(true);\n hit = true;\n break;\n }\n }\n\n // GroupSelect case, draw a selection box to select multiple shapes\n if (!hit) {\n this.mode = SelectOperations.GroupSelect;\n for (const selection of layer.selection) getRef(\"selectionInfo\").shape = selection;\n\n this.selectionStartPoint = globalMouse;\n\n this.selectionHelper.refPoint = this.selectionStartPoint;\n this.selectionHelper.w = 0;\n this.selectionHelper.h = 0;\n\n layer.selection = [this.selectionHelper];\n layer.invalidate(true);\n }\n this.active = true;\n }\n onMouseMove(event: MouseEvent) {\n // if (!this.active) return; we require mousemove for the resize cursor\n const layer = layerManager.getLayer();\n if (layer === undefined) {\n console.log(\"No active layer!\");\n return;\n }\n const mouse = getMouse(event);\n const globalMouse = l2g(mouse);\n this.deltaChanged = false;\n\n if (this.mode === SelectOperations.GroupSelect) {\n // Currently draw on active layer\n const endPoint = globalMouse;\n\n this.selectionHelper.w = Math.abs(endPoint.x - this.selectionStartPoint.x);\n this.selectionHelper.h = Math.abs(endPoint.y - this.selectionStartPoint.y);\n this.selectionHelper.refPoint = new GlobalPoint(\n Math.min(this.selectionStartPoint.x, endPoint.x),\n Math.min(this.selectionStartPoint.y, endPoint.y),\n );\n layer.invalidate(true);\n } else if (layer.selection.length) {\n const og = g2l(layer.selection[layer.selection.length - 1].refPoint);\n const origin = og.add(this.dragRay.direction);\n let delta = mouse.subtract(origin).multiply(1 / gameStore.zoomFactor);\n const ogDelta = delta;\n if (this.mode === SelectOperations.Drag) {\n // If we are on the tokens layer do a movement block check.\n if (layer.name === \"tokens\" && !(event.shiftKey && gameStore.IS_DM)) {\n for (const sel of layer.selection) {\n if (!sel.ownedBy()) continue;\n if (sel.uuid === this.selectionHelper.uuid) continue; // the selection helper should not be treated as a real shape.\n delta = calculateDelta(delta, sel);\n if (delta !== ogDelta) this.deltaChanged = true;\n }\n }\n // Actually apply the delta on all shapes\n for (const sel of layer.selection) {\n if (!sel.ownedBy()) continue;\n sel.refPoint = sel.refPoint.add(delta);\n if (sel !== this.selectionHelper) {\n if (sel.visionObstruction) gameStore.recalculateVision(true);\n socket.emit(\"Shape.Update\", { shape: sel.asDict(), redraw: true, temporary: true });\n }\n }\n layer.invalidate(false);\n } else if (this.mode === SelectOperations.Resize) {\n for (const sel of layer.selection) {\n if (!sel.ownedBy()) continue;\n sel.resize(this.resizePoint, mouse);\n if (sel !== this.selectionHelper) {\n if (sel.visionObstruction) gameStore.recalculateVision(true);\n socket.emit(\"Shape.Update\", { shape: sel.asDict(), redraw: true, temporary: true });\n }\n layer.invalidate(false);\n this.updateCursor(layer, globalMouse);\n }\n } else {\n this.updateCursor(layer, globalMouse);\n }\n } else {\n document.body.style.cursor = \"default\";\n }\n }\n onMouseUp(e: MouseEvent): void {\n if (!this.active) return;\n if (layerManager.getLayer() === undefined) {\n console.log(\"No active layer!\");\n return;\n }\n const layer = layerManager.getLayer()!;\n\n if (this.mode === SelectOperations.GroupSelect) {\n layer.clearSelection();\n layer.shapes.forEach(shape => {\n if (!shape.ownedBy()) return;\n if (shape === this.selectionHelper) return;\n const bbox = shape.getBoundingBox();\n if (!shape.ownedBy()) return;\n if (\n this.selectionHelper!.refPoint.x <= bbox.topRight.x &&\n this.selectionHelper!.refPoint.x + this.selectionHelper!.w >= bbox.topLeft.x &&\n this.selectionHelper!.refPoint.y <= bbox.botLeft.y &&\n this.selectionHelper!.refPoint.y + this.selectionHelper!.h >= bbox.topLeft.y\n ) {\n layer.selection.push(shape);\n }\n });\n\n // Push the selection helper as the last element of the selection\n // This makes sure that it will be the first one to be hit in the hit detection onMouseDown\n if (layer.selection.length > 0) layer.selection.push(this.selectionHelper);\n\n layer.invalidate(true);\n } else if (layer.selection.length) {\n layer.selection.forEach(sel => {\n if (!sel.ownedBy()) return;\n if (this.mode === SelectOperations.Drag) {\n if (\n this.dragRay.origin!.x === g2lx(sel.refPoint.x) &&\n this.dragRay.origin!.y === g2ly(sel.refPoint.y)\n )\n return;\n\n if (gameStore.useGrid && !e.altKey && !this.deltaChanged) {\n sel.snapToGrid();\n }\n\n if (sel !== this.selectionHelper) {\n if (sel.visionObstruction) gameStore.recalculateVision();\n if (sel.movementObstruction) gameStore.recalculateMovement();\n socket.emit(\"Shape.Update\", { shape: sel.asDict(), redraw: true, temporary: false });\n }\n layer.invalidate(false);\n }\n if (this.mode === SelectOperations.Resize) {\n if (gameStore.useGrid && !e.altKey) {\n sel.resizeToGrid();\n }\n if (sel !== this.selectionHelper) {\n if (sel.visionObstruction) gameStore.recalculateVision();\n if (sel.movementObstruction) gameStore.recalculateMovement();\n socket.emit(\"Shape.Update\", { shape: sel.asDict(), redraw: true, temporary: false });\n }\n layer.invalidate(false);\n }\n });\n }\n this.mode = SelectOperations.Noop;\n this.active = false;\n }\n onContextMenu(event: MouseEvent) {\n if (layerManager.getLayer() === undefined) {\n console.log(\"No active layer!\");\n return;\n }\n const layer = layerManager.getLayer()!;\n const mouse = getMouse(event);\n const globalMouse = l2g(mouse);\n\n for (const shape of layer.selection) {\n if (shape.contains(globalMouse) && shape !== this.selectionHelper) {\n layer.selection = [shape];\n getRef(\"selectionInfo\").shape = shape;\n layer.invalidate(true);\n (this.$parent.$refs.shapecontext).open(event, shape);\n return;\n }\n }\n (this.$refs.selectcontext).open(event);\n }\n updateCursor(layer: Layer, globalMouse: GlobalPoint) {\n for (const sel of layer.selection) {\n const resizePoint = sel.getPointIndex(globalMouse, l2gz(3));\n if (resizePoint < 0) document.body.style.cursor = \"default\";\n else {\n let angle = sel.getPointOrientation(resizePoint).angle();\n if (angle < 0) angle += 360;\n const d = 45 / 2;\n if (angle >= 315 + d || angle < d || (angle >= 135 + d && angle < 225 - d))\n document.body.style.cursor = \"ew-resize\";\n if ((angle >= 45 + d && angle < 135 - d) || (angle >= 225 + d && angle < 315 - d))\n document.body.style.cursor = \"ns-resize\";\n if ((angle >= d && angle < 90 - d) || (angle >= 180 + d && angle < 270 - d))\n document.body.style.cursor = \"nwse-resize\";\n if ((angle >= 90 + d && angle < 180 - d) || (angle >= 270 + d && angle < 360 - d))\n document.body.style.cursor = \"nesw-resize\";\n }\n }\n }\n}\n","import { GlobalPoint, Ray, Vector } from \"@/game/geom\";\nimport { layerManager } from \"@/game/layers/manager\";\nimport { Shape } from \"@/game/shapes/shape\";\nimport { gameStore } from \"@/game/store\";\nimport { PA_CDT } from \"@/game/visibility/te/pa\";\nimport { Point, Sign, Triangle } from \"@/game/visibility/te/tds\";\nimport { ccw, cw, intersection, orientation } from \"@/game/visibility/te/triag\";\n\n// First go through each shape in the selection and see if the delta has to be truncated due to movement blockers\n\n// This is definitely super convoluted and inefficient but I was tired and really wanted the smooth wall sliding collision stuff to work\n// And it does now, so hey ¯\\_(ツ)_/¯\nexport function calculateDelta(delta: Vector, sel: Shape, done?: string[]) {\n if (delta.x === 0 && delta.y === 0) return delta;\n if (gameStore.visionMode === \"bvh\") {\n if (done === undefined) done = [];\n const ogSelBBox = sel.getBoundingBox();\n const newSelBBox = ogSelBBox.offset(delta);\n let refine = false;\n for (const movementBlocker of gameStore.movementblockers) {\n if (done.includes(movementBlocker)) continue;\n const blocker = layerManager.UUIDMap.get(movementBlocker)!;\n const blockerBBox = blocker.getBoundingBox();\n let found = blockerBBox.intersectsWithInner(newSelBBox);\n if (!found) {\n // This is an edge case, precalculating the rays is not worth in this case.\n const ray = Ray.fromPoints(ogSelBBox.topLeft.add(delta.normalize()), newSelBBox.topLeft);\n const invDir = ray.direction.inverse();\n const dirIsNegative = [invDir.x < 0, invDir.y < 0];\n found = blockerBBox.intersectP(ray, invDir, dirIsNegative).hit;\n }\n // Check if the bounding box of our destination would intersect with the bounding box of the movementblocker\n if (found) {\n const bCenter = blockerBBox.center();\n const sCenter = ogSelBBox.center();\n\n const d = sCenter.subtract(bCenter);\n const ux = new Vector(1, 0);\n const uy = new Vector(0, 1);\n let dx = d.dot(ux);\n let dy = d.dot(uy);\n if (dx > blockerBBox.w / 2) dx = blockerBBox.w / 2;\n if (dx < -blockerBBox.w / 2) dx = -blockerBBox.w / 2;\n if (dy > blockerBBox.h / 2) dy = blockerBBox.h / 2;\n if (dy < -blockerBBox.h / 2) dy = -blockerBBox.h / 2;\n\n // Closest point / intersection point between the two bboxes. Not the delta intersect!\n const p = bCenter.add(ux.multiply(dx)).add(uy.multiply(dy));\n\n if (p.x === ogSelBBox.topLeft.x || p.x === ogSelBBox.topRight.x) delta = new Vector(0, delta.y);\n else if (p.y === ogSelBBox.topLeft.y || p.y === ogSelBBox.botLeft.y) delta = new Vector(delta.x, 0);\n else {\n if (p.x < ogSelBBox.topLeft.x) delta = new Vector(p.x - ogSelBBox.topLeft.x, delta.y);\n else if (p.x > ogSelBBox.topRight.x) delta = new Vector(p.x - ogSelBBox.topRight.x, delta.y);\n else if (p.y < ogSelBBox.topLeft.y) delta = new Vector(delta.x, p.y - ogSelBBox.topLeft.y);\n else if (p.y > ogSelBBox.botLeft.y) delta = new Vector(delta.x, p.y - ogSelBBox.botLeft.y);\n }\n refine = true;\n done.push(movementBlocker);\n break;\n }\n }\n if (refine) delta = calculateDelta(delta, sel, done);\n return delta;\n } else {\n const centerTriangle = PA_CDT.movement.locate(sel.center().asArray(), null).loc;\n for (const point of sel.points) {\n const lt = PA_CDT.movement.locate(point, centerTriangle);\n const triangle = lt.loc;\n if (triangle === null) continue;\n delta = checkTriangle(point, triangle, delta);\n }\n return delta;\n }\n}\n\nfunction checkTriangle(point: Point, triangle: Triangle, delta: Vector, skip: Triangle[] = []): Vector {\n const p = new GlobalPoint(point[0], point[1]);\n const endpoint = p.add(delta).asArray();\n if (triangle.contains(endpoint)) return delta;\n skip.push(triangle);\n\n for (let i = 0; i < 3; i++) {\n if (skip.includes(triangle.neighbours[i]!)) continue;\n\n const _cw = triangle.vertices[cw(i)]!.point!;\n const _ccw = triangle.vertices[ccw(i)]!.point!;\n const ix = intersection(point, endpoint, _cw, _ccw);\n\n if (ix === null) continue;\n\n if (!triangle.isConstrained(i)) return checkTriangle(point, triangle.neighbours[i]!, delta, skip);\n\n if (ix[0] === p.x && ix[1] === p.y) {\n const OR = orientation;\n const o = orientation(point, endpoint, _ccw);\n // Remember: canvas y axis is inverted\n if (o === Sign.LEFT_TURN) continue;\n if (o === Sign.ZERO) continue;\n }\n let newDelta = new GlobalPoint(ix[0], ix[1]).subtract(p).multiply(0.8);\n if (newDelta.length() < 1) newDelta = new Vector(0, 0);\n if (newDelta.length() < delta.length()) delta = newDelta;\n }\n return delta;\n}\n","import mod from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./note.vue?vue&type=style&index=0&id=7a3669fd&scoped=true&lang=css&\"; export default mod; export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./note.vue?vue&type=style&index=0&id=7a3669fd&scoped=true&lang=css&\"","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/ts-loader/index.js??ref--12-2!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./labels.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/ts-loader/index.js??ref--12-2!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./labels.vue?vue&type=script&lang=ts&\"","import mod from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/ts-loader/index.js??ref--12-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./vision.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/ts-loader/index.js??ref--12-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./vision.vue?vue&type=script&lang=ts&\"","import { socket } from \"@/game/api/socket\";\nimport { gameStore } from \"@/game/store\";\n\nexport function sendClientOptions() {\n socket.emit(\"Client.Options.Set\", {\n locationOptions: {\n panX: gameStore.panX,\n panY: gameStore.panY,\n zoomFactor: gameStore.zoomFactor,\n },\n });\n}\n","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nimport Vue from \"vue\";\nimport Component from \"vue-class-component\";\nimport { Prop } from \"vue-property-decorator\";\n\nimport { AssetFile, AssetList } from \"@/core/comm/types\";\nimport { alphSort } from \"@/core/utils\";\n\n@Component({\n name: \"asset-node\",\n})\nexport default class AssetNode extends Vue {\n @Prop() asset!: AssetList;\n\n showImage = null;\n get folders(): string[] {\n return Object.keys(this.asset)\n .filter(el => ![\"__files\"].includes(el))\n .sort(alphSort);\n }\n\n get files(): AssetFile[] {\n if (this.asset.__files)\n return (this.asset.__files)\n .concat()\n .sort((a, b) => (a.name.toLowerCase() > b.name.toLowerCase() ? 1 : -1));\n return [];\n }\n\n toggle(event: { target: HTMLElement }) {\n // tslint:disable-next-line:prefer-for-of\n for (let i = 0; i < event.target.children.length; i++) {\n const el = event.target.children[i];\n el.style.display = el.style.display === \"\" ? \"block\" : \"\";\n }\n }\n\n dragStart(event: DragEvent, imageSource: string) {\n this.showImage = null;\n if (event === null || event.dataTransfer === null) return;\n const img = (event.target).querySelector(\".preview\")!;\n event.dataTransfer.setDragImage(img, 0, 0);\n event.dataTransfer.setData(\"text/plain\", imageSource);\n }\n}\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return (_vm.visible)?_c('div',{staticClass:\"ContextMenu\",style:({left:_vm.left, top:_vm.top}),attrs:{\"tabindex\":\"-1\"},on:{\"blur\":function($event){_vm.$emit('close')}}},[_c('ul',[_vm._t(\"default\")],2)]):_vm._e()}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","export * from \"-!cache-loader?{\\\"cacheDirectory\\\":\\\"node_modules/.cache/vue-loader\\\",\\\"cacheIdentifier\\\":\\\"74f43d04-vue-loader-template\\\"}!../../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./contextmenu.vue?vue&type=template&id=256dde9c&\"","// import Vuex from \"vuex\";\nimport { getModule, Module, Mutation, VuexModule } from \"vuex-module-decorators\";\n\nimport { Asset } from \"@/core/comm/types\";\nimport { rootStore } from \"@/store\";\n\nexport interface AssetState {\n root: number;\n files: number[];\n folders: number[];\n idMap: Map;\n selected: number[];\n}\n\n@Module({ dynamic: true, store: rootStore, name: \"assets\", namespaced: true })\nclass AssetStore extends VuexModule {\n root = -1;\n files: number[] = [];\n folders: number[] = [];\n idMap: Map = new Map();\n selected: number[] = [];\n\n @Mutation\n clear() {\n this.folders = [];\n this.files = [];\n }\n\n @Mutation\n clearSelected() {\n console.log(\"Cleared\");\n this.selected = [];\n }\n\n @Mutation\n setRoot(root: number) {\n this.root = root;\n }\n}\n\nexport const assetStore = getModule(AssetStore);\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/ts-loader/index.js??ref--12-2!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./contextmenu.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/ts-loader/index.js??ref--12-2!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./contextmenu.vue?vue&type=script&lang=ts&\"","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nimport Vue from \"vue\";\nimport Component from \"vue-class-component\";\n\nimport ContextMenu from \"@/core/components/contextmenu.vue\";\nimport Initiative from \"@/game/ui/initiative.vue\";\n\nimport { getRef } from \"@/core/utils\";\nimport { EventBus } from \"@/game/event-bus\";\nimport { layerManager } from \"@/game/layers/manager\";\nimport { Shape } from \"@/game/shapes/shape\";\nimport { gameStore } from \"@/game/store\";\n\n@Component({\n components: {\n ContextMenu,\n },\n})\nexport default class ShapeContext extends Vue {\n visible = false;\n x = 0;\n y = 0;\n shape: Shape | null = null;\n get activeLayer(): string {\n const layer = layerManager.getLayer();\n return layer === undefined ? \"\" : layer.name;\n }\n open(event: MouseEvent, shape: Shape) {\n this.visible = true;\n this.x = event.pageX;\n this.y = event.pageY;\n this.shape = shape;\n this.$nextTick(() => this.$children[0].$el.focus());\n }\n close() {\n this.visible = false;\n this.shape = null;\n }\n getLayers() {\n return layerManager.layers.filter(l => l.selectable && (gameStore.IS_DM || l.playerEditable));\n }\n getActiveLayer() {\n return layerManager.getLayer();\n }\n getInitiativeWord() {\n if (this.shape === null) return \"\";\n return getRef(\"initiative\").contains(this.shape.uuid) ? \"Show\" : \"Add\";\n }\n setLayer(newLayer: string) {\n if (this.shape === null) return;\n this.shape.moveLayer(newLayer, true);\n this.close();\n }\n moveToBack() {\n if (this.shape === null) return;\n const layer = this.getActiveLayer()!;\n layer.moveShapeOrder(this.shape, 0, true);\n this.close();\n }\n moveToFront() {\n if (this.shape === null) return;\n const layer = this.getActiveLayer()!;\n layer.moveShapeOrder(this.shape, layer.shapes.length - 1, true);\n this.close();\n }\n addInitiative() {\n if (this.shape === null) return;\n const initiative = getRef(\"initiative\");\n if (!initiative.contains(this.shape.uuid)) initiative.addInitiative(this.shape.getInitiativeRepr());\n initiative.visible = true;\n this.close();\n }\n openEditDialog() {\n EventBus.$emit(\"EditDialog.Open\", this.shape);\n this.close();\n }\n}\n","import mod from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/ts-loader/index.js??ref--12-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./map.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/ts-loader/index.js??ref--12-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./map.vue?vue&type=script&lang=ts&\"","import { Layer } from \"@/game/layers/layer\";\nimport { gameStore } from \"@/game/store\";\n\nexport class GridLayer extends Layer {\n invalidate(): void {\n this.valid = false;\n }\n draw(doClear?: boolean): void {\n if (!this.valid) {\n this.drawGrid();\n }\n }\n drawGrid(): void {\n const ctx = this.ctx;\n this.clear();\n ctx.beginPath();\n\n const gs = gameStore.gridSize;\n\n for (let i = 0; i < this.width; i += gs * gameStore.zoomFactor) {\n ctx.moveTo(i + (gameStore.panX % gs) * gameStore.zoomFactor, 0);\n ctx.lineTo(i + (gameStore.panX % gs) * gameStore.zoomFactor, this.height);\n ctx.moveTo(0, i + (gameStore.panY % gs) * gameStore.zoomFactor);\n ctx.lineTo(this.width, i + (gameStore.panY % gs) * gameStore.zoomFactor);\n }\n\n ctx.strokeStyle = gameStore.gridColour;\n ctx.lineWidth = 1;\n ctx.stroke();\n this.valid = true;\n }\n}\n","import Vue from \"vue\";\nimport Vuex from \"vuex\";\n\nimport { AssetState } from \"@/assetManager/store\";\nimport { CoreState } from \"@/core/store\";\nimport { GameState } from \"@/game/store\";\n\nVue.use(Vuex);\n\nexport interface RootState {\n assets: AssetState;\n core: CoreState;\n game: GameState;\n}\n\nexport const rootStore = new Vuex.Store({});\n","import { render, staticRenderFns } from \"./colorpicker.vue?vue&type=template&id=d32461a4&scoped=true&\"\nimport script from \"./colorpicker.vue?vue&type=script&lang=ts&\"\nexport * from \"./colorpicker.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./colorpicker.vue?vue&type=style&index=0&id=d32461a4&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"d32461a4\",\n null\n \n)\n\ncomponent.options.__file = \"colorpicker.vue\"\nexport default component.exports","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nimport Component from \"vue-class-component\";\n\nimport Tool from \"@/game/ui/tools/tool.vue\";\n\nimport { socket } from \"@/game/api/socket\";\nimport { layerManager } from \"@/game/layers/manager\";\nimport { gameStore } from \"@/game/store\";\nimport { Shape } from \"../../shapes/shape\";\n\n@Component\nexport default class VisionTool extends Tool {\n name = \"Vision\";\n active = false;\n\n get selection(): string[] {\n return gameStore.activeTokens;\n }\n\n get tokens(): Shape[] {\n return gameStore.ownedtokens.map(t => layerManager.UUIDMap.get(t)!);\n }\n\n toggle(uuid: string) {\n if (this.selection.includes(uuid)) gameStore.removeActiveToken(uuid);\n else gameStore.addActiveToken(uuid);\n }\n}\n","import mod from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./login.vue?vue&type=style&index=0&id=bc30fc14&scoped=true&lang=css&\"; export default mod; export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./login.vue?vue&type=style&index=0&id=bc30fc14&scoped=true&lang=css&\"","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{attrs:{\"id\":\"app\"}},[_c('router-view',{ref:\"activeComponent\"})],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","import { render, staticRenderFns } from \"./App.vue?vue&type=template&id=196415f0&\"\nvar script = {}\nimport style0 from \"./App.vue?vue&type=style&index=0&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\ncomponent.options.__file = \"App.vue\"\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{attrs:{\"id\":\"main\"},on:{\"mouseleave\":_vm.mouseleave,\"wheel\":_vm.zoom}},[(_vm.showUI)?_c('menu-bar'):_vm._e(),_c('div',{attrs:{\"id\":\"board\"}},[(_vm.ready.manager)?[_c('tool-bar',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.showUI),expression:\"showUI\"}],ref:\"tools\"})]:_vm._e(),_c('div',{attrs:{\"id\":\"layers\"},on:{\"mousedown\":_vm.mousedown,\"mouseup\":_vm.mouseup,\"mousemove\":_vm.mousemove,\"contextmenu\":function($event){$event.preventDefault();$event.stopPropagation();return _vm.contextmenu($event)},\"dragover\":function($event){$event.preventDefault();},\"drop\":function($event){$event.preventDefault();$event.stopPropagation();return _vm.drop($event)}}}),_c('div',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.showUI && _vm.layers.length>1),expression:\"showUI && layers.length>1\"}],attrs:{\"id\":\"layerselect\"}},[_c('ul',_vm._l((_vm.layers),function(layer){return _c('li',{key:layer.name,class:{ 'layer-selected': layer === _vm.selectedLayer },on:{\"mousedown\":function($event){_vm.selectLayer(layer)}}},[_c('a',{attrs:{\"href\":\"#\"}},[_vm._v(_vm._s(layer))])])}))])],2),_c('selection-info',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.showUI),expression:\"showUI\"}],ref:\"selectionInfo\"}),_c('initiative-dialog',{ref:\"initiative\",attrs:{\"id\":\"initiativedialog\"}}),_c('note-dialog',{ref:\"note\"}),_c('label-dialog',{ref:\"labels\"}),_c('zoom-slider',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.showUI),expression:\"showUI\"}],attrs:{\"id\":\"zoomer\",\"height\":6,\"width\":200,\"min\":0,\"max\":1,\"interval\":0.1,\"dot-width\":8,\"dot-height\":20,\"tooltip-dir\":'bottom',\"tooltip\":'hover',\"formatter\":_vm.zoomDisplay.toFixed(1),\"slider-style\":{'border-radius': '15%'},\"bg-style\":{'background-color': '#fff', 'box-shadow': '0.5px 0.5px 3px 1px rgba(0, 0, 0, .36)'},\"process-style\":{'background-color': '#fff'}},model:{value:(_vm.zoomDisplay),callback:function ($$v) {_vm.zoomDisplay=$$v},expression:\"zoomDisplay\"}}),_c('prompt-dialog',{ref:\"prompt\"}),_c('confirm-dialog',{ref:\"confirm\"})],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","export * from \"-!cache-loader?{\\\"cacheDirectory\\\":\\\"node_modules/.cache/vue-loader\\\",\\\"cacheIdentifier\\\":\\\"74f43d04-vue-loader-template\\\"}!../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./game.vue?vue&type=template&id=05b88da7&scoped=true&\"","import { GlobalPoint, Ray } from \"@/game/geom\";\nimport { Layer } from \"@/game/layers/layer\";\nimport { layerManager } from \"@/game/layers/manager\";\nimport { Settings } from \"@/game/settings\";\nimport { Circle } from \"@/game/shapes/circle\";\nimport { Shape } from \"@/game/shapes/shape\";\nimport { gameStore } from \"@/game/store\";\nimport { g2l, g2lr, g2lx, g2ly, g2lz, getUnitDistance } from \"@/game/units\";\nimport { getFogColour } from \"@/game/utils\";\nimport { computeVisibility } from \"../visibility/te/te\";\n\nexport class FOWLayer extends Layer {\n isVisionLayer: boolean = true;\n preFogShapes: Shape[] = [];\n virtualCanvas: HTMLCanvasElement;\n vCtx: CanvasRenderingContext2D;\n\n constructor(canvas: HTMLCanvasElement, name: string) {\n super(canvas, name);\n this.virtualCanvas = document.createElement(\"canvas\");\n this.virtualCanvas.width = window.innerWidth;\n this.virtualCanvas.height = window.innerHeight;\n this.vCtx = this.virtualCanvas.getContext(\"2d\")!;\n }\n\n addShape(shape: Shape, sync: boolean, temporary?: boolean, invalidate = true): void {\n super.addShape(shape, sync, temporary, invalidate);\n if (shape.options.has(\"preFogShape\") && shape.options.get(\"preFogShape\")) {\n this.preFogShapes.push(shape);\n }\n }\n\n removeShape(shape: Shape, sync: boolean, temporary?: boolean) {\n if (shape.options.has(\"preFogShape\") && shape.options.get(\"preFogShape\")) {\n const idx = this.preFogShapes.findIndex(s => s.uuid === shape.uuid);\n this.preFogShapes.splice(idx, 1);\n }\n super.removeShape(shape, sync, temporary);\n }\n\n draw(): void {\n if (!this.valid) {\n const ctx = this.ctx;\n\n if (Settings.skipLightFOW) {\n ctx.clearRect(0, 0, this.canvas.width, this.canvas.height);\n this.valid = true;\n return;\n }\n\n const originalOperation = ctx.globalCompositeOperation;\n ctx.clearRect(0, 0, this.canvas.width, this.canvas.height);\n\n ctx.fillStyle = \"rgba(0, 0, 0, 1)\";\n\n const dctx = layerManager.getLayer(\"draw\")!.ctx;\n if (Settings.drawAngleLines || Settings.drawFirstLightHit) {\n dctx.clearRect(0, 0, dctx.canvas.width, dctx.canvas.height);\n }\n\n // At all times provide a minimal vision range to prevent losing your tokens in fog.\n if (gameStore.fullFOW && layerManager.hasLayer(\"tokens\")) {\n layerManager.getLayer(\"tokens\")!.shapes.forEach(sh => {\n if (!sh.ownedBy() || !sh.isToken) return;\n const bb = sh.getBoundingBox();\n const lcenter = g2l(sh.center());\n const alm = 0.8 * g2lz(bb.w);\n ctx.beginPath();\n ctx.arc(lcenter.x, lcenter.y, alm, 0, 2 * Math.PI);\n const gradient = ctx.createRadialGradient(lcenter.x, lcenter.y, alm / 2, lcenter.x, lcenter.y, alm);\n gradient.addColorStop(0, \"rgba(0, 0, 0, 1)\");\n gradient.addColorStop(1, \"rgba(0, 0, 0, 0)\");\n ctx.fillStyle = gradient;\n ctx.fill();\n });\n }\n\n this.vCtx.clearRect(0, 0, window.innerWidth, window.innerHeight);\n\n // First cut out all the light sources\n for (const light of gameStore.visionSources) {\n const shape = layerManager.UUIDMap.get(light.shape);\n if (shape === undefined) continue;\n const aura = shape.auras.find(a => a.uuid === light.aura);\n if (aura === undefined) continue;\n\n const auraLength = getUnitDistance(aura.value + aura.dim);\n const center = shape.center();\n const lcenter = g2l(center);\n\n const auraCircle = new Circle(center, auraLength);\n if (!auraCircle.visibleInCanvas(ctx.canvas)) continue;\n\n if (gameStore.visionMode === \"bvh\") {\n let lastArcAngle = -1;\n\n const path = new Path2D();\n path.moveTo(lcenter.x, lcenter.y);\n let firstPoint: GlobalPoint;\n\n for (let angle = 0; angle < 2 * Math.PI; angle += (Settings.angleSteps / 180) * Math.PI) {\n const anglePoint = new GlobalPoint(\n center.x + auraLength * Math.cos(angle),\n center.y + auraLength * Math.sin(angle),\n );\n if (Settings.drawAngleLines) {\n dctx!.beginPath();\n dctx!.moveTo(g2lx(center.x), g2ly(center.y));\n dctx!.lineTo(g2lx(anglePoint.x), g2ly(anglePoint.y));\n dctx!.stroke();\n }\n\n // Check if there is a hit with one of the nearby light blockers.\n const lightRay = Ray.fromPoints(center, anglePoint);\n const hitResult = gameStore.BV.intersect(lightRay);\n\n if (angle === 0) firstPoint = hitResult.hit ? hitResult.intersect : anglePoint;\n\n // We can move on to the next angle if nothing was hit.\n if (!hitResult.hit) {\n // If an earlier hit caused the aura to leave the arc, we need to go back to the arc\n if (lastArcAngle === -1) {\n // Set the start of a new arc beginning at the current angle\n lastArcAngle = angle;\n // Draw a line from the last non arc location back to the arc\n const dest = g2l(anglePoint);\n ctx.lineTo(dest.x, dest.y);\n }\n continue;\n }\n // If hit , first finish any ongoing arc, then move to the intersection point\n if (lastArcAngle !== -1) {\n path.arc(lcenter.x, lcenter.y, g2lr(aura.value + aura.dim), lastArcAngle, angle);\n lastArcAngle = -1;\n }\n path.lineTo(g2lx(hitResult.intersect.x), g2ly(hitResult.intersect.y));\n }\n // Finish the final arc.\n if (lastArcAngle === -1) path.lineTo(g2lx(firstPoint!.x), g2ly(firstPoint!.y));\n else path.arc(lcenter.x, lcenter.y, g2lr(aura.value + aura.dim), lastArcAngle, 2 * Math.PI);\n\n if (gameStore.fullFOW) {\n if (aura.dim > 0) {\n // Fill the light aura with a radial dropoff towards the outside.\n const gradient = ctx.createRadialGradient(\n lcenter.x,\n lcenter.y,\n g2lr(aura.value),\n lcenter.x,\n lcenter.y,\n g2lr(aura.value + aura.dim),\n );\n gradient.addColorStop(0, \"rgba(0, 0, 0, 1)\");\n gradient.addColorStop(1, \"rgba(0, 0, 0, 0)\");\n ctx.fillStyle = gradient;\n } else {\n ctx.fillStyle = \"rgba(0, 0, 0, 1)\";\n }\n ctx.fill(path);\n }\n\n aura.lastPath = path;\n } else {\n this.vCtx.globalCompositeOperation = \"source-over\";\n this.vCtx.fillStyle = \"rgba(0, 0, 0, 1)\";\n const polygon = computeVisibility(center, \"vision\");\n this.vCtx.beginPath();\n this.vCtx.moveTo(g2lx(polygon[0][0]), g2ly(polygon[0][1]));\n for (const point of polygon) this.vCtx.lineTo(g2lx(point[0]), g2ly(point[1]));\n this.vCtx.closePath();\n this.vCtx.fill();\n if (aura.dim > 0) {\n // Fill the light aura with a radial dropoff towards the outside.\n const gradient = this.vCtx.createRadialGradient(\n lcenter.x,\n lcenter.y,\n g2lr(aura.value),\n lcenter.x,\n lcenter.y,\n g2lr(aura.value + aura.dim),\n );\n gradient.addColorStop(0, \"rgba(0, 0, 0, 1)\");\n gradient.addColorStop(1, \"rgba(0, 0, 0, 0)\");\n this.vCtx.fillStyle = gradient;\n } else {\n this.vCtx.fillStyle = \"rgba(0, 0, 0, 1)\";\n }\n this.vCtx.globalCompositeOperation = \"source-in\";\n this.vCtx.beginPath();\n this.vCtx.arc(lcenter.x, lcenter.y, g2lr(aura.value + aura.dim), 0, 2 * Math.PI);\n this.vCtx.fill();\n ctx.drawImage(this.virtualCanvas, 0, 0);\n }\n }\n\n // At the DM Side due to opacity of the two fow layers, it looks strange if we just render them on top of eachother like players.\n if (gameStore.fowLOS) {\n ctx.globalCompositeOperation = \"source-in\";\n ctx.drawImage(layerManager.getLayer(\"fow-players\")!.canvas, 0, 0);\n }\n\n for (const preShape of this.preFogShapes) {\n if (!preShape.visibleInCanvas(this.canvas)) continue;\n const ogComposite = preShape.globalCompositeOperation;\n if (!gameStore.fullFOW) {\n if (preShape.globalCompositeOperation === \"source-over\")\n preShape.globalCompositeOperation = \"destination-out\";\n else if (preShape.globalCompositeOperation === \"destination-out\")\n preShape.globalCompositeOperation = \"source-over\";\n }\n preShape.draw(ctx);\n preShape.globalCompositeOperation = ogComposite;\n }\n\n if (gameStore.fullFOW) {\n ctx.globalCompositeOperation = \"source-out\";\n ctx.fillStyle = getFogColour();\n ctx.fillRect(0, 0, ctx.canvas.width, ctx.canvas.height);\n }\n\n super.draw(false);\n\n ctx.globalCompositeOperation = originalOperation;\n }\n }\n}\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/ts-loader/index.js??ref--12-2!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./load.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/ts-loader/index.js??ref--12-2!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./load.vue?vue&type=script&lang=ts&\"","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('Modal',{attrs:{\"visible\":_vm.visible,\"mask\":false},on:{\"close\":function($event){_vm.visible = false}},scopedSlots:_vm._u([{key:\"header\",fn:function(m){return _c('div',{staticClass:\"modal-header\",attrs:{\"draggable\":\"true\"},on:{\"dragstart\":m.dragStart,\"dragend\":m.dragEnd}},[_c('div',[_vm._v(\"Edit asset\")]),_c('div',{staticClass:\"header-close\",on:{\"click\":function($event){_vm.visible = false}}},[_c('i',{staticClass:\"far fa-window-close\"})])])}}])},[_c('div',{staticClass:\"modal-body\"},[_c('div',{staticClass:\"grid\"},[_c('label',{attrs:{\"for\":\"shapeselectiondialog-name\"}},[_vm._v(\"Name\")]),_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.shape.name),expression:\"shape.name\"}],staticStyle:{\"grid-column\":\"numerator / remove\"},attrs:{\"type\":\"text\",\"id\":\"shapeselectiondialog-name\",\"disabled\":!_vm.owned},domProps:{\"value\":(_vm.shape.name)},on:{\"change\":function($event){_vm.updateShape(false)},\"input\":function($event){if($event.target.composing){ return; }_vm.$set(_vm.shape, \"name\", $event.target.value)}}}),_c('div',{style:({opacity: _vm.shape.nameVisible ? 1.0 : 0.3, textAlign: 'center'}),attrs:{\"disabled\":!_vm.owned},on:{\"click\":function($event){_vm.shape.nameVisible = !_vm.shape.nameVisible;_vm.updateShape(false)}}},[_c('i',{staticClass:\"fas fa-eye\"})]),_c('label',{attrs:{\"for\":\"shapeselectiondialog-istoken\"}},[_vm._v(\"Is a token\")]),_c('input',{staticClass:\"styled-checkbox\",staticStyle:{\"grid-column-start\":\"remove\"},attrs:{\"type\":\"checkbox\",\"id\":\"shapeselectiondialog-istoken\",\"disabled\":!_vm.owned},domProps:{\"checked\":_vm.shape.isToken},on:{\"click\":_vm.setToken}}),_c('label',{attrs:{\"for\":\"shapeselectiondialog-visionblocker\"}},[_vm._v(\"Blocks vision/light\")]),_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.shape.visionObstruction),expression:\"shape.visionObstruction\"}],staticStyle:{\"grid-column-start\":\"remove\"},attrs:{\"type\":\"checkbox\",\"id\":\"shapeselectiondialog-visionblocker\",\"disabled\":!_vm.owned},domProps:{\"checked\":Array.isArray(_vm.shape.visionObstruction)?_vm._i(_vm.shape.visionObstruction,null)>-1:(_vm.shape.visionObstruction)},on:{\"change\":[function($event){var $$a=_vm.shape.visionObstruction,$$el=$event.target,$$c=$$el.checked?(true):(false);if(Array.isArray($$a)){var $$v=null,$$i=_vm._i($$a,$$v);if($$el.checked){$$i<0&&(_vm.$set(_vm.shape, \"visionObstruction\", $$a.concat([$$v])))}else{$$i>-1&&(_vm.$set(_vm.shape, \"visionObstruction\", $$a.slice(0,$$i).concat($$a.slice($$i+1))))}}else{_vm.$set(_vm.shape, \"visionObstruction\", $$c)}},_vm.setVisionBlocker]}}),_c('label',{attrs:{\"for\":\"shapeselectiondialog-moveblocker\"}},[_vm._v(\"Blocks movement\")]),_c('input',{staticStyle:{\"grid-column-start\":\"remove\"},attrs:{\"type\":\"checkbox\",\"id\":\"shapeselectiondialog-moveblocker\",\"disabled\":!_vm.owned},domProps:{\"checked\":_vm.shape.movementObstruction},on:{\"click\":_vm.setMovementBlocker}}),_c('label',{attrs:{\"for\":\"shapeselectiondialog-strokecolour\"}},[_vm._v(\"Border colour\")]),_c('color-picker',{staticStyle:{\"grid-column-start\":\"remove\"},attrs:{\"color\":_vm.shape.strokeColour,\"disabled\":!_vm.owned},on:{\"update:color\":function($event){_vm.$set(_vm.shape, \"strokeColour\", $event)},\"input\":function($event){_vm.updateShape(true, true)},\"change\":function($event){_vm.updateShape(true)}}}),_c('label',{attrs:{\"for\":\"shapeselectiondialog-fillcolour\"}},[_vm._v(\"Fill colour\")]),_c('color-picker',{staticStyle:{\"grid-column-start\":\"remove\"},attrs:{\"color\":_vm.shape.fillColour,\"disabled\":!_vm.owned},on:{\"update:color\":function($event){_vm.$set(_vm.shape, \"fillColour\", $event)},\"input\":function($event){_vm.updateShape(true, true)},\"change\":function($event){_vm.updateShape(true)}}}),_c('div',{staticClass:\"spanrow header\"},[_vm._v(\"Access\")]),_vm._l((_vm.shape.owners),function(owner){return [_c('input',{key:owner,staticStyle:{\"grid-column-start\":\"name\"},attrs:{\"type\":\"text\",\"placeholder\":\"name\",\"disabled\":!_vm.owned},domProps:{\"value\":owner},on:{\"change\":function($event){_vm.updateOwner($event, owner)}}}),(owner !== '')?_c('div',{key:'remove-' + owner,style:({opacity: _vm.owned ? 1.0 : 0.3, textAlign: 'center', gridColumnStart: 'remove'}),attrs:{\"disabled\":!_vm.owned},on:{\"click\":function($event){_vm.removeOwner(owner)}}},[_c('i',{staticClass:\"fas fa-trash-alt\"})]):_vm._e()]}),_c('div',{staticClass:\"spanrow header\"},[_vm._v(\"Trackers\")]),_vm._l((_vm.shape.trackers),function(tracker){return [_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(tracker.name),expression:\"tracker.name\"}],key:'name-'+tracker.uuid,staticStyle:{\"grid-column-start\":\"name\"},attrs:{\"type\":\"text\",\"placeholder\":\"name\",\"disabled\":!_vm.owned},domProps:{\"value\":(tracker.name)},on:{\"change\":function($event){_vm.updateShape(false);},\"input\":function($event){if($event.target.composing){ return; }_vm.$set(tracker, \"name\", $event.target.value)}}}),_c('input',{directives:[{name:\"model\",rawName:\"v-model.number\",value:(tracker.value),expression:\"tracker.value\",modifiers:{\"number\":true}}],key:'value-'+tracker.uuid,attrs:{\"type\":\"text\",\"title\":\"Current value\",\"disabled\":!_vm.owned},domProps:{\"value\":(tracker.value)},on:{\"change\":function($event){_vm.updateShape(false)},\"input\":function($event){if($event.target.composing){ return; }_vm.$set(tracker, \"value\", _vm._n($event.target.value))},\"blur\":function($event){_vm.$forceUpdate()}}}),_c('span',{key:'fspan-'+tracker.uuid},[_vm._v(\"/\")]),_c('input',{directives:[{name:\"model\",rawName:\"v-model.number\",value:(tracker.maxvalue),expression:\"tracker.maxvalue\",modifiers:{\"number\":true}}],key:'maxvalue-'+tracker.uuid,attrs:{\"type\":\"text\",\"title\":\"Current value\",\"disabled\":!_vm.owned},domProps:{\"value\":(tracker.maxvalue)},on:{\"change\":function($event){_vm.updateShape(false)},\"input\":function($event){if($event.target.composing){ return; }_vm.$set(tracker, \"maxvalue\", _vm._n($event.target.value))},\"blur\":function($event){_vm.$forceUpdate()}}}),_c('span',{key:'sspan-'+tracker.uuid}),_c('div',{key:'visibility-'+tracker.uuid,style:({opacity: tracker.visible ? 1.0 : 0.3, textAlign: 'center'}),attrs:{\"disabled\":!_vm.owned},on:{\"click\":function($event){tracker.visible = !tracker.visible;_vm.updateShape(false)}}},[_c('i',{staticClass:\"fas fa-eye\"})]),_c('span',{key:'tspan-'+tracker.uuid}),(tracker.name !== '' || tracker.value !== 0)?_c('div',{key:'remove-'+tracker.uuid,style:({opacity: _vm.owned ? 1.0 : 0.3, textAlign: 'center'}),attrs:{\"disabled\":!_vm.owned},on:{\"click\":function($event){_vm.removeTracker(tracker.uuid)}}},[_c('i',{staticClass:\"fas fa-trash-alt\"})]):_vm._e()]}),_c('div',{staticClass:\"spanrow header\"},[_vm._v(\"Auras\")]),_vm._l((_vm.shape.auras),function(aura){return [_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(aura.name),expression:\"aura.name\"}],key:'name-'+aura.uuid,staticStyle:{\"grid-column-start\":\"name\"},attrs:{\"type\":\"text\",\"placeholder\":\"name\",\"disabled\":!_vm.owned},domProps:{\"value\":(aura.name)},on:{\"change\":function($event){_vm.updateShape(false)},\"input\":function($event){if($event.target.composing){ return; }_vm.$set(aura, \"name\", $event.target.value)}}}),_c('input',{directives:[{name:\"model\",rawName:\"v-model.number\",value:(aura.value),expression:\"aura.value\",modifiers:{\"number\":true}}],key:'value-'+aura.uuid,attrs:{\"type\":\"text\",\"title\":\"Current value\",\"disabled\":!_vm.owned},domProps:{\"value\":(aura.value)},on:{\"change\":function($event){_vm.updateShape(true)},\"input\":function($event){if($event.target.composing){ return; }_vm.$set(aura, \"value\", _vm._n($event.target.value))},\"blur\":function($event){_vm.$forceUpdate()}}}),_c('span',{key:'fspan-'+aura.uuid},[_vm._v(\"/\")]),_c('input',{directives:[{name:\"model\",rawName:\"v-model.number\",value:(aura.dim),expression:\"aura.dim\",modifiers:{\"number\":true}}],key:'dimvalue-'+aura.uuid,attrs:{\"type\":\"text\",\"title\":\"Dim value\",\"disabled\":!_vm.owned},domProps:{\"value\":(aura.dim)},on:{\"change\":function($event){_vm.updateShape(true)},\"input\":function($event){if($event.target.composing){ return; }_vm.$set(aura, \"dim\", _vm._n($event.target.value))},\"blur\":function($event){_vm.$forceUpdate()}}}),_c('color-picker',{key:'colour-'+aura.uuid,attrs:{\"color\":aura.colour,\"disabled\":!_vm.owned},on:{\"update:color\":function($event){_vm.$set(aura, \"colour\", $event)},\"input\":function($event){_vm.updateAuraColour(aura, $event)},\"change\":function($event){_vm.updateShape(true)}}}),_c('div',{key:'visibility-'+aura.uuid,style:({opacity: aura.visible ? 1.0 : 0.3, textAlign: 'center'}),attrs:{\"disabled\":!_vm.owned},on:{\"click\":function($event){aura.visible = !aura.visible;_vm.updateShape(true)}}},[_c('i',{staticClass:\"fas fa-eye\"})]),_c('div',{key:'visionsource-'+aura.uuid,style:({opacity: aura.visionSource ? 1.0 : 0.3, textAlign: 'center'}),attrs:{\"disabled\":!_vm.owned},on:{\"click\":function($event){_vm.updateAuraVisionSource(aura)}}},[_c('i',{staticClass:\"fas fa-lightbulb\"})]),(aura.name !== '' || aura.value !== 0)?_c('div',{key:'remove-'+aura.uuid,style:({opacity: _vm.owned ? 1.0 : 0.3, textAlign: 'center'}),attrs:{\"disabled\":!_vm.owned},on:{\"click\":function($event){_vm.removeAura(aura.uuid)}}},[_c('i',{staticClass:\"fas fa-trash-alt\"})]):_vm._e()]}),_c('div',{staticClass:\"spanrow header\"},[_vm._v(\"Labels\")]),_c('div',{staticClass:\"spanrow\",attrs:{\"id\":\"labels\"}},[_vm._l((_vm.shape.labels),function(label){return _c('div',{key:label.uuid,staticClass:\"label\"},[(label.category)?[_c('div',{staticClass:\"label-user\"},[_vm._v(_vm._s(label.category))]),_c('div',{staticClass:\"label-main\",on:{\"click\":function($event){_vm.removeLabel(label.uuid)}}},[_vm._v(_vm._s(label.name))])]:_vm._e(),(!label.category)?[_c('div',{staticClass:\"label-main\",on:{\"click\":function($event){_vm.removeLabel(label.uuid)}}},[_vm._v(_vm._s(label.name))])]:_vm._e()],2)}),(_vm.owned)?_c('div',{staticClass:\"label\",attrs:{\"id\":\"label-add\"}},[_c('div',{staticClass:\"label-main\",on:{\"click\":_vm.openLabelManager}},[_vm._v(\"+\")])]):_vm._e()],2),_c('div',{staticClass:\"spanrow header\"},[_vm._v(\"Annotation\")]),_c('textarea',{staticClass:\"spanrow\",attrs:{\"disabled\":!_vm.owned},domProps:{\"value\":_vm.shape.annotation},on:{\"change\":_vm.updateAnnotation}})],2)])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","export * from \"-!cache-loader?{\\\"cacheDirectory\\\":\\\"node_modules/.cache/vue-loader\\\",\\\"cacheIdentifier\\\":\\\"74f43d04-vue-loader-template\\\"}!../../../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./edit_dialog.vue?vue&type=template&id=23de098e&scoped=true&\"","import { ServerCircle } from \"@/game/comm/types/shapes\";\nimport { GlobalPoint, LocalPoint, Vector } from \"@/game/geom\";\nimport { BoundingRect } from \"@/game/shapes/boundingrect\";\nimport { Shape } from \"@/game/shapes/shape\";\nimport { gameStore } from \"@/game/store\";\nimport { calculateDelta } from \"@/game/ui/tools/utils\";\nimport { g2l, g2lz, l2g } from \"@/game/units\";\nimport { getFogColour } from \"@/game/utils\";\n\nexport class Circle extends Shape {\n type = \"circle\";\n r: number;\n constructor(center: GlobalPoint, r: number, fillColour?: string, strokeColour?: string, uuid?: string) {\n super(center, fillColour, strokeColour, uuid);\n this.r = r || 1;\n }\n asDict(): ServerCircle {\n // const base = this.getBaseDict();\n // base.r = this.r;\n // base.border = this.border;\n // return base;\n return Object.assign(this.getBaseDict(), {\n radius: this.r,\n });\n }\n fromDict(data: ServerCircle) {\n super.fromDict(data);\n this.r = data.radius;\n }\n getBoundingBox(): BoundingRect {\n return new BoundingRect(\n new GlobalPoint(this.refPoint.x - this.r, this.refPoint.y - this.r),\n this.r * 2,\n this.r * 2,\n );\n }\n\n get points() {\n return this.getBoundingBox().points;\n }\n\n draw(ctx: CanvasRenderingContext2D) {\n super.draw(ctx);\n ctx.beginPath();\n if (this.fillColour === \"fog\") ctx.fillStyle = getFogColour();\n else ctx.fillStyle = this.fillColour;\n const loc = g2l(this.refPoint);\n ctx.arc(loc.x, loc.y, g2lz(this.r), 0, 2 * Math.PI);\n ctx.fill();\n if (this.strokeColour !== \"rgba(0, 0, 0, 0)\") {\n ctx.beginPath();\n ctx.lineWidth = g2lz(5);\n ctx.strokeStyle = this.strokeColour;\n ctx.arc(loc.x, loc.y, g2lz(this.r), 0, 2 * Math.PI);\n ctx.stroke();\n }\n }\n contains(point: GlobalPoint): boolean {\n return (point.x - this.refPoint.x) ** 2 + (point.y - this.refPoint.y) ** 2 < this.r ** 2;\n }\n center(): GlobalPoint;\n center(centerPoint: GlobalPoint): void;\n center(centerPoint?: GlobalPoint): GlobalPoint | void {\n if (centerPoint === undefined) return this.refPoint;\n this.refPoint = centerPoint;\n }\n visibleInCanvas(canvas: HTMLCanvasElement): boolean {\n return this.getBoundingBox().visibleInCanvas(canvas);\n } // TODO\n snapToGrid() {\n const gs = gameStore.gridSize;\n let targetX;\n let targetY;\n if (((2 * this.r) / gs) % 2 === 0) {\n targetX = Math.round(this.refPoint.x / gs) * gs;\n } else {\n targetX = Math.round((this.refPoint.x - gs / 2) / gs) * gs + this.r;\n }\n if (((2 * this.r) / gs) % 2 === 0) {\n targetY = Math.round(this.refPoint.y / gs) * gs;\n } else {\n targetY = Math.round((this.refPoint.y - gs / 2) / gs) * gs + this.r;\n }\n const delta = calculateDelta(new Vector(targetX - this.refPoint.x, targetY - this.refPoint.y), this);\n this.refPoint = this.refPoint.add(delta);\n this.invalidate(false);\n }\n resizeToGrid() {\n const gs = gameStore.gridSize;\n this.r = Math.max(Math.round(this.r / gs) * gs, gs / 2);\n this.invalidate(false);\n }\n resize(resizePoint: number, point: LocalPoint) {\n const z = gameStore.zoomFactor;\n const diff = l2g(point).subtract(this.refPoint);\n this.r = Math.sqrt(Math.pow(diff.length(), 2) / 2);\n }\n}\n","\n\n\n\n\n\n\n\n\n\n\n\n\n\nimport Tool from \"@/game/ui/tools/tool.vue\";\n\nimport { GlobalPoint } from \"@/game/geom\";\nimport { layerManager } from \"@/game/layers/manager\";\nimport { BaseRect } from \"@/game/shapes/baserect\";\nimport { Rect } from \"@/game/shapes/rect\";\nimport { gameStore } from \"@/game/store\";\nimport { l2g } from \"@/game/units\";\nimport { getMouse } from \"@/game/utils\";\nimport Component from \"vue-class-component\";\n\n@Component\nexport default class MapTool extends Tool {\n name = \"Map\";\n active = false;\n xCount = 3;\n yCount = 3;\n startPoint: GlobalPoint | null = null;\n rect: Rect | null = null;\n\n onMouseDown(event: MouseEvent) {\n const layer = layerManager.getLayer();\n if (layer === undefined) {\n console.log(\"No active layer!\");\n return;\n }\n this.active = true;\n\n this.startPoint = l2g(getMouse(event));\n this.rect = new Rect(this.startPoint.clone(), 0, 0, \"rgba(0,0,0,0)\", \"black\");\n layer.addShape(this.rect, false, false);\n }\n onMouseMove(event: MouseEvent) {\n if (!this.active || this.rect === null || this.startPoint === null) return;\n const layer = layerManager.getLayer();\n if (layer === undefined) {\n console.log(\"No active layer!\");\n return;\n }\n\n const endPoint = l2g(getMouse(event));\n\n this.rect.w = Math.abs(endPoint.x - this.startPoint.x);\n this.rect.h = Math.abs(endPoint.y - this.startPoint.y);\n this.rect.refPoint = new GlobalPoint(\n Math.min(this.startPoint.x, endPoint.x),\n Math.min(this.startPoint.y, endPoint.y),\n );\n layer.invalidate(false);\n }\n onMouseUp(event: MouseEvent) {\n if (!this.active || this.rect === null) return;\n const layer = layerManager.getLayer();\n if (layer === undefined) {\n console.log(\"No active layer!\");\n return;\n }\n this.active = false;\n\n if (layer.selection.length !== 1) {\n layer.removeShape(this.rect, false, false);\n return;\n }\n\n const w = this.rect.w;\n const h = this.rect.h;\n const sel = layer.selection[0];\n\n if (sel instanceof BaseRect) {\n sel.w *= (this.xCount * gameStore.gridSize) / w;\n sel.h *= (this.yCount * gameStore.gridSize) / h;\n }\n\n layer.removeShape(this.rect, false, false);\n }\n}\n","import { render, staticRenderFns } from \"./load.vue?vue&type=template&id=ff095222&\"\nimport script from \"./load.vue?vue&type=script&lang=ts&\"\nexport * from \"./load.vue?vue&type=script&lang=ts&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\ncomponent.options.__file = \"load.vue\"\nexport default component.exports","import Tool from \"@/game/ui/tools/tool.vue\";\n\nimport { sendClientOptions } from \"@/game/api/utils\";\nimport { LocalPoint } from \"@/game/geom\";\nimport { layerManager } from \"@/game/layers/manager\";\nimport { gameStore } from \"@/game/store\";\nimport { getMouse } from \"@/game/utils\";\nimport Component from \"vue-class-component\";\n\n@Component\nexport default class PanTool extends Tool {\n name = \"Pan\";\n panStart = new LocalPoint(0, 0);\n active = false;\n\n onMouseDown(event: MouseEvent) {\n this.panStart = getMouse(event);\n this.active = true;\n }\n onMouseMove(event: MouseEvent) {\n if (!this.active) return;\n const mouse = getMouse(event);\n const distance = mouse.subtract(this.panStart).multiply(1 / gameStore.zoomFactor);\n gameStore.increasePanX(Math.round(distance.x));\n gameStore.increasePanY(Math.round(distance.y));\n this.panStart = mouse;\n layerManager.invalidate();\n }\n onMouseUp(event: MouseEvent) {\n this.active = false;\n sendClientOptions();\n }\n}\n","import { render, staticRenderFns } from \"./selectcontext.vue?vue&type=template&id=44a31e42&scoped=true&\"\nimport script from \"./selectcontext.vue?vue&type=script&lang=ts&\"\nexport * from \"./selectcontext.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./selectcontext.vue?vue&type=style&index=0&id=44a31e42&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"44a31e42\",\n null\n \n)\n\ncomponent.options.__file = \"selectcontext.vue\"\nexport default component.exports","import Vue from \"vue\";\n\nimport { app } from \"@/main\";\n\n// Reference: https://stackoverflow.com/questions/105034/create-guid-uuid-in-javascript\nexport function uuidv4() {\n return \"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx\".replace(/[xy]/g, c => {\n const r = (Math.random() * 16) | 0;\n const v = c === \"x\" ? r : (r & 0x3) | 0x8;\n return v.toString(16);\n });\n}\n\nexport function capitalize(text: string) {\n return text.charAt(0).toUpperCase() + text.slice(1);\n}\n\nexport function alphSort(a: string, b: string) {\n if (a.toLowerCase() < b.toLowerCase()) return -1;\n else return 1;\n}\n\nexport function getHTMLFont(element: HTMLElement) {\n let font = element.style.font;\n while (font === null && element.parentElement !== null) {\n element = element.parentElement;\n font = element.style.font;\n }\n if (font === null) font = window.getComputedStyle(document.body).getPropertyValue(\"font\");\n return font;\n}\n\nexport function getHTMLTextWidth(text: string, font: string): number {\n let fakeElement = document.getElementById(\"emptycanvas\");\n if (fakeElement === null) {\n fakeElement = document.createElement(\"canvas\");\n fakeElement.id = \"emptycanvas\";\n fakeElement.style.display = \"\";\n document.body.appendChild(fakeElement);\n }\n const ctx = fakeElement.getContext(\"2d\")!;\n ctx.font = font;\n return Math.ceil(ctx.measureText(text).width);\n}\n\nexport function partition(arr: T[], predicate: (n: T) => boolean) {\n const ret: T[][] = [[], []];\n arr.forEach(n => (predicate(n) ? ret[1].push(n) : ret[0].push(n)));\n return ret;\n}\n\nexport function calcFontScale(ctx: CanvasRenderingContext2D, text: string, width: number, height: number) {\n const points = Number(ctx.font.split(\"px\")[0]) * 0.2;\n const fontWidth = ctx.measureText(text).width;\n return Math.min(width / fontWidth, height / points);\n}\n\nexport function fixedEncodeURIComponent(str: string) {\n return encodeURIComponent(str).replace(/[!'()*]/g, c => {\n return \"%\" + c.charCodeAt(0).toString(16);\n });\n}\n\nexport class OrderedMap {\n keys: K[] = [];\n values: V[] = [];\n\n get length() {\n return this.keys.length;\n }\n\n get(key: K) {\n return this.values[this.keys.indexOf(key)];\n }\n getIndexValue(idx: number) {\n return this.values[idx];\n }\n getIndexKey(idx: number) {\n return this.keys[idx];\n }\n set(key: K, value: V) {\n this.keys.push(key);\n this.values.push(value);\n }\n has(key: K) {\n return this.indexOf(key) >= 0;\n }\n indexOf(element: K) {\n return this.keys.indexOf(element);\n }\n remove(element: K) {\n const idx = this.indexOf(element);\n this.keys.splice(idx, 1);\n this.values.splice(idx, 1);\n }\n}\n\nexport function getComponent(): T {\n return app.$children[0].$refs.activeComponent;\n}\n\nexport function getRef(ref: string): T {\n const active = app.$children[0].$refs.activeComponent;\n return active.$refs[ref];\n}\n","import { render, staticRenderFns } from \"./contextMenu.vue?vue&type=template&id=606797b4&\"\nimport script from \"./contextMenu.vue?vue&type=script&lang=ts&\"\nexport * from \"./contextMenu.vue?vue&type=script&lang=ts&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\ncomponent.options.__file = \"contextMenu.vue\"\nexport default component.exports","import { EdgeCirculator, Point, Sign, Triangle, Vertex } from \"./tds\";\n\ntype Line = number[];\n\nexport function cw(index: number) {\n return (index + 2) % 3;\n}\n\nexport function ccw(index: number) {\n return (index + 1) % 3;\n}\n\nexport function edgeInfo(va: Vertex, vb: Vertex) {\n const ec = new EdgeCirculator(va, null);\n if (ec.valid) {\n do {\n const indv = 3 - ec.t!.indexV(va) - ec.ri;\n const v = ec.t!.vertices[indv]!;\n if (!v.infinite) {\n if (v === vb) {\n return { includes: true, vi: vb, fr: ec.t!, i: ec.ri };\n } else {\n const orient = orientation(va.point!, vb.point!, v.point!);\n if (orient === Sign.COLLINEAR && collinearBetween(va.point!, v.point!, vb.point!)) {\n return { includes: true, vi: v, fr: ec.t!, i: ec.ri };\n }\n }\n }\n } while (ec.next());\n }\n return { includes: false };\n}\n\nexport function collinearBetween(p: Point, q: Point, r: Point): boolean {\n let cPQ: Sign;\n let cQR: Sign;\n if (compare(0, p, r) === Sign.EQUAL) {\n cPQ = compare(1, p, q);\n cQR = compare(1, q, r);\n } else {\n cPQ = compare(0, p, q);\n cQR = compare(0, q, r);\n }\n return (cPQ === Sign.SMALLER && cQR === Sign.SMALLER) || (cPQ === Sign.LARGER && cQR === Sign.LARGER);\n}\n\nfunction compare(index: number, a: Point, b: Point): Sign {\n if (a[index] < b[index]) return Sign.SMALLER;\n if (a[index] > b[index]) return Sign.LARGER;\n return Sign.EQUAL;\n}\n\nexport function orientation(p: Point, q: Point, r: Point) {\n const px = p[0];\n const py = p[1];\n const qx = q[0];\n const qy = q[1];\n const rx = r[0];\n const ry = r[1];\n const pqx = qx - px;\n const pqy = qy - py;\n const prx = rx - px;\n const pry = ry - py;\n const det = determinant(pqx, pqy, prx, pry);\n let maxX = Math.abs(pqx);\n let maxY = Math.abs(pqy);\n const aprX = Math.abs(prx);\n const aprY = Math.abs(pry);\n if (maxX < aprX) maxX = aprX;\n if (maxY < aprY) maxY = aprY;\n if (maxX > maxY) [maxX, maxY] = [maxY, maxX];\n // underflow proection in eps computation?? Math.sqrt(Number.MIN_VALUE, Number.EPSILON)\n if (maxX < 2e-162 && maxX === 0) {\n return Sign.ZERO;\n }\n // overflow protection in det computation\n if (maxY < 1e153) {\n const eps = Number.EPSILON * maxX * maxY;\n if (det > eps) return Sign.POSITIVE;\n if (det < -eps) return Sign.NEGATIVE;\n }\n return Sign.ZERO;\n}\n\nexport function determinant(a00: number, a01: number, a10: number, a11: number) {\n return a00 * a11 - a01 * a10;\n}\n\nexport function hasInexactNegativeOrientation(p: Point, q: Point, r: Point) {\n return determinant(q[0] - p[0], q[1] - p[1], r[0] - p[0], r[1] - p[1]) < 0;\n}\n\nexport function sideOfOrientedCircle(t: Triangle, p: Point, perturb: boolean): Sign {\n if (!t.isInfinite())\n return sideOfOrientedCircleP(t.vertices[0]!.point!, t.vertices[1]!.point!, t.vertices[2]!.point!, p, perturb);\n throw new Error(\"SSS\");\n}\n\nfunction sideOfOrientedCircleP(p0: Point, p1: Point, p2: Point, p: Point, perturb: boolean): Sign {\n const os = getOrientedSide(p0, p1, p2, p);\n if (os !== Sign.ON_ORIENTED_BOUNDARY || !perturb) return os;\n const points = [p0, p1, p2, p];\n points.sort((a, b) => a[0] - b[0] || a[1] - b[1]);\n for (const point of points.reverse()) {\n if (point === p) return Sign.ON_NEGATIVE_SIDE;\n let o = orientation(p0, p1, p);\n if (point === p2 && o !== Sign.COLLINEAR) return o;\n o = orientation(p0, p, p2);\n if (point === p1 && o !== Sign.COLLINEAR) return o;\n o = orientation(p, p1, p2);\n if (point === p0 && o !== Sign.COLLINEAR) return o;\n }\n return Sign.ON_NEGATIVE_SIDE;\n}\n\nexport function xyEqual(p: Point, q: Point) {\n return p[0] === q[0] && p[1] === q[1];\n}\n\nexport function xySmaller(p: Point, q: Point) {\n return p[0] < q[0] || (p[0] === q[0] && p[1] < q[1]);\n}\n\nexport function xyCompare(p: Point, q: Point) {\n if (xySmaller(p, q)) return Sign.SMALLER;\n if (xyEqual(p, q)) return Sign.EQUAL;\n return Sign.LARGER;\n}\n\nfunction getOrientedSide(p: Point, q: Point, r: Point, t: Point): Sign {\n const qpx = q[0] - p[0];\n const qpy = q[1] - p[1];\n const rpx = r[0] - p[0];\n const rpy = r[1] - p[1];\n const tpx = t[0] - p[0];\n const tpy = t[1] - p[1];\n const tqx = t[0] - q[0];\n const tqy = t[1] - q[1];\n const rqx = r[0] - q[0];\n const rqy = r[1] - q[1];\n\n const det = determinant(qpx * tpy - qpy * tpx, tpx * tqx + tpy * tqy, qpx * rpy - qpy * rpx, rpx * rqx + rpy * rqy);\n let maxx = Math.abs(qpx);\n let maxy = Math.abs(qpy);\n const arpx = Math.abs(rpx);\n const arpy = Math.abs(rpy);\n const atqx = Math.abs(tqx);\n const atqy = Math.abs(tqy);\n const atpx = Math.abs(tpx);\n const atpy = Math.abs(tpy);\n const arqx = Math.abs(rqx);\n const arqy = Math.abs(rqy);\n\n if (maxx < arpx) maxx = arpx;\n if (maxx < atpx) maxx = atpx;\n if (maxx < atqx) maxx = atqx;\n if (maxx < arqx) maxx = arqx;\n\n if (maxy < arpy) maxy = arpy;\n if (maxy < atpy) maxy = atpy;\n if (maxy < atqy) maxy = atqy;\n if (maxy < arqy) maxy = arqy;\n\n if (maxx > maxy) [maxx, maxy] = [maxy, maxx];\n\n if (maxx < 1e-73 && maxx === 0) return Sign.ON_ORIENTED_BOUNDARY;\n // sqrt(sqrt(max_double/16\n else if (maxy < 1e76) {\n const eps = Number.EPSILON * maxx * maxy * (maxy * maxy);\n if (det > eps) return Sign.ON_POSITIVE_SIDE;\n if (det < -eps) return Sign.ON_NEGATIVE_SIDE;\n }\n\n return Sign.ZERO;\n}\n\nfunction segSegDoIntersectCrossing(p1: Point, p2: Point, p3: Point, p4: Point): boolean {\n switch (orientation(p1, p2, p3)) {\n case Sign.LEFT_TURN:\n return orientation(p3, p4, p2) !== Sign.RIGHT_TURN;\n case Sign.RIGHT_TURN:\n return orientation(p3, p4, p2) !== Sign.LEFT_TURN;\n case Sign.COLLINEAR:\n return true;\n }\n}\n\nfunction segSegDoIntersectContained(p1: Point, p2: Point, p3: Point, p4: Point): boolean {\n switch (orientation(p1, p2, p3)) {\n case Sign.LEFT_TURN:\n return orientation(p1, p2, p4) !== Sign.LEFT_TURN;\n case Sign.RIGHT_TURN:\n return orientation(p1, p2, p4) !== Sign.RIGHT_TURN;\n case Sign.COLLINEAR:\n return true;\n }\n}\n\nexport function intersection(pa: Point, pb: Point, pc: Point, pd: Point) {\n const i = getIntersectionType(pa, pb, pc, pd);\n switch (i.intersectionType) {\n case IntersectionType.POINT:\n return i.point!;\n case IntersectionType.NO_INTERSECTION:\n return null;\n }\n throw new Error(\"sdfgighowen\");\n}\n\nenum IntersectionType {\n NO_INTERSECTION,\n POINT,\n SEGMENT,\n}\n\nfunction getLine(p0: Point, p1: Point): Line {\n if (p0[0] === p1[0]) return [1, 0, -p0[0]];\n if (p0[1] === p1[1]) return [0, 1, -p0[1]];\n const x = p1[0] - p0[0];\n const y = p1[1] - p0[1];\n return [-y, x, -x * p0[1] + y * p0[0]];\n}\n\nfunction getIntersectionType(pa: Point, pb: Point, pc: Point, pd: Point) {\n if (!doIntersect(pa, pb, pc, pd)) return { intersectionType: IntersectionType.NO_INTERSECTION, point: null };\n const l1 = getLine(pa, pb);\n const l2 = getLine(pc, pd);\n const info = getIntersectionTypeLine(l1, l2);\n switch (info.intersectionType) {\n case IntersectionType.POINT: {\n return info;\n }\n }\n throw new Error(\"gzseuihgpib\");\n}\n\nfunction getIntersectionTypeLine(la: Line, lb: Line) {\n const denom = la[0] * lb[1] - lb[0] * la[1];\n const nom1 = la[1] * lb[2] - lb[1] * la[2];\n const nom2 = lb[0] * la[2] - la[0] * lb[2];\n return {\n intersectionType: IntersectionType.POINT,\n point: [nom1 / denom, nom2 / denom],\n };\n}\n\nfunction doIntersect(A1: Point, A2: Point, B1: Point, B2: Point): boolean {\n if (xySmaller(A1, A2)) {\n if (xySmaller(B1, B2)) {\n if (xySmaller(A2, B1) || xySmaller(B2, A1)) return false;\n } else {\n if (xySmaller(A2, B2) || xySmaller(B1, A1)) return false;\n }\n } else {\n if (xySmaller(B1, B2)) {\n if (xySmaller(A1, B1) || xySmaller(B2, A2)) return false;\n } else {\n if (xySmaller(A1, B2) || xySmaller(B1, A2)) return false;\n }\n }\n if (xySmaller(A1, A2)) {\n if (xySmaller(B1, B2)) {\n switch (xyCompare(A1, B1)) {\n case Sign.SMALLER: {\n switch (xyCompare(A2, B1)) {\n case Sign.SMALLER:\n return false;\n case Sign.EQUAL:\n return true;\n default: {\n switch (xyCompare(A2, B2)) {\n case Sign.SMALLER:\n return segSegDoIntersectCrossing(A1, A2, B1, B2);\n case Sign.EQUAL:\n return true;\n default:\n return segSegDoIntersectContained(A1, A2, B1, B2);\n }\n }\n }\n }\n case Sign.EQUAL:\n return true;\n default:\n switch (xyCompare(B2, A1)) {\n case Sign.SMALLER:\n return false;\n case Sign.EQUAL:\n return true;\n default: {\n switch (xyCompare(B2, A2)) {\n case Sign.SMALLER:\n return segSegDoIntersectCrossing(B1, B2, A1, A2);\n case Sign.EQUAL:\n return true;\n default:\n return segSegDoIntersectContained(B1, B2, A1, A2);\n }\n }\n }\n }\n } else {\n switch (xyCompare(A1, B2)) {\n case Sign.SMALLER: {\n switch (xyCompare(A2, B2)) {\n case Sign.SMALLER:\n return false;\n case Sign.EQUAL:\n return true;\n default: {\n switch (xyCompare(A2, B1)) {\n case Sign.SMALLER:\n return segSegDoIntersectCrossing(A1, A2, B2, B1);\n case Sign.EQUAL:\n return true;\n default:\n return segSegDoIntersectContained(A1, A2, B2, B1);\n }\n }\n }\n }\n case Sign.EQUAL:\n return true;\n default:\n switch (xyCompare(B1, A1)) {\n case Sign.SMALLER:\n return false;\n case Sign.EQUAL:\n return true;\n default: {\n switch (xyCompare(B1, A2)) {\n case Sign.SMALLER:\n return segSegDoIntersectCrossing(B2, B1, A1, A2);\n case Sign.EQUAL:\n return true;\n default:\n return segSegDoIntersectContained(B2, B1, A1, A2);\n }\n }\n }\n }\n }\n } else {\n if (xySmaller(B1, B2)) {\n switch (xyCompare(A2, B1)) {\n case Sign.SMALLER: {\n switch (xyCompare(A1, B1)) {\n case Sign.SMALLER:\n return false;\n case Sign.EQUAL:\n return true;\n default: {\n switch (xyCompare(A1, B2)) {\n case Sign.SMALLER:\n return segSegDoIntersectCrossing(A2, A1, B1, B2);\n case Sign.EQUAL:\n return true;\n default:\n return segSegDoIntersectContained(A2, A1, B1, B2);\n }\n }\n }\n }\n case Sign.EQUAL:\n return true;\n default:\n switch (xyCompare(B2, A2)) {\n case Sign.SMALLER:\n return false;\n case Sign.EQUAL:\n return true;\n default: {\n switch (xyCompare(B2, A1)) {\n case Sign.SMALLER:\n return segSegDoIntersectCrossing(B1, B2, A2, A1);\n case Sign.EQUAL:\n return true;\n default:\n return segSegDoIntersectContained(B1, B2, A2, A1);\n }\n }\n }\n }\n } else {\n switch (xyCompare(A2, B2)) {\n case Sign.SMALLER: {\n switch (xyCompare(A1, B2)) {\n case Sign.SMALLER:\n return false;\n case Sign.EQUAL:\n return true;\n default: {\n switch (xyCompare(A1, B1)) {\n case Sign.SMALLER:\n return segSegDoIntersectCrossing(A2, A1, B2, B1);\n case Sign.EQUAL:\n return true;\n default:\n return segSegDoIntersectContained(A2, A1, B2, B1);\n }\n }\n }\n }\n case Sign.EQUAL:\n return true;\n default:\n switch (xyCompare(B1, A2)) {\n case Sign.SMALLER:\n return false;\n case Sign.EQUAL:\n return true;\n default: {\n switch (xyCompare(B1, A1)) {\n case Sign.SMALLER:\n return segSegDoIntersectCrossing(B2, B1, A2, A1);\n case Sign.EQUAL:\n return true;\n default:\n return segSegDoIntersectContained(B2, B1, A2, A1);\n }\n }\n }\n }\n }\n }\n}\n\nfunction nextUp(x: number) {\n if (x !== x) {\n return x;\n }\n if (x === -1 / 0) {\n return -Number.MAX_VALUE;\n }\n if (x === +1 / 0) {\n return +1 / 0;\n }\n if (x === +Number.MAX_VALUE) {\n return +1 / 0;\n }\n let y = x * (x < 0 ? 1 - Number.EPSILON / 2 : 1 + Number.EPSILON);\n if (y === x) {\n y = Number.MIN_VALUE * Number.EPSILON > 0 ? x + Number.MIN_VALUE * Number.EPSILON : x + Number.MIN_VALUE;\n }\n if (y === +1 / 0) {\n y = +Number.MAX_VALUE;\n }\n const b = x + (y - x) / 2;\n if (x < b && b < y) {\n y = b;\n }\n const c = (y + x) / 2;\n if (x < c && c < y) {\n y = c;\n }\n return y === 0 ? -0 : y;\n}\n\nexport function ulp(x: number) {\n return x < 0 ? nextUp(x) - x : x + nextUp(-x);\n}\n","import mod from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/ts-loader/index.js??ref--12-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./asset_node.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/ts-loader/index.js??ref--12-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./asset_node.vue?vue&type=script&lang=ts&\"","import mod from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./vision.vue?vue&type=style&index=0&id=46baf892&scoped=true&lang=css&\"; export default mod; export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./vision.vue?vue&type=style&index=0&id=46baf892&scoped=true&lang=css&\"","import mod from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./edit_dialog.vue?vue&type=style&index=0&id=23de098e&scoped=true&lang=css&\"; export default mod; export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./edit_dialog.vue?vue&type=style&index=0&id=23de098e&scoped=true&lang=css&\"","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nimport Vue from \"vue\";\nimport Component from \"vue-class-component\";\nimport { Prop } from \"vue-property-decorator\";\n\n@Component\nexport default class Modal extends Vue {\n @Prop(Boolean) visible!: boolean;\n @Prop({ type: Boolean, default: true }) mask!: boolean;\n\n $refs!: {\n container: HTMLElement;\n };\n\n positioned = false;\n offsetX = 0;\n offsetY = 0;\n screenX = 0;\n screenY = 0;\n dragging = false;\n\n // Example of mounted required: opening note\n mounted() {\n this.updatePosition();\n }\n // Example of updated required: opening initiative\n updated() {\n this.updatePosition();\n }\n\n close(event: MouseEvent) {\n this.$emit(\"close\");\n }\n updatePosition() {\n if (!this.positioned) {\n const container = this.$refs.container;\n if (container.offsetWidth === 0 && container.offsetHeight === 0) return;\n this.$refs.container.style.left = (window.innerWidth - container.offsetWidth) / 2 + \"px\";\n this.$refs.container.style.top = (window.innerHeight - container.offsetHeight) / 2 + \"px\";\n this.positioned = true;\n }\n }\n dragStart(event: DragEvent) {\n if (event === null || event.dataTransfer === null) return;\n event.dataTransfer.setData(\"Hack\", \"\");\n // Because the drag event is happening on the header, we have to change the drag image\n // in order to give the impression that the entire modal is dragged.\n event.dataTransfer.setDragImage(this.$refs.container, event.offsetX, event.offsetY);\n this.offsetX = event.offsetX;\n this.offsetY = event.offsetY;\n this.screenX = event.screenX;\n this.screenY = event.screenY;\n this.dragging = true;\n }\n dragEnd(event: DragEvent) {\n this.dragging = false;\n let left = event.clientX - this.offsetX;\n let top = event.clientY - this.offsetY;\n if (event.clientX === 0 && event.clientY === 0 && event.pageX === 0 && event.pageY === 0) {\n left = parseInt(this.$refs.container.style.left!, 10) - (this.screenX - event.screenX);\n top = parseInt(this.$refs.container.style.top!, 10) - (this.screenY - event.screenY);\n }\n if (left < 0) left = 0;\n if (left > window.innerWidth - 100) left = window.innerWidth - 100;\n if (top < 0) top = 0;\n if (top > window.innerHeight - 100) top = window.innerHeight - 100;\n this.$refs.container.style.left = left + \"px\";\n this.$refs.container.style.top = top + \"px\";\n this.$refs.container.style.display = \"block\";\n }\n dragOver(event: DragEvent) {\n if (this.dragging) this.$refs.container.style.display = \"none\";\n }\n}\n","import io from \"socket.io-client\";\n\nimport { Asset } from \"@/core/comm/types\";\nimport { assetStore } from \"./store\";\n\nexport const socket = io(location.protocol + \"//\" + location.host + \"/pa_assetmgmt\", { autoConnect: false });\n\n// export const socket = io.connect(location.protocol + \"//\" + location.host + \"/pa_assetmgmt\");\nsocket.on(\"connect\", () => {\n console.log(\"Connected\");\n});\nsocket.on(\"disconnect\", () => {\n console.log(\"Disconnected\");\n});\nsocket.on(\"redirect\", (destination: string) => {\n console.log(\"redirecting\");\n window.location.href = destination;\n});\nsocket.on(\"Folder.Root.Set\", (root: number) => {\n assetStore.setRoot(root);\n});\nsocket.on(\"Folder.Set\", (folder: Asset) => {\n assetStore.clear();\n if (folder.children) {\n for (const child of folder.children) {\n assetStore.idMap.set(child.id, child);\n if (child.file_hash) {\n assetStore.files.push(child.id);\n } else {\n assetStore.folders.push(child.id);\n }\n }\n }\n});\nsocket.on(\"Folder.Create\", (folder: Asset) => {\n assetStore.folders.push(folder.id);\n assetStore.idMap.set(folder.id, folder);\n});\nsocket.on(\"Asset.Upload.Finish\", (asset: Asset) => {\n assetStore.idMap.set(asset.id, asset);\n assetStore.files.push(asset.id);\n});\n","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nimport Component from \"vue-class-component\";\n\nimport Accordion from \"@/core/components/accordion.vue\";\nimport Tool from \"@/game/ui/tools/tool.vue\";\n\nimport { socket } from \"@/game/api/socket\";\nimport { layerManager } from \"@/game/layers/manager\";\nimport { gameStore } from \"@/game/store\";\n\n@Component({\n components: {\n accordion: Accordion,\n },\n})\nexport default class FilterTool extends Tool {\n name = \"Filter\";\n active = false;\n\n get labels() {\n const cat: { [category: string]: [string, string][] } = {'': []};\n for (const uuid of Object.keys(gameStore.labels)) {\n const label = gameStore.labels[uuid];\n if (!label.category) cat[\"\"].push([label.uuid, label.name]);\n else {\n if (!(label.category in cat)) cat[label.category] = [];\n cat[label.category].push([label.uuid, label.name]);\n cat[label.category].sort((a, b) => a[1].localeCompare(b[1]));\n }\n }\n return cat;\n }\n\n get initalValues() {\n const values: { [category: string]: string[] } = {};\n for (const cat of Object.keys(this.labels)) {\n values[cat] = gameStore.labelFilters.filter(f => this.labels[cat].map(l => l[0]).includes(f));\n }\n return values;\n }\n\n get categories() {\n return Object.keys(this.labels).sort();\n }\n\n isFilter(uuid: string): boolean {\n return gameStore.labelFilters.includes(uuid);\n }\n\n toggleFilter(uuid: string) {\n const i = gameStore.labelFilters.indexOf(uuid);\n if (i >= 0) gameStore.labelFilters.splice(i, 1);\n else gameStore.labelFilters.push(uuid);\n layerManager.invalidate();\n }\n\n toggleUnlabeled() {\n gameStore.toggleUnlabeledFilter();\n layerManager.invalidate();\n }\n\n updateSelection(data: { title: string; selection: string[] }) {\n if (!(data.title in this.labels)) return;\n for (const [uuid, _] of this.labels[data.title]) {\n const idx = gameStore.labelFilters.indexOf(uuid);\n const selected = data.selection.includes(uuid);\n if (idx >= 0 && !selected) {\n gameStore.labelFilters.splice(idx, 1);\n socket.emit(\"Labels.Filter.Remove\", uuid);\n } else if (idx < 0 && selected) {\n gameStore.labelFilters.push(uuid);\n socket.emit(\"Labels.Filter.Add\", uuid);\n }\n }\n layerManager.invalidate();\n }\n}\n","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nimport Vue from \"vue\";\nimport Component from \"vue-class-component\";\n\nimport { Prop } from \"vue-property-decorator\";\nimport { gameStore } from '../../game/store';\n\n@Component\nexport default class Accordion extends Vue {\n @Prop(String) title!: string;\n @Prop({ default: true, type: Boolean }) showArrow!: boolean;\n @Prop({ default: () => []}) items!: [string, string][];\n @Prop({ default: () => []}) initialValues!: string[];\n\n selected: string[] = [];\n\n active = false;\n\n mounted() {\n this.selected = this.initialValues;\n this.updateCategory();\n }\n\n toggleDisplay(event: MouseEvent) {\n this.active = !this.active;\n }\n\n toggleCategory() {\n const overall = this.$refs.overall as HTMLInputElement;\n if (overall.checked) this.selected = this.items.map((i) => i[0]);\n else this.selected = [];\n this.$emit(\"selectionupdate\", {title: this.title, selection: this.selected});\n }\n\n updateCategory() {\n const overall = this.$refs.overall as HTMLInputElement;\n if (this.selected.length === 0) {\n overall.checked = false;\n overall.indeterminate = false;\n } else if(this.selected.length === this.items.length) {\n overall.checked = true;\n overall.indeterminate = false;\n } else {\n overall.checked = false;\n overall.indeterminate = true;\n }\n }\n\n toggleSelection(item: string) {\n const found = this.selected.indexOf(item);\n if (found === -1) this.selected.push(item);\n else this.selected.splice(found, 1);\n this.updateCategory();\n this.$emit(\"selectionupdate\", {title: this.title, selection: this.selected});\n }\n}\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return (_vm.selected)?_c('div',{staticClass:\"tool-detail\",style:({'--detailRight': _vm.detailRight, '--detailArrow': _vm.detailArrow})},_vm._l((_vm.tokens),function(token){return _c('div',{key:token.uuid,staticClass:\"token\",class:{'selected': _vm.selection.includes(token.uuid)},on:{\"click\":function($event){_vm.toggle(token.uuid)}}},[(token.src)?_c('img',{attrs:{\"src\":token.src,\"width\":\"30px\",\"height\":\"30px\"}}):_vm._e(),_c('div',[_vm._v(_vm._s(token.name))])])})):_vm._e()}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","export * from \"-!cache-loader?{\\\"cacheDirectory\\\":\\\"node_modules/.cache/vue-loader\\\",\\\"cacheIdentifier\\\":\\\"74f43d04-vue-loader-template\\\"}!../../../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./vision.vue?vue&type=template&id=46baf892&scoped=true&\"","import mod from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./game.vue?vue&type=style&index=0&lang=css&\"; export default mod; export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./game.vue?vue&type=style&index=0&lang=css&\"","import { GlobalPoint, LocalPoint } from \"@/game/geom\";\nimport { BoundingRect } from \"@/game/shapes/boundingrect\";\nimport { Shape } from \"@/game/shapes/shape\";\nimport { g2lx, g2ly, g2lz, l2g } from \"@/game/units\";\nimport { getFogColour } from \"@/game/utils\";\nimport { ServerMultiLine } from \"../comm/types/shapes\";\n\nexport class MultiLine extends Shape {\n type = \"multiline\";\n _points: GlobalPoint[] = [];\n lineWidth: number;\n constructor(\n startPoint: GlobalPoint,\n points?: GlobalPoint[],\n lineWidth?: number,\n strokeColour?: string,\n uuid?: string,\n ) {\n super(startPoint, \"rgba(0, 0, 0, 0)\", strokeColour || \"#000\", uuid);\n this._points = points || [];\n this.lineWidth = lineWidth || 3;\n }\n\n get refPoint() {\n return this._refPoint;\n }\n set refPoint(point: GlobalPoint) {\n const delta = point.subtract(this._refPoint);\n this._refPoint = point;\n for (let i = 0; i < this._points.length; i++) this._points[i] = this._points[i].add(delta);\n }\n\n asDict() {\n return Object.assign(this.getBaseDict(), {\n line_width: this.lineWidth,\n points: this._points.map(p => ({ x: p.x, y: p.y })),\n });\n }\n fromDict(data: ServerMultiLine) {\n super.fromDict(data);\n this._points = data.points.map(p => new GlobalPoint(p.x, p.y));\n }\n get points() {\n return this._points.map(point => [point.x, point.y]);\n }\n getBoundingBox(): BoundingRect {\n let minx: number = this.refPoint.x;\n let maxx: number = this.refPoint.x;\n let miny: number = this.refPoint.y;\n let maxy: number = this.refPoint.y;\n for (const p of this._points) {\n if (p.x < minx) minx = p.x;\n if (p.x > maxx) maxx = p.x;\n if (p.y < miny) miny = p.y;\n if (p.y > maxy) maxy = p.y;\n }\n return new BoundingRect(new GlobalPoint(minx, miny), maxx - minx, maxy - miny);\n }\n draw(ctx: CanvasRenderingContext2D) {\n super.draw(ctx);\n ctx.beginPath();\n ctx.lineCap = \"round\";\n ctx.lineJoin = \"round\";\n ctx.moveTo(g2lx(this.refPoint.x), g2ly(this.refPoint.y));\n for (const p of this._points) ctx.lineTo(g2lx(p.x), g2ly(p.y));\n if (this.strokeColour === \"fog\") ctx.strokeStyle = getFogColour();\n else ctx.strokeStyle = this.strokeColour;\n ctx.lineWidth = g2lz(this.lineWidth);\n ctx.stroke();\n }\n contains(point: GlobalPoint): boolean {\n return this.getBoundingBox().contains(point);\n }\n\n center(): GlobalPoint;\n center(centerPoint: GlobalPoint): void;\n center(centerPoint?: GlobalPoint): GlobalPoint | void {\n return this.getBoundingBox().center();\n }\n visibleInCanvas(canvas: HTMLCanvasElement): boolean {\n return this.getBoundingBox().visibleInCanvas(canvas);\n } // TODO\n snapToGrid(): void {}\n resizeToGrid(): void {}\n resize(resizePoint: number, point: LocalPoint): void {\n if (resizePoint === 0) this._refPoint = l2g(point);\n else this._points[resizePoint - 1] = l2g(point);\n }\n}\n","import { render, staticRenderFns } from \"./draw.vue?vue&type=template&id=639cd890&scoped=true&\"\nimport script from \"./draw.vue?vue&type=script&lang=ts&\"\nexport * from \"./draw.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./draw.vue?vue&type=style&index=0&id=639cd890&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"639cd890\",\n null\n \n)\n\ncomponent.options.__file = \"draw.vue\"\nexport default component.exports","import tinycolor from \"tinycolor2\";\n\nimport { LocalPoint } from \"@/game/geom\";\nimport { gameStore } from \"@/game/store\";\n\nexport function getMouse(e: MouseEvent): LocalPoint {\n return new LocalPoint(e.pageX, e.pageY);\n}\n\nexport function getFogColour(opposite: boolean = false): string {\n const tc = tinycolor(gameStore.fowColour);\n if (gameStore.IS_DM) tc.setAlpha(opposite ? 1 : gameStore.fowOpacity);\n else tc.setAlpha(1);\n return tc.toRgbString();\n}\n\nexport function zoomValue(display: number) {\n // Powercurve 0.2/3/10\n // Based on https://stackoverflow.com/a/17102320\n return 1 / (-5 / 3 + (28 / 15) * Math.exp(1.83 * display));\n}\n\nexport function zoomDisplay(value: number) {\n return Math.log((1 / value + 5 / 3) * (15 / 28)) / 1.83;\n}\n","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nimport * as tinycolor from \"tinycolor2\";\nimport Vue from \"vue\";\nimport Component from \"vue-class-component\";\n\nimport { mapState } from \"vuex\";\n\nimport ColorPicker from \"@/core/components/colorpicker.vue\";\nimport Modal from \"@/core/components/modals/modal.vue\";\n\nimport { calcFontScale } from \"@/core/utils\";\nimport { LocalPoint } from \"@/game/geom\";\nimport { layerManager } from \"@/game/layers/manager\";\nimport { CircularToken } from \"@/game/shapes/circulartoken\";\nimport { gameStore } from \"@/game/store\";\nimport { getUnitDistance, l2g } from \"@/game/units\";\nimport { Watch } from \"vue-property-decorator\";\n\n@Component({\n components: {\n Modal,\n \"color-picker\": ColorPicker,\n },\n computed: {\n ...mapState(\"game\", [\"unitSize\"]),\n },\n})\nexport default class CreateTokenModal extends Vue {\n x = 0;\n y = 0;\n visible = false;\n text = \"X\";\n fillColour = \"rgba(255, 255, 255, 1)\";\n borderColour = \"rgba(0, 0, 0, 1)\";\n\n mounted() {\n this.updatePreview();\n }\n\n @Watch(\"text\")\n onTextChange(newValue: string, oldValue: string) {\n this.updatePreview();\n }\n @Watch(\"fillColour\")\n onFillChange(newValue: string, oldValue: string) {\n this.updatePreview();\n }\n @Watch(\"borderColour\")\n onBorderChange(newValue: string, oldValue: string) {\n this.updatePreview();\n }\n\n open(x: number, y: number) {\n this.visible = true;\n this.x = x;\n this.y = y;\n }\n submit() {\n const layer = layerManager.getLayer();\n if (layer === undefined) return;\n const token = new CircularToken(\n l2g(new LocalPoint(this.x, this.y)),\n getUnitDistance(gameStore.unitSize / 2),\n this.text,\n \"10px serif\",\n this.fillColour,\n this.borderColour,\n );\n token.addOwner(gameStore.username);\n layer.addShape(token, true);\n layer.invalidate(false);\n this.visible = false;\n }\n updatePreview() {\n const ctx = (this.$refs.canvas).getContext(\"2d\")!;\n ctx.clearRect(0, 0, ctx.canvas.width, ctx.canvas.height);\n ctx.beginPath();\n const dest = { x: ctx.canvas.width / 2, y: ctx.canvas.height / 2 };\n const r = Math.min(dest.x, dest.y) * 0.9;\n\n ctx.fillStyle = this.fillColour;\n\n ctx.arc(dest.x, dest.y, r, 0, 2 * Math.PI);\n ctx.fill();\n if (this.borderColour !== \"rgba(0, 0, 0, 0)\") {\n ctx.beginPath();\n ctx.lineWidth = 5;\n ctx.strokeStyle = this.borderColour;\n ctx.arc(dest.x, dest.y, r, 0, 2 * Math.PI);\n ctx.stroke();\n }\n ctx.save();\n ctx.textAlign = \"center\";\n ctx.textBaseline = \"middle\";\n const xs = calcFontScale(ctx, this.text, r, r);\n const ys = 0;\n ctx.transform(xs, ys, -ys, xs, dest.x, dest.y);\n ctx.fillStyle = tinycolor.mostReadable(this.fillColour, [\"#000\", \"#fff\"]).toHexString();\n ctx.fillText(this.text, 0, 0);\n ctx.restore();\n }\n}\n","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nimport Vue from \"vue\";\nimport Component from \"vue-class-component\";\n\nimport ConfirmDialog from \"@/core/components/modals/confirm.vue\";\nimport Modal from \"@/core/components/modals/modal.vue\";\n\nimport { getRef } from \"@/core/utils\";\nimport { Note } from \"@/game/comm/types/general\";\nimport { gameStore } from \"@/game/store\";\n\n@Component({\n components: {\n Modal,\n },\n})\nexport default class NoteDialog extends Vue {\n visible = false;\n note: Note | null = null;\n\n open(note: Note) {\n this.visible = true;\n this.note = note;\n }\n calcHeight() {\n if (this.$refs.textarea) {\n const el = this.$refs.textarea;\n el.style.height = \"auto\";\n el.style.height = el.scrollHeight + \"px\";\n // Using the return value without the above did not achieve what I want, so hey /shrug\n return el.scrollHeight + \"px\";\n }\n return \"100px\";\n }\n updateNote() {\n if (this.note) gameStore.updateNote({ note: this.note, sync: true });\n }\n removeNote() {\n getRef(\"confirm\")\n .open(\"Are you sure you wish to remove this?\")\n .then(\n (result: boolean) => {\n if (result && this.note) {\n gameStore.removeNote({ note: this.note, sync: true });\n this.visible = false;\n }\n },\n () => {},\n );\n }\n}\n","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nimport Component from \"vue-class-component\";\n\nimport { Watch } from \"vue-property-decorator\";\n\nimport ColorPicker from \"@/core/components/colorpicker.vue\";\nimport Tool from \"@/game/ui/tools/tool.vue\";\n\nimport { socket } from \"@/game/api/socket\";\nimport { GlobalPoint } from \"@/game/geom\";\nimport { layerManager } from \"@/game/layers/manager\";\nimport { Circle } from \"@/game/shapes/circle\";\nimport { Line } from \"@/game/shapes/line\";\nimport { MultiLine } from \"@/game/shapes/multiline\";\nimport { Polygon } from \"@/game/shapes/polygon\";\nimport { Rect } from \"@/game/shapes/rect\";\nimport { Shape } from \"@/game/shapes/shape\";\nimport { gameStore } from \"@/game/store\";\nimport { getUnitDistance, l2g } from \"@/game/units\";\nimport { getMouse } from \"@/game/utils\";\n\n@Component({\n components: {\n \"color-picker\": ColorPicker,\n },\n})\nexport default class DrawTool extends Tool {\n name = \"Draw\";\n active = false;\n\n startPoint: GlobalPoint | null = null;\n shape: Shape | null = null;\n brushHelper: Circle | null = null;\n ruler: Line | null = null;\n\n fillColour = \"rgba(0, 0, 0, 1)\";\n borderColour = \"rgba(255, 255, 255, 0)\";\n\n shapeSelect = \"square\";\n shapes = [\"square\", \"circle\", \"draw-polygon\", \"paint-brush\"];\n modeSelect = \"normal\";\n modes = [\"normal\", \"reveal\", \"hide\"];\n\n brushSize = getUnitDistance(gameStore.unitSize);\n\n get helperSize(): number {\n if (this.shapeSelect === \"paint-brush\") return this.brushSize / 2;\n return getUnitDistance(this.unitSize) / 8;\n }\n get IS_DM(): boolean {\n return gameStore.IS_DM;\n }\n get unitSize(): number {\n return gameStore.unitSize;\n }\n get useGrid(): boolean {\n return gameStore.useGrid;\n }\n\n @Watch(\"fillColour\")\n onFillChange() {\n if (this.brushHelper) this.brushHelper.fillColour = this.fillColour;\n }\n\n @Watch(\"modeSelect\")\n onModeUpdate(newValue: string, oldValue: string) {\n this.onModeChange(newValue, oldValue);\n }\n\n setupBrush() {\n if (this.brushHelper === null) return;\n if (this.modeSelect === \"reveal\" || this.modeSelect === \"hide\") {\n this.brushHelper.options.set(\"preFogShape\", true);\n this.brushHelper.options.set(\"skipDraw\", true);\n this.brushHelper.fillColour = \"rgba(0, 0, 0, 1)\";\n\n if (this.modeSelect === \"reveal\") this.brushHelper.globalCompositeOperation = \"source-over\";\n else if (this.modeSelect === \"hide\") this.brushHelper.globalCompositeOperation = \"destination-out\";\n } else {\n this.brushHelper.options.delete(\"preFogShape\");\n this.brushHelper.options.delete(\"skipDraw\");\n this.brushHelper.globalCompositeOperation = \"source-over\";\n this.brushHelper.fillColour = this.fillColour;\n }\n }\n onModeChange(newValue: string, oldValue: string) {\n if (this.brushHelper === null) return;\n\n const fowLayer = layerManager.getLayer(\"fow\");\n const normalLayer = layerManager.getLayer();\n if (fowLayer === undefined || normalLayer === undefined) return;\n\n this.setupBrush();\n\n if (newValue !== \"normal\" && oldValue === \"normal\") {\n normalLayer.removeShape(this.brushHelper, false);\n fowLayer.addShape(this.brushHelper, false);\n } else if (newValue === \"normal\" && oldValue !== \"normal\") {\n normalLayer.addShape(this.brushHelper, false);\n fowLayer.removeShape(this.brushHelper, false);\n }\n }\n getLayer() {\n if (this.modeSelect === \"normal\") return layerManager.getLayer();\n return layerManager.getLayer(\"fow\");\n }\n onMouseDown(event: MouseEvent) {\n const layer = this.getLayer();\n if (layer === undefined) {\n console.log(\"No active layer!\");\n return;\n }\n if (!this.active) {\n this.startPoint = l2g(getMouse(event));\n this.active = true;\n switch (this.shapeSelect) {\n case \"square\": {\n this.shape = new Rect(this.startPoint.clone(), 0, 0, this.fillColour, this.borderColour);\n break;\n }\n case \"circle\": {\n this.shape = new Circle(\n this.startPoint.clone(),\n this.helperSize,\n this.fillColour,\n this.borderColour,\n );\n break;\n }\n case \"paint-brush\": {\n this.shape = new MultiLine(this.startPoint.clone(), [], this.brushSize);\n this.shape.fillColour = this.fillColour;\n break;\n }\n case \"draw-polygon\": {\n this.shape = new Polygon(this.startPoint.clone(), [], this.fillColour, this.borderColour);\n break;\n }\n default:\n return;\n }\n\n if (this.modeSelect !== \"normal\") {\n this.shape.options.set(\"preFogShape\", true);\n this.shape.options.set(\"skipDraw\", true);\n this.shape.fillColour = \"rgba(0, 0, 0, 1)\";\n }\n if (this.modeSelect === \"reveal\") this.shape.globalCompositeOperation = \"source-over\";\n else if (this.modeSelect === \"hide\") this.shape.globalCompositeOperation = \"destination-out\";\n\n this.shape.addOwner(gameStore.username);\n if (layer.name === \"fow\" && this.modeSelect === \"normal\") {\n this.shape.visionObstruction = true;\n this.shape.movementObstruction = true;\n }\n layer.addShape(this.shape, true, false, false);\n\n // Push brushhelper to back\n this.pushBrushBack();\n } else if (this.shape !== null && this.shape instanceof Polygon) {\n // For polygon draw\n this.shape._vertices.push(l2g(getMouse(event)));\n }\n if (this.shape !== null && this.shape instanceof Polygon) {\n const lastPoint = l2g(getMouse(event));\n if (this.ruler === null) {\n this.ruler = new Line(lastPoint, lastPoint, 3, \"black\");\n layer.addShape(this.ruler, false);\n } else {\n this.ruler.refPoint = lastPoint;\n this.ruler.endPoint = lastPoint;\n }\n if (this.shape.visionObstruction) gameStore.recalculateVision(true);\n layer.invalidate(false);\n socket.emit(\"Shape.Update\", { shape: this.shape!.asDict(), redraw: true, temporary: true });\n }\n }\n onMouseMove(event: MouseEvent) {\n const endPoint = l2g(getMouse(event));\n const layer = this.getLayer();\n if (layer === undefined) {\n console.log(\"No active layer!\");\n return;\n }\n\n if (this.brushHelper !== null) {\n this.brushHelper.r = this.helperSize;\n this.brushHelper.refPoint = endPoint;\n if (!this.active) layer.invalidate(false);\n }\n\n if (!this.active || this.startPoint === null || this.shape === null) return;\n\n switch (this.shapeSelect) {\n case \"square\": {\n (this.shape).w = Math.abs(endPoint.x - this.startPoint.x);\n (this.shape).h = Math.abs(endPoint.y - this.startPoint.y);\n this.shape.refPoint = new GlobalPoint(\n Math.min(this.startPoint.x, endPoint.x),\n Math.min(this.startPoint.y, endPoint.y),\n );\n break;\n }\n case \"circle\": {\n (this.shape).r = endPoint.subtract(this.startPoint).length();\n break;\n }\n case \"paint-brush\": {\n (this.shape)._points.push(endPoint);\n break;\n }\n case \"draw-polygon\": {\n this.ruler!.endPoint = endPoint;\n break;\n }\n }\n\n if (!(this.shape instanceof Polygon)) {\n socket.emit(\"Shape.Update\", { shape: this.shape!.asDict(), redraw: true, temporary: true });\n if (this.shape.visionObstruction) gameStore.recalculateVision(true);\n }\n layer.invalidate(false);\n }\n onMouseUp(event: MouseEvent) {\n if (!this.active || this.shape === null || this.shape instanceof Polygon) return;\n if (!event.altKey && this.useGrid) {\n this.shape.resizeToGrid();\n }\n this.finaliseShape();\n }\n onContextMenu(event: MouseEvent) {\n if (!this.active || this.shape === null || !(this.shape instanceof Polygon)) return;\n const layer = this.getLayer();\n if (layer === undefined) {\n console.log(\"No active layer!\");\n return;\n }\n layer.removeShape(this.ruler!, false);\n this.ruler = null;\n this.finaliseShape();\n }\n\n private finaliseShape() {\n if (this.shape === null) return;\n if (this.shape.visionObstruction) gameStore.recalculateVision();\n if (this.shape.movementObstruction) gameStore.recalculateMovement();\n socket.emit(\"Shape.Update\", { shape: this.shape!.asDict(), redraw: true, temporary: false });\n this.active = false;\n }\n\n onSelect() {\n const layer = this.getLayer();\n if (layer === undefined) return;\n this.brushHelper = new Circle(new GlobalPoint(-1000, -1000), this.brushSize / 2, this.fillColour);\n this.setupBrush();\n layer.addShape(this.brushHelper, false); // during mode change the shape is already added\n }\n onDeselect() {\n const layer = this.getLayer();\n if (this.brushHelper !== null && layer !== undefined) layer.removeShape(this.brushHelper, false);\n if (this.active && layer !== undefined && this.shape !== null) {\n layer.removeShape(this.shape, true, false);\n this.shape = null;\n this.active = false;\n layer.invalidate(false);\n }\n }\n\n private pushBrushBack() {\n const layer = this.getLayer();\n if (layer === undefined) {\n console.log(\"No active layer!\");\n return;\n }\n if (this.brushHelper !== null) layer.removeShape(this.brushHelper, false);\n this.brushHelper = new Circle(new GlobalPoint(-1000, -1000), this.brushSize / 2, this.fillColour);\n this.setupBrush();\n layer.addShape(this.brushHelper, false); // during mode change the shape is already added\n }\n}\n","import { GlobalPoint, LocalPoint } from \"@/game/geom\";\nimport { BoundingRect } from \"@/game/shapes/boundingrect\";\nimport { Shape } from \"@/game/shapes/shape\";\nimport { g2lx, g2ly, l2g } from \"@/game/units\";\n\nexport class Line extends Shape {\n type = \"line\";\n endPoint: GlobalPoint;\n lineWidth: number;\n constructor(\n startPoint: GlobalPoint,\n endPoint: GlobalPoint,\n lineWidth?: number,\n strokeColour?: string,\n uuid?: string,\n ) {\n super(startPoint, \"rgba(0, 0, 0, 0)\", strokeColour || \"#000\", uuid);\n this.endPoint = endPoint;\n this.lineWidth = lineWidth === undefined ? 1 : lineWidth;\n }\n asDict() {\n return Object.assign(this.getBaseDict(), {\n x2: this.endPoint.x,\n y2: this.endPoint.y,\n line_width: this.lineWidth,\n });\n }\n get points() {\n return [[this.refPoint.x, this.refPoint.y], [this.endPoint.x, this.endPoint.y]];\n }\n getBoundingBox(): BoundingRect {\n return new BoundingRect(\n new GlobalPoint(Math.min(this.refPoint.x, this.endPoint.x), Math.min(this.refPoint.y, this.endPoint.y)),\n Math.abs(this.refPoint.x - this.endPoint.x),\n Math.abs(this.refPoint.y - this.endPoint.y),\n );\n }\n draw(ctx: CanvasRenderingContext2D) {\n super.draw(ctx);\n ctx.strokeStyle = this.strokeColour;\n ctx.beginPath();\n ctx.moveTo(g2lx(this.refPoint.x), g2ly(this.refPoint.y));\n ctx.lineTo(g2lx(this.endPoint.x), g2ly(this.endPoint.y));\n ctx.lineWidth = this.lineWidth;\n ctx.stroke();\n }\n contains(point: GlobalPoint): boolean {\n return false; // TODO\n }\n\n center(): GlobalPoint;\n center(centerPoint: GlobalPoint): void;\n center(centerPoint?: GlobalPoint): GlobalPoint | void {} // TODO\n visibleInCanvas(canvas: HTMLCanvasElement): boolean {\n return this.getBoundingBox().visibleInCanvas(canvas);\n } // TODO\n snapToGrid(): void {}\n resizeToGrid(): void {}\n resize(resizePoint: number, point: LocalPoint): void {\n if (resizePoint === 0) this.refPoint = l2g(point);\n else this.endPoint = l2g(point);\n }\n}\n","// import \"./class-component-hooks\";\n\nimport axios, { AxiosResponse } from \"axios\";\nimport Vue from \"vue\";\nimport Router from \"vue-router\";\n\nVue.use(Router);\n\nimport AssetManager from \"@/assetManager/manager.vue\";\nimport Login from \"@/auth/login.vue\";\nimport Logout from \"@/auth/logout\";\nimport LoadComponent from \"@/core/components/load.vue\";\nimport Dashboard from \"@/dashboard/main.vue\";\nimport Game from \"@/game/game.vue\";\nimport Invitation from \"@/invitation/invitation\";\n\nimport { coreStore } from \"@/core/store\";\n// import { AssetManager } from \"./assetManager/assets\";\n// const AssetManager = () => import(\"./assetManager/assets\").then(m => m.AssetManager);\n\nexport const router = new Router({\n mode: \"history\",\n base: process.env.BASE_URL,\n routes: [\n {\n path: \"/\",\n redirect: \"/dashboard\",\n },\n {\n path: \"/_load\",\n name: \"load\",\n component: LoadComponent,\n },\n {\n path: \"/assets\",\n component: AssetManager,\n meta: {\n auth: true,\n },\n },\n {\n path: \"/auth\",\n component: { template: \"\" },\n children: [{ path: \"login\", component: Login }, { path: \"logout\", component: Logout }],\n },\n {\n path: \"/invite/:code\",\n component: Invitation,\n meta: {\n auth: true,\n },\n },\n {\n path: \"/dashboard\",\n component: Dashboard,\n meta: {\n auth: true,\n },\n },\n {\n path: \"/game/:creator/:room\",\n component: Game,\n meta: {\n auth: true,\n },\n },\n ],\n});\n\nrouter.beforeEach((to, from, next) => {\n if (!coreStore.initialized && to.path !== \"/_load\") {\n next({ path: \"/_load\" });\n axios\n .get(\"/api/auth\")\n .then((response: AxiosResponse) => {\n if (response.data.auth) {\n coreStore.setAuthenticated(true);\n coreStore.setUsername(response.data.username);\n }\n coreStore.setInitialized(true);\n router.push(to.path);\n })\n .catch(() => {\n console.error(\"Authentication check could not be fulfilled.\");\n });\n } else if (to.matched.some(record => record.meta.auth) && !coreStore.authenticated) {\n next({ path: \"/auth/login\", query: { redirect: to.path } });\n } else {\n next();\n }\n});\n","\n\n\nimport Vue from \"vue\";\nimport Component from \"vue-class-component\";\n\n@Component\nexport default class Tool extends Vue {\n name = \"\";\n selected = false;\n active = false;\n get detailRight(): string {\n const rect = (this.$parent.$refs[this.name + \"-selector\"])[0].getBoundingClientRect();\n const mid = rect.left + rect.width / 2;\n\n return `${window.innerWidth - Math.min(window.innerWidth - 25, mid + 75)}px`;\n }\n get detailArrow(): string {\n const rect = (this.$parent.$refs[this.name + \"-selector\"])[0].getBoundingClientRect();\n const mid = rect.left + rect.width / 2;\n const right = Math.min(window.innerWidth - 25, mid + 75);\n return `${right - mid - 14}px`; // border width\n }\n created() {\n this.$parent.$on(\"mousedown\", (event: MouseEvent, tool: string) => {\n if (tool === this.name) this.onMouseDown(event);\n });\n this.$parent.$on(\"mouseup\", (event: MouseEvent, tool: string) => {\n if (tool === this.name) this.onMouseUp(event);\n });\n this.$parent.$on(\"mousemove\", (event: MouseEvent, tool: string) => {\n if (tool === this.name) this.onMouseMove(event);\n });\n this.$parent.$on(\"contextmenu\", (event: MouseEvent, tool: string) => {\n if (tool === this.name) this.onContextMenu(event);\n });\n this.$parent.$on(\"tools-select-change\", (newValue: string, oldValue: string) => {\n if (oldValue === this.name) {\n this.selected = false;\n this.onDeselect();\n } else if (newValue === this.name) {\n this.selected = true;\n this.onSelect();\n }\n });\n }\n onSelect() {}\n onDeselect() {}\n onMouseDown(event: MouseEvent) {}\n onMouseUp(event: MouseEvent) {}\n onMouseMove(event: MouseEvent) {}\n onContextMenu(event: MouseEvent) {}\n}\n","import { render, staticRenderFns } from \"./tools.vue?vue&type=template&id=b6e1f51c&scoped=true&\"\nimport script from \"./tools.vue?vue&type=script&lang=ts&\"\nexport * from \"./tools.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./tools.vue?vue&type=style&index=0&id=b6e1f51c&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"b6e1f51c\",\n null\n \n)\n\ncomponent.options.__file = \"tools.vue\"\nexport default component.exports","import mod from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/ts-loader/index.js??ref--12-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./tool.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/ts-loader/index.js??ref--12-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./tool.vue?vue&type=script&lang=ts&\"","import { InitiativeData } from \"@/game/comm/types/general\";\nimport { ServerAsset } from \"@/game/comm/types/shapes\";\nimport { GlobalPoint } from \"@/game/geom\";\nimport { BaseRect } from \"@/game/shapes/baserect\";\nimport { gameStore } from \"@/game/store\";\nimport { g2lx, g2ly, g2lz } from \"@/game/units\";\n\nexport class Asset extends BaseRect {\n type = \"assetrect\";\n img: HTMLImageElement;\n src: string = \"\";\n constructor(img: HTMLImageElement, topleft: GlobalPoint, w: number, h: number, uuid?: string) {\n super(topleft, w, h, undefined, undefined, uuid);\n this.img = img;\n }\n asDict() {\n return Object.assign(this.getBaseDict(), {\n src: this.src,\n });\n }\n fromDict(data: ServerAsset) {\n super.fromDict(data);\n this.src = data.src;\n }\n draw(ctx: CanvasRenderingContext2D) {\n super.draw(ctx);\n try {\n ctx.drawImage(this.img, g2lx(this.refPoint.x), g2ly(this.refPoint.y), g2lz(this.w), g2lz(this.h));\n } catch (error) {\n console.warn(`Shape ${this.uuid} could not load the image ${this.src}`);\n }\n }\n getInitiativeRepr(): InitiativeData {\n return {\n uuid: this.uuid,\n visible: !gameStore.IS_DM,\n group: false,\n source: this.src,\n has_img: true,\n effects: [],\n index: Infinity,\n };\n }\n}\n","import {\n BoundingBox,\n EdgeCirculator,\n FaceCirculator,\n LineFaceCirculator,\n LocateType,\n Point,\n Sign,\n TDS,\n Triangle,\n Vertex,\n} from \"./tds\";\nimport {\n ccw,\n collinearBetween,\n cw,\n edgeInfo,\n hasInexactNegativeOrientation,\n intersection,\n orientation,\n sideOfOrientedCircle,\n xyEqual,\n} from \"./triag\";\n\nexport type Edge = [Triangle, number];\n\nexport class CDT {\n tds: TDS;\n constructor() {\n this.tds = new TDS();\n }\n insertConstraint(a: Point, b: Point) {\n const va = this.insert(a);\n const vb = this.insert(b);\n if (va !== vb) this.insertConstraintV(va, vb);\n }\n\n insertConstraintV(va: Vertex, vb: Vertex) {\n const stack = [[va, vb]];\n while (stack.length > 0) {\n const v = stack.pop()!;\n const info = edgeInfo(v[0], v[1]);\n if (info.includes) {\n this.markConstraint(info.fr!, info.i!);\n if (info.vi! !== v[1]) {\n stack.push([info.vi!, v[1]]);\n }\n continue;\n }\n const intersectionInfo = this.findIntersectedFaces(v[0], v[1]);\n if (intersectionInfo.found) {\n if (intersectionInfo.vi !== v[0] && intersectionInfo.vi !== v[1]) {\n stack.push([v[0], intersectionInfo.vi]);\n stack.push([intersectionInfo.vi, v[1]]);\n } else {\n stack.push(v);\n }\n continue;\n }\n this.triangulateHole(intersectionInfo.intersectedFaces, intersectionInfo.listAB, intersectionInfo.listBA);\n if (intersectionInfo.vi !== v[1]) {\n stack.push([intersectionInfo.vi, v[1]]);\n }\n }\n }\n\n triangulateHole(intersectedFaces: Triangle[], listAB: Edge[], listBA: Edge[]) {\n const edges: Edge[] = [];\n this.triangulateHole2(intersectedFaces, listAB, listBA, edges);\n this.propagatingFlipE(edges);\n }\n\n triangulateHole2(intersectedFaces: Triangle[], listAB: Edge[], listBA: Edge[], edges: Edge[]) {\n if (listAB.length > 0) {\n this.triangulateHalfHole(listAB, edges);\n this.triangulateHalfHole(listBA, edges);\n const fl = listAB[0][0];\n const fr = listBA[0][0];\n fl.neighbours[2] = fr;\n fr.neighbours[2] = fl;\n fl.constraints[2] = true;\n fr.constraints[2] = true;\n\n while (intersectedFaces.length > 0) {\n this.tds.deleteTriangle(intersectedFaces.shift()!);\n }\n }\n }\n\n triangulateHalfHole(conflictBoundaries: Edge[], edges: Edge[]) {\n let iC = 0;\n let iN: number;\n let iT: number;\n const current = () => conflictBoundaries[iC];\n const next = () => conflictBoundaries[iN];\n const tempo = () => conflictBoundaries[iT];\n\n const va = current()[0].vertices[ccw(current()[1])]!;\n iN = iC;\n ++iN;\n\n let n: Triangle;\n let n1: Triangle;\n let n2: Triangle;\n let ind: number;\n let ind1: number;\n let ind2: number;\n do {\n n1 = current()[0];\n ind1 = current()[1];\n if (n1.neighbours[ind1] !== null) {\n n = n1.neighbours[ind1]!;\n ind = cw(n.indexV(n1.vertices[cw(ind1)]!));\n n1 = n.neighbours[ind]!;\n ind1 = this.tds.mirrorIndex(n, ind);\n }\n n2 = next()[0];\n ind2 = next()[1];\n if (n2.neighbours[ind2] !== null) {\n n = n2.neighbours[ind2]!;\n ind = cw(n.indexV(n2.vertices[cw(ind2)]!));\n n2 = n.neighbours[ind]!;\n ind2 = this.tds.mirrorIndex(n, ind);\n }\n const v0 = n1.vertices[ccw(ind1)]!;\n const v1 = n1.vertices[cw(ind1)]!;\n const v2 = n2.vertices[cw(ind2)]!;\n const orient = orientation(v0.point!, v1.point!, v2.point!);\n switch (orient) {\n case Sign.RIGHT_TURN: {\n const newlf = this.tds.createTriangle(v0, v2, v1, null, null, null);\n edges.push([newlf, 2]);\n newlf.neighbours[1] = n1;\n newlf.neighbours[0] = n2;\n n1.neighbours[ind1] = newlf;\n n2.neighbours[ind2] = newlf;\n if (n1.isConstrained(ind1)) newlf.constraints[1] = true;\n if (n2.isConstrained(ind2)) newlf.constraints[0] = true;\n v0.triangle = newlf;\n v1.triangle = newlf;\n v2.triangle = newlf;\n iT = iC + 1;\n conflictBoundaries.splice(iC, 0, [newlf, 2]);\n conflictBoundaries.splice(Math.max(iT, iN), 1);\n conflictBoundaries.splice(Math.min(iT, iN), 1);\n iN = iC;\n if (v0 !== va) --iC;\n else ++iN;\n break;\n }\n case Sign.LEFT_TURN:\n case Sign.COLLINEAR: {\n ++iC;\n ++iN;\n break;\n }\n }\n } while (iN < conflictBoundaries.length);\n }\n\n findIntersectedFaces(vaa: Vertex, vbb: Vertex) {\n const aa = vaa.point!;\n const bb = vbb.point!;\n const listAB: Edge[] = [];\n const listBA: Edge[] = [];\n const intersectedFaces: Triangle[] = [];\n const lfc = new LineFaceCirculator(vaa, this, bb);\n let ind = lfc.pos!.indexV(vaa);\n let vi: Vertex;\n if (lfc.pos!.isConstrained(ind)) {\n vi = this.intersect(lfc.pos!, ind, vaa, vbb);\n return { found: true, vi, listAB, listBA, intersectedFaces };\n }\n let lf = lfc.pos!.neighbours[ccw(ind)]!;\n let rf = lfc.pos!.neighbours[cw(ind)]!;\n listAB.push([lf, lf.indexT(lfc.pos!)]);\n listBA.unshift([rf, rf.indexT(lfc.pos!)]);\n intersectedFaces.unshift(lfc.pos!);\n let previousFace = lfc.pos!;\n lfc.next();\n ind = lfc.pos!.indexT(previousFace);\n let currentVertex = lfc.pos!.vertices[ind]!;\n let done = false;\n while (currentVertex !== vbb && !done) {\n let i1: number;\n let i2: number;\n const orient = orientation(aa, bb, currentVertex.point!);\n switch (orient) {\n case Sign.COLLINEAR: {\n done = true;\n break;\n }\n case Sign.LEFT_TURN:\n case Sign.RIGHT_TURN: {\n if (orient === Sign.LEFT_TURN) {\n i1 = ccw(ind);\n i2 = cw(ind);\n } else {\n i1 = cw(ind);\n i2 = ccw(ind);\n }\n if (lfc.pos!.isConstrained(i1)) {\n vi = this.intersect(lfc.pos!, i1, vaa, vbb);\n return { found: true, vi, listAB, listBA, intersectedFaces };\n } else {\n lf = lfc.pos!.neighbours[i2]!;\n intersectedFaces.unshift(lfc.pos!);\n if (orient === Sign.LEFT_TURN) listAB.push([lf, lf.indexT(lfc.pos!)]);\n else listBA.unshift([lf, lf.indexT(lfc.pos!)]);\n previousFace = lfc.pos!;\n lfc.next();\n ind = lfc.pos!.indexT(previousFace);\n currentVertex = lfc.pos!.vertices[ind]!;\n }\n break;\n }\n }\n }\n vi = currentVertex;\n intersectedFaces.unshift(lfc.pos!);\n lf = lfc.pos!.neighbours[cw(ind)]!;\n listAB.push([lf, lf.indexT(lfc.pos!)]);\n rf = lfc.pos!.neighbours[ccw(ind)]!;\n listBA.unshift([rf, rf.indexT(lfc.pos!)]);\n return { found: false, vi, listAB, listBA, intersectedFaces };\n }\n\n intersect(t: Triangle, i: number, vaa: Vertex, vbb: Vertex): Vertex {\n const vcc = t.vertices[cw(i)]!;\n const vdd = t.vertices[ccw(i)]!;\n const pa = vaa.point!;\n const pb = vbb.point!;\n const pc = vcc.point!;\n const pd = vdd.point!;\n let pi = intersection(pa, pb, pc, pd);\n if (pi !== pa && pi !== pb && pi !== pc && pi !== pd) {\n const bbox = new BoundingBox(pi!);\n bbox.dilate(4);\n if (bbox.overlaps(new BoundingBox(pa))) pi = pa;\n if (bbox.overlaps(new BoundingBox(pb))) pi = pb;\n if (bbox.overlaps(new BoundingBox(pc))) pi = pc;\n if (bbox.overlaps(new BoundingBox(pd))) pi = pd;\n }\n let vi: Vertex;\n if (pi === null) throw new Error(\"what\");\n else {\n this.removeConstrainedEdge(t, i);\n vi = this.insert(pi, t);\n }\n\n if (vi !== vcc && vi !== vdd) {\n this.insertConstraintV(vcc, vi);\n this.insertConstraintV(vi, vdd);\n } else {\n this.insertConstraintV(vcc, vdd);\n }\n return vi;\n }\n\n removeConstrainedEdge(t: Triangle, i: number) {\n t.constraints[i] = false;\n if (this.tds.dimension === 2) t.neighbours[i]!.constraints[this.tds.mirrorIndex(t, i)] = false;\n }\n\n updateConstraintsOpposite(v: Vertex) {\n let t = v.triangle!;\n const start = t;\n let indf: number;\n do {\n indf = t.indexV(v);\n if (t.neighbours[indf]!.constraints[this.tds.mirrorIndex(t, indf)]) t.constraints[indf] = true;\n else t.constraints[indf] = false;\n t = t.neighbours[ccw(indf)]!;\n } while (t !== start);\n }\n\n markConstraint(t: Triangle, i: number) {\n if (this.tds.dimension === 1) t.constraints[2] = true;\n else {\n t.constraints[i] = true;\n t.neighbours[i]!.constraints[this.tds.mirrorIndex(t, i)] = true;\n }\n }\n\n insert(p: Point, start: Triangle | null = null) {\n const locateInfo = this.locate(p, this.iLocate(p, start));\n const va = this.insertb(p, locateInfo.loc, locateInfo.lt, locateInfo.li);\n this.flipAround(va);\n return va;\n }\n\n flipAround(v: Vertex) {\n if (this.tds.dimension <= 1) return;\n let t = v.triangle!;\n let i: number;\n let next: Triangle;\n const start = t;\n do {\n i = t.indexV(v);\n next = t.neighbours[ccw(i)]!;\n this.propagatingFlip(t, i);\n t = next;\n } while (next !== start);\n }\n\n propagatingFlip(t: Triangle, i: number, depth = 0) {\n if (!this.isFlipable(t, i)) return;\n const maxDepth = 100;\n if (depth === maxDepth) {\n throw new Error(\"maxde\");\n return;\n }\n const ni = t.neighbours[i]!;\n this.flip(t, i);\n this.propagatingFlip(t, i, depth + 1);\n i = ni.indexV(t.vertices[i]!);\n this.propagatingFlip(ni, i, depth + 1);\n }\n\n lessEdge(e1: Edge, e2: Edge) {\n const ind1 = e1[1];\n const ind2 = e2[1];\n return e1[0].uid < e2[0].uid || (e1[0].uid === e2[0].uid && ind1 < ind2);\n }\n\n propagatingFlipE(edges: Edge[]) {\n let eI = 0;\n let t: Triangle;\n let i: number;\n let eni: Edge;\n const edgeSet: Edge[] = [];\n while (eI < edges.length) {\n t = edges[eI][0];\n i = edges[eI][1];\n if (this.isFlipable(t, i)) {\n eni = [t.neighbours[i]!, this.tds.mirrorIndex(t, i)];\n if (this.lessEdge(edges[eI], eni)) edgeSet.push(edges[eI]);\n else edgeSet.push(eni);\n }\n ++eI;\n }\n let indf: number;\n let ni: Triangle;\n let indn: number;\n let ei: Edge;\n const e: (Edge | null)[] = [null, null, null, null];\n while (edgeSet.length > 0) {\n t = edgeSet[0][0];\n indf = edgeSet[0][1];\n ni = t.neighbours[indf]!;\n indn = this.tds.mirrorIndex(t, indf);\n ei = [t, indf];\n edgeSet.splice(edgeSet.findIndex(ed => ed[0] === ei[0] && ed[1] === ei[1]), 1);\n e[0] = [t, cw(indf)];\n e[1] = [t, ccw(indf)];\n e[2] = [ni, cw(indn)];\n e[3] = [ni, ccw(indn)];\n\n for (const edge of e) {\n const tt = edge![0];\n const ii = edge![1];\n eni = [tt.neighbours[ii]!, this.tds.mirrorIndex(tt, ii)];\n if (this.lessEdge(edge!, eni))\n edgeSet.splice(edgeSet.findIndex(ed => ed[0] === edge![0] && ed[1] === edge![1]), 1);\n else edgeSet.splice(edgeSet.findIndex(ed => ed[0] === eni[0] && ed[1] === eni[1]), 1);\n }\n\n this.flip(t, indf);\n\n for (const edge of e) {\n const tt = edge![0];\n const ii = edge![1];\n if (this.isFlipable(tt, ii)) {\n eni = [tt.neighbours[ii]!, this.tds.mirrorIndex(tt, ii)];\n if (this.lessEdge(edge!, eni)) edgeSet.push(edge!);\n else edgeSet.push(eni);\n }\n }\n }\n }\n\n flip(t: Triangle, i: number) {\n const u = t.neighbours[i]!;\n const j = this.tds.mirrorIndex(t, i);\n const t1 = t.neighbours[cw(i)]!;\n const i1 = this.tds.mirrorIndex(t, cw(i));\n const t2 = t.neighbours[ccw(i)]!;\n const i2 = this.tds.mirrorIndex(t, ccw(i));\n const t3 = u.neighbours[cw(j)]!;\n const i3 = this.tds.mirrorIndex(u, cw(j));\n const t4 = u.neighbours[ccw(j)]!;\n const i4 = this.tds.mirrorIndex(u, ccw(j));\n this.tds.flip(t, i);\n t.constraints[t.indexT(u)] = false;\n u.constraints[u.indexT(t)] = false;\n t1.neighbours[i1]!.constraints[this.tds.mirrorIndex(t1, i1)] = t1.constraints[i1];\n t2.neighbours[i2]!.constraints[this.tds.mirrorIndex(t2, i2)] = t2.constraints[i2];\n t3.neighbours[i3]!.constraints[this.tds.mirrorIndex(t3, i3)] = t3.constraints[i3];\n t4.neighbours[i4]!.constraints[this.tds.mirrorIndex(t4, i4)] = t4.constraints[i4];\n }\n\n isFlipable(t: Triangle, i: number, perturb = true) {\n const ni = t.neighbours[i]!;\n if (t.isInfinite() || ni.isInfinite()) return false;\n if (t.constraints[i]) return false;\n return sideOfOrientedCircle(ni, t.vertices[i]!.point!, perturb) === Sign.ON_POSITIVE_SIDE;\n }\n\n insertb(a: Point, loc: Triangle | null, lt: LocateType, li: number): Vertex {\n let insertInConstrainedEdge = false;\n let v1: Vertex;\n let v2: Vertex;\n if (lt === LocateType.EDGE && loc!.isConstrained(li)) {\n insertInConstrainedEdge = true;\n v1 = loc!.vertices[ccw(li)]!;\n v2 = loc!.vertices[cw(li)]!;\n }\n const va = this.insertc(a, loc, lt, li);\n if (insertInConstrainedEdge) this.updateConstraintsIncident(va, v1!, v2!);\n else if (lt !== LocateType.VERTEX) this.clearConstraintsIncident(va);\n if (this.tds.dimension === 2) this.updateConstraintsOpposite(va);\n return va;\n }\n\n updateConstraintsIncident(va: Vertex, c1: Vertex, c2: Vertex) {\n if (this.tds.dimension === 0) return;\n if (this.tds.dimension === 1) {\n const ec = new EdgeCirculator(va, null);\n do {\n ec.t!.constraints[2] = true;\n } while (ec.next());\n } else {\n const fc = new FaceCirculator(va, null);\n do {\n const indf = fc.t!.indexV(va);\n const cwi = cw(indf);\n const ccwi = ccw(indf);\n if (fc.t!.vertices[cwi] === c1 || fc.t!.vertices[cwi] === c2) {\n fc.t!.constraints[ccwi] = true;\n fc.t!.constraints[cwi] = false;\n } else {\n fc.t!.constraints[ccwi] = false;\n fc.t!.constraints[cwi] = true;\n }\n } while (fc.next());\n }\n }\n\n clearConstraintsIncident(v: Vertex) {\n const ec = new EdgeCirculator(v, null);\n if (ec.valid) {\n do {\n const t = ec.t!;\n const indf = ec.ri;\n t.constraints[indf] = false;\n if (this.tds.dimension === 2) t.neighbours[indf]!.constraints[this.tds.mirrorIndex(t, indf)] = false;\n } while (ec.next());\n }\n }\n\n insertc(p: Point, loc: Triangle | null, lt: LocateType, li: number): Vertex {\n if (this.tds.vertices.length === 1) {\n return this.insertFirst(p);\n } else if (this.tds.vertices.length === 2) {\n if (lt === LocateType.VERTEX) return this.tds.finiteVertex;\n else return this.insertSecond(p);\n }\n switch (lt) {\n case LocateType.VERTEX: {\n return loc!.vertices[li]!;\n }\n case LocateType.OUTSIDE_AFFINE_HULL: {\n return this.insertOutsideAffineHull(p);\n }\n case LocateType.OUTSIDE_CONVEX_HULL: {\n return this.insertOutsideConvexHull(p, loc!);\n }\n case LocateType.EDGE: {\n return this.insertInEdge(p, loc!, li);\n }\n case LocateType.FACE: {\n return this.insertInFace(p, loc!);\n }\n }\n throw new Error(\"qwe\");\n return new Vertex();\n }\n\n insertInEdge(p: Point, loc: Triangle, li: number): Vertex {\n const v = this.tds.insertInEdge(loc, li);\n v.point = p;\n return v;\n }\n\n insertInFace(p: Point, loc: Triangle): Vertex {\n const v = this.tds.insertInFace(loc);\n v.point = p;\n return v;\n }\n\n insertFirst(p: Point): Vertex {\n const v = this.tds.insertDimUp();\n v.point = p;\n return v;\n }\n\n insertSecond(p: Point): Vertex {\n const v = this.tds.insertDimUp(this.tds._infinite, true);\n v.point = p;\n return v;\n }\n\n insertOutsideAffineHull(p: Point): Vertex {\n let conform = false;\n if (this.tds.dimension === 1) {\n const t = this.tds.finiteEdge.first!;\n const orient = orientation(t.vertices[0]!.point!, t.vertices[1]!.point!, p);\n conform = orient === Sign.COUNTERCLOCKWISE;\n }\n const v = this.tds.insertDimUp(this.tds._infinite, conform);\n v.point = p;\n return v;\n }\n\n insertOutsideConvexHull(p: Point, t: Triangle): Vertex {\n let v: Vertex;\n if (this.tds.dimension === 1) {\n throw new Error(\"sdfasdasd\");\n } else {\n v = this.insertOutsideConvexHull2(p, t);\n }\n v.point = p;\n return v;\n }\n\n insertOutsideConvexHull2(p: Point, t: Triangle): Vertex {\n let li = t.indexV(this.tds._infinite);\n const ccwlist: Triangle[] = [];\n const cwlist: Triangle[] = [];\n let fc = new FaceCirculator(this.tds._infinite, t);\n let done = false;\n while (!done) {\n fc.prev();\n li = fc.t!.indexV(this.tds._infinite);\n const q = fc.t!.vertices[ccw(li)]!.point!;\n const r = fc.t!.vertices[cw(li)]!.point!;\n if (orientation(p, q, r) === Sign.LEFT_TURN) ccwlist.push(fc.t!);\n else done = true;\n }\n fc = new FaceCirculator(this.tds._infinite, t);\n done = false;\n while (!done) {\n fc.next();\n li = fc.t!.indexV(this.tds._infinite);\n const q = fc.t!.vertices[ccw(li)]!.point!;\n const r = fc.t!.vertices[cw(li)]!.point!;\n if (orientation(p, q, r) === Sign.LEFT_TURN) cwlist.push(fc.t!);\n else done = true;\n }\n const v = this.tds.insertInFace(t);\n v.point = p;\n let th;\n while (ccwlist.length > 0) {\n th = ccwlist[0];\n li = ccw(th.indexV(this.tds._infinite));\n this.tds.flip(th, li);\n ccwlist.shift();\n }\n while (cwlist.length > 0) {\n th = cwlist[0];\n li = cw(th.indexV(this.tds._infinite));\n this.tds.flip(th, li);\n cwlist.shift();\n }\n fc = new FaceCirculator(v, null);\n while (!fc.t!.isInfinite()) fc.next();\n this.tds._infinite.triangle = fc.t!;\n return v;\n }\n\n locate(p: Point, start: Triangle | null) {\n let lt = 0;\n let li = 0;\n if (this.tds.dimension < 0) {\n lt = LocateType.OUTSIDE_AFFINE_HULL;\n li = 4;\n return { loc: null, lt, li };\n } else if (this.tds.dimension === 0) {\n if (xyEqual(p, this.tds.finiteVertex.triangle!.vertices[0]!.point!)) {\n lt = LocateType.VERTEX;\n } else {\n lt = LocateType.OUTSIDE_AFFINE_HULL;\n }\n li = 4;\n return { loc: null, lt, li };\n } else if (this.tds.dimension === 1) {\n return this.marchLocate1D(p);\n }\n if (start === null) {\n const t = this.tds._infinite.triangle!;\n start = t.neighbours[t.indexV(this.tds._infinite)]!;\n } else if (start.isInfinite()) {\n start = start.neighbours[start.indexV(this.tds._infinite)]!;\n }\n return this.marchLocate2D(start, p);\n }\n\n marchLocate1D(p: Point) {\n const ff = this.tds._infinite.triangle!;\n const iv = ff.indexV(this.tds._infinite);\n const t = ff.neighbours[iv]!;\n const pqt = orientation(t.vertices[0]!.point!, t.vertices[1]!.point!, p);\n if (pqt === Sign.RIGHT_TURN || pqt === Sign.LEFT_TURN) {\n return { loc: new Triangle(), lt: LocateType.OUTSIDE_AFFINE_HULL, li: 4 };\n }\n const i = t.indexT(ff);\n if (collinearBetween(p, t.vertices[1 - i]!.point!, t.vertices[i]!.point!))\n return { loc: ff, lt: LocateType.OUTSIDE_CONVEX_HULL, li: iv };\n\n if (xyEqual(p, t.vertices[1 - i]!.point!)) return { loc: t, lt: LocateType.VERTEX, li: 1 - i };\n throw new Error(\"sdfsdf\");\n }\n\n marchLocate2D(c: Triangle, p: Point) {\n let prev = null;\n let first = true;\n let lt: LocateType | undefined;\n let li: number | undefined;\n while (true) {\n if (c.isInfinite()) {\n return { loc: c, lt: LocateType.OUTSIDE_CONVEX_HULL, li: c.indexV(this.tds._infinite) };\n }\n const leftFirst = 0; // Math.round(Math.random());\n const p0 = c.vertices[0]!.point!;\n const p1 = c.vertices[1]!.point!;\n const p2 = c.vertices[2]!.point!;\n let o0: Sign;\n let o1: Sign;\n let o2: Sign;\n if (first) {\n prev = c;\n first = false;\n o0 = orientation(p0, p1, p);\n if (o0 === Sign.NEGATIVE) {\n c = c.neighbours[2]!;\n continue;\n }\n o1 = orientation(p1, p2, p);\n if (o1 === Sign.NEGATIVE) {\n c = c.neighbours[0]!;\n continue;\n }\n o2 = orientation(p2, p0, p);\n if (o2 === Sign.NEGATIVE) {\n c = c.neighbours[1]!;\n continue;\n }\n } else if (leftFirst) {\n if (c.neighbours[0]! === prev) {\n prev = c;\n o0 = orientation(p0, p1, p);\n if (o0 === Sign.NEGATIVE) {\n c = c.neighbours[2]!;\n continue;\n }\n o2 = orientation(p2, p0, p);\n if (o2 === Sign.NEGATIVE) {\n c = c.neighbours[1]!;\n continue;\n }\n o1 = Sign.POSITIVE;\n } else if (c.neighbours[1]! === prev) {\n prev = c;\n o1 = orientation(p1, p2, p);\n if (o1 === Sign.NEGATIVE) {\n c = c.neighbours[0]!;\n continue;\n }\n o0 = orientation(p0, p1, p);\n if (o0 === Sign.NEGATIVE) {\n c = c.neighbours[2]!;\n continue;\n }\n o2 = Sign.POSITIVE;\n } else {\n prev = c;\n o2 = orientation(p2, p0, p);\n if (o2 === Sign.NEGATIVE) {\n c = c.neighbours[1]!;\n continue;\n }\n o1 = orientation(p1, p2, p);\n if (o1 === Sign.NEGATIVE) {\n c = c.neighbours[0]!;\n continue;\n }\n o0 = Sign.POSITIVE;\n }\n } else {\n if (c.neighbours[0] === prev) {\n prev = c;\n o2 = orientation(p2, p0, p);\n if (o2 === Sign.NEGATIVE) {\n c = c.neighbours[1]!;\n continue;\n }\n o0 = orientation(p0, p1, p);\n if (o0 === Sign.NEGATIVE) {\n c = c.neighbours[2]!;\n continue;\n }\n o1 = Sign.POSITIVE;\n } else if (c.neighbours[1] === prev) {\n prev = c;\n o0 = orientation(p0, p1, p);\n if (o0 === Sign.NEGATIVE) {\n c = c.neighbours[2]!;\n continue;\n }\n o1 = orientation(p1, p2, p);\n if (o1 === Sign.NEGATIVE) {\n c = c.neighbours[0]!;\n continue;\n }\n o2 = Sign.POSITIVE;\n } else {\n prev = c;\n o1 = orientation(p1, p2, p);\n if (o1 === Sign.NEGATIVE) {\n c = c.neighbours[0]!;\n continue;\n }\n o2 = orientation(p2, p0, p);\n if (o2 === Sign.NEGATIVE) {\n c = c.neighbours[1]!;\n continue;\n }\n o0 = Sign.POSITIVE;\n }\n }\n const sum =\n (o0 === Sign.COLLINEAR ? 1 : 0) + (o1 === Sign.COLLINEAR ? 1 : 0) + (o2 === Sign.COLLINEAR ? 1 : 0);\n switch (sum) {\n case 0: {\n lt = LocateType.FACE;\n li = 4;\n break;\n }\n case 1: {\n lt = LocateType.EDGE;\n li = o0 === Sign.COLLINEAR ? 2 : o1 === Sign.COLLINEAR ? 0 : 1;\n break;\n }\n case 2: {\n lt = LocateType.VERTEX;\n li = o0 !== Sign.COLLINEAR ? 2 : o1 !== Sign.COLLINEAR ? 0 : 1;\n break;\n }\n }\n if (lt === undefined || li === undefined) throw new Error(\"ert\");\n return { loc: c, lt, li };\n }\n }\n\n iLocate(p: Point, start: Triangle | null) {\n if (this.tds.dimension < 2) return start;\n if (start === null) {\n const t = this.tds._infinite.triangle!;\n start = t.neighbours[t.indexV(this.tds._infinite)];\n } else if (start.isInfinite()) {\n start = start.neighbours[start.indexV(this.tds._infinite)];\n }\n let prev = null;\n let c = start!;\n let first = true;\n let nTurns = 2500;\n while (true) {\n if (!nTurns--) return c;\n if (c.isInfinite()) return c;\n const p0 = c.vertices[0]!.point!;\n const p1 = c.vertices[1]!.point!;\n const p2 = c.vertices[2]!.point!;\n if (first) {\n prev = c;\n first = false;\n if (hasInexactNegativeOrientation(p0, p1, p)) {\n c = c.neighbours[2]!;\n continue;\n }\n if (hasInexactNegativeOrientation(p1, p2, p)) {\n c = c.neighbours[0]!;\n continue;\n }\n if (hasInexactNegativeOrientation(p2, p0, p)) {\n c = c.neighbours[1]!;\n continue;\n }\n } else {\n if (c.neighbours[0] === prev) {\n prev = c;\n if (hasInexactNegativeOrientation(p0, p1, p)) {\n c = c.neighbours[2]!;\n continue;\n }\n if (hasInexactNegativeOrientation(p2, p0, p)) {\n c = c.neighbours[1]!;\n continue;\n }\n } else if (c.neighbours[1] === prev) {\n prev = c;\n if (hasInexactNegativeOrientation(p0, p1, p)) {\n c = c.neighbours[2]!;\n continue;\n }\n if (hasInexactNegativeOrientation(p1, p2, p)) {\n c = c.neighbours[0]!;\n continue;\n }\n } else {\n prev = c;\n if (hasInexactNegativeOrientation(p2, p0, p)) {\n c = c.neighbours[1]!;\n continue;\n }\n if (hasInexactNegativeOrientation(p1, p2, p)) {\n c = c.neighbours[0]!;\n continue;\n }\n }\n }\n break;\n }\n return c;\n }\n}\n","import mod from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/ts-loader/index.js??ref--12-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./draw.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/ts-loader/index.js??ref--12-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./draw.vue?vue&type=script&lang=ts&\"","import { GlobalPoint } from \"@/game/geom\";\nimport { GridLayer } from \"@/game/layers/grid\";\nimport { Layer } from \"@/game/layers/layer\";\nimport { Asset } from \"@/game/shapes/asset\";\nimport { Shape } from \"@/game/shapes/shape\";\nimport { gameStore } from \"@/game/store\";\nimport { l2gx, l2gy, l2gz } from \"@/game/units\";\n\nclass LayerManager {\n layers: Layer[] = [];\n width = window.innerWidth;\n height = window.innerHeight;\n\n UUIDMap: Map = new Map();\n\n // Refresh interval and redraw setter.\n interval = 30;\n\n constructor() {\n requestAnimationFrame(this.drawLoop);\n }\n\n reset() {\n this.layers = [];\n this.UUIDMap = new Map();\n }\n\n drawLoop = () => {\n for (let i = this.layers.length - 1; i >= 0; i--) {\n this.layers[i].draw();\n }\n requestAnimationFrame(this.drawLoop);\n };\n\n setWidth(width: number): void {\n this.width = width;\n for (const layer of this.layers) {\n layer.canvas.width = width;\n layer.width = width;\n }\n }\n\n setHeight(height: number): void {\n this.height = height;\n for (const layer of this.layers) {\n layer.canvas.height = height;\n layer.height = height;\n }\n }\n\n addLayer(layer: Layer): void {\n this.layers.push(layer);\n if (!gameStore.IS_DM && !layer.playerEditable) return;\n if (layer.selectable) gameStore.addLayer(layer.name);\n }\n\n hasLayer(name: string): boolean {\n return this.layers.some(l => l.name === name);\n }\n\n getLayer(name?: string) {\n name = name === undefined ? gameStore.selectedLayer : name;\n for (const layer of this.layers) {\n if (layer.name === name) return layer;\n }\n }\n\n selectLayer(name: string, sync: boolean = true): void {\n let found = false;\n for (const layer of this.layers) {\n if (!layer.selectable) continue;\n if (found && layer.name !== \"fow\") layer.ctx.globalAlpha = 0.3;\n else layer.ctx.globalAlpha = 1.0;\n\n if (name === layer.name) {\n gameStore.selectLayer({ name, sync });\n found = true;\n }\n\n layer.clearSelection();\n layer.invalidate(true);\n }\n }\n\n getGridLayer(): GridLayer | undefined {\n return this.getLayer(\"grid\");\n }\n\n hasSelection() {\n const selection = this.getSelection();\n return selection !== undefined && selection.length > 0;\n }\n\n // THIS INCLUDES POTENTIALLY THE SelectTool.SelectionHelper !!!\n getSelection() {\n const layer = this.getLayer();\n if (layer === undefined) return undefined;\n return layer.selection;\n }\n\n invalidate(): void {\n for (let i = this.layers.length - 1; i >= 0; i--) {\n this.layers[i].invalidate(true);\n }\n }\n\n invalidateLight() {\n for (let i = this.layers.length - 1; i >= 0; i--)\n if (this.layers[i].isVisionLayer) this.layers[i].invalidate(true);\n }\n\n dropAsset(event: DragEvent) {\n const layer = this.getLayer();\n if (layer === undefined || event === null || event.dataTransfer === null) return;\n const image = document.createElement(\"img\");\n image.src = event.dataTransfer.getData(\"text/plain\");\n const asset = new Asset(\n image,\n new GlobalPoint(l2gx(event.clientX), l2gy(event.clientY)),\n l2gz(image.width),\n l2gz(image.height),\n );\n asset.src = new URL(image.src).pathname;\n\n if (gameStore.useGrid) {\n const gs = gameStore.gridSize;\n asset.refPoint = new GlobalPoint(\n Math.round(asset.refPoint.x / gs) * gs,\n Math.round(asset.refPoint.y / gs) * gs,\n );\n asset.w = Math.max(Math.round(asset.w / gs) * gs, gs);\n asset.h = Math.max(Math.round(asset.h / gs) * gs, gs);\n }\n\n layer.addShape(asset, true);\n }\n}\n\nexport const layerManager = new LayerManager();\n(window).lm = layerManager;\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/ts-loader/index.js??ref--12-2!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./initiative.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/ts-loader/index.js??ref--12-2!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./initiative.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./createtoken_modal.vue?vue&type=template&id=73816298&scoped=true&\"\nimport script from \"./createtoken_modal.vue?vue&type=script&lang=ts&\"\nexport * from \"./createtoken_modal.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./createtoken_modal.vue?vue&type=style&index=0&id=73816298&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"73816298\",\n null\n \n)\n\ncomponent.options.__file = \"createtoken_modal.vue\"\nexport default component.exports","import { BoundingRect } from \"@/game/shapes/boundingrect\";\n\nexport class BoundingNode {\n bbox: BoundingRect;\n nPrimitives: number;\n children: BoundingNode[] = [];\n constructor(nPrimitives: number, bbox: BoundingRect) {\n this.nPrimitives = nPrimitives;\n this.bbox = bbox;\n }\n}\n\nexport class LeafNode extends BoundingNode {\n firstPrimOffset: number;\n constructor(first: number, n: number, bbox: BoundingRect) {\n super(n, bbox);\n this.firstPrimOffset = first;\n }\n}\n\nexport class InteriorNode extends BoundingNode {\n dimension: number;\n constructor(dimension: number, c1: BoundingNode, c2: BoundingNode) {\n super(0, c1.bbox.union(c2.bbox));\n this.dimension = dimension;\n this.children.push(c1);\n this.children.push(c2);\n }\n}\n","import mod from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/ts-loader/index.js??ref--12-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./createtoken_modal.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/ts-loader/index.js??ref--12-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./createtoken_modal.vue?vue&type=script&lang=ts&\"","import Tools from \"@/game/ui/tools/tools.vue\";\n\nimport { getRef, uuidv4 } from \"@/core/utils\";\nimport { socket } from \"@/game/api/socket\";\nimport { sendClientOptions } from \"@/game/api/utils\";\nimport { ServerAura } from '@/game/comm/types/shapes';\nimport { EventBus } from \"@/game/event-bus\";\nimport { Vector } from \"@/game/geom\";\nimport { layerManager } from \"@/game/layers/manager\";\nimport { createShapeFromDict } from \"@/game/shapes/utils\";\nimport { gameStore } from \"@/game/store\";\nimport { calculateDelta } from \"@/game/ui/tools/utils\";\n\nexport function onKeyUp(event: KeyboardEvent) {\n if (event.target instanceof HTMLInputElement || event.target instanceof HTMLTextAreaElement) {\n } else {\n if (event.key === \"Delete\" || event.key === \"Del\" || event.key === \"Backspace\") {\n if (layerManager.getLayer === undefined) {\n console.log(\"No active layer selected for delete operation\");\n return;\n }\n const l = layerManager.getLayer()!;\n for (let i = l.selection.length - 1; i >= 0; i--) {\n const sel = l.selection[i];\n if ((getRef(\"tools\").$refs.selectTool).selectionHelper.uuid === sel.uuid) {\n l.selection.splice(i, 1);\n continue;\n }\n l.removeShape(sel, true, false);\n EventBus.$emit(\"SelectionInfo.Shape.Set\", null);\n EventBus.$emit(\"Initiative.Remove\", sel.uuid);\n }\n }\n }\n}\n\nexport function onKeyDown(event: KeyboardEvent) {\n if (event.target instanceof HTMLInputElement || event.target instanceof HTMLTextAreaElement) {\n if (event.keyCode === 65 && event.ctrlKey) event.target!.select();\n } else {\n if (event.keyCode >= 37 && event.keyCode <= 40) {\n // todo: this should already be rounded\n const gridSize = Math.round(gameStore.gridSize);\n let offsetX = gridSize * (event.keyCode % 2);\n let offsetY = gridSize * (event.keyCode % 2 ? 0 : 1);\n if (layerManager.hasSelection()) {\n const selection = layerManager.getSelection()!;\n offsetX *= event.keyCode <= 38 ? -1 : 1;\n offsetY *= event.keyCode <= 38 ? -1 : 1;\n let delta = new Vector(offsetX, offsetY);\n if (!event.shiftKey || !gameStore.IS_DM) {\n // First check for collisions. Using the smooth wall slide collision check used on mouse move is overkill here.\n for (const sel of selection) {\n if ((getRef(\"tools\").$refs.selectTool).selectionHelper.uuid === sel.uuid) continue;\n delta = calculateDelta(delta, sel);\n }\n }\n for (const sel of selection) {\n if ((getRef(\"tools\").$refs.selectTool).selectionHelper.uuid === sel.uuid) continue;\n sel.refPoint = sel.refPoint.add(delta);\n // todo: Fix again\n // if (sel.refPoint.x % gridSize !== 0 || sel.refPoint.y % gridSize !== 0) sel.snapToGrid();\n socket.emit(\"Shape.Position.Update\", { shape: sel.asDict(), redraw: true, temporary: false });\n }\n gameStore.recalculateVision();\n layerManager.getLayer()!.invalidate(false);\n } else {\n // The pan offsets should be in the opposite direction to give the correct feel.\n gameStore.increasePanX(offsetX * (event.keyCode <= 38 ? 1 : -1));\n gameStore.increasePanY(offsetY * (event.keyCode <= 38 ? 1 : -1));\n layerManager.invalidate();\n sendClientOptions();\n }\n } else if (event.keyCode === 68) {\n const layer = layerManager.getLayer();\n if (layer) {\n layer.clearSelection();\n layer.invalidate(true);\n }\n } else if (event.key === \"u\" && event.ctrlKey) {\n event.preventDefault();\n event.stopPropagation();\n gameStore.toggleUI();\n } else if (event.key === \"c\" && event.ctrlKey) {\n const layer = layerManager.getLayer();\n if (!layer) return;\n if (!layer.selection) return;\n const clipboard = [];\n for (const shape of layer.selection) {\n if ((getRef(\"tools\").$refs.selectTool).selectionHelper.uuid === shape.uuid) continue;\n clipboard.push(shape.asDict());\n }\n gameStore.setClipboard(clipboard);\n } else if (event.key === \"v\" && event.ctrlKey) {\n const layer = layerManager.getLayer();\n if (!layer) return;\n if (!gameStore.clipboard) return;\n layer.selection = [];\n for (const clip of gameStore.clipboard) {\n clip.x += 10;\n clip.y += 10;\n clip.uuid = uuidv4();\n const oldTrackers = clip.trackers;\n clip.trackers = [];\n for (const tracker of oldTrackers) {\n const newTracker: Tracker = {\n ...tracker,\n uuid: uuidv4()\n }\n clip.trackers.push(newTracker);\n }\n const oldAuras = clip.auras;\n clip.auras = [];\n for (const aura of oldAuras) {\n const newAura: ServerAura = {\n ...aura,\n uuid: uuidv4()\n }\n clip.auras.push(newAura);\n }\n const shape = createShapeFromDict(clip);\n if (shape === undefined) continue;\n layer.addShape(shape, true);\n layer.selection.push(shape);\n }\n if (layer.selection.length === 1) EventBus.$emit(\"SelectionInfo.Shape.Set\", layer.selection[0]);\n else EventBus.$emit(\"SelectionInfo.Shape.Set\", null);\n layer.invalidate(false);\n }\n }\n}\n","import mod from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./manager.vue?vue&type=style&index=0&lang=css&\"; export default mod; export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./manager.vue?vue&type=style&index=0&lang=css&\"","import mod from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./shapecontext.vue?vue&type=style&index=0&id=759e5a8a&scoped=true&lang=css&\"; export default mod; export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./shapecontext.vue?vue&type=style&index=0&id=759e5a8a&scoped=true&lang=css&\"","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nimport Vue from \"vue\";\n\nimport ShapeContext from \"@/game/ui/selection/shapecontext.vue\";\nimport CreateTokenModal from \"@/game/ui/tools/createtoken_modal.vue\";\nimport DrawTool from \"@/game/ui/tools/draw.vue\";\nimport FilterTool from \"@/game/ui/tools/filter.vue\";\nimport MapTool from \"@/game/ui/tools/map.vue\";\nimport PanTool from \"@/game/ui/tools/pan\";\nimport SelectTool from \"@/game/ui/tools/select.vue\";\nimport VisionTool from \"@/game/ui/tools/vision.vue\";\n\nimport { layerManager } from \"@/game/layers/manager\";\nimport { gameManager } from \"@/game/manager\";\nimport { gameStore } from \"@/game/store\";\nimport { RulerTool } from \"@/game/ui/tools/ruler\";\nimport { l2g } from \"@/game/units\";\nimport { getMouse } from \"@/game/utils\";\nimport Component from \"vue-class-component\";\n\n@Component({\n components: {\n \"select-tool\": SelectTool,\n \"pan-tool\": PanTool,\n \"draw-tool\": DrawTool,\n \"ruler-tool\": RulerTool,\n \"map-tool\": MapTool,\n \"filter-tool\": FilterTool,\n \"vision-tool\": VisionTool,\n \"shape-menu\": ShapeContext,\n \"createtoken-dialog\": CreateTokenModal,\n },\n watch: {\n currentTool(newValue, oldValue) {\n this.$emit(\"tools-select-change\", newValue, oldValue);\n },\n },\n})\nexport default class Tools extends Vue {\n $refs!: {\n selectTool: InstanceType;\n };\n\n currentTool = \"Select\";\n tools = [\"Select\", \"Pan\", \"Draw\", \"Ruler\", \"Map\", \"Filter\", \"Vision\"];\n dmTools = [\"Map\"];\n\n get IS_DM(): boolean {\n return gameStore.IS_DM;\n }\n\n get currentToolComponent(): string {\n return `${this.currentTool.toLowerCase()}-tool`;\n }\n\n get visibleTools(): string[] {\n return this.tools.filter(t => (!this.dmTools.includes(t) || this.IS_DM));\n }\n\n toolVisible(tool: string): boolean {\n if (tool === 'Filter') {\n return Object.keys(gameStore.labels).length > 0;\n } else if (tool === 'Vision') {\n return gameStore.ownedtokens.length > 1;\n }\n return true;\n }\n\n mousedown(event: MouseEvent) {\n if ((event.target).tagName !== \"CANVAS\") return;\n\n let targetTool = this.currentTool;\n if (event.button === 1) {\n targetTool = \"Pan\";\n } else if (event.button !== 0) {\n return;\n }\n\n this.$emit(\"mousedown\", event, targetTool);\n }\n mouseup(event: MouseEvent) {\n if ((event.target).tagName !== \"CANVAS\") return;\n\n let targetTool = this.currentTool;\n if (event.button === 1) {\n targetTool = \"Pan\";\n } else if (event.button !== 0) {\n return;\n }\n\n this.$emit(\"mouseup\", event, targetTool);\n }\n mousemove(event: MouseEvent) {\n if ((event.target).tagName !== \"CANVAS\") return;\n\n let targetTool = this.currentTool;\n if ((event.buttons & 4) !== 0) {\n targetTool = \"Pan\";\n } else if ((event.button & 1) > 1) {\n return;\n }\n\n this.$emit(\"mousemove\", event, targetTool);\n\n // Annotation hover\n let found = false;\n for (const uuid of gameStore.annotations) {\n if (layerManager.UUIDMap.has(uuid) && layerManager.hasLayer(\"draw\")) {\n const shape = layerManager.UUIDMap.get(uuid)!;\n if (shape.contains(l2g(getMouse(event)))) {\n found = true;\n gameManager.annotationManager.setActiveText(shape.annotation);\n }\n }\n }\n if (!found && gameManager.annotationManager.shown) {\n gameManager.annotationManager.setActiveText(\"\");\n }\n }\n mouseleave(event: MouseEvent) {\n // When leaving the window while a mouse is pressed down, act as if it was released\n if ((event.buttons & 1) !== 0) {\n this.$emit(\"mouseup\", event, this.currentTool);\n }\n }\n contextmenu(event: MouseEvent) {\n if ((event.target).tagName !== \"CANVAS\") return;\n if (event.button !== 2 || (event.target).tagName !== \"CANVAS\") return;\n this.$emit(\"contextmenu\", event, this.currentTool);\n }\n}\n","import mod from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/ts-loader/index.js??ref--12-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./selection_info.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/ts-loader/index.js??ref--12-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./selection_info.vue?vue&type=script&lang=ts&\"","import mod from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/ts-loader/index.js??ref--12-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./modal.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/ts-loader/index.js??ref--12-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./modal.vue?vue&type=script&lang=ts&\"","import mod from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./labels.vue?vue&type=style&index=0&id=e477c214&scoped=true&lang=css&\"; export default mod; export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./labels.vue?vue&type=style&index=0&id=e477c214&scoped=true&lang=css&\"","import mod from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./contextmenu.vue?vue&type=style&index=0&lang=css&\"; export default mod; export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./contextmenu.vue?vue&type=style&index=0&lang=css&\"","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{attrs:{\"id\":\"menuContainer\"}},[_c('div',{ref:\"rm\",style:({\n left: _vm.visible.settings ? '200px' : '0',\n top: _vm.visible.locations ? '100px' : '0'\n }),attrs:{\"id\":\"radialmenu\"}},[_c('div',{staticClass:\"rm-wrapper\"},[_c('div',{staticClass:\"rm-toggler\"},[_c('ul',{staticClass:\"rm-list\",class:{ 'rm-list-dm': _vm.IS_DM }},[(_vm.IS_DM)?_c('li',{staticClass:\"rm-item\",attrs:{\"id\":\"rm-locations\"},on:{\"click\":function($event){_vm.visible.locations = !_vm.visible.locations}}},[_vm._m(0)]):_vm._e(),_c('li',{staticClass:\"rm-item\",attrs:{\"id\":\"rm-settings\"},on:{\"click\":function($event){_vm.visible.settings = !_vm.visible.settings}}},[_vm._m(1)])])]),_vm._m(2)])]),_c('transition',{attrs:{\"name\":\"settings\"},on:{\"enter\":function($event){_vm.$refs.rm.style.transition = 'left 500ms'}}},[(_vm.visible.settings)?_c('div',{ref:\"settings\",attrs:{\"id\":\"menu\"},on:{\"click\":_vm.settingsClick}},[_c('div',{staticStyle:{\"width\":\"200px\",\"height\":\"90%\",\"overflow-y\":\"auto\",\"overflow-x\":\"hidden\"}},[(_vm.IS_DM)?[_c('button',{staticClass:\"menu-accordion\"},[_vm._v(\"Assets\")]),_c('div',{staticClass:\"menu-accordion-panel\"},[_c('a',{staticClass:\"actionButton\",attrs:{\"href\":\"/assets\",\"target\":\"blank\",\"title\":\"Open asset manager\"}},[_c('i',{staticClass:\"fas fa-external-link-alt\"})]),_c('div',{staticClass:\"directory\",attrs:{\"id\":\"menu-tokens\"}},[_c('asset-node',{attrs:{\"asset\":_vm.assets}}),(!_vm.assets)?_c('div',[_vm._v(\"No assets\")]):_vm._e()],1)]),_c('button',{staticClass:\"menu-accordion\"},[_vm._v(\"Notes\")]),_c('div',{staticClass:\"menu-accordion-panel\"},[_c('div',{staticClass:\"menu-accordion-subpanel\",attrs:{\"id\":\"menu-notes\"}},[_c('a',{staticClass:\"actionButton\",on:{\"click\":_vm.createNote}},[_c('i',{staticClass:\"far fa-plus-square\"})]),_vm._l((_vm.notes),function(note){return _c('div',{key:note.uuid,staticStyle:{\"cursor\":\"pointer\"},on:{\"click\":function($event){_vm.openNote(note)}}},[_vm._v(_vm._s(note.title || \"[?]\"))])}),(!_vm.notes.length)?_c('div',[_vm._v(\"No notes\")]):_vm._e()],2)]),_c('button',{staticClass:\"menu-accordion\"},[_vm._v(\"DM Options\")]),_c('div',{staticClass:\"menu-accordion-panel\"},[_c('div',{staticClass:\"menu-accordion-subpanel\"},[_c('label',{attrs:{\"for\":\"fakePlayerInput\"}},[_vm._v(\"Fake player:\")]),_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.fakePlayer),expression:\"fakePlayer\"}],attrs:{\"id\":\"fakePlayerInput\",\"type\":\"checkbox\",\"checked\":\"checked\"},domProps:{\"checked\":Array.isArray(_vm.fakePlayer)?_vm._i(_vm.fakePlayer,null)>-1:(_vm.fakePlayer)},on:{\"change\":function($event){var $$a=_vm.fakePlayer,$$el=$event.target,$$c=$$el.checked?(true):(false);if(Array.isArray($$a)){var $$v=null,$$i=_vm._i($$a,$$v);if($$el.checked){$$i<0&&(_vm.fakePlayer=$$a.concat([$$v]))}else{$$i>-1&&(_vm.fakePlayer=$$a.slice(0,$$i).concat($$a.slice($$i+1)))}}else{_vm.fakePlayer=$$c}}}}),_c('label',{attrs:{\"for\":\"useGridInput\"}},[_vm._v(\"Use grid:\")]),_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.useGrid),expression:\"useGrid\"}],attrs:{\"id\":\"useGridInput\",\"type\":\"checkbox\",\"checked\":\"checked\"},domProps:{\"checked\":Array.isArray(_vm.useGrid)?_vm._i(_vm.useGrid,null)>-1:(_vm.useGrid)},on:{\"change\":function($event){var $$a=_vm.useGrid,$$el=$event.target,$$c=$$el.checked?(true):(false);if(Array.isArray($$a)){var $$v=null,$$i=_vm._i($$a,$$v);if($$el.checked){$$i<0&&(_vm.useGrid=$$a.concat([$$v]))}else{$$i>-1&&(_vm.useGrid=$$a.slice(0,$$i).concat($$a.slice($$i+1)))}}else{_vm.useGrid=$$c}}}}),_c('label',{attrs:{\"for\":\"useFOWInput\"}},[_vm._v(\"Fill entire canvas with FOW:\")]),_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.fullFOW),expression:\"fullFOW\"}],attrs:{\"id\":\"useFOWInput\",\"type\":\"checkbox\"},domProps:{\"checked\":Array.isArray(_vm.fullFOW)?_vm._i(_vm.fullFOW,null)>-1:(_vm.fullFOW)},on:{\"change\":function($event){var $$a=_vm.fullFOW,$$el=$event.target,$$c=$$el.checked?(true):(false);if(Array.isArray($$a)){var $$v=null,$$i=_vm._i($$a,$$v);if($$el.checked){$$i<0&&(_vm.fullFOW=$$a.concat([$$v]))}else{$$i>-1&&(_vm.fullFOW=$$a.slice(0,$$i).concat($$a.slice($$i+1)))}}else{_vm.fullFOW=$$c}}}}),_c('label',{attrs:{\"for\":\"fowOpacity\"}},[_vm._v(\"FOW opacity:\")]),_c('input',{directives:[{name:\"model\",rawName:\"v-model.number\",value:(_vm.fowOpacity),expression:\"fowOpacity\",modifiers:{\"number\":true}}],attrs:{\"id\":\"fowOpacity\",\"type\":\"number\",\"min\":\"0\",\"max\":\"1\",\"step\":\"0.1\"},domProps:{\"value\":(_vm.fowOpacity)},on:{\"input\":function($event){if($event.target.composing){ return; }_vm.fowOpacity=_vm._n($event.target.value)},\"blur\":function($event){_vm.$forceUpdate()}}}),_c('label',{attrs:{\"for\":\"fowLOS\"}},[_vm._v(\"Only show lights in LoS:\")]),_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.fowLOS),expression:\"fowLOS\"}],attrs:{\"id\":\"fowLOS\",\"type\":\"checkbox\"},domProps:{\"checked\":Array.isArray(_vm.fowLOS)?_vm._i(_vm.fowLOS,null)>-1:(_vm.fowLOS)},on:{\"change\":function($event){var $$a=_vm.fowLOS,$$el=$event.target,$$c=$$el.checked?(true):(false);if(Array.isArray($$a)){var $$v=null,$$i=_vm._i($$a,$$v);if($$el.checked){$$i<0&&(_vm.fowLOS=$$a.concat([$$v]))}else{$$i>-1&&(_vm.fowLOS=$$a.slice(0,$$i).concat($$a.slice($$i+1)))}}else{_vm.fowLOS=$$c}}}}),_c('label',{attrs:{\"for\":\"unitSizeInput\"}},[_vm._v(\"Unit Size (in ft.):\")]),_c('input',{directives:[{name:\"model\",rawName:\"v-model.number\",value:(_vm.unitSize),expression:\"unitSize\",modifiers:{\"number\":true}}],attrs:{\"id\":\"unitSizeInput\",\"type\":\"number\"},domProps:{\"value\":(_vm.unitSize)},on:{\"input\":function($event){if($event.target.composing){ return; }_vm.unitSize=_vm._n($event.target.value)},\"blur\":function($event){_vm.$forceUpdate()}}}),_c('label',{attrs:{\"for\":\"gridSizeInput\"}},[_vm._v(\"Grid Size (in pixels):\")]),_c('input',{directives:[{name:\"model\",rawName:\"v-model.number\",value:(_vm.gridSize),expression:\"gridSize\",modifiers:{\"number\":true}}],attrs:{\"id\":\"gridSizeInput\",\"type\":\"number\",\"min\":\"0\"},domProps:{\"value\":(_vm.gridSize)},on:{\"input\":function($event){if($event.target.composing){ return; }_vm.gridSize=_vm._n($event.target.value)},\"blur\":function($event){_vm.$forceUpdate()}}}),_c('label',{attrs:{\"for\":\"visionMode\"}},[_vm._v(\"Vision Mode:\")]),_c('select',{attrs:{\"id\":\"visionMode\"},on:{\"change\":_vm.changeVisionMode}},[_c('option',{domProps:{\"selected\":_vm.$store.state.game.visionMode === 'bvh'}},[_vm._v(\"BVH\")]),_c('option',{domProps:{\"selected\":_vm.$store.state.game.visionMode === 'triangle'}},[_vm._v(\"Triangle\")])]),_c('label',{attrs:{\"for\":\"vmininp\"}},[_vm._v(\"Minimal full vision (ft):\")]),_c('input',{directives:[{name:\"model\",rawName:\"v-model.lazy.number\",value:(_vm.visionRangeMin),expression:\"visionRangeMin\",modifiers:{\"lazy\":true,\"number\":true}}],attrs:{\"id\":\"vmininp\",\"type\":\"number\",\"min\":\"0\"},domProps:{\"value\":(_vm.visionRangeMin)},on:{\"change\":function($event){_vm.visionRangeMin=_vm._n($event.target.value)},\"blur\":function($event){_vm.$forceUpdate()}}}),_c('label',{attrs:{\"for\":\"vmaxinp\"}},[_vm._v(\"Maximal vision (ft):\")]),_c('input',{directives:[{name:\"model\",rawName:\"v-model.lazy.number\",value:(_vm.visionRangeMax),expression:\"visionRangeMax\",modifiers:{\"lazy\":true,\"number\":true}}],attrs:{\"id\":\"vmaxinp\",\"type\":\"number\",\"min\":\"0\"},domProps:{\"value\":(_vm.visionRangeMax)},on:{\"change\":function($event){_vm.visionRangeMax=_vm._n($event.target.value)},\"blur\":function($event){_vm.$forceUpdate()}}}),_c('label',{attrs:{\"for\":\"invitation\"}},[_vm._v(\"Invitation Code:\")]),_c('input',{attrs:{\"id\":\"invitation\",\"type\":\"text\",\"readonly\":\"readonly\"},domProps:{\"value\":_vm.invitationCode}})])])]:_vm._e(),_c('button',{staticClass:\"menu-accordion\"},[_vm._v(\"Client Options\")]),_c('div',{staticClass:\"menu-accordion-panel\"},[_c('div',{staticClass:\"menu-accordion-subpanel\"},[_c('label',{attrs:{\"for\":\"gridColour\"}},[_vm._v(\"Grid Colour:\")]),_c('color-picker',{attrs:{\"id\":\"gridColour\",\"color\":_vm.gridColour},on:{\"update:color\":function($event){_vm.gridColour=$event}}}),_c('label',{attrs:{\"for\":\"fowColour\"}},[_vm._v(\"FOW Colour:\")]),_c('color-picker',{attrs:{\"id\":\"fowColour\",\"color\":_vm.fowColour},on:{\"update:color\":function($event){_vm.fowColour=$event}}}),_c('label',{attrs:{\"for\":\"rulerColour\"}},[_vm._v(\"Ruler Colour:\")]),_c('color-picker',{attrs:{\"id\":\"rulerColour\",\"color\":_vm.rulerColour},on:{\"update:color\":function($event){_vm.rulerColour=$event}}})],1)])],2),_c('router-link',{staticClass:\"menu-accordion\",staticStyle:{\"text-decoration\":\"none\",\"display\":\"inline-block\",\"position\":\"absolute\",\"bottom\":\"0\"},attrs:{\"to\":\"/dashboard\"}},[_vm._v(\"Exit\")])],1):_vm._e()]),_c('transition',{attrs:{\"name\":\"locations\"},on:{\"enter\":function($event){_vm.$refs.rm.style.transition = 'top 500ms'}}},[(_vm.IS_DM && _vm.visible.locations)?_c('div',{attrs:{\"id\":\"locations-menu\"}},[_c('div',[_vm._l((_vm.locations),function(location){return _c('div',{key:location,on:{\"click\":function($event){_vm.changeLocation(location)}}},[_vm._v(_vm._s(location))])}),_c('div',{on:{\"click\":_vm.createLocation}},[_c('i',{staticClass:\"fas fa-plus\"})])],2)]):_vm._e()]),_c('img',{attrs:{\"id\":\"dragImage\"}})],1)}\nvar staticRenderFns = [function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('a',{attrs:{\"href\":\"#\"}},[_c('i',{staticClass:\"far fa-compass\"})])},function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('a',{attrs:{\"href\":\"#\"}},[_c('i',{staticClass:\"fas fa-cog\"})])},function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('span',{staticClass:\"rm-topper\"},[_c('i',{staticClass:\"icon-share-alt\"})])}]\n\nexport { render, staticRenderFns }","export * from \"-!cache-loader?{\\\"cacheDirectory\\\":\\\"node_modules/.cache/vue-loader\\\",\\\"cacheIdentifier\\\":\\\"74f43d04-vue-loader-template\\\"}!../../../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./menu.vue?vue&type=template&id=13f3fb33&scoped=true&\"","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nimport Vue from \"vue\";\nimport Component from \"vue-class-component\";\n\nimport Modal from \"@/core/components/modals/modal.vue\";\n\n@Component({\n components: {\n Modal,\n },\n})\nexport default class Prompt extends Vue {\n $refs!: {\n answer: HTMLElement;\n };\n\n visible = false;\n question = \"\";\n answer = \"\";\n title = \"\";\n\n resolve = (value: string) => {};\n reject = () => {};\n\n submit() {\n this.resolve(this.answer);\n this.close();\n }\n close() {\n this.reject();\n this.visible = false;\n this.question = \"\";\n this.answer = \"\";\n this.title = \"\";\n }\n prompt(question: string, title: string): Promise {\n this.question = question;\n this.title = title;\n this.visible = true;\n this.$nextTick(() => {\n this.$refs.answer.focus();\n });\n return new Promise((resolve, reject) => {\n this.resolve = resolve;\n this.reject = reject;\n });\n }\n}\n","import mod from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./accordion.vue?vue&type=style&index=0&id=0bf2b7ba&scoped=true&lang=css&\"; export default mod; export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./accordion.vue?vue&type=style&index=0&id=0bf2b7ba&scoped=true&lang=css&\"","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_vm._v(_vm._s(_vm.message))])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","export * from \"-!cache-loader?{\\\"cacheDirectory\\\":\\\"node_modules/.cache/vue-loader\\\",\\\"cacheIdentifier\\\":\\\"74f43d04-vue-loader-template\\\"}!../../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./load.vue?vue&type=template&id=ff095222&\"","import mod from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/ts-loader/index.js??ref--12-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./menu.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/ts-loader/index.js??ref--12-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./menu.vue?vue&type=script&lang=ts&\"","import { GlobalPoint, Point, Ray, Vector } from \"@/game/geom\";\nimport { g2lx, g2ly } from \"../units\";\n\nexport class BoundingRect {\n readonly w: number;\n readonly h: number;\n readonly topLeft: GlobalPoint;\n readonly topRight: GlobalPoint;\n readonly botRight: GlobalPoint;\n readonly botLeft: GlobalPoint;\n\n constructor(topleft: GlobalPoint, w: number, h: number) {\n this.w = w;\n this.h = h;\n this.topLeft = topleft;\n this.topRight = new GlobalPoint(topleft.x + w, topleft.y);\n this.botRight = new GlobalPoint(topleft.x + w, topleft.y + h);\n this.botLeft = new GlobalPoint(topleft.x, topleft.y + h);\n }\n\n contains(point: GlobalPoint): boolean {\n return (\n this.topLeft.x <= point.x &&\n this.topRight.x >= point.x &&\n this.topLeft.y <= point.y &&\n this.botLeft.y >= point.y\n );\n }\n\n get points() {\n if (this.w === 0 || this.h === 0) return [[this.topLeft.x, this.topLeft.y]];\n return [\n [this.topLeft.x, this.topLeft.y],\n [this.botLeft.x, this.botLeft.y],\n [this.botRight.x, this.botRight.y],\n [this.topRight.x, this.topRight.y],\n ];\n }\n\n offset(vector: Vector): BoundingRect {\n return new BoundingRect(this.topLeft.add(vector), this.w, this.h);\n }\n\n union(other: BoundingRect): BoundingRect {\n const xmin = Math.min(this.topLeft.x, other.topLeft.x);\n const xmax = Math.max(this.topRight.x, other.topRight.x);\n const ymin = Math.min(this.topLeft.y, other.topLeft.y);\n const ymax = Math.max(this.botLeft.y, other.botLeft.y);\n return new BoundingRect(new GlobalPoint(xmin, ymin), xmax - xmin, ymax - ymin);\n }\n\n getDiagCorner(botright: boolean) {\n return botright ? this.botRight : this.topLeft;\n }\n\n intersectsWith(other: BoundingRect): boolean {\n return !(\n other.topLeft.x > this.topRight.x ||\n other.topRight.x < this.topLeft.x ||\n other.topLeft.y > this.botLeft.y ||\n other.botLeft.y < this.topLeft.y\n );\n }\n\n intersectsWithInner(other: BoundingRect): boolean {\n return !(\n other.topLeft.x >= this.topRight.x ||\n other.topRight.x <= this.topLeft.x ||\n other.topLeft.y >= this.botLeft.y ||\n other.botLeft.y <= this.topLeft.y\n );\n }\n\n intersectP(ray: Ray, invDir: Vector, dirIsNeg: boolean[]) {\n let txmin = invDir.x * (this.getDiagCorner(dirIsNeg[0]).x - ray.origin!.x);\n let txmax = invDir.x * (this.getDiagCorner(!dirIsNeg[0]).x - ray.origin!.x);\n const tymin = invDir.y * (this.getDiagCorner(dirIsNeg[1]).y - ray.origin!.y);\n const tymax = invDir.y * (this.getDiagCorner(!dirIsNeg[1]).y - ray.origin!.y);\n if (txmin > tymax || tymin > txmax) return { hit: false, min: txmin, max: txmax };\n if (tymin > txmin) txmin = tymin;\n if (tymax < txmax) txmax = tymax;\n return { hit: txmin < ray.tMax! && txmax > 0, min: txmin, max: txmax };\n }\n\n center(): GlobalPoint {\n return this.topLeft.add(new Vector(this.w / 2, this.h / 2));\n }\n\n getMaxExtent() {\n return this.w > this.h ? 0 : 1;\n }\n visibleInCanvas(canvas: HTMLCanvasElement): boolean {\n const coreVisible = !(\n g2lx(this.topLeft.x) > canvas.width ||\n g2ly(this.topLeft.y) > canvas.height ||\n g2lx(this.topRight.x) < 0 ||\n g2ly(this.botRight.y) < 0\n );\n if (coreVisible) return true;\n return false;\n }\n}\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{attrs:{\"id\":\"formcontainer\"}},[(_vm.owned || _vm.joined)?_c('form',[_c('fieldset',[_c('legend',{staticClass:\"legend\"},[_vm._v(\"Your sessions\")]),_c('div',{staticClass:\"input\"},[_vm._l((_vm.owned),function(room,i){return _c('router-link',{key:'o-'+i,attrs:{\"to\":'/game/' + room[1] + '/' + room[0]}},[_vm._v(_vm._s(room[0]))])}),_vm._l((_vm.joined),function(room,i){return _c('router-link',{key:'j-'+i,attrs:{\"to\":'/game/' + room[1] + '/' + room[0]}},[_vm._v(_vm._s(room[1])+\"/\"+_vm._s(room[0]))])})],2),(_vm.owned.length === 0)?_c('div',{staticClass:\"input\"},[_vm._v(\"No active sessions\")]):_vm._e()])]):_vm._e(),_vm._m(0),_c('form',{on:{\"submit\":function($event){$event.preventDefault();return _vm.createRoom($event)}}},[_c('fieldset',[(!_vm.owned && !_vm.joined)?_c('legend',{staticClass:\"legend\"},[_vm._v(\"Create a session\")]):_c('div',{staticClass:\"input\"},[_vm._v(\"Create a new session\")]),_c('div',{staticClass:\"input\"},[_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.newSessionName),expression:\"newSessionName\"}],attrs:{\"type\":\"text\",\"name\":\"room_name\",\"placeholder\":\"Session Name\"},domProps:{\"value\":(_vm.newSessionName)},on:{\"input\":function($event){if($event.target.composing){ return; }_vm.newSessionName=$event.target.value}}}),_vm._m(1)]),_vm._m(2)])]),_c('div',{attrs:{\"id\":\"account-options\"}},[_c('form',{on:{\"submit\":function($event){$event.preventDefault();}}},[_c('router-link',{staticClass:\"submit\",attrs:{\"tag\":\"button\",\"title\":\"Account Settings\",\"to\":\"/account\"}},[_c('i',{staticClass:\"fas fa-cog\"})])],1),_c('form',{on:{\"submit\":function($event){$event.preventDefault();}}},[_c('router-link',{staticClass:\"submit\",attrs:{\"tag\":\"button\",\"title\":\"Logout\",\"to\":\"/auth/logout\"}},[_c('i',{staticClass:\"fas fa-sign-out-alt\"})])],1)])])}\nvar staticRenderFns = [function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('h4',[_c('span',[_vm._v(\"OR\")])])},function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('span',[_c('i',{staticClass:\"fab fa-d-and-d\"})])},function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('button',{staticClass:\"submit\",attrs:{\"type\":\"submit\",\"title\":\"Create\"}},[_c('i',{staticClass:\"fas fa-arrow-right\"})])}]\n\nexport { render, staticRenderFns }","export * from \"-!cache-loader?{\\\"cacheDirectory\\\":\\\"node_modules/.cache/vue-loader\\\",\\\"cacheIdentifier\\\":\\\"74f43d04-vue-loader-template\\\"}!../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./main.vue?vue&type=template&id=61eb1455&scoped=true&\"","/*\nThis module defines some Point classes.\nA strong focus is made to ensure that at no time a global and a local point are mixed up with each other.\nAt first glance this adds weird looking hacks as ts does not support nominal typing.\n*/\n\nexport function getPointDistance(p1: Point, p2: Point) {\n const a = p1.x - p2.x;\n const b = p1.y - p2.y;\n return Math.sqrt(a * a + b * b);\n}\n\nexport class Point {\n readonly x: number;\n readonly y: number;\n constructor(x: number, y: number) {\n this.x = x;\n this.y = y;\n }\n static fromArray(point: number[]) {\n return new Point(point[0], point[1]);\n }\n add(vec: Vector) {\n return new Point(this.x + vec.x, this.y + vec.y);\n }\n subtract(other: Point) {\n return new Vector(this.x - other.x, this.y - other.y);\n }\n clone(): Point {\n return new Point(this.x, this.y);\n }\n get(dimension: 0 | 1) {\n if (dimension === 0) return this.x;\n return this.y;\n }\n asArray(): number[] {\n return [this.x, this.y];\n }\n}\nexport class GlobalPoint extends Point {\n // This is to differentiate with LocalPoint, is actually never used\n // We do ! to prevent errors that it never gets initialized\n // tslint:disable-next-line:variable-name\n _GlobalPoint!: string;\n add(vec: Vector): GlobalPoint {\n return super.add(vec);\n }\n subtract(other: GlobalPoint): Vector {\n return super.subtract(other);\n }\n clone(): GlobalPoint {\n return super.clone();\n }\n static fromArray(point: number[]) {\n return new GlobalPoint(point[0], point[1]);\n }\n}\n\nexport class LocalPoint extends Point {\n // This is to differentiate with GlobalPoint, is actually never used\n // We do ! to prevent errors that it never gets initialized\n // tslint:disable-next-line:variable-name\n _LocalPoint!: string;\n add(vec: Vector): LocalPoint {\n return super.add(vec);\n }\n subtract(other: LocalPoint): Vector {\n return super.subtract(other);\n }\n clone(): LocalPoint {\n return super.clone();\n }\n}\n\nexport class Vector {\n readonly x: number;\n readonly y: number;\n constructor(x: number, y: number) {\n this.x = x;\n this.y = y;\n }\n dot(other: Vector): number {\n return this.x * other.x + this.y * other.y;\n }\n inverse(): Vector {\n return new Vector(this.x === 0 ? 0 : 1 / this.x, this.y === 0 ? 0 : 1 / this.y);\n }\n length(): number {\n return Math.sqrt(Math.pow(this.x, 2) + Math.pow(this.y, 2));\n }\n normalize(): Vector {\n const l = this.length();\n return new Vector(this.x / l, this.y / l);\n }\n reverse(): Vector {\n return new Vector(-this.x, -this.y);\n }\n multiply(scale: number): Vector {\n return new Vector(this.x * scale, this.y * scale);\n }\n angle(): number {\n return (Math.atan2(this.y, this.x) * 180) / Math.PI;\n }\n}\n\nexport class Ray {\n readonly direction: Vector;\n readonly origin: T;\n tMax: number;\n constructor(origin: T, direction: Vector, tMax?: number) {\n this.direction = direction;\n this.origin = origin;\n if (tMax === undefined) tMax = Infinity;\n this.tMax = tMax;\n }\n static fromPoints(p1: T, p2: T): Ray {\n const vec = new Vector(p2.x - p1.x, p2.y - p1.y);\n let maxT;\n if (Math.abs(vec.x) > 0.01) maxT = (p2.x - p1.x) / vec.x;\n else maxT = (p2.y - p1.y) / vec.y;\n return new Ray(p1, vec, maxT);\n }\n get(t: number): T {\n return new Point(this.origin.x + t * this.direction.x, this.origin.y + t * this.direction.y);\n }\n getDistance(t1: number, t2: number) {\n return Math.sqrt(Math.pow(t2 - t1, 2) * (Math.pow(this.direction.x, 2) + Math.pow(this.direction.y, 2)));\n }\n getT(t1: number, distance: number) {\n return t1 + Math.sqrt(Math.pow(distance, 2) / (Math.pow(this.direction.x, 2) + Math.pow(this.direction.y, 2)));\n }\n}\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('ul',[_vm._l((_vm.folders),function(folder){return _c('li',{key:folder,staticClass:\"folder\",on:{\"click\":function($event){$event.stopPropagation();return _vm.toggle($event)}}},[_vm._v(\"\\n \"+_vm._s(folder)+\"\\n \"),_c('asset-node',{attrs:{\"asset\":_vm.asset[folder]}})],1)}),_vm._l((_vm.files),function(file){return _c('li',{key:file.name,staticClass:\"file draggable token\",attrs:{\"draggable\":\"true\"},on:{\"mouseover\":function($event){_vm.showImage = file.hash},\"mouseout\":function($event){_vm.showImage = null},\"dragstart\":function($event){_vm.dragStart($event, '/static/assets/' + file.hash)}}},[_vm._v(\"\\n \"+_vm._s(file.name)+\"\\n \"),(_vm.showImage == file.hash)?_c('div',{staticClass:\"preview\"},[_c('img',{staticClass:\"asset-preview-image\",attrs:{\"src\":'/static/assets/' + file.hash}})]):_vm._e()])})],2)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","export * from \"-!cache-loader?{\\\"cacheDirectory\\\":\\\"node_modules/.cache/vue-loader\\\",\\\"cacheIdentifier\\\":\\\"74f43d04-vue-loader-template\\\"}!../../../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./asset_node.vue?vue&type=template&id=6d718094&scoped=true&\"","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nimport Vue from \"vue\";\nimport Component from \"vue-class-component\";\nimport vueSlider from \"vue-slider-component\";\n\nimport \"@/game/api/events\";\n\nimport { throttle } from \"lodash\";\nimport { mapGetters, mapState } from \"vuex\";\n\nimport ConfirmDialog from \"@/core/components/modals/confirm.vue\";\nimport Prompt from \"@/core/components/modals/prompt.vue\";\nimport Initiative from \"@/game/ui/initiative.vue\";\nimport LabelManager from \"@/game/ui/labels.vue\";\nimport MenuBar from \"@/game/ui/menu/menu.vue\";\nimport NoteDialog from \"@/game/ui/note.vue\";\nimport SelectionInfo from \"@/game/ui/selection/selection_info.vue\";\nimport Tools from \"@/game/ui/tools/tools.vue\";\n\nimport { createConnection, socket } from \"@/game/api/socket\";\nimport { onKeyDown, onKeyUp } from \"@/game/events/keyboard\";\nimport { scrollZoom } from \"@/game/events/mouse\";\nimport { layerManager } from \"@/game/layers/manager\";\nimport { gameStore } from \"@/game/store\";\nimport { l2g } from \"@/game/units\";\nimport { LocalPoint } from \"./geom\";\n\n@Component({\n components: {\n \"tool-bar\": Tools,\n \"selection-info\": SelectionInfo,\n \"prompt-dialog\": Prompt,\n \"confirm-dialog\": ConfirmDialog,\n \"menu-bar\": MenuBar,\n \"initiative-dialog\": Initiative,\n \"zoom-slider\": vueSlider,\n \"note-dialog\": NoteDialog,\n \"label-dialog\": LabelManager,\n },\n beforeRouteEnter(to, from, next) {\n createConnection(to);\n next();\n },\n beforeRouteLeave(to, from, next) {\n socket.disconnect();\n next();\n },\n})\nexport default class Game extends Vue {\n $refs!: {\n confirm: InstanceType;\n tools: InstanceType;\n };\n\n ready = {\n manager: false,\n tools: false,\n };\n\n get showUI(): boolean {\n return gameStore.showUI;\n }\n\n get IS_DM(): boolean {\n return gameStore.IS_DM;\n }\n\n get layers(): string[] {\n return gameStore.layers;\n }\n\n get selectedLayer(): string {\n return gameStore.selectedLayer;\n }\n\n get zoomDisplay(): number {\n return gameStore.zoomDisplay;\n }\n\n set zoomDisplay(value: number) {\n gameStore.updateZoom({\n newZoomDisplay: value,\n zoomLocation: l2g(new LocalPoint(window.innerWidth / 2, window.innerHeight / 2)),\n });\n }\n\n mounted() {\n window.addEventListener(\"resize\", this.resizeWindow);\n window.addEventListener(\"keyup\", onKeyUp);\n window.addEventListener(\"keydown\", onKeyDown);\n this.ready.manager = true;\n }\n\n destroyed() {\n window.removeEventListener(\"resize\", this.resizeWindow);\n window.removeEventListener(\"keyup\", onKeyUp);\n window.removeEventListener(\"keydown\", onKeyDown);\n this.ready.manager = false;\n }\n\n // Window events\n\n zoom(event: WheelEvent) {\n throttle(scrollZoom)(event);\n }\n\n resizeWindow() {\n layerManager.setWidth(window.innerWidth);\n layerManager.setHeight(window.innerHeight);\n layerManager.invalidate();\n }\n\n // Mouse events\n\n mousedown(event: MouseEvent) {\n this.$refs.tools.mousedown(event);\n }\n mouseup(event: MouseEvent) {\n this.$refs.tools.mouseup(event);\n }\n mousemove(event: MouseEvent) {\n this.$refs.tools.mousemove(event);\n }\n mouseleave(event: MouseEvent) {\n this.$refs.tools.mouseleave(event);\n }\n contextmenu(event: MouseEvent) {\n this.$refs.tools.contextmenu(event);\n }\n selectLayer(layer: string) {\n layerManager.selectLayer(layer);\n }\n drop(event: DragEvent) {\n if (event === null || event.dataTransfer === null) return;\n if (event.dataTransfer.files.length > 0) {\n this.$refs.confirm\n .open(\"Uploading files should be done through the asset manager.\", \"Ok\", \"\")\n .then(() => {}, () => {});\n } else if (event.dataTransfer.getData(\"text/plain\") === \"\") {\n return;\n } else {\n layerManager.dropAsset(event);\n }\n }\n}\n","import { GlobalPoint, LocalPoint, Ray } from \"@/game/geom\";\nimport { gameStore } from \"@/game/store\";\n\nexport function g2l(obj: GlobalPoint): LocalPoint {\n const z = gameStore.zoomFactor;\n const panX = gameStore.panX;\n const panY = gameStore.panY;\n return new LocalPoint((obj.x + panX) * z, (obj.y + panY) * z);\n}\n\nexport function g2lx(x: number) {\n return g2l(new GlobalPoint(x, 0)).x;\n}\n\nexport function g2ly(y: number) {\n return g2l(new GlobalPoint(0, y)).y;\n}\n\nexport function g2lz(z: number) {\n return z * gameStore.zoomFactor;\n}\n\nexport function getUnitDistance(r: number) {\n return (r / gameStore.unitSize) * gameStore.gridSize;\n}\n\nexport function g2lr(r: number) {\n return g2lz(getUnitDistance(r));\n}\n\nexport function l2g(obj: LocalPoint): GlobalPoint;\nexport function l2g(obj: Ray): Ray;\nexport function l2g(obj: LocalPoint | Ray): GlobalPoint | Ray {\n const z = gameStore.zoomFactor;\n const panX = gameStore.panX;\n const panY = gameStore.panY;\n if (obj instanceof LocalPoint) {\n return new GlobalPoint(obj.x / z - panX, obj.y / z - panY);\n } else {\n return new Ray(l2g(obj.origin), obj.direction.multiply(1 / z), obj.tMax);\n }\n}\n\nexport function l2gx(x: number) {\n return l2g(new LocalPoint(x, 0)).x;\n}\n\nexport function l2gy(y: number) {\n return l2g(new LocalPoint(0, y)).y;\n}\n\nexport function l2gz(z: number) {\n return z / gameStore.zoomFactor;\n}\n\nexport function l2gr(r: number) {\n return l2gz(getUnitDistance(r));\n}\n\n(window).g2lx = g2lx;\n(window).g2ly = g2ly;\n","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nimport Vue from \"vue\";\nimport Component from \"vue-class-component\";\n\nimport { mapState } from \"vuex\";\n\nimport ColorPicker from \"@/core/components/colorpicker.vue\";\nimport Prompt from \"@/core/components/modals/prompt.vue\";\nimport AssetNode from \"@/game/ui/menu/asset_node.vue\";\nimport NoteDialog from \"@/game/ui/note.vue\";\n\nimport { getRef, uuidv4 } from \"@/core/utils\";\nimport { socket } from \"@/game/api/socket\";\nimport { Note } from \"@/game/comm/types/general\";\nimport { layerManager } from \"@/game/layers/manager\";\nimport { gameStore } from \"@/game/store\";\n\n@Component({\n components: {\n \"color-picker\": ColorPicker,\n \"asset-node\": AssetNode,\n },\n computed: {\n ...mapState(\"game\", [\"invitationCode\", \"locations\", \"assets\", \"notes\"]),\n },\n})\nexport default class MenuBar extends Vue {\n visible = {\n settings: false,\n locations: false,\n };\n\n get IS_DM(): boolean {\n return gameStore.IS_DM || gameStore.FAKE_PLAYER;\n }\n\n get fakePlayer(): boolean {\n return gameStore.FAKE_PLAYER;\n }\n set fakePlayer(value: boolean) {\n gameStore.setFakePlayer(value);\n }\n get useGrid(): boolean {\n return gameStore.useGrid;\n }\n set useGrid(value: boolean) {\n gameStore.setUseGrid({ useGrid: value, sync: true });\n }\n get fullFOW(): boolean {\n return gameStore.fullFOW;\n }\n set fullFOW(value: boolean) {\n gameStore.setFullFOW({ fullFOW: value, sync: true });\n }\n get fowOpacity(): number {\n return gameStore.fowOpacity;\n }\n set fowOpacity(value: number) {\n if (typeof value !== \"number\") return;\n gameStore.setFOWOpacity({ fowOpacity: value, sync: true });\n }\n get fowLOS(): boolean {\n return gameStore.fowLOS;\n }\n set fowLOS(value: boolean) {\n gameStore.setLineOfSight({ fowLOS: value, sync: true });\n }\n get unitSize(): number {\n return gameStore.unitSize;\n }\n set unitSize(value: number) {\n if (typeof value !== \"number\") return;\n gameStore.setUnitSize({ unitSize: value, sync: true });\n }\n get gridSize(): number {\n return gameStore.gridSize;\n }\n set gridSize(value: number) {\n if (typeof value !== \"number\") return;\n gameStore.setGridSize({ gridSize: value, sync: true });\n }\n get gridColour(): string {\n return gameStore.gridColour;\n }\n set gridColour(value: string) {\n gameStore.setGridColour({ colour: value, sync: true });\n }\n get fowColour(): string {\n return gameStore.fowColour;\n }\n set fowColour(value: string) {\n gameStore.setFOWColour({ colour: value, sync: true });\n }\n get rulerColour(): string {\n return gameStore.rulerColour;\n }\n set rulerColour(value: string) {\n gameStore.setRulerColour({ colour: value, sync: true });\n }\n get visionRangeMin(): number {\n return gameStore.visionRangeMin;\n }\n set visionRangeMin(value: number) {\n if (typeof value !== \"number\") return;\n gameStore.setVisionRangeMin({ value, sync: true });\n }\n get visionRangeMax(): number {\n return gameStore.visionRangeMax;\n }\n set visionRangeMax(value: number) {\n if (typeof value !== \"number\") return;\n gameStore.setVisionRangeMax({ value, sync: true });\n }\n settingsClick(event: { target: HTMLElement }) {\n if (event.target.classList.contains(\"menu-accordion\")) {\n event.target.classList.toggle(\"menu-accordion-active\");\n const next = event.target.nextElementSibling;\n if (next !== null) next.style.display = next.style.display === \"\" ? \"block\" : \"\";\n }\n }\n changeLocation(name: string) {\n socket.emit(\"Location.Change\", name);\n }\n createLocation() {\n getRef(\"prompt\")\n .prompt(`New location name:`, `Create new location`)\n .then(\n (value: string) => {\n socket.emit(\"Location.New\", value);\n },\n () => {},\n );\n }\n createNote() {\n const note = { title: \"New note\", text: \"\", uuid: uuidv4() };\n gameStore.newNote({ note, sync: true });\n this.openNote(note);\n }\n openNote(note: Note) {\n getRef(\"note\").open(note);\n }\n changeVisionMode(event: { target: HTMLSelectElement }) {\n const value = event.target.value.toLowerCase();\n if (value !== \"bvh\" && value !== \"triangle\") return;\n gameStore.setVisionMode({ mode: value, sync: true });\n gameStore.recalculateVision();\n gameStore.recalculateMovement();\n layerManager.invalidate();\n }\n}\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/ts-loader/index.js??ref--12-2!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./colorpicker.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/ts-loader/index.js??ref--12-2!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./colorpicker.vue?vue&type=script&lang=ts&\"","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('ContextMenu',{attrs:{\"visible\":_vm.visible,\"left\":_vm.x + 'px',\"top\":_vm.y + 'px'},on:{\"close\":_vm.close}},[(_vm.IS_DM)?_c('li',{on:{\"click\":_vm.bringPlayers}},[_vm._v(\"Bring players\")]):_vm._e(),_c('li',{on:{\"click\":_vm.createToken}},[_vm._v(\"Create basic token\")]),_c('li',{on:{\"click\":_vm.showInitiative}},[_vm._v(\"Show initiative\")])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","export * from \"-!cache-loader?{\\\"cacheDirectory\\\":\\\"node_modules/.cache/vue-loader\\\",\\\"cacheIdentifier\\\":\\\"74f43d04-vue-loader-template\\\"}!../../../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./selectcontext.vue?vue&type=template&id=44a31e42&scoped=true&\"","import { CDT } from \"./cdt\";\nimport { ccw, cw, orientation, ulp } from \"./triag\";\n\nexport type Point = number[];\n\nexport const INFINITE = -7e310;\n\nlet _INFINITE_VERTEX: Vertex;\n\nexport enum Sign {\n NEGATIVE = -1,\n ZERO = 0,\n POSITIVE = 1,\n\n RIGHT_TURN = -1,\n LEFT_TURN = 1,\n\n SMALLER = -1,\n EQUAL = 0,\n LARGER = 1,\n\n CLOCKWISE = -1,\n COUNTERCLOCKWISE = 1,\n\n COLLINEAR = 0,\n COPLANAR = 0,\n DEGENERATE = 0,\n\n ON_NEGATIVE_SIDE = -1,\n ON_ORIENTED_BOUNDARY = 0,\n ON_POSITIVE_SIDE = 1,\n}\n\nenum LineFaceState {\n UNDEFINED = -1,\n VERTEX_VERTEX = 0,\n VERTEX_EDGE = 1,\n EDGE_VERTEX = 2,\n EDGE_EDGE = 3,\n}\n\nfunction newPoint(): Point {\n return [INFINITE, INFINITE];\n}\n\nexport class Triangle {\n vertices: (Vertex | null)[] = [];\n neighbours: (Triangle | null)[] = [null, null, null];\n constraints = [false, false, false];\n static _counter = 0;\n uid = Triangle._counter++;\n\n constructor(...vertices: (Vertex | null)[]) {\n this.vertices = vertices;\n }\n\n from(t: Triangle): this {\n this.vertices = t.vertices.slice(0, t.vertices.length);\n this.neighbours = t.neighbours.slice(0, t.neighbours.length);\n this.constraints = t.constraints.slice(0, t.constraints.length);\n return this;\n }\n\n get dimension() {\n return this.vertices.length - 1;\n }\n\n addVertex(vertex: Vertex) {\n if (vertex === undefined) {\n console.log(\"UNDEFINED HIERE\");\n }\n this.vertices.push(vertex);\n vertex.triangle = this;\n }\n\n isConstrained(index: number): boolean {\n return this.constraints[index];\n }\n\n reorient() {\n // If certain indices do not exist yet thay will append faulty undefined's, thus we slice them\n this.vertices = [this.vertices[1], this.vertices[0], this.vertices[2]].slice(0, this.vertices.length);\n this.neighbours = [this.neighbours[1], this.neighbours[0], this.neighbours[2]];\n this.constraints = [this.constraints[1], this.constraints[0], this.constraints[2]];\n }\n\n indexV(v: Vertex): number {\n return this.vertices.indexOf(v);\n }\n\n indexT(t: Triangle): number {\n return this.neighbours.indexOf(t);\n }\n\n isInfinite(index?: number): boolean {\n if (index === undefined) {\n return this.vertices.includes(_INFINITE_VERTEX);\n } else {\n return this.vertices[ccw(index)]!.infinite || this.vertices[cw(index)]!.infinite;\n }\n }\n\n contains(point: Point) {\n const A =\n -this.vertices[1]!.point![1] * this.vertices[2]!.point![0] +\n this.vertices[0]!.point![1] * (-this.vertices[1]!.point![0] + this.vertices[2]!.point![0]) +\n this.vertices[0]!.point![0] * (this.vertices[1]!.point![1] - this.vertices[2]!.point![1]) +\n this.vertices[1]!.point![0] * this.vertices[2]!.point![1];\n const sign = A < 0 ? -1 : 1;\n const s =\n (this.vertices[0]!.point![1] * this.vertices[2]!.point![0] -\n this.vertices[0]!.point![0] * this.vertices[2]!.point![1] +\n (this.vertices[2]!.point![1] - this.vertices[0]!.point![1]) * point[0] +\n (this.vertices[0]!.point![0] - this.vertices[2]!.point![0]) * point[1]) *\n sign;\n if (s < 0) return false;\n const t =\n (this.vertices[0]!.point![0] * this.vertices[1]!.point![1] -\n this.vertices[0]!.point![1] * this.vertices[1]!.point![0] +\n (this.vertices[0]!.point![1] - this.vertices[1]!.point![1]) * point[0] +\n (this.vertices[1]!.point![0] - this.vertices[0]!.point![0]) * point[1]) *\n sign;\n\n return t > 0 && s + t < A * sign;\n }\n}\n\nexport class Vertex {\n infinite = false;\n private _point: Point | undefined;\n triangle: Triangle | undefined;\n\n constructor(point?: Point) {\n this._point = point;\n }\n\n get point(): Point | undefined {\n return this._point;\n }\n\n set point(point: Point | undefined) {\n this._point = point;\n this.infinite = false;\n }\n}\n\nexport class EdgeCirculator {\n ri: number;\n v: Vertex | null;\n t: Triangle | null;\n _ri: number;\n _v: Vertex | null;\n _t: Triangle | null;\n\n constructor(v: Vertex | null, t: Triangle | null) {\n this.v = v;\n this.t = t;\n if (v === null) {\n this.t = null;\n } else if (t === null) {\n this.t = v.triangle!;\n }\n if (this.t == null || this.t.dimension < 1) {\n this.ri = 0;\n this.v = null;\n this.t = null;\n } else {\n const i = this.t.indexV(v!);\n if (this.t.dimension === 2) this.ri = ccw(i);\n else this.ri = 2;\n }\n this._ri = this.ri;\n this._v = this.v;\n this._t = this.t;\n }\n\n get valid() {\n return this.t !== null && this.v !== null;\n }\n\n next(): boolean {\n let i = this.t!.indexV(this.v!);\n if (this.t!.dimension === 1) {\n this.t = this.t!.neighbours[i === 0 ? 1 : 0];\n } else {\n this.t = this.t!.neighbours[ccw(i)];\n i = this.t!.indexV(this.v!);\n this.ri = ccw(i);\n }\n return this.ri !== this._ri || this.v !== this._v || this.t !== this._t;\n }\n}\n\nexport class EdgeIterator {\n private i = 0;\n pos: Triangle | null;\n edge: Edge = new Edge();\n tds: TDS;\n _es = 0;\n constructor(tds: TDS) {\n this.tds = tds;\n this.edge.second = 0;\n if (tds.dimension <= 0) {\n this.pos = null;\n return;\n }\n this.pos = tds.triangles[0];\n if (tds.dimension === 1) this.edge.second = 2;\n while (this.pos !== null && !this.associatedEdge()) {\n throw new Error(\"[poi\");\n }\n\n if (tds.dimension === 1) this._es = 2;\n }\n\n get valid(): boolean {\n return (this.pos !== null || this._es !== this.edge.second) && this.pos!.isInfinite(this.edge.second);\n }\n\n next() {\n do {\n this.increment();\n } while (this.pos !== null && !this.associatedEdge());\n }\n\n collect(): Edge {\n this.edge.first = this.pos;\n return this.edge;\n }\n\n associatedEdge(): boolean {\n if (this.tds.dimension === 1) return true;\n return (\n this.tds.triangles.indexOf(this.pos!) < this.tds.triangles.indexOf(this.pos!.neighbours[this.edge.second]!)\n );\n }\n\n increment() {\n if (this.tds.dimension === 1) {\n this.i++;\n if (this.tds.triangles.length <= this.i) this.pos = null;\n else this.pos = this.tds.triangles[this.i];\n } else if (this.edge.second === 2) {\n this.edge.second = 0;\n this.i++;\n if (this.tds.triangles.length <= this.i) this.pos = null;\n else this.pos = this.tds.triangles[this.i];\n } else {\n this.edge.second++;\n }\n }\n}\n\nexport class FaceCirculator {\n v: Vertex | null;\n t: Triangle | null;\n _v: Vertex | null;\n _t: Triangle | null;\n\n constructor(v: Vertex | null, t: Triangle | null) {\n this.v = v;\n this.t = t;\n if (v === null) {\n this.t = null;\n } else if (t === null) {\n this.t = v.triangle!;\n }\n if (this.t == null || this.t.dimension < 2) {\n this.v = null;\n this.t = null;\n }\n this._v = this.v;\n this._t = this.t;\n }\n\n get valid() {\n return this.t !== null && this.v !== null;\n }\n\n prev() {\n const i = this.t!.indexV(this.v!);\n this.t = this.t!.neighbours[cw(i)];\n }\n\n next(): boolean {\n const i = this.t!.indexV(this.v!);\n this.t = this.t!.neighbours[ccw(i)];\n return this.v !== this._v || this.t !== this._t;\n }\n}\n\nexport class LineFaceCirculator {\n private i = 0;\n pos: Triangle | null = null;\n _tr: CDT;\n s: LineFaceState = LineFaceState.UNDEFINED;\n p: Point;\n q: Point;\n\n constructor(v: Vertex, tr: CDT, dir: Point) {\n this._tr = tr;\n this.p = v.point!;\n this.q = dir;\n\n const fc = new FaceCirculator(v, null);\n let ic = fc.t!.indexV(v);\n let vt = fc.t!.vertices[cw(ic)]!;\n while (v === _INFINITE_VERTEX || orientation(this.p, this.q, vt.point!) !== Sign.LEFT_TURN) {\n fc.next();\n ic = fc.t!.indexV(v);\n vt = fc.t!.vertices[cw(ic)]!;\n if (!fc.valid) {\n return;\n }\n }\n\n let vr = fc.t!.vertices[ccw(ic)]!;\n let pqr: Sign = Sign.RIGHT_TURN;\n // tslint:disable:no-conditional-assignment\n while (vr !== _INFINITE_VERTEX && (pqr = orientation(this.p, this.q, vr.point!)) === Sign.LEFT_TURN) {\n fc.prev();\n ic = fc.t!.indexV(v);\n vr = fc.t!.vertices[ccw(ic)]!;\n }\n\n ic = fc.t!.indexV(v);\n vt = fc.t!.vertices[cw(ic)]!;\n\n if (vr === _INFINITE_VERTEX) {\n fc.prev();\n ic = fc.t!.indexV(v);\n vr = fc.t!.vertices[ccw(ic)]!;\n pqr = orientation(this.p, this.q, vr.point!);\n switch (pqr) {\n case Sign.RIGHT_TURN:\n case Sign.COLLINEAR: {\n fc.next();\n ic = fc.t!.indexV(_INFINITE_VERTEX);\n this.pos = fc.t!;\n this.s = LineFaceState.VERTEX_VERTEX;\n this.i = ic;\n break;\n }\n case Sign.LEFT_TURN: {\n break;\n }\n }\n } else if (pqr === Sign.COLLINEAR) {\n this.pos = fc.t!;\n this.s = LineFaceState.VERTEX_VERTEX;\n this.i = ccw(ic);\n } else {\n this.pos = fc.t!;\n this.s = LineFaceState.VERTEX_EDGE;\n this.i = ic;\n }\n }\n\n next() {\n this.increment();\n }\n\n increment() {\n let o: Sign;\n if (this.s === LineFaceState.VERTEX_VERTEX || this.s === LineFaceState.EDGE_VERTEX) {\n do {\n const n = this.pos!.neighbours[cw(this.i)]!;\n this.i = n.indexT(this.pos!);\n this.pos = n;\n if (this.pos!.vertices[this.i] === _INFINITE_VERTEX) {\n o = Sign.COLLINEAR;\n this.i = cw(this.i);\n break;\n }\n o = orientation(this.p, this.q, this.pos!.vertices[this.i]!.point!);\n this.i = cw(this.i);\n } while (o === Sign.LEFT_TURN);\n if (o === Sign.COLLINEAR) {\n this.s = LineFaceState.VERTEX_VERTEX;\n this.i = ccw(this.i);\n } else {\n this.s = LineFaceState.VERTEX_EDGE;\n }\n } else {\n const n = this.pos!.neighbours[this.i]!;\n const ni = n.indexT(this.pos!);\n this.pos = n;\n o =\n this.pos!.vertices[ni]! === _INFINITE_VERTEX\n ? Sign.COLLINEAR\n : orientation(this.p, this.q, this.pos!.vertices[ni]!.point!);\n switch (o) {\n case Sign.LEFT_TURN: {\n this.s = LineFaceState.EDGE_EDGE;\n this.i = ccw(ni);\n break;\n }\n case Sign.RIGHT_TURN: {\n this.s = LineFaceState.EDGE_EDGE;\n this.i = cw(ni);\n break;\n }\n default: {\n this.s = LineFaceState.EDGE_VERTEX;\n this.i = ni;\n }\n }\n }\n }\n}\n\nclass Edge {\n first: Triangle | null = null;\n second: number = 0;\n}\n\nexport enum LocateType {\n VERTEX,\n EDGE,\n FACE,\n OUTSIDE_CONVEX_HULL,\n OUTSIDE_AFFINE_HULL,\n}\n\nexport class TDS {\n dimension = -1;\n vertices: Vertex[] = [];\n triangles: Triangle[] = [];\n _infinite: Vertex;\n\n constructor() {\n this._infinite = this.createVertex();\n _INFINITE_VERTEX = this._infinite;\n const t = new Triangle();\n t.addVertex(this._infinite);\n this.triangles.push(t);\n }\n\n createVertex(): Vertex {\n const v = this.infiniteVertex;\n if (v === undefined) {\n console.log(\"UNDEFINED HIERE\");\n }\n this.vertices.push(v);\n return v;\n }\n\n createTriangle(\n v0: Vertex | null,\n v1: Vertex | null,\n v2: Vertex | null,\n n0: Triangle | null,\n n1: Triangle | null,\n n2: Triangle | null,\n ) {\n const t = new Triangle(v0, v1, v2);\n t.neighbours[0] = n0;\n t.neighbours[1] = n1;\n t.neighbours[2] = n2;\n this.triangles.push(t);\n return t;\n }\n\n deleteTriangle(trig: Triangle) {\n this.triangles = this.triangles.filter(t => t !== trig);\n }\n\n setAdjacency(t0: Triangle, i0: number, t1: Triangle, i1: number) {\n t0.neighbours[i0] = t1;\n t1.neighbours[i1] = t0;\n }\n\n get finiteVertex(): Vertex {\n return this.vertices[1];\n }\n\n get infiniteVertex(): Vertex {\n const v = new Vertex(newPoint());\n v.infinite = true;\n return v;\n }\n\n get finiteEdge(): Edge {\n if (this.dimension < 1) throw new Error(\"aspo\");\n const ei = new EdgeIterator(this);\n while (ei.valid) ei.next();\n return ei.collect();\n }\n\n insertDimUp(w: Vertex = new Vertex(), orient: boolean = true): Vertex {\n const v = this.createVertex();\n this.dimension++;\n let t1: Triangle;\n let t2: Triangle;\n switch (this.dimension) {\n case 0: {\n t1 = this.triangles[0];\n t2 = new Triangle(v);\n this.triangles.push(t2);\n this.setAdjacency(t1, 0, t2, 0);\n v.triangle = t2;\n break;\n }\n case 1:\n case 2: {\n const deleteList: Triangle[] = [];\n const triangles = this.triangles.slice(0, this.triangles.length);\n for (const trig of triangles) {\n const copy = new Triangle().from(trig);\n this.triangles.push(copy);\n trig.vertices[this.dimension] = v;\n copy.vertices[this.dimension] = w;\n this.setAdjacency(trig, this.dimension, copy, this.dimension);\n if (trig.vertices.includes(w)) deleteList.push(copy);\n }\n for (const trig of triangles) {\n const neighbour = trig.neighbours[this.dimension];\n for (let j = 0; j < this.dimension; ++j) {\n neighbour!.neighbours[j] = trig.neighbours[j]!.neighbours[this.dimension];\n }\n }\n\n let lfit = 0;\n if (this.dimension === 1) {\n if (orient) {\n triangles[lfit].reorient();\n lfit++;\n triangles[lfit].neighbours[1]!.reorient();\n } else {\n triangles[lfit].neighbours[1]!.reorient();\n lfit++;\n triangles[lfit].reorient();\n }\n } else {\n for (const trig of triangles) {\n if (orient) trig.neighbours[2]!.reorient();\n else trig.reorient();\n }\n }\n\n for (const trig of deleteList) {\n let j = 1;\n if (trig.vertices[0] === w) j = 0;\n t1 = trig.neighbours[this.dimension]!;\n const i1 = this.mirrorIndex(trig, this.dimension);\n t2 = trig.neighbours[j]!;\n const i2 = this.mirrorIndex(trig, j);\n this.setAdjacency(t1, i1, t2, i2);\n this.deleteTriangle(trig);\n }\n v.triangle = triangles[0];\n break;\n }\n default: {\n throw new Error(\"Dimension unknown\");\n }\n }\n return v;\n }\n\n mirrorIndex(t: Triangle, i: number): number {\n if (t.dimension === 1) {\n const j = t.neighbours[i]!.indexV(t.vertices[i === 0 ? 1 : 0]!);\n return j === 0 ? 1 : 0;\n }\n return ccw(t.neighbours[i]!.indexV(t.vertices[ccw(i)]!));\n }\n\n insertInFace(t: Triangle) {\n const v = this.createVertex();\n const v0 = t.vertices[0]!;\n const v1 = t.vertices[1]!;\n const v2 = t.vertices[2]!;\n const n1 = t.neighbours[1]!;\n const n2 = t.neighbours[2]!;\n const t1 = this.createTriangle(v0, v, v2, t, n1, null);\n const t2 = this.createTriangle(v0, v1, v, t, null, n2);\n this.setAdjacency(t1, 2, t2, 1);\n if (n1 !== null) {\n const i1 = this.mirrorIndex(t, 1);\n n1.neighbours[i1] = t1;\n }\n if (n2 !== null) {\n const i2 = this.mirrorIndex(t, 2);\n n2.neighbours[i2] = t2;\n }\n t.vertices[0] = v;\n t.neighbours[1] = t1;\n t.neighbours[2] = t2;\n if (v0.triangle === t) v0.triangle = t2;\n v.triangle = t;\n return v;\n }\n\n flip(t: Triangle, i: number) {\n const n = t.neighbours[i]!;\n const ni = this.mirrorIndex(t, i);\n const vCW = t.vertices[cw(i)]!;\n const vCCW = t.vertices[ccw(i)]!;\n const tr = t.neighbours[ccw(i)]!;\n const tri = this.mirrorIndex(t, ccw(i));\n const bl = n.neighbours[ccw(ni)]!;\n const bli = this.mirrorIndex(n, ccw(ni));\n\n t.vertices[cw(i)] = n.vertices[ni]!;\n n.vertices[cw(ni)] = t.vertices[i]!;\n\n this.setAdjacency(t, i, bl, bli);\n this.setAdjacency(t, ccw(i), n, ccw(ni));\n this.setAdjacency(n, ni, tr, tri);\n\n if (vCW.triangle! === t) vCW.triangle = n;\n if (vCCW.triangle! === n) vCCW.triangle = t;\n }\n\n insertInEdge(t: Triangle, i: number) {\n let v: Vertex;\n if (this.dimension === 1) {\n v = this.createVertex();\n const ff = t.neighbours[0]!;\n const vv = t.vertices[1]!;\n const g = this.createTriangle(v, vv, null, ff, t, null);\n t.vertices[1] = v;\n t.neighbours[0] = g;\n ff.neighbours[1] = g;\n v.triangle = g;\n vv.triangle = ff;\n } else {\n const n = t.neighbours[i]!;\n const ni = this.mirrorIndex(t, i);\n v = this.insertInFace(t);\n this.flip(n, ni);\n }\n return v;\n }\n}\n\nexport class BoundingBox {\n x1: number;\n x2: number;\n y1: number;\n y2: number;\n constructor(p: Point) {\n this.x1 = p[0];\n this.y1 = p[1];\n this.x2 = p[0];\n this.y2 = p[1];\n }\n\n dilate(dist: number) {\n this.x1 -= dist * ulp(this.x1);\n this.y1 -= dist * ulp(this.y1);\n this.x2 += dist * ulp(this.x2);\n this.y2 += dist * ulp(this.y2);\n }\n\n overlaps(other: BoundingBox): boolean {\n if (this.x2 < other.x1 || other.x2 < this.x1) return false;\n if (this.y2 < other.y1 || other.y2 < this.y1) return false;\n return true;\n }\n}\n","import { partition } from \"@/core/utils\";\nimport { GlobalPoint, Ray } from \"@/game/geom\";\nimport { layerManager } from \"@/game/layers/manager\";\nimport { BoundingRect } from \"@/game/shapes/boundingrect\";\nimport { gameStore } from \"@/game/store\";\nimport { g2lx, g2ly, g2lz } from \"@/game/units\";\nimport { BoundingNode, InteriorNode, LeafNode } from \"@/game/visibility/bvh/node\";\n\ninterface BuildInfo {\n index: number;\n bbox: BoundingRect;\n center: BoundingRect;\n}\ninterface LinearBHVNode {\n bbox: BoundingRect;\n nPrimitives: number;\n}\ninterface LinearLeafNode extends LinearBHVNode {\n primitivesOffset: number;\n}\ninterface LinearInternalNode extends LinearBHVNode {\n secondChildOffset: number;\n dimension: number;\n}\n\nexport class BoundingVolume {\n totalNodes = 0;\n buildData: BuildInfo[] = [];\n shapes: string[];\n orderedPrims: string[] = [];\n root: BoundingNode | null;\n nodes: LinearBHVNode[] = [];\n\n offset = 0;\n\n constructor(shapes: string[]) {\n this.shapes = shapes;\n if (this.shapes.length === 0) {\n this.root = null;\n this.nodes = [];\n return;\n }\n for (let i = 0; i < shapes.length; i++) {\n const shape = layerManager.UUIDMap.get(shapes[i])!;\n this.buildData.push({\n index: i,\n bbox: shape.getBoundingBox(),\n center: new BoundingRect(shape.center(), 0, 0),\n });\n }\n this.root = this.recursiveBuild(0, shapes.length);\n this.compact();\n }\n\n draw() {\n const ctx = layerManager.getLayer(\"draw\")!.ctx;\n for (const node of this.nodes) {\n const b = node.bbox;\n ctx.strokeRect(g2lx(b.topLeft.x), g2ly(b.topLeft.y), g2lz(b.w), g2lz(b.h));\n }\n }\n\n recursiveBuild(start: number, end: number): BoundingNode {\n this.totalNodes++;\n let bbox = this.buildData[start].bbox;\n for (let i = start + 1; i < end; i++) bbox = bbox.union(this.buildData[i].bbox);\n const nPrimitives = end - start;\n if (nPrimitives === 1) {\n return this.createLeaf(start, end, nPrimitives, bbox);\n } else {\n let centroidBbox = this.buildData[start].center;\n for (let i = start; i < end; i++) centroidBbox = centroidBbox.union(this.buildData[i].center);\n const dimension = centroidBbox.getMaxExtent();\n if (centroidBbox.botRight.get(dimension) === centroidBbox.topLeft.get(dimension)) {\n return this.createLeaf(start, end, nPrimitives, bbox);\n }\n // Use shitty Middle thingy until an introselect js algo is added\n const pMid = 0.5 * (centroidBbox.topLeft.get(dimension) + centroidBbox.botRight.get(dimension));\n const partitionedData = partition(\n this.buildData.slice(start, end),\n (n: BuildInfo) => n.center.center().get(dimension) < pMid,\n );\n const flattened = ([]).concat.apply([], partitionedData);\n if (partitionedData[0].length === 0 || partitionedData[1].length === 0) console.log(\"EMPTY\");\n this.buildData.splice(start, flattened.length, ...flattened);\n const mid = partitionedData[0].length + start;\n return new InteriorNode(dimension, this.recursiveBuild(start, mid), this.recursiveBuild(mid, end));\n }\n }\n\n intersect(ray: Ray, stopOnFirstHit?: boolean) {\n if (this.nodes.length === 0) return { hit: false, intersect: ray.get(0), tMin: 0, tMax: ray.tMax };\n if (stopOnFirstHit === undefined) stopOnFirstHit = false;\n // Initialize return values\n let hit = false;\n let tMin = 0;\n let tMax = ray.tMax;\n\n // Initialize work variables\n let todoOffset = 0;\n let nodeNum = 0;\n const todo: number[] = [];\n\n // Precalculate intersection vectors\n const invDir = ray.direction.inverse();\n const dirIsNegative = [invDir.x < 0, invDir.y < 0];\n\n while (true) {\n const node = this.nodes[nodeNum];\n\n const i = node.bbox.intersectP(ray, invDir, dirIsNegative);\n if (i.hit) {\n if (node.nPrimitives > 0) {\n // TODO: nPrimitives is currently always 1 , this could be generalised\n // for (let i=0; i < node.nPrimitives; i++) {\n // if (this.shapes[(node).primitivesOffset + i])\n // }\n hit = true;\n tMin = ray.tMax = i.min;\n tMax = i.max;\n if (todoOffset === 0 || stopOnFirstHit) break;\n nodeNum = todo[--todoOffset];\n } else {\n if (dirIsNegative[(node).dimension]) {\n todo[todoOffset++] = nodeNum + 1;\n nodeNum = (node).secondChildOffset;\n } else {\n todo[todoOffset++] = (node).secondChildOffset;\n nodeNum++;\n }\n }\n } else {\n if (todoOffset === 0) break;\n nodeNum = todo[--todoOffset];\n }\n }\n return { hit, intersect: ray.get(tMin), tMin, tMax };\n }\n\n private compact() {\n this.offset = 0;\n if (this.root !== null) this.flatten(this.root);\n }\n\n private flatten(node: BoundingNode) {\n const index = this.offset;\n const myOffset = this.offset++;\n if (node.nPrimitives === 0) {\n this.flatten(node.children[0]);\n const secondOffset = this.flatten(node.children[1]);\n this.nodes[index] = {\n bbox: node.bbox,\n dimension: (node).dimension,\n nPrimitives: 0,\n secondChildOffset: secondOffset,\n };\n } else {\n this.nodes[index] = {\n bbox: node.bbox,\n primitivesOffset: (node).firstPrimOffset,\n nPrimitives: node.nPrimitives,\n };\n }\n return myOffset;\n }\n\n private createLeaf(start: number, end: number, nPrimitives: number, bbox: BoundingRect) {\n const size = this.orderedPrims.length;\n for (let i = start; i < end; i++) this.orderedPrims.push(this.shapes[this.buildData[i].index]);\n return new LeafNode(size, nPrimitives, bbox);\n }\n}\n","import mod from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./filter.vue?vue&type=style&index=1&id=dca395d6&scoped=true&lang=css&\"; export default mod; export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./filter.vue?vue&type=style&index=1&id=dca395d6&scoped=true&lang=css&\"","import Initiative from \"./ui/initiative.vue\";\n\nimport { getRef } from \"@/core/utils\";\nimport { sendClientOptions } from \"@/game/api/utils\";\nimport { ServerShape } from \"@/game/comm/types/shapes\";\nimport { GlobalPoint } from \"@/game/geom\";\nimport { layerManager } from \"@/game/layers/manager\";\nimport { createShapeFromDict } from \"@/game/shapes/utils\";\nimport { gameStore } from \"@/game/store\";\nimport { AnnotationManager } from \"@/game/ui/annotation\";\nimport { g2l } from \"@/game/units\";\n\nexport class GameManager {\n selectedTool: number = 0;\n\n annotationManager = new AnnotationManager();\n\n addShape(shape: ServerShape): void {\n if (!layerManager.hasLayer(shape.layer)) {\n console.log(`Shape with unknown layer ${shape.layer} could not be added`);\n return;\n }\n const layer = layerManager.getLayer(shape.layer)!;\n const sh = createShapeFromDict(shape);\n if (sh === undefined) {\n console.log(`Shape with unknown type ${shape.type_} could not be added`);\n return;\n }\n layer.addShape(sh, false);\n layer.invalidate(false);\n }\n\n updateShape(data: { shape: ServerShape; redraw: boolean; move: boolean; temporary: boolean }): void {\n if (!layerManager.hasLayer(data.shape.layer)) {\n console.log(`Shape with unknown layer ${data.shape.layer} could not be added`);\n return;\n }\n const sh = createShapeFromDict(data.shape);\n if (sh === undefined) {\n console.log(`Shape with unknown type ${data.shape.type_} could not be added`);\n return;\n }\n const oldShape = layerManager.UUIDMap.get(data.shape.uuid);\n if (oldShape === undefined) {\n console.log(`Shape with unknown id could not be updated`);\n return;\n }\n const redrawInitiative = sh.owners !== oldShape.owners;\n const shape = Object.assign(oldShape, sh);\n shape.checkVisionSources();\n shape.setMovementBlock(shape.movementObstruction);\n shape.setIsToken(shape.isToken);\n if (data.redraw) {\n gameStore.recalculateVision(data.temporary);\n layerManager.getLayer(data.shape.layer)!.invalidate(false);\n if (shape.movementObstruction) gameStore.recalculateMovement(data.temporary);\n }\n if (redrawInitiative) getRef(\"initiative\").$forceUpdate();\n }\n\n setCenterPosition(position: GlobalPoint) {\n const localPos = g2l(position);\n gameStore.increasePanX((window.innerWidth / 2 - localPos.x) / gameStore.zoomFactor);\n gameStore.increasePanY((window.innerHeight / 2 - localPos.y) / gameStore.zoomFactor);\n layerManager.invalidate();\n sendClientOptions();\n }\n}\n\nexport const gameManager = new GameManager();\n(window).gameManager = gameManager;\n","import mod from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./asset_node.vue?vue&type=style&index=0&id=6d718094&scoped=true&lang=css&\"; export default mod; export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./asset_node.vue?vue&type=style&index=0&id=6d718094&scoped=true&lang=css&\"","import { render, staticRenderFns } from \"./vision.vue?vue&type=template&id=46baf892&scoped=true&\"\nimport script from \"./vision.vue?vue&type=script&lang=ts&\"\nexport * from \"./vision.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./vision.vue?vue&type=style&index=0&id=46baf892&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"46baf892\",\n null\n \n)\n\ncomponent.options.__file = \"vision.vue\"\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('modal',{attrs:{\"visible\":_vm.visible,\"mask\":false},on:{\"close\":function($event){_vm.visible = false}},scopedSlots:_vm._u([{key:\"header\",fn:function(m){return _c('div',{staticClass:\"modal-header\",attrs:{\"draggable\":\"true\"},on:{\"dragstart\":m.dragStart,\"dragend\":m.dragEnd}},[_c('div',[_vm._v(\"Initiative\")]),_c('div',{staticClass:\"header-close\",on:{\"click\":function($event){_vm.visible = false}}},[_c('i',{staticClass:\"far fa-window-close\"})])])}}])},[_c('div',{staticClass:\"modal-body\"},[_c('draggable',{attrs:{\"id\":\"initiative-list\",\"options\":{setData: _vm.fakeSetData, disabled: !_vm.$store.state.game.IS_DM}},on:{\"change\":_vm.updateOrder},model:{value:(_vm.data),callback:function ($$v) {_vm.data=$$v},expression:\"data\"}},[_vm._l((_vm.data),function(actor){return [_c('div',{key:actor.uuid,staticStyle:{\"display\":\"flex\",\"flex-direction\":\"column\",\"align-items\":\"flex-end\"}},[_c('div',{staticClass:\"initiative-actor\",class:{'initiative-selected': _vm.currentActor === actor.uuid},style:({'cursor': _vm.$store.state.game.IS_DM && 'move'}),on:{\"mouseenter\":function($event){_vm.toggleHighlight(actor, true)},\"mouseleave\":function($event){_vm.toggleHighlight(actor, false)}}},[(actor.has_img)?[_c('img',{attrs:{\"src\":actor.source,\"width\":\"30px\",\"height\":\"30px\"}})]:[_c('span',{staticStyle:{\"width\":\"auto\"}},[_vm._v(_vm._s(actor.source))])],_c('input',{directives:[{name:\"model\",rawName:\"v-model.lazy.number\",value:(actor.initiative),expression:\"actor.initiative\",modifiers:{\"lazy\":true,\"number\":true}}],class:{'notAllowed': !_vm.owns(actor)},attrs:{\"type\":\"text\",\"placeholder\":\"value\",\"disabled\":!_vm.owns(actor)},domProps:{\"value\":(actor.initiative)},on:{\"change\":[function($event){_vm.$set(actor, \"initiative\", _vm._n($event.target.value))},function($event){_vm.syncInitiative(actor)}],\"blur\":function($event){_vm.$forceUpdate()}}}),_c('div',{staticClass:\"initiative-effects-icon\",class:{'notAllowed': !_vm.owns(actor)},staticStyle:{\"opacity\":\"0.6\"},on:{\"click\":function($event){_vm.createEffect(actor, _vm.getDefaultEffect(), true)}}},[_c('i',{staticClass:\"fas fa-stopwatch\"}),(actor.effects)?[_vm._v(_vm._s(actor.effects.length))]:[_vm._v(\"0\")]],2),_c('div',{class:{'notAllowed': !_vm.owns(actor)},style:({'opacity': actor.visible ? '1.0' : '0.3'}),on:{\"click\":function($event){_vm.toggleOption(actor, 'visible')}}},[_c('i',{staticClass:\"fas fa-eye\"})]),_c('div',{class:{'notAllowed': !_vm.owns(actor)},style:({'opacity': actor.group ? '1.0' : '0.3'}),on:{\"click\":function($event){_vm.toggleOption(actor, 'group')}}},[_c('i',{staticClass:\"fas fa-users\"})]),_c('div',{class:{'notAllowed': !_vm.owns(actor)},style:({'opacity': _vm.owns(actor) ? '1.0' : '0.3'}),on:{\"click\":function($event){_vm.removeInitiative(actor.uuid, true, true)}}},[_c('i',{staticClass:\"fas fa-trash-alt\"})])],2),(actor.effects)?_c('div',{staticClass:\"initiative-effect\"},_vm._l((actor.effects),function(effect){return _c('div',{key:effect.uuid},[_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(effect.name),expression:\"effect.name\"}],attrs:{\"type\":\"text\",\"size\":effect.name.length || 1},domProps:{\"value\":(effect.name)},on:{\"change\":function($event){_vm.updateEffect(actor.uuid, effect, true)},\"input\":function($event){if($event.target.composing){ return; }_vm.$set(effect, \"name\", $event.target.value)}}}),_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(effect.turns),expression:\"effect.turns\"}],attrs:{\"type\":\"text\",\"size\":effect.turns.toString().length || 1},domProps:{\"value\":(effect.turns)},on:{\"change\":function($event){_vm.updateEffect(actor.uuid, effect, true)},\"input\":function($event){if($event.target.composing){ return; }_vm.$set(effect, \"turns\", $event.target.value)}}})])})):_vm._e()])]})],2),_c('div',{attrs:{\"id\":\"initiative-bar\"}},[_c('div',{attrs:{\"id\":\"initiative-round\"}},[_vm._v(\"Round \"+_vm._s(_vm.roundCounter))]),_c('div',{staticStyle:{\"display\":\"flex\"}}),_c('div',{staticClass:\"initiative-bar-button\",style:(_vm.visionLock ? 'background-color: #82c8a0' : ''),on:{\"click\":_vm.toggleVisionLock}},[_c('i',{staticClass:\"fas fa-eye\"})]),_c('div',{staticClass:\"initiative-bar-button\",style:(_vm.cameraLock ? 'background-color: #82c8a0' : ''),on:{\"click\":function($event){_vm.cameraLock = !_vm.cameraLock}}},[_c('i',{staticClass:\"fas fa-video\"})]),_c('div',{staticClass:\"initiative-bar-button\",class:{'notAllowed': !_vm.$store.state.game.IS_DM},on:{\"click\":function($event){_vm.setRound(0, true); _vm.updateTurn(_vm.data[0].uuid, true)}}},[_c('i',{staticClass:\"fas fa-sync-alt\"})]),_c('div',{staticClass:\"initiative-bar-button\",class:{'notAllowed': !_vm.$store.state.game.IS_DM},on:{\"click\":_vm.nextTurn}},[_c('i',{staticClass:\"fas fa-chevron-right\"})])])],1)])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","export * from \"-!cache-loader?{\\\"cacheDirectory\\\":\\\"node_modules/.cache/vue-loader\\\",\\\"cacheIdentifier\\\":\\\"74f43d04-vue-loader-template\\\"}!../../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./initiative.vue?vue&type=template&id=07fc8ff2&scoped=true&\"","\n\n\n\n\n\nimport Vue from \"vue\";\nimport Component from \"vue-class-component\";\n\n@Component\nexport default class LoadComponent extends Vue {\n message = \"Loading...\";\n}\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return (_vm.shape !== null)?_c('div',[_c('div',{attrs:{\"id\":\"selection-menu\"}},[_c('div',{attrs:{\"id\":\"selection-edit-button\"},on:{\"click\":_vm.openEditDialog}},[_c('i',{staticClass:\"fas fa-edit\"})]),_c('div',{attrs:{\"id\":\"selection-name\"}},[_vm._v(_vm._s(_vm.shape.name))]),_c('div',{attrs:{\"id\":\"selection-trackers\"}},[_vm._l((_vm.shape.trackers),function(tracker){return (tracker.name !== '' || tracker.value !== 0)?[_c('div',{key:'name-' + tracker.uuid},[_vm._v(_vm._s(tracker.name))]),_c('div',{key:'value-' + tracker.uuid,staticClass:\"selection-tracker-value\",on:{\"click\":function($event){_vm.changeValue(tracker, false)}}},[(tracker.maxvalue === 0)?[_vm._v(_vm._s(tracker.value))]:[_vm._v(_vm._s(tracker.value)+\" / \"+_vm._s(tracker.maxvalue))]],2)]:_vm._e()})],2),_c('div',{attrs:{\"id\":\"selection-auras\"}},[_vm._l((_vm.shape.auras),function(aura){return (aura.name !== '' || aura.value !== 0)?[_c('div',{key:'name-' + aura.uuid},[_vm._v(_vm._s(aura.name))]),_c('div',{key:'value-' + aura.uuid,staticClass:\"selection-tracker-value\",on:{\"click\":function($event){_vm.changeValue(aura, true)}}},[(aura.dim === 0)?[_vm._v(_vm._s(aura.value))]:[_vm._v(_vm._s(aura.value)+\" / \"+_vm._s(aura.dim))]],2)]:_vm._e()})],2)]),_c('edit-dialog',{ref:\"editDialog\",attrs:{\"shape\":_vm.shape}})],1):_vm._e()}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","export * from \"-!cache-loader?{\\\"cacheDirectory\\\":\\\"node_modules/.cache/vue-loader\\\",\\\"cacheIdentifier\\\":\\\"74f43d04-vue-loader-template\\\"}!../../../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./selection_info.vue?vue&type=template&id=674cf937&scoped=true&\"","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return (_vm.getActiveLayer() !== undefined)?_c('ContextMenu',{attrs:{\"visible\":_vm.visible,\"left\":_vm.x + 'px',\"top\":_vm.y + 'px'},on:{\"close\":_vm.close}},[(_vm.getLayers().length > 1)?_c('li',[_vm._v(\"Layer\\n \"),_c('ul',_vm._l((_vm.getLayers()),function(layer){return _c('li',{key:layer.name,style:([_vm.getActiveLayer().name === layer.name ? {'background-color':'#82c8a0'}: {}]),on:{\"click\":function($event){_vm.setLayer(layer.name)}}},[_vm._v(_vm._s(layer.name))])}))]):_vm._e(),_c('li',{on:{\"click\":_vm.moveToBack}},[_vm._v(\"Move to back\")]),_c('li',{on:{\"click\":_vm.moveToFront}},[_vm._v(\"Move to front\")]),_c('li',{on:{\"click\":_vm.addInitiative}},[_vm._v(_vm._s(_vm.getInitiativeWord())+\" initiative\")]),_c('li',{on:{\"click\":_vm.openEditDialog}},[_vm._v(\"Show properties\")])]):_vm._e()}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","export * from \"-!cache-loader?{\\\"cacheDirectory\\\":\\\"node_modules/.cache/vue-loader\\\",\\\"cacheIdentifier\\\":\\\"74f43d04-vue-loader-template\\\"}!../../../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./shapecontext.vue?vue&type=template&id=759e5a8a&scoped=true&\"","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nimport axios, { AxiosError, AxiosResponse } from \"axios\";\nimport Vue from \"vue\";\nimport Component from \"vue-class-component\";\nimport { Route } from \"vue-router\";\n\nimport { coreStore } from \"@/core/store\";\n\nComponent.registerHooks([\"beforeRouteEnter\"]);\n\n@Component\nexport default class Dashboard extends Vue {\n owned = [];\n joined = [];\n error = \"\";\n\n newSessionName = \"\";\n\n beforeRouteEnter(to: Route, from: Route, next: ({}) => {}) {\n axios\n .get(\"/api/rooms\")\n .then((response: AxiosResponse) => {\n next((vm: this) => {\n vm.owned = response.data.owned;\n vm.joined = response.data.joined;\n });\n })\n .catch((err: AxiosError) => {\n next((vm: this) => {\n vm.error = err.message;\n });\n });\n }\n\n createRoom(event: Event) {\n axios\n .post(\"/api/rooms\", {\n name: this.newSessionName,\n })\n .then((response: AxiosResponse) => {\n this.$router.push(`/game/${coreStore.username}/${this.newSessionName}`);\n })\n .catch((err: AxiosError) => {\n this.error = err.message;\n });\n }\n}\n","import { render, staticRenderFns } from \"./confirm.vue?vue&type=template&id=1883e207&scoped=true&\"\nimport script from \"./confirm.vue?vue&type=script&lang=ts&\"\nexport * from \"./confirm.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./confirm.vue?vue&type=style&index=0&id=1883e207&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"1883e207\",\n null\n \n)\n\ncomponent.options.__file = \"confirm.vue\"\nexport default component.exports","import mod from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/ts-loader/index.js??ref--12-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./shapecontext.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/ts-loader/index.js??ref--12-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./shapecontext.vue?vue&type=script&lang=ts&\"","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('ContextMenu',{attrs:{\"visible\":_vm.visible,\"left\":_vm.left + 'px',\"top\":_vm.top + 'px'},on:{\"close\":_vm.close}},[_c('li',{on:{\"click\":_vm.rename}},[_vm._v(\"Rename\")]),_c('li',{on:{\"click\":_vm.remove}},[_vm._v(\"Remove\")])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","export * from \"-!cache-loader?{\\\"cacheDirectory\\\":\\\"node_modules/.cache/vue-loader\\\",\\\"cacheIdentifier\\\":\\\"74f43d04-vue-loader-template\\\"}!../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./contextMenu.vue?vue&type=template&id=606797b4&\"","import mod from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./draw.vue?vue&type=style&index=0&id=639cd890&scoped=true&lang=css&\"; export default mod; export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./draw.vue?vue&type=style&index=0&id=639cd890&scoped=true&lang=css&\"","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/ts-loader/index.js??ref--12-2!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./manager.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/ts-loader/index.js??ref--12-2!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./manager.vue?vue&type=script&lang=ts&\"","import Vue from \"vue\";\nexport const EventBus = new Vue();\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/ts-loader/index.js??ref--12-2!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./main.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/ts-loader/index.js??ref--12-2!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./main.vue?vue&type=script&lang=ts&\"","import { GlobalPoint } from \"@/game/geom\";\nimport { BaseRect } from \"@/game/shapes/baserect\";\nimport { gameStore } from \"@/game/store\";\nimport { g2l } from \"@/game/units\";\nimport { getFogColour } from \"@/game/utils\";\n\nexport class Rect extends BaseRect {\n type = \"rect\";\n constructor(topleft: GlobalPoint, w: number, h: number, fillColour?: string, strokeColour?: string, uuid?: string) {\n super(topleft, w, h, fillColour, strokeColour, uuid);\n }\n asDict() {\n return super.getBaseDict();\n }\n draw(ctx: CanvasRenderingContext2D) {\n super.draw(ctx);\n if (this.fillColour === \"fog\") ctx.fillStyle = getFogColour();\n else ctx.fillStyle = this.fillColour;\n const z = gameStore.zoomFactor;\n const loc = g2l(this.refPoint);\n ctx.fillRect(loc.x, loc.y, this.w * z, this.h * z);\n if (this.strokeColour !== \"rgba(0, 0, 0, 0)\") {\n ctx.strokeStyle = this.strokeColour;\n ctx.lineWidth = 5;\n ctx.strokeRect(loc.x, loc.y, this.w * z, this.h * z);\n }\n }\n}\n","import mod from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./game.vue?vue&type=style&index=1&id=05b88da7&scoped=true&lang=css&\"; export default mod; export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./game.vue?vue&type=style&index=1&id=05b88da7&scoped=true&lang=css&\"","import mod from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/ts-loader/index.js??ref--12-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./filter.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/ts-loader/index.js??ref--12-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./filter.vue?vue&type=script&lang=ts&\"","import mod from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/ts-loader/index.js??ref--12-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./selectcontext.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/ts-loader/index.js??ref--12-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./selectcontext.vue?vue&type=script&lang=ts&\"","import { Ray, Vector } from \"@/game/geom\";\nimport { Layer } from \"@/game/layers/layer\";\nimport { layerManager } from \"@/game/layers/manager\";\nimport { Settings } from \"@/game/settings\";\nimport { gameStore } from \"@/game/store\";\nimport { g2l, g2lr, g2lx, g2ly } from \"@/game/units\";\nimport { computeVisibility } from \"../visibility/te/te\";\n\nexport class FOWPlayersLayer extends Layer {\n isVisionLayer: boolean = true;\n\n draw(): void {\n if (!this.valid) {\n // console.time(\"VI\");\n const ctx = this.ctx;\n\n if (!gameStore.fowLOS || Settings.skipPlayerFOW) {\n ctx.clearRect(0, 0, this.canvas.width, this.canvas.height);\n this.valid = true;\n return;\n }\n\n ctx.clearRect(0, 0, this.canvas.width, this.canvas.height);\n\n const originalOperation = ctx.globalCompositeOperation;\n\n ctx.fillStyle = \"rgba(0, 0, 0, 1)\";\n\n // For the DM this is done at the end of this function. TODO: why the split up ???\n // This was done in commit be1e65cff1e7369375fe11cfa1643fab1d11beab.\n if (!gameStore.IS_DM) super.draw(!gameStore.fullFOW);\n\n // Then cut out all the player vision auras\n const maxLength = ctx.canvas.width + ctx.canvas.height;\n\n for (const tokenId of gameStore.activeTokens) {\n const token = layerManager.UUIDMap.get(tokenId);\n if (token === undefined) continue;\n const center = token.center();\n const lcenter = g2l(center);\n if (gameStore.visionMode === \"bvh\") {\n ctx.beginPath();\n let lastArcAngle = -1;\n\n for (let angle = 0; angle < 2 * Math.PI; angle += (Settings.angleSteps / 2 / 180) * Math.PI) {\n const cos = Math.cos(angle);\n const sin = Math.sin(angle);\n // Check if there is a hit with one of the nearby light blockers.\n const lightRay = new Ray(center, new Vector(cos, sin));\n const hitResult = gameStore.BV.intersect(lightRay);\n\n // We can move on to the next angle if nothing was hit.\n if (!hitResult.hit) {\n // If an earlier hit caused the aura to leave the arc, we need to go back to the arc\n if (lastArcAngle === -1) {\n // Draw a line from the last non arc location back to the arc\n ctx.lineTo(lcenter.x + maxLength * cos, lcenter.y + maxLength * sin);\n // Set the start of a new arc beginning at the current angle\n lastArcAngle = angle;\n }\n continue;\n }\n // If hit , first finish any ongoing arc, then move to the intersection point\n if (lastArcAngle !== -1) {\n ctx.arc(lcenter.x, lcenter.y, maxLength, lastArcAngle, angle);\n lastArcAngle = -1;\n }\n ctx.lineTo(g2lx(hitResult.intersect.x), g2ly(hitResult.intersect.y));\n }\n\n // Finish the final arc.\n if (lastArcAngle !== -1) ctx.arc(lcenter.x, lcenter.y, maxLength, lastArcAngle, 2 * Math.PI);\n else ctx.closePath();\n ctx.fill();\n } else {\n if (true) {\n // Add a gradient vision dropoff\n const gradient = ctx.createRadialGradient(\n lcenter.x,\n lcenter.y,\n g2lr(gameStore.visionRangeMin),\n lcenter.x,\n lcenter.y,\n g2lr(gameStore.visionRangeMax),\n );\n gradient.addColorStop(0, \"rgba(0, 0, 0, 1)\");\n gradient.addColorStop(1, \"rgba(0, 0, 0, 0)\");\n ctx.fillStyle = gradient;\n } else {\n ctx.fillStyle = \"rgba(0, 0, 0, 1)\";\n }\n try {\n const polygon = computeVisibility(token.center(), \"vision\");\n ctx.beginPath();\n ctx.moveTo(g2lx(polygon[0][0]), g2ly(polygon[0][1]));\n for (const point of polygon) ctx.lineTo(g2lx(point[0]), g2ly(point[1]));\n ctx.closePath();\n ctx.fill();\n } catch {}\n }\n }\n\n // For the players this is done at the beginning of this function. TODO: why the split up ???\n // This was done in commit be1e65cff1e7369375fe11cfa1643fab1d11beab.\n if (gameStore.IS_DM) super.draw(!gameStore.fullFOW);\n\n ctx.globalCompositeOperation = originalOperation;\n // console.timeEnd(\"VI\");\n }\n }\n}\n","import { socket } from \"@/game/api/socket\";\nimport { ServerShape } from \"@/game/comm/types/shapes\";\nimport { EventBus } from \"@/game/event-bus\";\nimport { layerManager } from \"@/game/layers/manager\";\nimport { Shape } from \"@/game/shapes/shape\";\nimport { createShapeFromDict } from \"@/game/shapes/utils\";\nimport { gameStore } from \"@/game/store\";\nimport { g2lx, g2ly } from \"@/game/units\";\n\nexport class Layer {\n name: string;\n width: number;\n height: number;\n canvas: HTMLCanvasElement;\n ctx: CanvasRenderingContext2D;\n\n selectable: boolean = false;\n playerEditable: boolean = false;\n isVisionLayer: boolean = false;\n\n // When set to false, the layer will be redrawn on the next tick\n valid: boolean = false;\n // The collection of shapes that this layer contains.\n // These are ordered on a depth basis.\n shapes: Shape[] = [];\n\n // Collection of shapes that are currently selected\n selection: Shape[] = [];\n\n // Extra selection highlighting settings\n selectionColor = \"#CC0000\";\n selectionWidth = 2;\n\n constructor(canvas: HTMLCanvasElement, name: string) {\n this.canvas = canvas;\n this.name = name;\n this.width = canvas.width;\n this.height = canvas.height;\n this.ctx = canvas.getContext(\"2d\")!;\n }\n\n invalidate(skipLightUpdate: boolean): void {\n this.valid = false;\n if (!skipLightUpdate) {\n layerManager.invalidateLight();\n }\n }\n\n addShape(shape: Shape, sync: boolean, temporary?: boolean, invalidate = true): void {\n if (temporary === undefined) temporary = false;\n shape.layer = this.name;\n this.shapes.push(shape);\n layerManager.UUIDMap.set(shape.uuid, shape);\n shape.checkVisionSources(invalidate);\n shape.setMovementBlock(shape.movementObstruction, invalidate);\n if (shape.ownedBy(gameStore.username) && shape.isToken) gameStore.ownedtokens.push(shape.uuid);\n if (shape.annotation.length) gameStore.annotations.push(shape.uuid);\n if (sync) socket.emit(\"Shape.Add\", { shape: shape.asDict(), temporary });\n if (invalidate) this.invalidate(!sync);\n }\n\n setShapes(shapes: ServerShape[]): void {\n for (const serverShape of shapes) {\n const shape = createShapeFromDict(serverShape);\n if (shape === undefined) {\n console.log(`Shape with unknown type ${serverShape.type_} could not be added`);\n return;\n }\n this.addShape(shape, false, false, false);\n }\n this.clearSelection(); // TODO: Fix keeping selection on those items that are not moved.\n this.invalidate(false);\n }\n\n removeShape(shape: Shape, sync: boolean, temporary?: boolean) {\n if (temporary === undefined) temporary = false;\n this.shapes.splice(this.shapes.indexOf(shape), 1);\n\n if (sync) socket.emit(\"Shape.Remove\", { shape: shape.asDict(), temporary });\n const lsI = gameStore.visionSources.findIndex(ls => ls.shape === shape.uuid);\n const lbI = gameStore.visionBlockers.findIndex(ls => ls === shape.uuid);\n\n const mbI = gameStore.movementblockers.findIndex(ls => ls === shape.uuid);\n const anI = gameStore.annotations.findIndex(ls => ls === shape.uuid);\n if (lsI >= 0) gameStore.visionSources.splice(lsI, 1);\n if (lbI >= 0) gameStore.visionBlockers.splice(lbI, 1);\n if (mbI >= 0) gameStore.movementblockers.splice(mbI, 1);\n if (anI >= 0) gameStore.annotations.splice(anI, 1);\n\n const annotationIndex = gameStore.annotations.indexOf(shape.uuid);\n if (annotationIndex >= 0) gameStore.annotations.splice(annotationIndex, 1);\n\n const ownedIndex = gameStore.ownedtokens.indexOf(shape.uuid);\n if (ownedIndex >= 0) gameStore.ownedtokens.splice(ownedIndex, 1);\n\n layerManager.UUIDMap.delete(shape.uuid);\n\n const index = this.selection.indexOf(shape);\n if (index >= 0) this.selection.splice(index, 1);\n if (lbI >= 0) gameStore.recalculateVision();\n if (mbI >= 0) gameStore.recalculateMovement();\n this.invalidate(!sync);\n }\n\n clear(): void {\n this.ctx.clearRect(0, 0, this.width, this.height);\n }\n\n clearSelection(): void {\n this.selection = [];\n EventBus.$emit(\"SelectionInfo.Shape.Set\", null);\n }\n\n draw(doClear?: boolean): void {\n if (!this.valid) {\n const ctx = this.ctx;\n const ogOP = ctx.globalCompositeOperation;\n doClear = doClear === undefined ? true : doClear;\n\n if (doClear) this.clear();\n\n const state = this;\n\n // We iteratre twice over all shapes\n // First to draw the auras and a second time to draw the shapes themselves\n // Otherwise auras from one shape could be overlapping another shape itself.\n\n this.shapes.forEach(shape => {\n if (shape.options.has(\"skipDraw\") && shape.options.get(\"skipDraw\")) return;\n if (layerManager.getLayer() === undefined) return;\n if (!shape.visibleInCanvas(state.canvas)) return;\n if (state.name === \"fow\" && shape.visionObstruction && layerManager.getLayer()!.name !== state.name)\n return;\n shape.drawAuras(ctx);\n });\n this.shapes.forEach(shape => {\n if (shape.options.has(\"skipDraw\") && shape.options.get(\"skipDraw\")) return;\n if (shape.labels.length === 0 && gameStore.filterNoLabel) return;\n if (\n shape.labels.length &&\n gameStore.labelFilters.length &&\n !shape.labels.some(l => gameStore.labelFilters.includes(l.uuid))\n )\n return;\n if (layerManager.getLayer() === undefined) return;\n if (!shape.visibleInCanvas(state.canvas)) return;\n if (state.name === \"fow\" && shape.visionObstruction && layerManager.getLayer()!.name !== state.name)\n return;\n shape.draw(ctx);\n });\n\n if (this.selection != null) {\n ctx.fillStyle = this.selectionColor;\n ctx.strokeStyle = this.selectionColor;\n ctx.lineWidth = this.selectionWidth;\n const z = gameStore.zoomFactor;\n this.selection.forEach(sel => {\n ctx.globalCompositeOperation = sel.globalCompositeOperation;\n const bb = sel.getBoundingBox();\n // TODO: REFACTOR THIS TO Shape.drawSelection(ctx);\n ctx.strokeRect(g2lx(bb.topLeft.x), g2ly(bb.topLeft.y), bb.w * z, bb.h * z);\n\n for (const p of sel.points) {\n ctx.beginPath();\n ctx.arc(g2lx(p[0]), g2ly(p[1]), 3, 0, 2 * Math.PI);\n ctx.fill();\n }\n ctx.beginPath();\n ctx.moveTo(g2lx(sel.points[0][0]), g2ly(sel.points[0][1]));\n for (let i = 1; i <= sel.points.length; i++) {\n const vertex = sel.points[i % sel.points.length];\n ctx.lineTo(g2lx(vertex[0]), g2ly(vertex[1]));\n }\n ctx.stroke();\n });\n }\n ctx.globalCompositeOperation = ogOP;\n this.valid = true;\n }\n }\n\n moveShapeOrder(shape: Shape, destinationIndex: number, sync: boolean): void {\n const oldIdx = this.shapes.indexOf(shape);\n if (oldIdx === destinationIndex) return;\n this.shapes.splice(oldIdx, 1);\n this.shapes.splice(destinationIndex, 0, shape);\n if (sync) socket.emit(\"Shape.Order.Set\", { shape: shape.asDict(), index: destinationIndex });\n this.invalidate(true);\n }\n}\n","import { gameStore } from \"@/game/store\";\nimport { l2g } from \"@/game/units\";\nimport { getMouse } from \"@/game/utils\";\n\nexport function scrollZoom(e: WheelEvent) {\n if (!e.target || !(e.target).tagName || (e.target).tagName !== \"CANVAS\") return;\n let delta: number;\n delta = Math.sign(e.deltaY) * -1;\n gameStore.updateZoom({ newZoomDisplay: gameStore.zoomDisplay - 0.1 * delta, zoomLocation: l2g(getMouse(e)) });\n}\n","import { render, staticRenderFns } from \"./filter.vue?vue&type=template&id=dca395d6&scoped=true&\"\nimport script from \"./filter.vue?vue&type=script&lang=ts&\"\nexport * from \"./filter.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./filter.vue?vue&type=style&index=0&lang=css&\"\nimport style1 from \"./filter.vue?vue&type=style&index=1&id=dca395d6&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"dca395d6\",\n null\n \n)\n\ncomponent.options.__file = \"filter.vue\"\nexport default component.exports","import { GlobalPoint, LocalPoint, Vector } from \"@/game/geom\";\nimport { BoundingRect } from \"@/game/shapes/boundingrect\";\nimport { Shape } from \"@/game/shapes/shape\";\nimport { gameStore } from \"@/game/store\";\nimport { calculateDelta } from \"@/game/ui/tools/utils\";\nimport { g2lx, g2ly, l2g, l2gx, l2gy } from \"@/game/units\";\n\nexport abstract class BaseRect extends Shape {\n w: number;\n h: number;\n constructor(topleft: GlobalPoint, w: number, h: number, fillColour?: string, strokeColour?: string, uuid?: string) {\n super(topleft, fillColour, strokeColour, uuid);\n this.w = w;\n this.h = h;\n }\n getBaseDict() {\n return Object.assign(super.getBaseDict(), {\n width: this.w,\n height: this.h,\n });\n }\n getBoundingBox() {\n return new BoundingRect(this.refPoint, this.w, this.h);\n }\n\n get points() {\n if (this.w === 0 || this.h === 0) return [[this.refPoint.x, this.refPoint.y]];\n // note to self: topright and botleft are swapped because I'm retarded.\n const topright = this.refPoint.add(new Vector(0, this.h));\n const botright = this.refPoint.add(new Vector(this.w, this.h));\n const botleft = this.refPoint.add(new Vector(this.w, 0));\n return [\n [this.refPoint.x, this.refPoint.y],\n [topright.x, topright.y],\n [botright.x, botright.y],\n [botleft.x, botleft.y],\n ];\n }\n\n contains(point: GlobalPoint): boolean {\n return (\n this.refPoint.x <= point.x &&\n this.refPoint.x + this.w >= point.x &&\n this.refPoint.y <= point.y &&\n this.refPoint.y + this.h >= point.y\n );\n }\n center(): GlobalPoint;\n center(centerPoint: GlobalPoint): void;\n center(centerPoint?: GlobalPoint): GlobalPoint | void {\n if (centerPoint === undefined) return this.refPoint.add(new Vector(this.w / 2, this.h / 2));\n this.refPoint = new GlobalPoint(centerPoint.x - this.w / 2, centerPoint.y - this.h / 2);\n }\n\n visibleInCanvas(canvas: HTMLCanvasElement): boolean {\n if (super.visibleInCanvas(canvas)) return true;\n const coreVisible = !(\n g2lx(this.refPoint.x) > canvas.width ||\n g2ly(this.refPoint.y) > canvas.height ||\n g2lx(this.refPoint.x + this.w) < 0 ||\n g2ly(this.refPoint.y + this.h) < 0\n );\n if (coreVisible) return true;\n return false;\n }\n snapToGrid() {\n const gs = gameStore.gridSize;\n const center = this.center();\n const mx = center.x;\n const my = center.y;\n\n let targetX;\n let targetY;\n\n if ((this.w / gs) % 2 === 0) {\n targetX = Math.round(mx / gs) * gs - this.w / 2;\n } else {\n targetX = (Math.round((mx + gs / 2) / gs) - 1 / 2) * gs - this.w / 2;\n }\n if ((this.h / gs) % 2 === 0) {\n targetY = Math.round(my / gs) * gs - this.h / 2;\n } else {\n targetY = (Math.round((my + gs / 2) / gs) - 1 / 2) * gs - this.h / 2;\n }\n\n const delta = calculateDelta(new Vector(targetX - this.refPoint.x, targetY - this.refPoint.y), this);\n this.refPoint = this.refPoint.add(delta);\n\n this.invalidate(false);\n }\n resizeToGrid() {\n const gs = gameStore.gridSize;\n this.refPoint = new GlobalPoint(Math.round(this.refPoint.x / gs) * gs, Math.round(this.refPoint.y / gs) * gs);\n this.w = Math.max(Math.round(this.w / gs) * gs, gs);\n this.h = Math.max(Math.round(this.h / gs) * gs, gs);\n this.invalidate(false);\n }\n resize(resizePoint: number, point: LocalPoint) {\n const z = gameStore.zoomFactor;\n switch (resizePoint) {\n case 0: {\n this.w = g2lx(this.refPoint.x) + this.w * z - point.x;\n this.h = g2ly(this.refPoint.y) + this.h * z - point.y;\n this.refPoint = l2g(point);\n break;\n }\n case 1: {\n this.w = g2lx(this.refPoint.x) + this.w * z - point.x;\n this.h = point.y - g2ly(this.refPoint.y);\n this.refPoint = new GlobalPoint(l2gx(point.x), this.refPoint.y);\n break;\n }\n case 2: {\n this.w = point.x - g2lx(this.refPoint.x);\n this.h = point.y - g2ly(this.refPoint.y);\n break;\n }\n case 3: {\n this.w = point.x - g2lx(this.refPoint.x);\n this.h = g2ly(this.refPoint.y) + this.h * z - point.y;\n this.refPoint = new GlobalPoint(this.refPoint.x, l2gy(point.y));\n break;\n }\n }\n\n this.w /= z;\n this.h /= z;\n\n if (this.w < 0) {\n this.refPoint = this.refPoint.add(new Vector(this.w, 0));\n this.w = Math.abs(this.w);\n }\n if (this.h < 0) {\n this.refPoint = this.refPoint.add(new Vector(0, this.h));\n this.h = Math.abs(this.h);\n }\n }\n}\n","import { render, staticRenderFns } from \"./select.vue?vue&type=template&id=048b3482&\"\nimport script from \"./select.vue?vue&type=script&lang=ts&\"\nexport * from \"./select.vue?vue&type=script&lang=ts&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\ncomponent.options.__file = \"select.vue\"\nexport default component.exports","import { render, staticRenderFns } from \"./main.vue?vue&type=template&id=61eb1455&scoped=true&\"\nimport script from \"./main.vue?vue&type=script&lang=ts&\"\nexport * from \"./main.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./main.vue?vue&type=style&index=0&id=61eb1455&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"61eb1455\",\n null\n \n)\n\ncomponent.options.__file = \"main.vue\"\nexport default component.exports","import mod from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./createtoken_modal.vue?vue&type=style&index=0&id=73816298&scoped=true&lang=css&\"; export default mod; export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./createtoken_modal.vue?vue&type=style&index=0&id=73816298&scoped=true&lang=css&\"","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{attrs:{\"id\":\"AssetManager\"}},[_c('div',{attrs:{\"id\":\"titlebar\"}},[_vm._v(\"Asset Manager\")]),_c('div',{attrs:{\"id\":\"main\"}},[_c('div',{attrs:{\"id\":\"assets\"},on:{\"dragover\":function($event){$event.preventDefault();return _vm.moveDrag($event)},\"drop\":function($event){$event.preventDefault();$event.stopPropagation();_vm.stopDrag($event, _vm.currentFolder)}}},[_c('div',{attrs:{\"id\":\"breadcrumbs\"}},[_c('div',[_vm._v(\"/\")]),_vm._l((_vm.path),function(dir){return _c('div',{key:dir},[_vm._v(_vm._s(_vm.idMap.get(dir).name))])})],2),_c('div',{attrs:{\"id\":\"actionbar\"}},[_c('input',{attrs:{\"id\":\"files\",\"type\":\"file\",\"multiple\":\"\",\"hidden\":\"\"},on:{\"change\":function($event){_vm.upload()}}}),_c('div',{attrs:{\"title\":\"Create folder\"},on:{\"click\":_vm.createDirectory}},[_c('i',{staticClass:\"fas fa-plus-square\"})]),_c('div',{attrs:{\"title\":\"Upload files\"},on:{\"click\":_vm.prepareUpload}},[_c('i',{staticClass:\"fas fa-upload\"})])]),_c('div',{attrs:{\"id\":\"explorer\"}},[(_vm.path.length)?_c('div',{staticClass:\"inode folder\",on:{\"dblclick\":function($event){_vm.changeDirectory(-1)},\"dragover\":function($event){$event.preventDefault();return _vm.moveDrag($event)},\"dragleave\":function($event){$event.preventDefault();return _vm.leaveDrag($event)},\"drop\":function($event){$event.preventDefault();$event.stopPropagation();_vm.stopDrag($event, _vm.parentFolder)}}},[_c('i',{staticClass:\"fas fa-folder\",staticStyle:{\"font-size\":\"50px\"}}),_c('div',{staticClass:\"title\"},[_vm._v(\"..\")])]):_vm._e(),_vm._l((_vm.folders),function(key){return _c('div',{key:key,staticClass:\"inode folder\",class:{'inode-selected': _vm.selected.includes(key)},attrs:{\"draggable\":\"true\"},on:{\"click\":function($event){_vm.select($event, key)},\"dblclick\":function($event){_vm.changeDirectory(key)},\"contextmenu\":function($event){$event.preventDefault();_vm.$refs.cm.open($event, key)},\"dragstart\":function($event){_vm.startDrag($event, key)},\"dragover\":function($event){$event.preventDefault();return _vm.moveDrag($event)},\"dragleave\":function($event){$event.preventDefault();return _vm.leaveDrag($event)},\"drop\":function($event){$event.preventDefault();$event.stopPropagation();_vm.stopDrag($event, key)}}},[_c('i',{staticClass:\"fas fa-folder\",staticStyle:{\"font-size\":\"50px\"}}),_c('div',{staticClass:\"title\"},[_vm._v(_vm._s(_vm.idMap.get(key).name))])])}),_vm._l((_vm.files),function(file){return _c('div',{key:file,staticClass:\"inode file\",class:{'inode-selected': _vm.selected.includes(file)},attrs:{\"draggable\":\"true\"},on:{\"click\":function($event){_vm.select($event, file)},\"contextmenu\":function($event){$event.preventDefault();_vm.$refs.cm.open($event, file)},\"dragstart\":function($event){_vm.startDrag($event, file)}}},[_c('img',{attrs:{\"src\":'/static/assets/' + _vm.idMap.get(file).file_hash,\"width\":\"50\"}}),_c('div',{staticClass:\"title\"},[_vm._v(_vm._s(_vm.idMap.get(file).name))])])})],2)]),(_vm.firstSelectedFile)?_c('div',{attrs:{\"id\":\"asset-details\"}},[_c('div',{attrs:{\"id\":\"asset-detail-title\"}},[_vm._v(_vm._s(_vm.firstSelectedFile.name))]),_c('img',{attrs:{\"src\":'/static/assets/' + _vm.firstSelectedFile.file_hash}})]):_vm._e()]),_c('AssetContextMenu',{ref:\"cm\"}),_c('Prompt',{ref:\"prompt\"}),_c('ConfirmDialog',{ref:\"confirm\"})],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","export * from \"-!cache-loader?{\\\"cacheDirectory\\\":\\\"node_modules/.cache/vue-loader\\\",\\\"cacheIdentifier\\\":\\\"74f43d04-vue-loader-template\\\"}!../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./manager.vue?vue&type=template&id=5b0def98&\"","\n\n\n\n\n\n\n\n\nimport Vue from \"vue\";\nimport Component from \"vue-class-component\";\n\nimport ContextMenu from \"@/core/components/contextmenu.vue\";\n\nimport { socket } from \"@/game/api/socket\";\nimport { EventBus } from \"@/game/event-bus\";\nimport { gameStore } from \"@/game/store\";\nimport { l2gx, l2gy } from \"@/game/units\";\n\n@Component({\n components: {\n ContextMenu,\n },\n})\nexport default class SelectContext extends Vue {\n visible = false;\n x = 0;\n y = 0;\n\n get IS_DM(): boolean {\n return gameStore.IS_DM;\n }\n\n open(event: MouseEvent) {\n this.visible = true;\n this.x = event.pageX;\n this.y = event.pageY;\n this.$nextTick(() => this.$children[0].$el.focus());\n }\n close() {\n this.visible = false;\n }\n bringPlayers() {\n if (!gameStore.IS_DM) return;\n socket.emit(\"Players.Bring\", { x: l2gx(this.x), y: l2gy(this.y) });\n this.close();\n }\n createToken() {\n (this.$parent.$parent.$refs.createtokendialog).open(this.x, this.y);\n this.close();\n }\n showInitiative() {\n EventBus.$emit(\"Initiative.Show\");\n this.close();\n }\n}\n","import Axios from \"axios\";\nimport Vue from \"vue\";\nimport Component from \"vue-class-component\";\nimport { Route } from \"vue-router\";\n\nimport { coreStore } from \"@/core/store\";\n\nComponent.registerHooks([\"beforeRouteEnter\"]);\n\n@Component({})\nexport default class Logout extends Vue {\n beforeRouteEnter(to: Route, from: Route, next: ({}) => {}) {\n Axios.post(\"/api/logout\").then(() => {\n coreStore.setAuthenticated(false);\n coreStore.setUsername(\"\");\n next({ path: \"/auth/login\" });\n });\n }\n}\n","import { getModule, Module, Mutation, VuexModule } from \"vuex-module-decorators\";\n\nimport { rootStore } from \"@/store\";\n\nexport interface CoreState {\n authenticated: boolean;\n initialized: boolean;\n username: string;\n}\n\n@Module({ dynamic: true, store: rootStore, name: \"core\" })\nclass CoreStore extends VuexModule implements CoreState {\n authenticated = false;\n initialized = false;\n username = \"\";\n\n @Mutation\n setAuthenticated(auth: boolean) {\n this.authenticated = auth;\n }\n\n @Mutation\n setInitialized(init: boolean) {\n this.initialized = init;\n }\n\n @Mutation\n setUsername(username: string) {\n this.username = username;\n }\n}\n\nexport const coreStore = getModule(CoreStore);\n","import Vue from \"vue\";\n\nimport App from \"@/App.vue\";\nimport { router } from \"@/router\";\nimport { rootStore } from \"@/store\";\n\nVue.config.productionTip = false;\nVue.config.devtools = true;\nVue.config.performance = true;\n\nexport const app = new Vue({\n router,\n store: rootStore,\n render: h => h(App),\n}).$mount(\"#app\");\n\n(window).app = app;\n","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nimport Vue from \"vue\";\nimport Component from \"vue-class-component\";\n\n@Component({\n props: [\"visible\", \"left\", \"top\"],\n})\nexport default class ContextMenu extends Vue {}\n","import Axios, { AxiosError, AxiosResponse } from \"axios\";\nimport Vue from \"vue\";\nimport Component from \"vue-class-component\";\nimport { Route } from \"vue-router\";\n\n@Component({ template: \"\" })\nexport default class Initiative extends Vue {\n beforeRouteEnter(to: Route, from: Route, next: ({}) => {}) {\n Axios.post(\"/api/invite\", {\n code: to.params.code,\n })\n .then((response: AxiosResponse) => {\n next({ path: response.data.sessionUrl });\n })\n .catch((error: AxiosError) => {\n console.error(\"Invitation code could not be redeemed\");\n next({ path: \"/dashboard\" });\n });\n }\n}\n","import { render, staticRenderFns } from \"./prompt.vue?vue&type=template&id=0602c2e6&scoped=true&\"\nimport script from \"./prompt.vue?vue&type=script&lang=ts&\"\nexport * from \"./prompt.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./prompt.vue?vue&type=style&index=0&id=0602c2e6&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"0602c2e6\",\n null\n \n)\n\ncomponent.options.__file = \"prompt.vue\"\nexport default component.exports","import { GlobalPoint } from \"@/game/geom\";\nimport { gameStore } from \"@/game/store\";\n\nimport { Edge } from \"./cdt\";\nimport { drawPolygon } from \"./draw\";\nimport { PA_CDT } from \"./pa\";\nimport { Point, Sign, Triangle } from \"./tds\";\nimport { ccw, cw, orientation } from \"./triag\";\n\nexport function computeVisibility(q: GlobalPoint, target: \"vision\" | \"movement\", drawt?: boolean): number[][] {\n if (drawt === undefined) drawt = gameStore.drawTEContour;\n // console.time(\"CV\");\n const Q: Point = [q.x, q.y];\n const rawOutput: number[][] = [];\n const triangle = PA_CDT[target].locate(Q, null).loc;\n if (triangle === null) {\n console.error(\"Triangle not found\");\n return [];\n }\n // triangle.fill();\n rawOutput.push(triangle.vertices[1]!.point!);\n if (!triangle.isConstrained(0))\n expandEdge(Q, triangle.vertices[2]!.point!, triangle.vertices[1]!.point!, triangle, 0, rawOutput);\n rawOutput.push(triangle.vertices[2]!.point!);\n if (!triangle.isConstrained(1))\n expandEdge(Q, triangle.vertices[0]!.point!, triangle.vertices[2]!.point!, triangle, 1, rawOutput);\n rawOutput.push(triangle.vertices[0]!.point!);\n if (!triangle.isConstrained(2))\n expandEdge(Q, triangle.vertices[1]!.point!, triangle.vertices[0]!.point!, triangle, 2, rawOutput);\n // console.timeEnd(\"CV\");\n\n if (drawt) drawPolygon(rawOutput, \"red\");\n\n return rawOutput;\n}\n\nfunction expandEdge(\n q: Point,\n left: number[],\n right: number[],\n fh: Triangle,\n index: number,\n rawOutput: number[][],\n): void {\n // fh.edge(index).draw();\n const nfh = fh.neighbours[index]!;\n // nfh.fill(\"rgba(255, 0, 0, 0.25)\");\n const nIndex = nfh.indexT(fh);\n const rIndex = ccw(nIndex);\n const lIndex = cw(nIndex);\n const nvh = nfh.vertices[nIndex]!;\n const rvh = nfh.vertices[lIndex]!;\n const lvh = nfh.vertices[rIndex]!;\n\n const re: Edge = [nfh, rIndex];\n const le: Edge = [nfh, lIndex];\n\n const ro = orientation(q, right, nvh.point!);\n const lo = orientation(q, left, nvh.point!);\n\n // const ctx = layerManager.getLayer(\"draw\")!.ctx;\n // ctx.beginPath();\n // ctx.strokeStyle = \"red\";\n // ctx.lineJoin = \"round\";\n // ctx.moveTo(g2lx(q.x), g2ly(q.y));\n // ctx.lineTo(g2lx(left[0]), g2ly(left[1]));\n // ctx.moveTo(g2lx(q.x), g2ly(q.y));\n // ctx.lineTo(g2lx(nvh[0]), g2ly(nvh[1]));\n // ctx.strokeStyle = \"blue\";\n // ctx.moveTo(g2lx(q.x), g2ly(q.y));\n // ctx.lineTo(g2lx(right[0]), g2ly(right[1]));\n // ctx.moveTo(g2lx(q.x), g2ly(q.y));\n // ctx.lineTo(g2lx(nvh[0]), g2ly(nvh[1]));\n // ctx.closePath();\n // ctx.stroke();\n\n // Right edge is seen if the new vertex is ccw of the right ray\n if (ro === Sign.COUNTERCLOCKWISE) {\n if (re[0].isConstrained(re[1])) {\n // See if current right ray is rvh\n if (right !== rvh.point!) rawOutput.push(raySegIntersection(q, right, nvh.point!, rvh.point!));\n if (lo === Sign.COUNTERCLOCKWISE) rawOutput.push(raySegIntersection(q, left, nvh.point!, rvh.point!));\n } else {\n if (lo === Sign.COUNTERCLOCKWISE) return expandEdge(q, left, right, nfh, rIndex, rawOutput);\n else expandEdge(q, nvh.point!, right, nfh, rIndex, rawOutput);\n }\n }\n\n if (ro !== Sign.CLOCKWISE && lo !== Sign.COUNTERCLOCKWISE) {\n rawOutput.push(nvh.point!);\n }\n\n if (lo === Sign.CLOCKWISE) {\n if (le[0].isConstrained(le[1])) {\n if (ro === Sign.CLOCKWISE) {\n rawOutput.push(raySegIntersection(q, right, nvh.point!, lvh.point!));\n }\n if (left !== lvh.point!) {\n rawOutput.push(raySegIntersection(q, left, nvh.point!, lvh.point!));\n }\n return;\n } else {\n if (ro === Sign.CLOCKWISE) {\n return expandEdge(q, left, right, nfh, lIndex, rawOutput);\n } else {\n return expandEdge(q, left, nvh.point!, nfh, lIndex, rawOutput);\n }\n }\n }\n}\n\nfunction raySegIntersection(q: Point, b: Point, s: Point, t: Point) {\n const denominator = (t[1] - s[1]) * (b[0] - q[0]) - (t[0] - s[0]) * (b[1] - q[1]);\n const ua = ((t[0] - s[0]) * (q[1] - s[1]) - (t[1] - s[1]) * (q[0] - s[0])) / denominator;\n // const ub = ((b[0] - q.x) * (q.y - s[1]) - (b[1] - q.y) * (q.x - s[0])) / denominator;\n const x = q[0] + ua * (b[0] - q[0]);\n const y = q[1] + ua * (b[1] - q[1]);\n\n return [x, y];\n}\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return (_vm.selected)?_c('div',{staticClass:\"tool-detail\",style:({'--detailRight': _vm.detailRight, '--detailArrow': _vm.detailArrow})},[_c('div',[_vm._v(\"#X\")]),_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.xCount),expression:\"xCount\"}],attrs:{\"type\":\"text\"},domProps:{\"value\":(_vm.xCount)},on:{\"input\":function($event){if($event.target.composing){ return; }_vm.xCount=$event.target.value}}}),_c('div',[_vm._v(\"#Y\")]),_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.yCount),expression:\"yCount\"}],attrs:{\"type\":\"text\"},domProps:{\"value\":(_vm.yCount)},on:{\"input\":function($event){if($event.target.composing){ return; }_vm.yCount=$event.target.value}}})]):_vm._e()}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","export * from \"-!cache-loader?{\\\"cacheDirectory\\\":\\\"node_modules/.cache/vue-loader\\\",\\\"cacheIdentifier\\\":\\\"74f43d04-vue-loader-template\\\"}!../../../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./map.vue?vue&type=template&id=2104f147&\"","import { render, staticRenderFns } from \"./edit_dialog.vue?vue&type=template&id=23de098e&scoped=true&\"\nimport script from \"./edit_dialog.vue?vue&type=script&lang=ts&\"\nexport * from \"./edit_dialog.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./edit_dialog.vue?vue&type=style&index=0&id=23de098e&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"23de098e\",\n null\n \n)\n\ncomponent.options.__file = \"edit_dialog.vue\"\nexport default component.exports","export class Settings {\n static angleSteps = 4;\n static drawAngleLines = false;\n static drawFirstLightHit = false;\n static skipPlayerFOW = false;\n static skipLightFOW = false;\n\n static tempFill: string = \"fog\";\n}\n","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nimport axios, { AxiosError, AxiosResponse } from \"axios\";\nimport Vue from \"vue\";\nimport Component from \"vue-class-component\";\n\nimport { coreStore } from \"@/core/store\";\n\n@Component\nexport default class Login extends Vue {\n username = \"\";\n password = \"\";\n error = \"\";\n\n login() {\n axios\n .post(\"/api/login\", {\n username: this.username,\n password: this.password,\n })\n .then((response: AxiosResponse) => {\n coreStore.setUsername(this.username);\n coreStore.setAuthenticated(true);\n this.$router.push(this.$route.query.redirect || \"/\");\n })\n .catch((error: AxiosError) => {\n if (error.response) this.error = error.response.statusText;\n else this.error = \"Unknown error occured\";\n });\n }\n\n register() {\n axios\n .post(\"/api/register\", {\n username: this.username,\n password: this.password,\n })\n .then((response: AxiosResponse) => {\n coreStore.setUsername(this.username);\n coreStore.setAuthenticated(true);\n this.$router.push(this.$route.query.redirect || \"/\");\n })\n .catch((error: AxiosError) => {\n if (error.response) this.error = error.response.statusText;\n else this.error = \"Unknown error occured\";\n });\n }\n\n focusin(event: { target?: { nextElementSibling?: HTMLElement } }) {\n if (event.target && event.target.nextElementSibling) {\n const span = event.target.nextElementSibling;\n span.style.opacity = \"0\";\n }\n }\n\n focusout(event: { target?: { nextElementSibling?: HTMLElement } }) {\n if (event.target && event.target.nextElementSibling) {\n const span = event.target.nextElementSibling;\n span.style.opacity = \"1\";\n }\n }\n}\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('modal',{attrs:{\"visible\":_vm.visible},on:{\"close\":function($event){_vm.visible = false}},scopedSlots:_vm._u([{key:\"header\",fn:function(m){return _c('div',{staticClass:\"modal-header\",attrs:{\"draggable\":\"true\"},on:{\"dragstart\":m.dragStart,\"dragend\":m.dragEnd}},[_vm._v(\"Create basic token\")])}}])},[_c('div',{staticClass:\"modal-body\"},[_c('label',{attrs:{\"for\":\"createtokendialog-text\"}},[_vm._v(\"Text\")]),_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.text),expression:\"text\"}],attrs:{\"type\":\"text\",\"id\":\"createtokendialog-name\"},domProps:{\"value\":(_vm.text)},on:{\"input\":function($event){if($event.target.composing){ return; }_vm.text=$event.target.value}}}),_c('label',[_vm._v(\"Colours\")]),_c('div',{staticClass:\"colours\"},[_c('span',[_vm._v(\"Fill:\")]),_c('color-picker',{attrs:{\"color\":_vm.fillColour},on:{\"update:color\":function($event){_vm.fillColour=$event}}}),_c('span',[_vm._v(\"Border:\")]),_c('color-picker',{attrs:{\"color\":_vm.borderColour},on:{\"update:color\":function($event){_vm.borderColour=$event}}})],1),_c('canvas',{ref:\"canvas\",attrs:{\"width\":\"100px\",\"height\":\"100px\"}})]),_c('div',{staticClass:\"modal-footer\"},[_c('button',{on:{\"click\":_vm.submit}},[_vm._v(\"Submit\")])])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","export * from \"-!cache-loader?{\\\"cacheDirectory\\\":\\\"node_modules/.cache/vue-loader\\\",\\\"cacheIdentifier\\\":\\\"74f43d04-vue-loader-template\\\"}!../../../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./createtoken_modal.vue?vue&type=template&id=73816298&scoped=true&\"","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c(\"div\")}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","export * from \"-!cache-loader?{\\\"cacheDirectory\\\":\\\"node_modules/.cache/vue-loader\\\",\\\"cacheIdentifier\\\":\\\"74f43d04-vue-loader-template\\\"}!../../../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./tool.vue?vue&type=template&id=1e034b42&\"","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('transition',{attrs:{\"name\":\"modal\"}},[_c('div',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.visible),expression:\"visible\"}],staticClass:\"mask\",class:{'modal-mask': _vm.mask, 'dialog-mask': !_vm.mask},on:{\"click\":_vm.close,\"dragover\":function($event){$event.preventDefault();return _vm.dragOver($event)}}},[_c('div',{ref:\"container\",staticClass:\"modal-container\",on:{\"click\":function($event){$event.stopPropagation();}}},[_vm._t(\"header\",null,{dragStart:_vm.dragStart,dragEnd:_vm.dragEnd}),_vm._t(\"default\")],2)])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","export * from \"-!cache-loader?{\\\"cacheDirectory\\\":\\\"node_modules/.cache/vue-loader\\\",\\\"cacheIdentifier\\\":\\\"74f43d04-vue-loader-template\\\"}!../../../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./modal.vue?vue&type=template&id=12ed61ba&scoped=true&\"","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/ts-loader/index.js??ref--12-2!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./game.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/ts-loader/index.js??ref--12-2!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./game.vue?vue&type=script&lang=ts&\"","import Component from \"vue-class-component\";\n\nimport Tool from \"@/game/ui/tools/tool.vue\";\n\nimport { socket } from \"@/game/api/socket\";\nimport { GlobalPoint } from \"@/game/geom\";\nimport { layerManager } from \"@/game/layers/manager\";\nimport { Line } from \"@/game/shapes/line\";\nimport { Text } from \"@/game/shapes/text\";\nimport { gameStore } from \"@/game/store\";\nimport { l2g } from \"@/game/units\";\nimport { getMouse } from \"@/game/utils\";\n\n@Component\nexport class RulerTool extends Tool {\n name = \"Ruler\";\n active = false;\n startPoint: GlobalPoint | null = null;\n ruler: Line | null = null;\n text: Text | null = null;\n onMouseDown(event: MouseEvent) {\n const layer = layerManager.getLayer(\"draw\");\n if (layer === undefined) {\n console.log(\"No draw layer!\");\n return;\n }\n this.active = true;\n this.startPoint = l2g(getMouse(event));\n this.ruler = new Line(this.startPoint, this.startPoint, 3, gameStore.rulerColour);\n this.text = new Text(this.startPoint.clone(), \"\", \"bold 20px serif\");\n this.ruler.addOwner(gameStore.username);\n this.text.addOwner(gameStore.username);\n layer.addShape(this.ruler, true, true);\n layer.addShape(this.text, true, true);\n }\n onMouseMove(event: MouseEvent) {\n if (!this.active || this.ruler === null || this.startPoint === null || this.text === null) return;\n\n const layer = layerManager.getLayer(\"draw\");\n if (layer === undefined) {\n console.log(\"No draw layer!\");\n return;\n }\n const endPoint = l2g(getMouse(event));\n\n this.ruler.endPoint = endPoint;\n socket.emit(\"Shape.Update\", { shape: this.ruler!.asDict(), redraw: true, temporary: true });\n\n const diffsign = Math.sign(endPoint.x - this.startPoint.x) * Math.sign(endPoint.y - this.startPoint.y);\n const xdiff = Math.abs(endPoint.x - this.startPoint.x);\n const ydiff = Math.abs(endPoint.y - this.startPoint.y);\n const label =\n Math.round((Math.sqrt(xdiff ** 2 + ydiff ** 2) * gameStore.unitSize) / gameStore.gridSize) + \" ft\";\n const angle = Math.atan2(diffsign * ydiff, xdiff);\n const xmid = Math.min(this.startPoint.x, endPoint.x) + xdiff / 2;\n const ymid = Math.min(this.startPoint.y, endPoint.y) + ydiff / 2;\n this.text.refPoint = new GlobalPoint(xmid, ymid);\n this.text.text = label;\n this.text.angle = angle;\n socket.emit(\"Shape.Update\", { shape: this.text.asDict(), redraw: true, temporary: true });\n layer.invalidate(true);\n }\n onMouseUp(event: MouseEvent) {\n if (!this.active || this.ruler === null || this.startPoint === null || this.text === null) return;\n\n const layer = layerManager.getLayer(\"draw\");\n if (layer === undefined) {\n console.log(\"No active layer!\");\n return;\n }\n this.active = false;\n\n layer.removeShape(this.ruler, true, true);\n layer.removeShape(this.text, true, true);\n layer.invalidate(true);\n this.ruler = this.startPoint = this.text = null;\n }\n}\n","import { render, staticRenderFns } from \"./modal.vue?vue&type=template&id=12ed61ba&scoped=true&\"\nimport script from \"./modal.vue?vue&type=script&lang=ts&\"\nexport * from \"./modal.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./modal.vue?vue&type=style&index=0&id=12ed61ba&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"12ed61ba\",\n null\n \n)\n\ncomponent.options.__file = \"modal.vue\"\nexport default component.exports","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/ts-loader/index.js??ref--12-2!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./accordion.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/ts-loader/index.js??ref--12-2!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./accordion.vue?vue&type=script&lang=ts&\"","import { layerManager } from \"@/game/layers/manager\";\nimport { gameStore } from \"@/game/store\";\n\nimport { CDT } from \"./cdt\";\n\nexport let PA_CDT = {\n vision: new CDT(),\n movement: new CDT(),\n};\n\nexport function triangulate(target: \"vision\" | \"movement\", partial: boolean = false) {\n const cdt = new CDT();\n\n let shapes;\n if (target === \"vision\") shapes = gameStore.visionBlockers;\n else shapes = gameStore.movementblockers;\n\n for (const sh of shapes) {\n const shape = layerManager.UUIDMap.get(sh)!;\n if (partial && !shape.visibleInCanvas(layerManager.getLayer()!.canvas)) continue;\n for (let i = 0; i < shape.points.length; i++) {\n cdt.insertConstraint(shape.points[i], shape.points[(i + 1) % shape.points.length]);\n }\n }\n // LEFT WALL\n cdt.insertConstraint([-1e8, -1e8], [-1e8, 1e8]);\n cdt.insertConstraint([-1e8, 1e8], [-1e11, 1e8]);\n cdt.insertConstraint([-1e11, 1e8], [-1e11, -1e8]);\n cdt.insertConstraint([-1e11, -1e8], [-1e8, -1e8]);\n // TOP WALL\n cdt.insertConstraint([-1e8, -1e8], [1e8, -1e8]);\n cdt.insertConstraint([1e8, -1e8], [1e8, -1e11]);\n cdt.insertConstraint([1e8, -1e11], [-1e8, -1e11]);\n cdt.insertConstraint([-1e8, -1e11], [-1e8, -1e8]);\n // RIGHT WALL\n cdt.insertConstraint([1e8, -1e8], [1e8, 1e8]);\n cdt.insertConstraint([1e8, 1e8], [1e11, 1e8]);\n cdt.insertConstraint([1e11, 1e8], [1e11, -1e8]);\n cdt.insertConstraint([1e11, -1e8], [1e8, -1e8]);\n // BOT WALL\n cdt.insertConstraint([-1e8, 1e8], [1e8, 1e8]);\n cdt.insertConstraint([1e8, 1e8], [1e8, 1e11]);\n cdt.insertConstraint([1e8, 1e11], [-1e8, 1e11]);\n cdt.insertConstraint([-1e8, 1e11], [-1e8, 1e8]);\n PA_CDT[target] = cdt;\n (window).CDT = PA_CDT;\n}\n","import mod from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./tools.vue?vue&type=style&index=0&id=b6e1f51c&scoped=true&lang=css&\"; export default mod; export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./tools.vue?vue&type=style&index=0&id=b6e1f51c&scoped=true&lang=css&\"","import mod from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./main.vue?vue&type=style&index=0&id=61eb1455&scoped=true&lang=css&\"; export default mod; export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./main.vue?vue&type=style&index=0&id=61eb1455&scoped=true&lang=css&\"","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nimport Vue from \"vue\";\nimport Component from \"vue-class-component\";\n\nimport { Prop } from \"vue-property-decorator\";\n\nimport ColorPicker from \"@/core/components/colorpicker.vue\";\nimport Modal from \"@/core/components/modals/modal.vue\";\n\nimport { uuidv4 } from \"@/core/utils\";\nimport { socket } from \"@/game/api/socket\";\nimport { EventBus } from \"@/game/event-bus\";\nimport { layerManager } from \"@/game/layers/manager\";\nimport { Shape } from \"@/game/shapes/shape\";\nimport { gameStore } from \"@/game/store\";\n\n@Component({\n components: {\n Modal,\n \"color-picker\": ColorPicker,\n },\n})\nexport default class EditDialog extends Vue {\n @Prop() shape!: Shape;\n\n visible = false;\n\n get owned(): boolean {\n return this.shape.ownedBy();\n }\n\n mounted() {\n EventBus.$on(\"EditDialog.Open\", (shape: Shape) => {\n this.shape = shape;\n this.visible = true;\n });\n EventBus.$on(\"EditDialog.AddLabel\", (label: string) => {\n if (this.visible) {\n this.shape.labels.push(gameStore.labels[label]);\n this.updateShape(true);\n }\n });\n }\n\n beforeDestroy() {\n EventBus.$off(\"EditDialog.Open\");\n EventBus.$off(\"EditDialog.AddLabel\");\n }\n\n updated() {\n this.addEmpty();\n }\n\n addEmpty() {\n if (this.shape.owners[this.shape.owners.length - 1] !== \"\") this.shape.addOwner(\"\");\n if (\n !this.shape.trackers.length ||\n this.shape.trackers[this.shape.trackers.length - 1].name !== \"\" ||\n this.shape.trackers[this.shape.trackers.length - 1].value !== 0\n )\n this.shape.trackers.push({ uuid: uuidv4(), name: \"\", value: 0, maxvalue: 0, visible: false });\n if (\n !this.shape.auras.length ||\n this.shape.auras[this.shape.auras.length - 1].name !== \"\" ||\n this.shape.auras[this.shape.auras.length - 1].value !== 0\n )\n this.shape.auras.push({\n uuid: uuidv4(),\n name: \"\",\n value: 0,\n dim: 0,\n visionSource: false,\n colour: \"rgba(0,0,0,0)\",\n visible: false,\n });\n }\n updateShape(redraw: boolean, temporary = false) {\n if (!this.owned) return;\n socket.emit(\"Shape.Update\", { shape: this.shape.asDict(), redraw, temporary });\n if (redraw) layerManager.invalidate();\n this.addEmpty();\n }\n setToken(event: { target: HTMLInputElement }) {\n if (!this.owned) return;\n this.shape.setIsToken(event.target.checked);\n this.updateShape(true);\n }\n setVisionBlocker(event: { target: HTMLInputElement }) {\n if (!this.owned) return;\n this.shape.checkVisionSources();\n this.updateShape(true);\n }\n setMovementBlocker(event: { target: HTMLInputElement }) {\n if (!this.owned) return;\n this.shape.setMovementBlock(event.target.checked);\n this.updateShape(false);\n }\n updateAnnotation(event: { target: HTMLInputElement }) {\n if (!this.owned) return;\n const hadAnnotation = this.shape.annotation !== \"\";\n this.shape.annotation = event.target.value;\n if (this.shape.annotation !== \"\" && !hadAnnotation) {\n gameStore.annotations.push(this.shape.uuid);\n if (layerManager.hasLayer(\"draw\")) layerManager.getLayer(\"draw\")!.invalidate(true);\n } else if (this.shape.annotation === \"\" && hadAnnotation) {\n gameStore.annotations.splice(gameStore.annotations.findIndex(an => an === this.shape.uuid));\n if (layerManager.hasLayer(\"draw\")) layerManager.getLayer(\"draw\")!.invalidate(true);\n }\n this.updateShape(false);\n }\n updateOwner(event: { target: HTMLInputElement }, oldValue: string) {\n if (!this.owned) return;\n this.shape.updateOwner(oldValue, event.target.value);\n this.updateShape(gameStore.fowLOS);\n }\n removeOwner(value: string) {\n if (!this.owned) return;\n this.shape.removeOwner(value);\n this.updateShape(gameStore.fowLOS);\n }\n removeTracker(uuid: string) {\n if (!this.owned) return;\n this.shape.trackers = this.shape.trackers.filter(tr => tr.uuid !== uuid);\n this.updateShape(false);\n }\n removeAura(uuid: string) {\n if (!this.owned) return;\n this.shape.auras = this.shape.auras.filter(au => au.uuid !== uuid);\n this.shape.checkVisionSources();\n this.updateShape(true);\n }\n updateAuraVisionSource(aura: Aura) {\n if (!this.owned) return;\n aura.visionSource = !aura.visionSource;\n const i = gameStore.visionSources.findIndex(ls => ls.aura === aura.uuid);\n if (aura.visionSource && i === -1) gameStore.visionSources.push({ shape: this.shape.uuid, aura: aura.uuid });\n else if (!aura.visionSource && i >= 0) gameStore.visionSources.splice(i, 1);\n this.updateShape(true);\n }\n updateAuraColour(aura: Aura, colour: string) {\n if (!this.owned) return;\n const layer = layerManager.getLayer(this.shape.layer);\n if (layer === undefined) return;\n layer.invalidate(!aura.visionSource);\n }\n openLabelManager() {\n EventBus.$emit(\"LabelManager.Open\");\n }\n removeLabel(uuid: string) {\n if(!this.owned) return;\n this.shape.labels = this.shape.labels.filter(l => l.uuid !== uuid);\n this.updateShape(true);\n }\n}\n","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nimport Vue from \"vue\";\nimport Component from \"vue-class-component\";\n\nimport Modal from \"@/core/components/modals/modal.vue\";\n\n@Component({\n components: {\n Modal,\n },\n})\nexport default class ConfirmDialog extends Vue {\n $refs!: {\n confirm: HTMLButtonElement;\n };\n\n visible = false;\n yes = \"Yes\";\n no = \"No\";\n title = \"\";\n\n resolve = (ok: boolean) => {};\n reject = () => {};\n\n confirm() {\n this.resolve(true);\n this.close();\n }\n deny() {\n this.resolve(false);\n this.close();\n }\n close() {\n this.reject();\n this.visible = false;\n this.title = \"\";\n }\n open(title: string, yes = \"yes\", no = \"no\"): Promise {\n this.yes = yes;\n this.no = no;\n this.title = title;\n\n this.visible = true;\n this.$nextTick(() => {\n this.$refs.confirm.focus();\n });\n\n return new Promise((resolve, reject) => {\n this.resolve = resolve;\n this.reject = reject;\n });\n }\n}\n","import { render, staticRenderFns } from \"./map.vue?vue&type=template&id=2104f147&\"\nimport script from \"./map.vue?vue&type=script&lang=ts&\"\nexport * from \"./map.vue?vue&type=script&lang=ts&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\ncomponent.options.__file = \"map.vue\"\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"accordion\"},[_c('div',{attrs:{\"id\":\"header\"},on:{\"click\":function($event){$event.preventDefault();return _vm.toggleDisplay($event)}}},[_c('input',{ref:\"overall\",attrs:{\"type\":\"checkbox\"},on:{\"click\":function($event){$event.stopPropagation();return _vm.toggleCategory($event)}}}),_c('strong',[_vm._v(_vm._s(_vm.title))]),(_vm.showArrow)?[_c('span',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.showArrow && !_vm.active),expression:\"showArrow && !active\"}],staticClass:\"down-Arrow\"},[_vm._v(\"▼\")]),_c('span',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.showArrow && _vm.active),expression:\"showArrow && active\"}],staticClass:\"up-Arrow\"},[_vm._v(\"▲\")])]:_vm._e()],2),_c('div',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.active),expression:\"active\"}],attrs:{\"id\":\"body\"}},_vm._l((_vm.items),function(item){return _c('div',{key:item[0],staticClass:\"item\",on:{\"click\":function($event){_vm.toggleSelection(item[0])}}},[_c('input',{attrs:{\"type\":\"checkbox\"},domProps:{\"checked\":_vm.selected.includes(item[0])},on:{\"click\":function($event){$event.preventDefault();}}}),_vm._v(\" \"+_vm._s(item[1])+\"\\n \")])}))])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","export * from \"-!cache-loader?{\\\"cacheDirectory\\\":\\\"node_modules/.cache/vue-loader\\\",\\\"cacheIdentifier\\\":\\\"74f43d04-vue-loader-template\\\"}!../../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./accordion.vue?vue&type=template&id=0bf2b7ba&scoped=true&\"","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('modal',{attrs:{\"visible\":_vm.visible},on:{\"close\":_vm.close},scopedSlots:_vm._u([{key:\"header\",fn:function(m){return _c('div',{staticClass:\"modal-header\",attrs:{\"draggable\":\"true\"},on:{\"dragstart\":m.dragStart,\"dragend\":m.dragEnd}},[_vm._v(_vm._s(_vm.title))])}}])},[_c('div',{staticClass:\"modal-body\"},[_c('button',{ref:\"confirm\",on:{\"click\":_vm.confirm}},[_vm._v(_vm._s(_vm.yes))]),(!!_vm.no)?_c('button',{on:{\"click\":_vm.deny}},[_vm._v(_vm._s(_vm.no))]):_vm._e()])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","export * from \"-!cache-loader?{\\\"cacheDirectory\\\":\\\"node_modules/.cache/vue-loader\\\",\\\"cacheIdentifier\\\":\\\"74f43d04-vue-loader-template\\\"}!../../../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./confirm.vue?vue&type=template&id=1883e207&scoped=true&\"","\n\n\n\n\n\n\n\nimport Vue from \"vue\";\n\nimport Component from \"vue-class-component\";\n\nimport ContextMenu from \"@/core/components/contextmenu.vue\";\nimport ConfirmDialog from \"@/core/components/modals/confirm.vue\";\nimport Prompt from \"@/core/components/modals/prompt.vue\";\n\nimport { socket } from \"@/assetManager/socket\";\nimport { assetStore } from \"@/assetManager/store\";\nimport { getComponent, getRef } from \"@/core/utils\";\n\n@Component({\n components: {\n ContextMenu,\n },\n})\nexport default class AssetContextMenu extends Vue {\n visible = false;\n left = 0;\n top = 0;\n open(event: MouseEvent, inode: number) {\n if (!assetStore.selected.includes(inode)) getComponent().select(event, inode);\n\n this.visible = true;\n this.left = event.pageX;\n this.top = event.pageY;\n this.$nextTick(() => {\n this.$children[0].$el.focus();\n });\n }\n close() {\n this.visible = false;\n }\n rename() {\n if (assetStore.selected.length !== 1) return;\n const asset = assetStore.idMap.get(assetStore.selected[0])!;\n\n getRef(\"prompt\")\n .prompt(\"New name:\", `Renaming ${asset.name}`)\n .then(\n (name: string) => {\n socket.emit(\"Asset.Rename\", {\n asset: asset.id,\n name,\n });\n asset.name = name;\n getComponent().$forceUpdate();\n },\n () => {},\n );\n this.close();\n }\n remove() {\n if (assetStore.selected.length === 0) return;\n getRef(\"confirm\")\n .open(\"Are you sure you wish to remove this?\")\n .then(\n (result: boolean) => {\n if (result) {\n for (const sel of assetStore.selected) {\n socket.emit(\"Asset.Remove\", sel);\n if (assetStore.files.includes(sel))\n assetStore.files.splice(assetStore.files.indexOf(sel), 1);\n else assetStore.folders.splice(assetStore.folders.indexOf(sel), 1);\n }\n assetStore.clearSelected();\n }\n },\n () => {},\n );\n this.close();\n }\n}\n","import mod from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/ts-loader/index.js??ref--12-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./select.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/ts-loader/index.js??ref--12-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./select.vue?vue&type=script&lang=ts&\"","import mod from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./filter.vue?vue&type=style&index=0&lang=css&\"; export default mod; export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./filter.vue?vue&type=style&index=0&lang=css&\"","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nimport Vue from \"vue\";\nimport Component from \"vue-class-component\";\n\nimport Modal from \"@/core/components/modals/modal.vue\";\n\nimport { uuidv4 } from \"@/core/utils\";\nimport { socket } from \"@/game/api/socket\";\nimport { EventBus } from \"@/game/event-bus\";\nimport { gameStore } from \"@/game/store\";\n\n@Component({\n components: {\n Modal,\n },\n})\nexport default class LabelManager extends Vue {\n visible = false;\n newCategory = \"\";\n newName = \"\";\n search = \"\";\n\n mounted() {\n EventBus.$on(\"LabelManager.Open\", () => {\n this.visible = true;\n this.newCategory = \"\";\n this.newName = \"\";\n this.$nextTick(() => (this.$refs.search).focus());\n });\n }\n\n beforeDestroy() {\n EventBus.$off(\"LabelManager.Open\");\n }\n\n get labels() {\n const cat: {[category: string]: Label[]} = {'': []};\n for (const uuid of Object.keys(gameStore.labels)) {\n const label = gameStore.labels[uuid];\n if (this.search.length && `${label.category.toLowerCase()}${label.name.toLowerCase()}`.search(this.search.toLowerCase()) < 0) continue;\n if (label.user !== gameStore.username) continue;\n if (!label.category) cat[''].push(label);\n else {\n if (!(label.category in cat)) cat[label.category] = [];\n cat[label.category].push(label);\n cat[label.category].sort((a, b) => a.name.localeCompare(b.name));\n }\n }\n return cat;\n }\n\n get categories() {\n return Object.keys(this.labels).sort();\n }\n\n selectLabel(label: string) {\n EventBus.$emit(\"EditDialog.AddLabel\", label);\n this.visible = false;\n }\n\n toggleVisibility(label: Label) {\n label.visible = !label.visible;\n socket.emit(\"Label.Visibility.Set\", { uuid: label.uuid, visible: label.visible });\n }\n\n addLabel() {\n if (this.newName === \"\") return;\n const label = {\n uuid: uuidv4(),\n category: this.newCategory,\n name: this.newName,\n visible: false,\n user: gameStore.username,\n };\n gameStore.addLabel(label);\n socket.emit(\"Label.Add\", label);\n this.newCategory = \"\";\n this.newName = \"\";\n }\n\n deleteLabel(uuid: string) {\n gameStore.deleteLabel({ uuid, user: gameStore.username });\n socket.emit(\"Label.Delete\", uuid);\n }\n}\n","import { ServerPolygon } from \"../comm/types/shapes\";\nimport { GlobalPoint, LocalPoint } from \"../geom\";\nimport { g2lx, g2ly, g2lz, l2g } from \"../units\";\nimport { getFogColour } from \"../utils\";\nimport { BoundingRect } from \"./boundingrect\";\nimport { Shape } from \"./shape\";\n\nexport class Polygon extends Shape {\n type = \"polygon\";\n _vertices: GlobalPoint[] = [];\n\n constructor(\n startPoint: GlobalPoint,\n vertices: GlobalPoint[] = [],\n fillColour?: string,\n strokeColour?: string,\n uuid?: string,\n ) {\n super(startPoint, fillColour, strokeColour, uuid);\n this._vertices = vertices;\n }\n\n get refPoint() {\n return this._refPoint;\n }\n set refPoint(point: GlobalPoint) {\n const delta = point.subtract(this._refPoint);\n this._refPoint = point;\n for (let i = 0; i < this._vertices.length; i++) this._vertices[i] = this._vertices[i].add(delta);\n }\n\n get vertices() {\n return [this._refPoint, ...this._vertices];\n }\n\n asDict() {\n return Object.assign(this.getBaseDict(), {\n vertices: this._vertices.map(p => ({ x: p.x, y: p.y })),\n });\n }\n\n fromDict(data: ServerPolygon) {\n super.fromDict(data);\n this._vertices = data.vertices.map(v => new GlobalPoint(v.x, v.y));\n }\n\n get points() {\n return this.vertices.map(point => [point.x, point.y]);\n }\n\n draw(ctx: CanvasRenderingContext2D) {\n super.draw(ctx);\n ctx.lineCap = \"round\";\n ctx.lineJoin = \"round\";\n\n if (this.strokeColour === \"fog\") ctx.strokeStyle = getFogColour();\n else if (this.vertices.length === 2) ctx.strokeStyle = this.fillColour;\n else ctx.strokeStyle = this.strokeColour;\n if (this.fillColour === \"fog\") ctx.fillStyle = getFogColour();\n else ctx.fillStyle = this.fillColour;\n ctx.lineWidth = g2lz(2);\n\n ctx.beginPath();\n ctx.moveTo(g2lx(this.vertices[0].x), g2ly(this.vertices[0].y));\n for (let i = 1; i <= this.vertices.length; i++) {\n const vertex = this.vertices[i % this.vertices.length];\n ctx.lineTo(g2lx(vertex.x), g2ly(vertex.y));\n }\n ctx.fill();\n ctx.stroke();\n }\n\n contains(point: GlobalPoint): boolean {\n return this.getBoundingBox().contains(point);\n }\n\n center(): GlobalPoint;\n center(centerPoint: GlobalPoint): void;\n center(centerPoint?: GlobalPoint): GlobalPoint | void {\n return this.getBoundingBox().center();\n }\n visibleInCanvas(canvas: HTMLCanvasElement): boolean {\n return this.getBoundingBox().visibleInCanvas(canvas);\n } // TODO\n snapToGrid(): void {}\n resizeToGrid(): void {}\n resize(resizePoint: number, point: LocalPoint): void {\n if (resizePoint === 0) this._refPoint = l2g(point);\n else this._vertices[resizePoint - 1] = l2g(point);\n }\n getBoundingBox(): BoundingRect {\n let minx: number = this.refPoint.x;\n let maxx: number = this.refPoint.x;\n let miny: number = this.refPoint.y;\n let maxy: number = this.refPoint.y;\n for (const p of this._vertices) {\n if (p.x < minx) minx = p.x;\n if (p.x > maxx) maxx = p.x;\n if (p.y < miny) miny = p.y;\n if (p.y > maxy) maxy = p.y;\n }\n return new BoundingRect(new GlobalPoint(minx, miny), maxx - minx, maxy - miny);\n }\n}\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return (_vm.selected)?_c('div',{staticClass:\"tool-detail\",style:({'--detailRight': _vm.detailRight, '--detailArrow': _vm.detailArrow})},[_c('div',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.IS_DM),expression:\"IS_DM\"}]},[_vm._v(\"Mode\")]),_c('div',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.IS_DM),expression:\"IS_DM\"}],staticClass:\"selectgroup\"},_vm._l((_vm.modes),function(mode){return _c('div',{key:mode,staticClass:\"option\",class:{'option-selected': _vm.modeSelect === mode},on:{\"click\":function($event){_vm.modeSelect = mode}}},[_vm._v(_vm._s(mode))])})),_c('div',[_vm._v(\"Shape\")]),_c('div',{staticClass:\"selectgroup\"},_vm._l((_vm.shapes),function(shape){return _c('div',{key:shape,staticClass:\"option\",class:{'option-selected': _vm.shapeSelect === shape},on:{\"click\":function($event){_vm.shapeSelect = shape}}},[_c('i',{staticClass:\"fas\",class:'fa-' + shape})])})),_c('div',[_vm._v(\"Colours\")]),_c('div',{staticClass:\"selectgroup\"},[_c('color-picker',{staticClass:\"option\",attrs:{\"color\":_vm.fillColour},on:{\"update:color\":function($event){_vm.fillColour=$event}}}),_c('color-picker',{staticClass:\"option\",attrs:{\"color\":_vm.borderColour},on:{\"update:color\":function($event){_vm.borderColour=$event}}})],1),_c('div',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.shapeSelect === 'paint-brush'),expression:\"shapeSelect === 'paint-brush'\"}]},[_vm._v(\"Brush size\")]),_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.brushSize),expression:\"brushSize\"},{name:\"show\",rawName:\"v-show\",value:(_vm.shapeSelect === 'paint-brush'),expression:\"shapeSelect === 'paint-brush'\"}],staticStyle:{\"max-width\":\"100px\"},attrs:{\"type\":\"text\"},domProps:{\"value\":(_vm.brushSize)},on:{\"input\":function($event){if($event.target.composing){ return; }_vm.brushSize=$event.target.value}}})]):_vm._e()}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","export * from \"-!cache-loader?{\\\"cacheDirectory\\\":\\\"node_modules/.cache/vue-loader\\\",\\\"cacheIdentifier\\\":\\\"74f43d04-vue-loader-template\\\"}!../../../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./draw.vue?vue&type=template&id=639cd890&scoped=true&\"","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"outer\",on:{\"click\":function($event){if($event.target !== $event.currentTarget){ return null; }return _vm.open($event)}}},[_c('div',{staticClass:\"current-color\",style:(_vm.transparent ? 'background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAMCAIAAADZF8uwAAAAGUlEQVQYV2M4gwH+YwCGIasIUwhT25BVBADtzYNYrHvv4gAAAABJRU5ErkJggg==)' : 'background-color:' + _vm.color),on:{\"click\":function($event){if($event.target !== $event.currentTarget){ return null; }return _vm.open($event)}}}),_c('div',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.display),expression:\"display\"}],staticClass:\"mask\",on:{\"click\":function($event){if($event.target !== $event.currentTarget){ return null; }return _vm.closePicker($event)}}}),_c('chrome-picker',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.display),expression:\"display\"}],ref:\"chromePicker\",style:({position: 'fixed', left:_vm.left + 'px', top:_vm.top + 'px', 'z-index': 9999}),attrs:{\"value\":_vm.color,\"tabindex\":\"-1\"},on:{\"input\":_vm.updateColor}})],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","export * from \"-!cache-loader?{\\\"cacheDirectory\\\":\\\"node_modules/.cache/vue-loader\\\",\\\"cacheIdentifier\\\":\\\"74f43d04-vue-loader-template\\\"}!../../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./colorpicker.vue?vue&type=template&id=d32461a4&scoped=true&\"","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return (_vm.selected)?_c('div',{staticClass:\"tool-detail\",style:({'--detailRight': _vm.detailRight, '--detailArrow': _vm.detailArrow})},[_c('div',{attrs:{\"id\":\"accordion-container\"}},_vm._l((_vm.categories),function(category){return _c('accordion',{key:category,attrs:{\"title\":category === '' ? 'no category' : category,\"showArrow\":false,\"items\":_vm.labels[category],\"initialValues\":_vm.initalValues[category]},on:{\"selectionupdate\":_vm.updateSelection}})}))]):_vm._e()}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","export * from \"-!cache-loader?{\\\"cacheDirectory\\\":\\\"node_modules/.cache/vue-loader\\\",\\\"cacheIdentifier\\\":\\\"74f43d04-vue-loader-template\\\"}!../../../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./filter.vue?vue&type=template&id=dca395d6&scoped=true&\"","import { render, staticRenderFns } from \"./manager.vue?vue&type=template&id=5b0def98&\"\nimport script from \"./manager.vue?vue&type=script&lang=ts&\"\nexport * from \"./manager.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./manager.vue?vue&type=style&index=0&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\ncomponent.options.__file = \"manager.vue\"\nexport default component.exports","import mod from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/ts-loader/index.js??ref--12-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./tools.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/ts-loader/index.js??ref--12-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./tools.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./tool.vue?vue&type=template&id=1e034b42&\"\nimport script from \"./tool.vue?vue&type=script&lang=ts&\"\nexport * from \"./tool.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./tool.vue?vue&type=style&index=0&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\ncomponent.options.__file = \"tool.vue\"\nexport default component.exports","import mod from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./initiative.vue?vue&type=style&index=0&id=07fc8ff2&scoped=true&lang=css&\"; export default mod; export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./initiative.vue?vue&type=style&index=0&id=07fc8ff2&scoped=true&lang=css&\"","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('Modal',{attrs:{\"visible\":_vm.visible},on:{\"close\":_vm.close},scopedSlots:_vm._u([{key:\"header\",fn:function(m){return _c('div',{staticClass:\"modal-header\",attrs:{\"draggable\":\"true\"},on:{\"dragstart\":m.dragStart,\"dragend\":m.dragEnd}},[_vm._v(_vm._s(_vm.title))])}}])},[_c('div',{staticClass:\"modal-body\"},[_vm._v(\"\\n \"+_vm._s(_vm.question)+\"\\n \"),_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.answer),expression:\"answer\"}],ref:\"answer\",attrs:{\"type\":\"text\"},domProps:{\"value\":(_vm.answer)},on:{\"keyup\":function($event){if(!('button' in $event)&&_vm._k($event.keyCode,\"enter\",13,$event.key,\"Enter\")){ return null; }return _vm.submit($event)},\"input\":function($event){if($event.target.composing){ return; }_vm.answer=$event.target.value}}})]),_c('div',{staticClass:\"modal-footer\"},[_c('button',{on:{\"click\":_vm.submit}},[_vm._v(\"Submit\")])])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","export * from \"-!cache-loader?{\\\"cacheDirectory\\\":\\\"node_modules/.cache/vue-loader\\\",\\\"cacheIdentifier\\\":\\\"74f43d04-vue-loader-template\\\"}!../../../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./prompt.vue?vue&type=template&id=0602c2e6&scoped=true&\"","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nimport Vue from \"vue\";\nimport Component from \"vue-class-component\";\nimport draggable from \"vuedraggable\";\nVue.component(\"draggable\", draggable);\n\nimport Modal from \"@/core/components/modals/modal.vue\";\n\nimport { uuidv4 } from \"@/core/utils\";\nimport { socket } from \"@/game/api/socket\";\nimport { InitiativeData, InitiativeEffect } from \"@/game/comm/types/general\";\nimport { EventBus } from \"@/game/event-bus\";\nimport { layerManager } from \"@/game/layers/manager\";\nimport { gameStore } from \"@/game/store\";\nimport { gameManager } from '../manager';\n\n@Component({\n components: {\n Modal,\n draggable,\n },\n})\nexport default class Initiative extends Vue {\n visible = false;\n data: InitiativeData[] = [];\n currentActor: string | null = null;\n roundCounter = 0;\n visionLock = false;\n cameraLock = false;\n _activeTokens: string[] = [];\n\n mounted() {\n EventBus.$on(\"Initiative.Clear\", this.clear);\n EventBus.$on(\"Initiative.Remove\", (data: string) => this.removeInitiative(data));\n EventBus.$on(\"Initiative.Show\", () => (this.visible = true));\n\n socket.on(\"Initiative.Set\", (data: InitiativeData[]) => {\n this.data = data;\n });\n socket.on(\"Initiative.Turn.Set\", (data: string) => this.setTurn(data));\n socket.on(\"Initiative.Turn.Update\", (data: string) => this.updateTurn(data, false));\n socket.on(\"Initiative.Round.Update\", (data: number) => this.setRound(data, false));\n socket.on(\"Initiative.Effect.New\", (data: { actor: string; effect: InitiativeEffect }) => {\n const actor = this.getActor(data.actor);\n if (actor === undefined) return;\n this.createEffect(actor, data.effect, false);\n });\n socket.on(\"Initiative.Effect.Update\", (data: { actor: string; effect: InitiativeEffect }) =>\n this.updateEffect(data.actor, data.effect, false),\n );\n }\n\n beforeDestroy() {\n EventBus.$off(\"Initiative.Clear\");\n EventBus.$off(\"Initiative.Remove\");\n EventBus.$off(\"Initiative.Show\");\n }\n\n // Utilities\n clear() {\n this.data = [];\n this.currentActor = null;\n }\n getActor(actorId: string) {\n return this.data.find(a => a.uuid === actorId);\n }\n contains(uuid: string) {\n return this.data.some(d => d.uuid === uuid);\n }\n owns(actor: InitiativeData): boolean {\n if (gameStore.IS_DM) return true;\n const shape = layerManager.UUIDMap.get(actor.uuid);\n // Shapes that are unknown to this client are hidden from this client but owned by other clients\n if (shape === undefined) return false;\n return shape.owners.includes(gameStore.username);\n }\n getDefaultEffect() {\n return { uuid: uuidv4(), name: \"New Effect\", turns: 10 };\n }\n fakeSetData(dataTransfer: DataTransfer) {\n dataTransfer.setData(\"Hack\", \"\");\n }\n syncInitiative(data: InitiativeData | { uuid: string }) {\n socket.emit(\"Initiative.Update\", data);\n }\n // Events\n addInitiative(data: InitiativeData) {\n const d = this.data.findIndex(a => a.uuid === data.uuid);\n if (d >= 0) return;\n if (data.initiative === undefined) data.initiative = 0;\n this.syncInitiative(data);\n }\n removeInitiative(uuid: string) {\n const d = this.data.findIndex(a => a.uuid === uuid);\n if (d < 0 || this.data[d].group) return;\n this.syncInitiative({ uuid });\n // Remove highlight\n const shape = layerManager.UUIDMap.get(uuid);\n if (shape === undefined) return;\n if (shape.showHighlight) {\n shape.showHighlight = false;\n layerManager.getLayer(shape.layer)!.invalidate(true);\n }\n }\n updateOrder() {\n if (!gameStore.IS_DM) return;\n socket.emit(\"Initiative.Set\", this.data.map(d => d.uuid));\n }\n updateTurn(actorId: string | null, sync: boolean) {\n if (!gameStore.IS_DM && sync) return;\n this.currentActor = actorId;\n const actor = this.data.find(a => a.uuid === actorId);\n if (actor === undefined) return;\n if (actor.effects) {\n for (let e = actor.effects.length - 1; e >= 0; e--) {\n if (actor.effects[e].turns <= 0) actor.effects.splice(e, 1);\n else actor.effects[e].turns--;\n }\n }\n if (this.visionLock) {\n if (actorId !== null && gameStore.ownedtokens.includes(actorId)) gameStore.setActiveTokens([actorId]);\n else gameStore.setActiveTokens([]);\n }\n if (this.cameraLock) {\n if (actorId !== null) {\n const shape = layerManager.UUIDMap.get(actorId);\n if (shape !== undefined && shape.ownedBy()) {\n gameManager.setCenterPosition(shape.center());\n }\n }\n }\n if (sync) socket.emit(\"Initiative.Turn.Update\", actorId);\n }\n setRound(round: number, sync: boolean) {\n if (!gameStore.IS_DM && sync) return;\n this.roundCounter = round;\n if (sync) socket.emit(\"Initiative.Round.Update\", round);\n }\n setTurn(actorId: string | null) {\n this.currentActor = actorId;\n }\n nextTurn() {\n if (!gameStore.IS_DM) return;\n const order = this.data;\n const next = order[(order.findIndex(a => a.uuid === this.currentActor) + 1) % order.length];\n if (this.data[0].uuid === next.uuid) this.setRound(this.roundCounter + 1, true);\n this.updateTurn(next.uuid, true);\n }\n toggleHighlight(actor: InitiativeData, show: boolean) {\n const shape = layerManager.UUIDMap.get(actor.uuid);\n if (shape === undefined) return;\n shape.showHighlight = show;\n layerManager.getLayer(shape.layer)!.invalidate(true);\n }\n toggleOption(actor: InitiativeData, option: \"visible\" | \"group\") {\n if (!this.owns(actor)) return;\n actor[option] = !actor[option];\n this.syncInitiative(actor);\n }\n createEffect(actor: InitiativeData, effect: InitiativeEffect, sync: boolean) {\n if (!this.owns(actor)) return;\n actor.effects.push(effect);\n if (sync) socket.emit(\"Initiative.Effect.New\", { actor: actor.uuid, effect });\n }\n syncEffect(actor: InitiativeData, effect: InitiativeEffect) {\n if (!this.owns(actor)) return;\n socket.emit(\"Initiative.Effect.Update\", { actor: actor.uuid, effect });\n }\n updateEffect(actorId: string, effect: InitiativeEffect, sync: boolean) {\n const actor = this.data.find(a => a.uuid === actorId);\n if (actor === undefined) return;\n const effectIndex = actor.effects.findIndex(e => e.uuid === effect.uuid);\n if (effectIndex === undefined) return;\n actor.effects[effectIndex] = effect;\n if (sync) this.syncEffect(actor, effect);\n else this.$forceUpdate();\n }\n toggleVisionLock() {\n this.visionLock = !this.visionLock;\n if (this.visionLock) {\n this._activeTokens = [...gameStore._activeTokens];\n if (this.currentActor !== null && gameStore.ownedtokens.includes(this.currentActor)) gameStore.setActiveTokens([this.currentActor]);\n } else {\n gameStore.setActiveTokens(this._activeTokens);\n }\n }\n}\n","import { render, staticRenderFns } from \"./selection_info.vue?vue&type=template&id=674cf937&scoped=true&\"\nimport script from \"./selection_info.vue?vue&type=script&lang=ts&\"\nexport * from \"./selection_info.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./selection_info.vue?vue&type=style&index=0&id=674cf937&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"674cf937\",\n null\n \n)\n\ncomponent.options.__file = \"selection_info.vue\"\nexport default component.exports","import Vue from \"vue\";\n\nimport { Action, getModule, Module, Mutation, VuexModule } from \"vuex-module-decorators\";\n\nimport { AssetList } from \"@/core/comm/types\";\nimport { socket } from \"@/game/api/socket\";\nimport { sendClientOptions } from \"@/game/api/utils\";\nimport { Note } from \"@/game/comm/types/general\";\nimport { ServerShape } from \"@/game/comm/types/shapes\";\nimport { GlobalPoint } from \"@/game/geom\";\nimport { layerManager } from \"@/game/layers/manager\";\nimport { g2l, l2g } from \"@/game/units\";\nimport { zoomValue } from \"@/game/utils\";\nimport { BoundingVolume } from \"@/game/visibility/bvh/bvh\";\nimport { triangulate } from \"@/game/visibility/te/pa\";\nimport { rootStore } from \"@/store\";\n\nexport interface GameState {\n boardInitialized: boolean;\n}\n\n@Module({ dynamic: true, store: rootStore, name: \"game\", namespaced: true })\nclass GameStore extends VuexModule implements GameState {\n // This is a limited view of selectable layers that is used to generate the layer selection UI and ability to switch layers\n // See the layerManager for proper layer management tools\n layers: string[] = [];\n selectedLayerIndex = -1;\n boardInitialized = false;\n\n locations: string[] = [];\n\n assets: AssetList = {};\n\n notes: Note[] = [];\n\n IS_DM = false;\n FAKE_PLAYER = false;\n gridSize = 50;\n username = \"\";\n roomName = \"\";\n roomCreator = \"\";\n invitationCode = \"\";\n\n gridColour = \"rgba(0, 0, 0, 1)\";\n fowColour = \"rgba(0, 0, 0, 1)\";\n rulerColour = \"rgba(255, 0, 0, 1)\";\n panX = 0;\n panY = 0;\n\n zoomDisplay = 0.5;\n // zoomFactor = 1;\n\n unitSize = 5;\n useGrid = true;\n fullFOW = false;\n fowOpacity = 0.3;\n fowLOS = false;\n locationName = \"\";\n\n visionSources: { shape: string; aura: string }[] = [];\n visionBlockers: string[] = [];\n annotations: string[] = [];\n movementblockers: string[] = [];\n ownedtokens: string[] = [];\n _activeTokens: string[] = [];\n\n BV = Object.freeze(new BoundingVolume([]));\n\n visionMode: \"bvh\" | \"triangle\" = \"bvh\";\n drawTEContour = false;\n visionRangeMin = 1640;\n visionRangeMax = 3281;\n\n clipboard: ServerShape[] = [];\n\n // Maps are not yet supported in Vue untill 3.X, so for now we're using a plain old object\n labels: { [uuid: string]: Label } = {};\n\n filterNoLabel = false;\n labelFilters: string[] = [];\n\n showUI = true;\n\n get selectedLayer() {\n return this.layers[this.selectedLayerIndex];\n }\n\n get zoomFactor() {\n return zoomValue(this.zoomDisplay);\n }\n\n get activeTokens() {\n if (this._activeTokens.length === 0) return this.ownedtokens;\n return this._activeTokens;\n }\n\n @Mutation\n setFakePlayer(value: boolean) {\n this.FAKE_PLAYER = value;\n this.IS_DM = !value;\n layerManager.invalidate();\n }\n\n @Mutation\n setZoomDisplay(zoom: number) {\n if (zoom === this.zoomDisplay) return;\n if (zoom < 0) zoom = 0;\n if (zoom > 1) zoom = 1;\n this.zoomDisplay = zoom;\n layerManager.invalidate();\n }\n\n @Mutation\n setVisionMode(data: { mode: \"bvh\" | \"triangle\"; sync: boolean }) {\n this.visionMode = data.mode;\n if (data.sync) socket.emit(\"Location.Options.Set\", { vision_mode: data.mode });\n }\n\n @Mutation\n setBoardInitialized(boardInitialized: boolean) {\n this.boardInitialized = boardInitialized;\n }\n\n @Mutation\n toggleUnlabeledFilter() {\n this.filterNoLabel = !this.filterNoLabel;\n }\n\n @Mutation\n addLabel(label: Label) {\n Vue.set(this.labels, label.uuid, label);\n }\n\n @Mutation\n setLabelFilters(filters: string[]) {\n this.labelFilters = filters;\n }\n\n @Mutation\n setLabelVisibility(data: { user: string; uuid: string; visible: boolean }) {\n if (!(data.uuid in this.labels)) return;\n this.labels[data.uuid].visible = data.visible;\n }\n\n @Mutation\n deleteLabel(data: { uuid: string; user: string }) {\n if (!(data.uuid in this.labels)) return;\n const label = this.labels[data.uuid];\n const updatedLayers: Set = new Set();\n for (const shape of layerManager.UUIDMap.values()) {\n const i = shape.labels.indexOf(label);\n if (i >= 0) {\n shape.labels.splice(i, 1);\n updatedLayers.add(shape.layer);\n }\n }\n for (const layer of updatedLayers) layerManager.getLayer(layer)!.invalidate(false);\n Vue.delete(this.labels, data.uuid);\n }\n\n @Mutation\n setDM(isDM: boolean) {\n this.IS_DM = isDM;\n }\n\n @Mutation\n setUsername(username: string) {\n this.username = username;\n }\n\n @Mutation\n setRoomName(name: string) {\n this.roomName = name;\n }\n\n @Mutation\n setRoomCreator(name: string) {\n this.roomCreator = name;\n }\n\n @Mutation\n setInvitationCode(code: string) {\n this.invitationCode = code;\n }\n\n @Mutation\n addLayer(name: string) {\n this.layers.push(name);\n if (this.selectedLayerIndex === -1) this.selectedLayerIndex = this.layers.indexOf(name);\n }\n\n @Mutation\n selectLayer(data: { name: string; sync: boolean }) {\n const index = this.layers.indexOf(data.name);\n if (index >= 0) this.selectedLayerIndex = index;\n if (data.sync) socket.emit(\"Client.ActiveLayer.Set\", data.name);\n }\n\n @Mutation\n newNote(data: { note: Note; sync: boolean }) {\n this.notes.push(data.note);\n if (data.sync) socket.emit(\"Note.New\", data.note);\n }\n\n @Mutation\n setAssets(assets: AssetList) {\n this.assets = assets;\n }\n\n @Mutation\n setLocations(locations: string[]) {\n this.locations = locations;\n }\n\n @Mutation\n resetLayerInfo() {\n this.layers = [];\n this.selectedLayerIndex = -1;\n }\n\n @Mutation\n recalculateVision(partial = false) {\n if (this.boardInitialized) {\n if (this.visionMode === \"triangle\") triangulate(\"vision\", partial);\n else this.BV = Object.freeze(new BoundingVolume(this.visionBlockers));\n }\n }\n\n @Mutation\n recalculateMovement(partial = false) {\n if (this.boardInitialized && this.visionMode === \"triangle\") triangulate(\"movement\", partial);\n }\n\n @Mutation\n updateZoom(data: { newZoomDisplay: number; zoomLocation: GlobalPoint }) {\n if (data.newZoomDisplay === this.zoomDisplay) return;\n if (data.newZoomDisplay < 0) data.newZoomDisplay = 0;\n if (data.newZoomDisplay > 1) data.newZoomDisplay = 1;\n const oldLoc = g2l(data.zoomLocation);\n this.zoomDisplay = data.newZoomDisplay;\n const newLoc = l2g(oldLoc);\n // Change the pan settings to keep the zoomLocation in the same exact location before and after the zoom.\n const diff = newLoc.subtract(data.zoomLocation);\n this.panX += diff.x;\n this.panY += diff.y;\n layerManager.invalidate();\n sendClientOptions();\n }\n\n @Mutation\n setGridColour(data: { colour: string; sync: boolean }) {\n this.gridColour = data.colour;\n layerManager.getGridLayer()!.drawGrid();\n if (data.sync) socket.emit(\"Client.Options.Set\", { gridColour: data.colour });\n }\n\n @Mutation\n setFOWColour(data: { colour: string; sync: boolean }) {\n this.fowColour = data.colour;\n layerManager.invalidate();\n if (data.sync) socket.emit(\"Client.Options.Set\", { fowColour: data.colour });\n }\n\n @Mutation\n setRulerColour(data: { colour: string; sync: boolean }) {\n this.rulerColour = data.colour;\n if (data.sync) socket.emit(\"Client.Options.Set\", { rulerColour: data.colour });\n }\n\n @Mutation\n setPanX(x: number) {\n this.panX = x;\n }\n\n @Mutation\n setPanY(y: number) {\n this.panY = y;\n }\n\n @Mutation\n increasePanX(increase: number) {\n this.panX += increase;\n }\n\n @Mutation\n increasePanY(increase: number) {\n this.panY += increase;\n }\n\n @Mutation\n setUnitSize(data: { unitSize: number; sync: boolean }) {\n if (this.unitSize !== data.unitSize && data.unitSize > 0 && data.unitSize < Infinity) {\n this.unitSize = data.unitSize;\n layerManager.invalidate();\n if (data.sync) socket.emit(\"Location.Options.Set\", { unit_size: data.unitSize });\n }\n }\n\n @Mutation\n setUseGrid(data: { useGrid: boolean; sync: boolean }) {\n if (this.useGrid !== data.useGrid) {\n this.useGrid = data.useGrid;\n const gridLayer = layerManager.getGridLayer()!;\n if (data.useGrid) gridLayer.canvas.style.display = \"block\";\n else gridLayer.canvas.style.display = \"none\";\n if (data.sync) socket.emit(\"Location.Options.Set\", { use_grid: data.useGrid });\n }\n }\n\n @Mutation\n setGridSize(data: { gridSize: number; sync: boolean }): void {\n if (this.gridSize !== data.gridSize && data.gridSize > 0) {\n this.gridSize = data.gridSize;\n const gridLayer = layerManager.getGridLayer();\n if (gridLayer !== undefined) gridLayer.drawGrid();\n if (data.sync) socket.emit(\"Gridsize.Set\", data.gridSize);\n }\n }\n\n @Mutation\n setVisionRangeMin(data: { value: number; sync: boolean }): void {\n this.visionRangeMin = data.value;\n layerManager.invalidateLight();\n if (data.sync) socket.emit(\"Location.Options.Set\", { vision_min_range: data.value });\n }\n\n @Mutation\n setVisionRangeMax(data: { value: number; sync: boolean }): void {\n this.visionRangeMax = Math.max(data.value, this.visionRangeMin);\n layerManager.invalidateLight();\n if (data.sync) socket.emit(\"Location.Options.Set\", { vision_max_range: this.visionRangeMax });\n }\n\n @Mutation\n setFullFOW(data: { fullFOW: boolean; sync: boolean }) {\n if (this.fullFOW !== data.fullFOW) {\n this.fullFOW = data.fullFOW;\n layerManager.invalidateLight();\n if (data.sync) socket.emit(\"Location.Options.Set\", { full_fow: data.fullFOW });\n }\n }\n\n @Mutation\n setFOWOpacity(data: { fowOpacity: number; sync: boolean }) {\n this.fowOpacity = data.fowOpacity;\n layerManager.invalidateLight();\n if (data.sync) socket.emit(\"Location.Options.Set\", { fow_opacity: data.fowOpacity });\n }\n\n @Mutation\n setLineOfSight(data: { fowLOS: boolean; sync: boolean }) {\n if (this.fowLOS !== data.fowLOS) {\n this.fowLOS = data.fowLOS;\n layerManager.invalidate();\n if (data.sync) socket.emit(\"Location.Options.Set\", { fow_los: data.fowLOS });\n }\n }\n\n @Mutation\n setLocationName(name: string) {\n this.locationName = name;\n }\n\n @Mutation\n updateNote(data: { note: Note; sync: boolean }) {\n const actualNote = this.notes.find(n => n.uuid === data.note.uuid);\n if (actualNote === undefined) return;\n actualNote.title = data.note.title;\n actualNote.text = data.note.text;\n if (data.sync) socket.emit(\"Note.Update\", actualNote);\n }\n\n @Mutation\n removeNote(data: { note: Note; sync: boolean }) {\n this.notes = this.notes.filter(n => n.uuid !== data.note.uuid);\n if (data.sync) socket.emit(\"Note.Remove\", data.note.uuid);\n }\n\n @Mutation\n toggleUI() {\n this.showUI = !this.showUI;\n }\n\n @Mutation\n setClipboard(clipboard: ServerShape[]) {\n this.clipboard = clipboard;\n }\n\n @Mutation\n setActiveTokens(tokens: string[]) {\n this._activeTokens = tokens;\n layerManager.invalidateLight();\n }\n\n @Mutation\n addActiveToken(token: string) {\n this._activeTokens.push(token);\n layerManager.invalidateLight();\n }\n\n @Mutation\n removeActiveToken(token: string) {\n if (this._activeTokens.length === 0) {\n this._activeTokens = [...this.ownedtokens];\n }\n this._activeTokens.splice(this._activeTokens.indexOf(token), 1);\n layerManager.invalidateLight();\n }\n\n @Action\n clear() {\n (this.context.state).visionSources = [];\n (this.context.state).visionBlockers = [];\n (this.context.state).ownedtokens = [];\n (this.context.state).annotations = [];\n (this.context.state).movementblockers = [];\n (this.context.state).notes = [];\n this.context.commit(\"recalculateVision\");\n this.context.commit(\"recalculateMovement\");\n }\n}\n\nexport const gameStore = getModule(GameStore);\n","import mod from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./colorpicker.vue?vue&type=style&index=0&id=d32461a4&scoped=true&lang=css&\"; export default mod; export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./colorpicker.vue?vue&type=style&index=0&id=d32461a4&scoped=true&lang=css&\"","import mod from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/ts-loader/index.js??ref--12-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./confirm.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/ts-loader/index.js??ref--12-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./confirm.vue?vue&type=script&lang=ts&\"","import { ServerAura } from \"@/game/comm/types/shapes\";\n\nexport const aurasFromServer = (auras: ServerAura[]): Aura[] => {\n const result = [];\n for (const aura of auras) {\n result.push({\n uuid: aura.uuid,\n visionSource: aura.vision_source,\n visible: aura.visible,\n name: aura.name,\n value: aura.value,\n dim: aura.dim,\n colour: aura.colour,\n });\n }\n return result;\n};\n\nexport const aurasToServer = (auras: Aura[]): ServerAura[] => {\n const result = [];\n for (const aura of auras) {\n result.push({\n uuid: aura.uuid,\n vision_source: aura.visionSource,\n visible: aura.visible,\n name: aura.name,\n value: aura.value,\n dim: aura.dim,\n colour: aura.colour,\n });\n }\n return result;\n};\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/ts-loader/index.js??ref--12-2!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./contextMenu.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/ts-loader/index.js??ref--12-2!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./contextMenu.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./note.vue?vue&type=template&id=7a3669fd&scoped=true&\"\nimport script from \"./note.vue?vue&type=script&lang=ts&\"\nexport * from \"./note.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./note.vue?vue&type=style&index=0&id=7a3669fd&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"7a3669fd\",\n null\n \n)\n\ncomponent.options.__file = \"note.vue\"\nexport default component.exports","import { render, staticRenderFns } from \"./initiative.vue?vue&type=template&id=07fc8ff2&scoped=true&\"\nimport script from \"./initiative.vue?vue&type=script&lang=ts&\"\nexport * from \"./initiative.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./initiative.vue?vue&type=style&index=0&id=07fc8ff2&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"07fc8ff2\",\n null\n \n)\n\ncomponent.options.__file = \"initiative.vue\"\nexport default component.exports","import { ServerLayer } from \"@/game/comm/types/general\";\nimport { FOWLayer } from \"@/game/layers/fow\";\nimport { FOWPlayersLayer } from \"@/game/layers/fowplayers\";\nimport { GridLayer } from \"@/game/layers/grid\";\nimport { Layer } from \"@/game/layers/layer\";\nimport { layerManager } from \"@/game/layers/manager\";\nimport { gameStore } from \"@/game/store\";\n\nexport function createLayer(layerInfo: ServerLayer) {\n // Create canvas element\n const canvas = document.createElement(\"canvas\");\n canvas.style.zIndex = layerManager.layers.length.toString();\n canvas.width = window.innerWidth;\n canvas.height = window.innerHeight;\n\n // Create the Layer instance\n let layer: Layer;\n if (layerInfo.type_ === \"grid\") layer = new GridLayer(canvas, layerInfo.name);\n else if (layerInfo.type_ === \"fow\") layer = new FOWLayer(canvas, layerInfo.name);\n else if (layerInfo.type_ === \"fow-players\") layer = new FOWPlayersLayer(canvas, layerInfo.name);\n else layer = new Layer(canvas, layerInfo.name);\n layer.selectable = layerInfo.selectable;\n layer.playerEditable = layerInfo.player_editable;\n layerManager.addLayer(layer);\n\n // Add the element to the DOM\n const layers = document.getElementById(\"layers\");\n if (layers === null) {\n console.warn(\"Layers div is missing, this will prevent the main game board from loading!\");\n return;\n }\n if (layerInfo.name !== \"fow-players\") layers.appendChild(canvas);\n\n if (layerInfo.type_ === \"grid\" && layerInfo.size) gameStore.setGridSize({ gridSize: layerInfo.size, sync: false });\n // Load layer shapes\n layer.setShapes(layerInfo.shapes);\n}\n","import { render, staticRenderFns } from \"./labels.vue?vue&type=template&id=e477c214&scoped=true&\"\nimport script from \"./labels.vue?vue&type=script&lang=ts&\"\nexport * from \"./labels.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./labels.vue?vue&type=style&index=0&id=e477c214&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"e477c214\",\n null\n \n)\n\ncomponent.options.__file = \"labels.vue\"\nexport default component.exports","import mod from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/ts-loader/index.js??ref--12-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./edit_dialog.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/ts-loader/index.js??ref--12-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./edit_dialog.vue?vue&type=script&lang=ts&\"","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('div',{attrs:{\"id\":\"toolselect\"}},[_c('ul',_vm._l((_vm.visibleTools),function(tool){return _c('li',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.toolVisible(tool)),expression:\"toolVisible(tool)\"}],key:tool,ref:tool + '-selector',refInFor:true,class:{'tool-selected': _vm.currentTool === tool},on:{\"mousedown\":function($event){_vm.currentTool = tool}}},[_c('a',{attrs:{\"href\":\"#\"}},[_vm._v(_vm._s(tool))])])}))]),_c('div',[[_c('select-tool',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.currentTool === 'Select'),expression:\"currentTool === 'Select'\"}],ref:\"selectTool\"}),_c('pan-tool',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.currentTool === 'Pan'),expression:\"currentTool === 'Pan'\"}]}),_c('keep-alive',[_c('draw-tool',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.currentTool === 'Draw'),expression:\"currentTool === 'Draw'\"}]})],1),_c('ruler-tool',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.currentTool === 'Ruler'),expression:\"currentTool === 'Ruler'\"}]}),_c('map-tool',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.currentTool === 'Map'),expression:\"currentTool === 'Map'\"}]}),_c('filter-tool',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.currentTool === 'Filter'),expression:\"currentTool === 'Filter'\"}]}),_c('vision-tool',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.currentTool === 'Vision'),expression:\"currentTool === 'Vision'\"}]}),_c('shape-menu',{ref:\"shapecontext\"}),_c('createtoken-dialog',{ref:\"createtokendialog\"})]],2)])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","export * from \"-!cache-loader?{\\\"cacheDirectory\\\":\\\"node_modules/.cache/vue-loader\\\",\\\"cacheIdentifier\\\":\\\"74f43d04-vue-loader-template\\\"}!../../../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./tools.vue?vue&type=template&id=b6e1f51c&scoped=true&\"","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('form',{on:{\"focusin\":_vm.focusin,\"focusout\":_vm.focusout,\"submit\":function($event){$event.preventDefault();return _vm.login($event)}}},[_c('fieldset',[_c('legend',{staticClass:\"legend\"},[_vm._v(\"PlanarAlly\")]),_c('div',{staticClass:\"input\"},[_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.username),expression:\"username\"}],attrs:{\"type\":\"text\",\"name\":\"username\",\"placeholder\":\"Username\",\"autocomplete\":\"username\",\"required\":\"\"},domProps:{\"value\":(_vm.username)},on:{\"input\":function($event){if($event.target.composing){ return; }_vm.username=$event.target.value}}}),_vm._m(0)]),_c('div',{staticClass:\"input\"},[_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.password),expression:\"password\"}],attrs:{\"type\":\"password\",\"name\":\"password\",\"placeholder\":\"Password\",\"autocomplete\":\"current-password\",\"required\":\"\"},domProps:{\"value\":(_vm.password)},on:{\"input\":function($event){if($event.target.composing){ return; }_vm.password=$event.target.value}}}),_vm._m(1)]),_c('div',{staticStyle:{\"display\":\"flex\"}},[_c('button',{staticStyle:{\"visibility\":\"hidden\",\"display\":\"none\"},attrs:{\"type\":\"submit\",\"name\":\"login\"}}),_c('button',{staticClass:\"submit\",attrs:{\"type\":\"button\",\"name\":\"register\",\"title\":\"Register\"},on:{\"click\":_vm.register}},[_c('i',{staticClass:\"fas fa-plus\"})]),_vm._m(2)])]),(_vm.error)?_c('div',{staticClass:\"feedback\"},[_c('p',{staticClass:\"error\"},[_c('strong',[_vm._v(\"Error:\")]),_vm._v(\"\\n \"+_vm._s(_vm.error)+\"\\n \")])]):_vm._e()])}\nvar staticRenderFns = [function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('span',[_c('i',{staticClass:\"fas fa-user-circle\"})])},function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('span',[_c('i',{staticClass:\"fas fa-lock\"})])},function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('button',{staticClass:\"submit\",attrs:{\"type\":\"submit\",\"name\":\"login\",\"title\":\"Login\"}},[_c('i',{staticClass:\"fas fa-arrow-right\"})])}]\n\nexport { render, staticRenderFns }","export * from \"-!cache-loader?{\\\"cacheDirectory\\\":\\\"node_modules/.cache/vue-loader\\\",\\\"cacheIdentifier\\\":\\\"74f43d04-vue-loader-template\\\"}!../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./login.vue?vue&type=template&id=bc30fc14&scoped=true&\"","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nimport Vue from \"vue\";\nimport Component from \"vue-class-component\";\n\nimport Prompt from \"@/core/components/modals/prompt.vue\";\nimport EditDialog from \"@/game/ui/selection/edit_dialog.vue\";\n\nimport { getRef } from \"@/core/utils\";\nimport { socket } from \"@/game/api/socket\";\nimport { EventBus } from \"@/game/event-bus\";\nimport { layerManager } from \"@/game/layers/manager\";\nimport { Shape } from \"@/game/shapes/shape\";\n\n@Component({\n components: {\n \"edit-dialog\": EditDialog,\n },\n})\nexport default class SelectionInfo extends Vue {\n shape: Shape | null = null;\n\n mounted() {\n EventBus.$on(\"SelectionInfo.Shape.Set\", (shape: Shape | null) => {\n this.shape = shape;\n });\n }\n\n beforeDestroy() {\n EventBus.$off(\"SelectionInfo.Shape.Set\");\n }\n\n openEditDialog() {\n (this.$refs.editDialog).visible = true;\n }\n changeValue(object: Tracker | Aura, redraw: boolean) {\n if (this.shape === null) return;\n getRef(\"prompt\")\n .prompt(`New ${object.name} value:`, `Updating ${object.name}`)\n .then(\n (value: string) => {\n if (this.shape === null) return;\n const ogValue = object.value;\n if (value[0] === \"+\" || value[0] === \"-\") object.value += parseInt(value, 10);\n else object.value = parseInt(value, 10);\n if (isNaN(object.value)) object.value = ogValue;\n socket.emit(\"Shape.Update\", { shape: this.shape.asDict(), redraw, temporary: false });\n if (redraw) layerManager.invalidate();\n },\n () => {},\n );\n }\n}\n","import { AssetList } from \"@/core/comm/types\";\nimport { socket } from \"@/game/api/socket\";\nimport { BoardInfo, Note, ServerClient, ServerLocation } from \"@/game/comm/types/general\";\nimport { ServerShape } from \"@/game/comm/types/shapes\";\nimport { EventBus } from \"@/game/event-bus\";\nimport { GlobalPoint } from \"@/game/geom\";\nimport { layerManager } from \"@/game/layers/manager\";\nimport { createLayer } from \"@/game/layers/utils\";\nimport { gameManager } from \"@/game/manager\";\nimport { gameStore } from \"@/game/store\";\nimport { router } from \"@/router\";\nimport { zoomDisplay } from \"../utils\";\n\nsocket.on(\"connect\", () => {\n console.log(\"Connected\");\n});\nsocket.on(\"disconnect\", () => {\n console.log(\"Disconnected\");\n});\nsocket.on(\"connect_error\", (error: any) => {\n console.error(\"Could not connect to game session.\");\n router.push(\"/dashboard\");\n});\nsocket.on(\"error\", (error: any) => {\n console.error(\"Game session does not exist.\");\n router.push(\"/dashboard\");\n});\nsocket.on(\"redirect\", (destination: string) => {\n console.log(\"redirecting\");\n router.push(destination);\n});\nsocket.on(\"Room.Info.Set\", (data: { name: string; creator: string; invitationCode: string }) => {\n gameStore.setRoomName(data.name);\n gameStore.setRoomCreator(data.creator);\n gameStore.setInvitationCode(data.invitationCode);\n});\nsocket.on(\"Username.Set\", (username: string) => {\n gameStore.setUsername(username);\n gameStore.setDM(username === window.location.pathname.split(\"/\")[2]);\n});\nsocket.on(\"Client.Options.Set\", (options: ServerClient) => {\n gameStore.setGridColour({ colour: options.grid_colour, sync: false });\n gameStore.setFOWColour({ colour: options.fow_colour, sync: false });\n gameStore.setRulerColour({ colour: options.ruler_colour, sync: false });\n gameStore.setPanX(options.pan_x);\n gameStore.setPanY(options.pan_y);\n gameStore.setZoomDisplay(zoomDisplay(options.zoom_factor));\n // gameStore.setZoomDisplay(0.5);\n if (options.active_layer) layerManager.selectLayer(options.active_layer, false);\n if (layerManager.getGridLayer() !== undefined) layerManager.getGridLayer()!.invalidate();\n});\nsocket.on(\"Location.Set\", (data: Partial) => {\n if (data.name !== undefined) gameStore.setLocationName(data.name);\n if (data.unit_size !== undefined) gameStore.setUnitSize({ unitSize: data.unit_size, sync: false });\n if (data.use_grid !== undefined) gameStore.setUseGrid({ useGrid: data.use_grid, sync: false });\n if (data.full_fow !== undefined) gameStore.setFullFOW({ fullFOW: data.full_fow, sync: false });\n if (data.fow_opacity !== undefined) gameStore.setFOWOpacity({ fowOpacity: data.fow_opacity, sync: false });\n if (data.fow_los !== undefined) gameStore.setLineOfSight({ fowLOS: data.fow_los, sync: false });\n if (data.vision_min_range !== undefined) gameStore.setVisionRangeMin({ value: data.vision_min_range, sync: false });\n if (data.vision_max_range !== undefined) gameStore.setVisionRangeMax({ value: data.vision_max_range, sync: false });\n if (data.vision_mode !== undefined) {\n gameStore.setVisionMode({ mode: data.vision_mode, sync: false });\n gameStore.recalculateVision();\n gameStore.recalculateMovement();\n }\n});\nsocket.on(\"Position.Set\", (data: { x: number; y: number }) => {\n gameManager.setCenterPosition(new GlobalPoint(data.x, data.y));\n});\nsocket.on(\"Notes.Set\", (notes: Note[]) => {\n for (const note of notes) gameStore.newNote({ note, sync: false });\n});\nsocket.on(\"Asset.List.Set\", (assets: AssetList) => {\n gameStore.setAssets(assets);\n});\nsocket.on(\"Board.Set\", (locationInfo: BoardInfo) => {\n gameStore.clear();\n gameStore.setLocations(locationInfo.locations);\n document.getElementById(\"layers\")!.innerHTML = \"\";\n gameStore.resetLayerInfo();\n layerManager.reset();\n for (const layer of locationInfo.layers) createLayer(layer);\n // Force the correct opacity render on other layers.\n layerManager.selectLayer(layerManager.getLayer()!.name, false);\n EventBus.$emit(\"Initiative.Clear\");\n gameStore.recalculateVision();\n gameStore.recalculateMovement();\n gameStore.setBoardInitialized(true);\n});\nsocket.on(\"Gridsize.Set\", (gridSize: number) => {\n gameStore.setGridSize({ gridSize, sync: false });\n});\nsocket.on(\"Shape.Add\", (shape: ServerShape) => {\n gameManager.addShape(shape);\n});\nsocket.on(\"Shape.Remove\", (shape: ServerShape) => {\n if (!layerManager.UUIDMap.has(shape.uuid)) {\n console.log(`Attempted to remove an unknown shape`);\n return;\n }\n if (!layerManager.hasLayer(shape.layer)) {\n console.log(`Attempted to remove shape from an unknown layer ${shape.layer}`);\n return;\n }\n const layer = layerManager.getLayer(shape.layer)!;\n layer.removeShape(layerManager.UUIDMap.get(shape.uuid)!, false);\n layer.invalidate(false);\n});\nsocket.on(\"Shape.Order.Set\", (data: { shape: ServerShape; index: number }) => {\n if (!layerManager.UUIDMap.has(data.shape.uuid)) {\n console.log(`Attempted to move the shape order of an unknown shape`);\n return;\n }\n if (!layerManager.hasLayer(data.shape.layer)) {\n console.log(`Attempted to remove shape from an unknown layer ${data.shape.layer}`);\n return;\n }\n const shape = layerManager.UUIDMap.get(data.shape.uuid)!;\n const layer = layerManager.getLayer(shape.layer)!;\n layer.moveShapeOrder(shape, data.index, false);\n});\nsocket.on(\"Shape.Layer.Change\", (data: { uuid: string; layer: string }) => {\n const shape = layerManager.UUIDMap.get(data.uuid);\n if (shape === undefined) return;\n shape.moveLayer(data.layer, false);\n});\nsocket.on(\"Shape.Update\", (data: { shape: ServerShape; redraw: boolean; move: boolean, temporary: boolean }) => {\n gameManager.updateShape(data);\n});\nsocket.on(\"Temp.Clear\", (shapes: ServerShape[]) => {\n shapes.forEach(shape => {\n if (!layerManager.UUIDMap.has(shape.uuid)) {\n console.log(\"Attempted to remove an unknown temporary shape\");\n return;\n }\n if (!layerManager.hasLayer(shape.layer)) {\n console.log(`Attempted to remove shape from an unknown layer ${shape.layer}`);\n return;\n }\n const realShape = layerManager.UUIDMap.get(shape.uuid)!;\n layerManager.getLayer(shape.layer)!.removeShape(realShape, false);\n });\n});\nsocket.on(\"Labels.Set\", (labels: Label[]) => {\n for (const label of labels) gameStore.addLabel(label);\n});\nsocket.on(\"Label.Visibility.Set\", (data: { user: string; uuid: string; visible: boolean }) => {\n gameStore.setLabelVisibility(data);\n});\nsocket.on(\"Label.Add\", (data: Label) => {\n gameStore.addLabel(data);\n});\nsocket.on(\"Label.Delete\", (data: { user: string; uuid: string }) => {\n gameStore.deleteLabel(data);\n});\nsocket.on(\"Labels.Filter.Add\", (uuid: string) => {\n gameStore.labelFilters.push(uuid);\n layerManager.invalidate();\n})\nsocket.on(\"Labels.Filter.Remove\", (uuid: string) => {\n const idx = gameStore.labelFilters.indexOf(uuid);\n if (idx >= 0) {\n gameStore.labelFilters.splice(idx, 1);\n layerManager.invalidate();\n }\n})\nsocket.on(\"Labels.Filters.Set\", (filters: string[]) => {\n gameStore.setLabelFilters(filters);\n})\n"],"sourceRoot":""} \ No newline at end of file diff --git a/server/static/js/app.41dd580f.js b/server/static/js/app.41dd580f.js deleted file mode 100644 index 7bc64b826..000000000 --- a/server/static/js/app.41dd580f.js +++ /dev/null @@ -1,2 +0,0 @@ -(function(e){function t(t){for(var s,r,a=t[0],l=t[1],c=t[2],d=0,h=[];de.fillText(t.text,t.x,t.y)),e.restore()}contains(e){return!1}center(e){}visibleInCanvas(e){return this.getBoundingBox().visibleInCanvas(e)}snapToGrid(){}resizeToGrid(){}resize(e,t){}getMaxHeight(e){const t=this.getLines(e),i=30;return i*t.length}getMaxWidth(e){const t=this.getLines(e),i=t.map(t=>e.measureText(t.text).width);return Math.max(...i)}getLines(e){const t=this.text.split("\n"),i=[],s=e.canvas.width,n=30,o=0;let r=0;for(const a of t){let t="";const l=a.split(" ");for(const a of l){const l=t+a+" ",c=e.measureText(l),u=c.width;u>s?(e.fillText(t,o,r),i.push({text:t,x:o,y:r}),t=a+" ",r+=n):t=l}i.push({text:t,x:o,y:r}),r+=n}return i}}t.Text=r},"01be":function(e,t,i){"use strict";var s=i("919a"),n=i.n(s);n.a},"033f":function(e,t,i){"use strict";i.r(t);var s=i("a1f4"),n=i("a68b");for(var o in n)"default"!==o&&function(e){i.d(t,e,function(){return n[e]})}(o);i("7997");var r=i("2877"),a=Object(r["a"])(n["default"],s["a"],s["b"],!1,null,"759e5a8a",null);a.options.__file="shapecontext.vue",t["default"]=a.exports},"034f":function(e,t,i){"use strict";var s=i("64a9"),n=i.n(s);n.a},"0584":function(e,t,i){"use strict";var s=i("de21"),n=i.n(s);n.a},"0634":function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0});const s=i("9ab4"),n=s.__importDefault(i("66cb")),o=s.__importDefault(i("a026")),r=s.__importDefault(i("65d9")),a=i("c345a"),l=i("60a3");let c=class extends o.default{constructor(){super(...arguments),this.display=!1,this.left=0,this.top=0,this.transparent=!1}mounted(){this.transparent=0===this.$refs.chromePicker.val.rgba.a,this.setPosition()}open(){this.display||this.disabled||(this.setPosition(),this.display=!0,this.$nextTick(()=>this.$children[0].$el.focus()))}updateColor(e){this.transparent=0===e.rgba.a;const t=n.default(e.rgba).toRgbString();this.$emit("update:color",t),this.$emit("input",t)}closePicker(){this.display=!1,this.$emit("change",this.color)}setPosition(){const e=this.$el.getBoundingClientRect();e.right+224>window.innerWidth?this.left=e.left-224:this.left=e.right,e.bottom+242>window.innerHeight?this.top=e.top-242:this.top=e.bottom}};s.__decorate([l.Prop(String)],c.prototype,"color",void 0),s.__decorate([l.Prop(Boolean)],c.prototype,"disabled",void 0),c=s.__decorate([r.default({components:{"chrome-picker":a.Chrome}})],c),t.default=c},"07f5":function(e,t,i){"use strict";i.r(t);var s=i("412c"),n=i("d588");for(var o in n)"default"!==o&&function(e){i.d(t,e,function(){return n[e]})}(o);i("561b"),i("b62e");var r=i("2877"),a=Object(r["a"])(n["default"],s["a"],s["b"],!1,null,"05b88da7",null);a.options.__file="game.vue",t["default"]=a.exports},"0a75":function(e,t,i){},"0b13":function(e,t,i){},"0bc6":function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0});const s=i("9ab4"),n=s.__importDefault(i("8055"));function o(e){t.socket.io.opts.query=`user=${e.params.creator}&room=${e.params.room}`,t.socket.connect()}t.socket=n.default(location.protocol+"//"+location.host+"/planarally",{autoConnect:!1}),t.createConnection=o},"0cf7":function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0});const s=i("9ab4"),n=s.__importDefault(i("a026")),o=s.__importDefault(i("65d9")),r=s.__importDefault(i("4aec")),a=s.__importDefault(i("a535")),l=s.__importDefault(i("cec2")),c=i("5338"),u=i("2d5b"),d=i("4a5b");let h=class extends n.default{constructor(){super(...arguments),this.path=[],this.draggingSelection=!1}get folders(){return u.assetStore.folders}get files(){return u.assetStore.files}get selected(){return u.assetStore.selected}get idMap(){return u.assetStore.idMap}get currentFolder(){return this.path.length?this.path[this.path.length-1]:u.assetStore.root}get parentFolder(){let e=this.path[this.path.length-2];return void 0===e&&(e=u.assetStore.root),e}get firstSelectedFile(){for(const e of u.assetStore.selected)if(u.assetStore.idMap.get(e).file_hash)return u.assetStore.idMap.get(e);return null}changeDirectory(e){e<0?this.path.pop():this.path.push(e),u.assetStore.clearSelected(),c.socket.emit("Folder.Get",this.currentFolder)}createDirectory(){const e=window.prompt("New folder name");null!==e&&c.socket.emit("Folder.Create",{name:e,parent:this.currentFolder})}moveInode(e,t){u.assetStore.files.includes(e)?u.assetStore.files.splice(u.assetStore.files.indexOf(e),1):u.assetStore.folders.splice(u.assetStore.folders.indexOf(e),1),u.assetStore.idMap.delete(e),c.socket.emit("Inode.Move",{inode:e,target:t})}select(e,t){if(e.shiftKey&&u.assetStore.selected.length>0){const e=[...u.assetStore.files,...u.assetStore.folders],i=e.indexOf(u.assetStore.selected[u.assetStore.selected.length-1]),s=e.indexOf(t);for(let t=i;t!==s;i0&&this.upload(e.dataTransfer.files,t);this.draggingSelection=!1}prepareUpload(){document.getElementById("files").click()}upload(e,t){const i=document.getElementById("files").files;if(void 0===e){if(!i)return;e=i}void 0===t&&(t=this.currentFolder);const s=1e5;for(const n of e){const e=d.uuidv4(),i=Math.ceil(n.size/s);for(let o=0;o{c.socket.emit("Asset.Upload",{name:n.name,directory:t,data:r.result,slice:o,totalSlices:i,uuid:e})})}}}};h=s.__decorate([o.default({components:{Prompt:l.default,ConfirmDialog:a.default,AssetContextMenu:r.default},beforeRouteEnter(e,t,i){c.socket.connect(),i()},beforeRouteLeave(e,t,i){c.socket.disconnect(),i()}})],h),t.default=h},"0ddd":function(e,t,i){"use strict";i.r(t);var s=i("8f54"),n=i("4bc3");for(var o in n)"default"!==o&&function(e){i.d(t,e,function(){return n[e]})}(o);i("9dd4");var r=i("2877"),a=Object(r["a"])(n["default"],s["a"],s["b"],!1,null,"6d718094",null);a.options.__file="asset_node.vue",t["default"]=a.exports},1:function(e,t){},"104d":function(e,t,i){"use strict";var s=i("5722"),n=i.n(s);n.a},1077:function(e,t,i){"use strict";i.r(t);var s=i("f994"),n=i("1eee");for(var o in n)"default"!==o&&function(e){i.d(t,e,function(){return n[e]})}(o);i("3cd3");var r=i("2877"),a=Object(r["a"])(n["default"],s["a"],s["b"],!1,null,"bc30fc14",null);a.options.__file="login.vue",t["default"]=a.exports},1216:function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0});const s=i("6f92"),n=i("92b1"),o=i("98ef"),r=i("4aee");function a(e,t){const i=s.layerManager.getLayer("draw");if(void 0===i)return;const o=i.ctx;o.lineJoin="round",o.lineJoin="round",o.beginPath(),o.strokeStyle=void 0===t?`rgb(${255*Math.random()}, ${255*Math.random()}, ${255*Math.random()})`:t,o.moveTo(n.g2lx(e[0][0]),n.g2ly(e[0][1]));for(const s of e)o.lineTo(n.g2lx(s[0]),n.g2ly(s[1]));o.closePath(),o.stroke()}function l(e,t){const i=s.layerManager.getLayer("draw");if(void 0===i)return;const n=i.ctx;n.lineJoin="round",n.lineJoin="round",n.beginPath(),n.strokeStyle=void 0===t?`rgb(${255*Math.random()}, ${255*Math.random()}, ${255*Math.random()})`:t,n.moveTo(e[0][0],e[0][1]);for(const s of e)n.lineTo(s[0],s[1]);n.closePath(),n.stroke()}function c(e,t){return t?e:n.g2lx(e)}function u(e,t){return t?e:n.g2ly(e)}t.drawPolygon=a,t.drawPolygonL=l;let d=0,h=0;function f(e,t,i,s,n){e.beginPath(),e.strokeStyle=s?"rgba(255, 0, 0, 0.30)":"rgba(0, 0, 0, 0.30)",e.moveTo(c(t[0],n),u(t[1],n)),e.lineTo(c(i[0],n),u(i[1],n)),e.closePath(),e.stroke()}function p(e,t=!0,i=!0,n=0){d=0,h=0;let a=0;const l=s.layerManager.getLayer("draw");if(void 0===l)return;const p=l.ctx;i&&p.clearRect(0,0,2e3,1e3),p.lineJoin="round",p.lineJoin="round";const g=new o.EdgeIterator(e);while(g.valid)g.next(),g.collect();g.collect();do{const e=g.edge.first.vertices[r.ccw(g.edge.second)].point,t=g.edge.first.vertices[r.cw(g.edge.second)].point;if(n>0){if(e[0]===-1/0||t[0]===-1/0){g.next();continue}h++,g.edge.first.constraints[g.edge.second]?(d++,2===n&&console.log(`Edge: (*) ${e} > ${t}`)):2===n&&console.log(`Edge: ${e} > ${t}`)}do{g.next(),g.collect()}while(g.valid)}while(null!==g.pos);for(const s of e.triangles){if(s.isInfinite())continue;a++;const e=[];p.fillStyle="red",void 0!==s.vertices[0]&&(e.push(s.vertices[0].point),p.beginPath(),p.arc(c(s.vertices[0].point[0],t),u(s.vertices[0].point[1],t),5,0,2*Math.PI),p.closePath(),p.fill()),void 0!==s.vertices[1]&&(e.push(s.vertices[1].point),p.arc(c(s.vertices[1].point[0],t),u(s.vertices[1].point[1],t),5,0,2*Math.PI),p.closePath(),p.fill()),void 0!==s.vertices[2]&&(e.push(s.vertices[2].point),p.arc(c(s.vertices[2].point[0],t),u(s.vertices[2].point[1],t),5,0,2*Math.PI),p.closePath(),p.fill()),2===n&&console.log("[T] ",...e,s.constraints),p.moveTo(c(s.vertices[0].point[0],t),u(s.vertices[0].point[1],t)),void 0!==s.vertices[0]&&void 0!==s.vertices[1]&&f(p,s.vertices[0].point,s.vertices[1].point,s.constraints[2],t),void 0!==s.vertices[1]&&void 0!==s.vertices[2]&&f(p,s.vertices[1].point,s.vertices[2].point,s.constraints[0],t),void 0!==s.vertices[2]&&void 0!==s.vertices[0]&&f(p,s.vertices[2].point,s.vertices[0].point,s.constraints[1],t)}n>0&&(console.log(`Edges: ${d}/${h}`),console.log(`Faces: ${a}`))}window.DP=a,window.DPL=l,window.DPT=p},1289:function(e,t,i){"use strict";i.r(t);var s=i("df64"),n=i("d677");for(var o in n)"default"!==o&&function(e){i.d(t,e,function(){return n[e]})}(o);i("8790");var r=i("2877"),a=Object(r["a"])(n["default"],s["a"],s["b"],!1,null,"0bf2b7ba",null);a.options.__file="accordion.vue",t["default"]=a.exports},"12d3":function(e,t,i){"use strict";var s=i("a260"),n=i.n(s);n.a},1327:function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0});const s=i("9ab4"),n=s.__importStar(i("66cb")),o=i("4a5b"),r=i("4709"),a=i("f10f"),l=i("92b1");class c extends r.Circle{constructor(e,t,i,s,n,o,r){super(e,t,n,o,r),this.type="circulartoken",this.text=i,this.font=s}asDict(){return Object.assign(this.getBaseDict(),{radius:this.r,text:this.text,font:this.font})}fromDict(e){super.fromDict(e),this.r=e.radius,this.text=e.text,this.font=e.font}draw(e){super.draw(e),e.font=this.font,e.save();const t=l.g2l(this.center());e.textAlign="center",e.textBaseline="middle";const i=o.calcFontScale(e,this.text,l.g2lz(this.r),l.g2lz(this.r)),s=0;e.transform(i,s,-s,i,t.x,t.y),e.fillStyle=n.mostReadable(this.fillColour,["#000","#fff"]).toHexString(),e.fillText(this.text,0,0),e.restore()}getInitiativeRepr(){return{uuid:this.uuid,visible:!a.gameStore.IS_DM,group:!1,source:""===this.name||"Unknown shape"===this.name?this.text:this.name,has_img:!1,effects:[],index:1/0}}}t.CircularToken=c},1625:function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0});const s=i("8f0a"),n=i("6f92"),o=i("b2ed"),r=i("0180"),a=i("f10f"),l=i("92b1");class c{constructor(){this.shown=!1;const e=new s.GlobalPoint(0,0);this.annotationText=new r.Text(e,"","bold 20px serif",0,"rgba(230, 230, 230, 1)"),this.annotationRect=new o.Rect(e,0,0,"rgba(0, 0, 0, 0.6)")}setActiveText(e){if(void 0===this.layer){if(!n.layerManager.hasLayer("draw"))return void console.warn("There is no draw layer to draw annotations on!");this.layer=n.layerManager.getLayer("draw"),this.layer.addShape(this.annotationRect,!1),this.layer.addShape(this.annotationText,!1)}this.shown=""!==e,this.annotationText.refPoint=l.l2g(new s.LocalPoint(this.layer.canvas.width/2,50)),this.annotationText.text=e;const t=this.shown?this.annotationText.getMaxWidth(this.layer.ctx)+10:0,i=this.shown?this.annotationText.getMaxHeight(this.layer.ctx)+10:0;this.annotationRect.refPoint=l.l2g(new s.LocalPoint(this.layer.canvas.width/2-t/2,30)),this.annotationRect.w=t/a.gameStore.zoomFactor,this.annotationRect.h=i/a.gameStore.zoomFactor,this.layer.invalidate(!0)}}t.AnnotationManager=c},"19f9":function(e,t,i){"use strict";i.r(t);var s=i("45bf"),n=i("8cd4");for(var o in n)"default"!==o&&function(e){i.d(t,e,function(){return n[e]})}(o);i("c242");var r=i("2877"),a=Object(r["a"])(n["default"],s["a"],s["b"],!1,null,"aaf3f05e",null);a.options.__file="menu.vue",t["default"]=a.exports},"1c76":function(e,t,i){"use strict";i.r(t);var s=i("2c88"),n=i("300e");for(var o in n)"default"!==o&&function(e){i.d(t,e,function(){return n[e]})}(o);i("7f1e");var r=i("2877"),a=Object(r["a"])(n["default"],s["a"],s["b"],!1,null,null,null);a.options.__file="contextmenu.vue",t["default"]=a.exports},"1dd6":function(e,t,i){"use strict";i.r(t);var s=i("5ae5"),n=i.n(s);for(var o in s)"default"!==o&&function(e){i.d(t,e,function(){return s[e]})}(o);t["default"]=n.a},"1eee":function(e,t,i){"use strict";i.r(t);var s=i("d30b"),n=i.n(s);for(var o in s)"default"!==o&&function(e){i.d(t,e,function(){return s[e]})}(o);t["default"]=n.a},"206a":function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0});const s=i("8f0a"),n=i("6f92"),o=i("6c30"),r=i("4709"),a=i("1327"),l=i("5e7c"),c=i("574e"),u=i("b2ed"),d=i("0180"),h=i("e4ea");function f(e){let t;const i=new s.GlobalPoint(e.x,e.y);if("rect"===e.type_){const s=e;t=new u.Rect(i,s.width,s.height,s.fill_colour,s.stroke_colour,s.uuid)}else if("circle"===e.type_){const s=e;t=new r.Circle(i,s.radius,s.fill_colour,s.stroke_colour,s.uuid)}else if("circulartoken"===e.type_){const s=e;t=new a.CircularToken(i,s.radius,s.text,s.font,s.fill_colour,s.stroke_colour,s.uuid)}else if("line"===e.type_){const n=e;t=new l.Line(i,new s.GlobalPoint(n.x2,n.y2),n.line_width,n.stroke_colour,n.uuid)}else if("multiline"===e.type_){const n=e;t=new c.MultiLine(i,n.points.map(e=>new s.GlobalPoint(e.x,e.y)),n.line_width,n.stroke_colour,n.uuid)}else if("polygon"===e.type_){const n=e;t=new h.Polygon(i,n.vertices.map(e=>new s.GlobalPoint(e.x,e.y)),n.fill_colour,n.stroke_colour,n.uuid)}else if("text"===e.type_){const s=e;t=new d.Text(i,s.text,s.font,s.angle,s.fill_colour,s.stroke_colour,s.uuid)}else{if("assetrect"!==e.type_)return;{const s=e,r=new Image(s.width,s.height);s.src.startsWith("http")?r.src=new URL(s.src).pathname:r.src=s.src,t=new o.Asset(r,i,s.width,s.height,s.uuid),r.onload=(()=>{n.layerManager.getLayer(e.layer).invalidate(!1)})}}return t.fromDict(e),t}t.createShapeFromDict=f},"223d":function(e,t,i){"use strict";var s=i("e756"),n=i.n(s);n.a},"22bd":function(e,t,i){"use strict";var s=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("SelectContext",{ref:"selectcontext"})},n=[];i.d(t,"a",function(){return s}),i.d(t,"b",function(){return n})},2469:function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0});const s=i("9ab4"),n=s.__importDefault(i("66cb")),o=i("4a5b"),r=i("0bc6"),a=i("f312"),l=i("8f0a"),c=i("6f92"),u=i("f10f"),d=i("92b1");class h{constructor(e,t,i,s){this.fillColour="#000",this.strokeColour="rgba(0,0,0,0)",this.name="Unknown shape",this.nameVisible=!0,this.trackers=[],this.auras=[],this.labels=[],this._owners=[],this.visionObstruction=!1,this.movementObstruction=!1,this.isToken=!1,this.showHighlight=!1,this.annotation="",this.globalCompositeOperation="source-over",this.options=new Map,this._refPoint=e,this.uuid=s||o.uuidv4(),void 0!==t&&(this.fillColour=t),void 0!==i&&(this.strokeColour=i)}get refPoint(){return this._refPoint}set refPoint(e){this._refPoint=e}visibleInCanvas(e){return!1}getPointIndex(e,t=0){for(const[i,s]of this.points.entries())if(Math.abs(e.x-s[0])<=t&&Math.abs(e.y-s[1])<=t)return i;return-1}getPointOrientation(e){const t=l.GlobalPoint.fromArray(this.points[(this.points.length+e-1)%this.points.length]),i=l.GlobalPoint.fromArray(this.points[e]),s=l.GlobalPoint.fromArray(this.points[(e+1)%this.points.length]),n=s.subtract(t),o=t.add(n.multiply(.5));return i.subtract(o).normalize()}invalidate(e){const t=c.layerManager.getLayer(this.layer);t&&t.invalidate(e)}checkVisionSources(e=!0){const t=this,i=u.gameStore.visionBlockers.indexOf(this.uuid);let s=!1;this.visionObstruction&&-1===i?(u.gameStore.visionBlockers.push(this.uuid),s=!0):!this.visionObstruction&&i>=0&&(u.gameStore.visionBlockers.splice(i,1),s=!0),s&&e&&u.gameStore.recalculateVision(),this.auras.forEach(e=>{const i=u.gameStore.visionSources,s=i.findIndex(t=>t.aura===e.uuid);e.visionSource&&-1===s?i.push({shape:t.uuid,aura:e.uuid}):!e.visionSource&&s>=0&&i.splice(s,1)});for(let n=u.gameStore.visionSources.length-1;n>=0;n--){const e=u.gameStore.visionSources[n];e.shape===t.uuid&&(t.auras.some(t=>t.uuid===e.aura&&t.visionSource)||u.gameStore.visionSources.splice(n,1))}}setMovementBlock(e,t=!0){this.movementObstruction=e||!1;const i=u.gameStore.movementblockers.indexOf(this.uuid);let s=!1;this.movementObstruction&&-1===i?(u.gameStore.movementblockers.push(this.uuid),s=!0):!this.movementObstruction&&i>=0&&(u.gameStore.movementblockers.splice(i,1),s=!0),s&&t&&u.gameStore.recalculateMovement()}setIsToken(e){if(this.isToken=e,this.ownedBy()){const e=u.gameStore.ownedtokens.indexOf(this.uuid);this.isToken&&-1===e?u.gameStore.ownedtokens.push(this.uuid):!this.isToken&&e>=0&&u.gameStore.ownedtokens.splice(e,1)}}getBaseDict(){return{type_:this.type,uuid:this.uuid,x:this.refPoint.x,y:this.refPoint.y,layer:this.layer,draw_operator:this.globalCompositeOperation,movement_obstruction:this.movementObstruction,vision_obstruction:this.visionObstruction,auras:a.aurasToServer(this.auras),trackers:this.trackers,labels:this.labels,owners:this._owners,fill_colour:this.fillColour,stroke_colour:this.strokeColour,name:this.name,name_visible:this.nameVisible,annotation:this.annotation,is_token:this.isToken,options:JSON.stringify([...this.options])}}fromDict(e){this.layer=e.layer,this.globalCompositeOperation=e.draw_operator,this.movementObstruction=e.movement_obstruction,this.visionObstruction=e.vision_obstruction,this.auras=a.aurasFromServer(e.auras),this.trackers=e.trackers,this.labels=e.labels,this._owners=e.owners,this.isToken=e.is_token,this.nameVisible=e.name_visible,e.annotation&&(this.annotation=e.annotation),e.name&&(this.name=e.name),e.options&&(this.options=new Map(JSON.parse(e.options)))}draw(e){if(void 0!==this.globalCompositeOperation?e.globalCompositeOperation=this.globalCompositeOperation:e.globalCompositeOperation="source-over",this.showHighlight){const t=this.getBoundingBox();e.strokeStyle="red",e.strokeRect(d.g2lx(t.topLeft.x)-5,d.g2ly(t.topLeft.y)-5,d.g2lz(t.w)+10,d.g2lz(t.h)+10)}}drawAuras(e){for(const i of this.auras){if(0===i.value&&0===i.dim)return;e.beginPath();const s=d.g2l(this.center()),o=d.g2lr(i.value+i.dim);if(0===i.dim)e.fillStyle=i.colour;else{const t=e.createRadialGradient(s.x,s.y,d.g2lr(i.value),s.x,s.y,d.g2lr(i.value+i.dim)),o=n.default(i.colour);e.fillStyle=t,t.addColorStop(0,i.colour),t.addColorStop(1,o.setAlpha(0).toRgbString())}if(i.visionSource&&void 0!==i.lastPath)try{e.fill(i.lastPath)}catch(t){e.arc(s.x,s.y,o,0,2*Math.PI),e.fill(),console.warn(t)}else e.arc(s.x,s.y,o,0,2*Math.PI),e.fill()}}getInitiativeRepr(){return{uuid:this.uuid,visible:!u.gameStore.IS_DM,group:!1,source:this.name,has_img:!1,effects:[],index:1/0}}moveLayer(e,t){const i=c.layerManager.getLayer(this.layer),s=c.layerManager.getLayer(e);void 0!==i&&void 0!==s&&(this.layer=e,i.shapes.splice(i.shapes.indexOf(this),1),s.shapes.push(this),i.invalidate(!0),s.invalidate(!1),t&&r.socket.emit("Shape.Layer.Change",{uuid:this.uuid,layer:e}))}get owners(){return Object.freeze(this._owners.slice())}ownedBy(e){return void 0===e&&(e=u.gameStore.username),u.gameStore.IS_DM||this._owners.includes(e)}addOwner(e){this._owners.includes(e)||this._owners.push(e)}updateOwner(e,t){const i=this._owners.findIndex(t=>t===e);i>=0?this._owners.splice(i,1,t):this.addOwner(t)}removeOwner(e){const t=this._owners.findIndex(t=>t===e);this._owners.splice(t,1)}}t.Shape=h},"255e":function(e,t,i){"use strict";i.r(t);var s=i("851c"),n=i.n(s);for(var o in s)"default"!==o&&function(e){i.d(t,e,function(){return s[e]})}(o);t["default"]=n.a},2686:function(e,t,i){"use strict";var s=function(){var e=this,t=e.$createElement,i=e._self._c||t;return null!==e.note?i("modal",{attrs:{visible:e.visible,mask:!1},on:{close:function(t){e.visible=!1}},scopedSlots:e._u([{key:"header",fn:function(t){return i("div",{staticClass:"modal-header",attrs:{draggable:"true"},on:{dragstart:t.dragStart,dragend:t.dragEnd}},[i("span",{on:{click:function(t){e.$refs.title.select()}}},[i("i",{staticClass:"fas fa-pencil-alt",staticStyle:{"font-size":"15px"}})]),i("input",{directives:[{name:"model",rawName:"v-model",value:e.note.title,expression:"note.title"}],ref:"title",domProps:{value:e.note.title},on:{change:e.updateNote,input:function(t){t.target.composing||e.$set(e.note,"title",t.target.value)}}}),i("div",{staticClass:"header-close",on:{click:function(t){e.visible=!1}}},[i("i",{staticClass:"far fa-window-close"})])])}}])},[i("div",{staticClass:"modal-body"},[i("textarea",{directives:[{name:"model",rawName:"v-model",value:e.note.text,expression:"note.text"}],ref:"textarea",style:{height:e.calcHeight()},domProps:{value:e.note.text},on:{change:e.updateNote,input:function(t){t.target.composing||e.$set(e.note,"text",t.target.value)}}})]),i("div",{staticClass:"modal-footer"},[i("button",{on:{click:e.removeNote}},[i("i",{staticClass:"far fa-trash-alt"}),e._v(" Remove\n ")])])]):e._e()},n=[];i.d(t,"a",function(){return s}),i.d(t,"b",function(){return n})},"26a5":function(e,t,i){"use strict";var s=i("f2d0"),n=i.n(s);n.a},2756:function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0});const s=i("9ab4"),n=s.__importDefault(i("65d9")),o=s.__importDefault(i("496c")),r=s.__importDefault(i("ea6a")),a=i("4a5b"),l=i("0bc6"),c=i("8f0a"),u=i("6f92"),d=i("b2ed"),h=i("f10f"),f=i("2838"),p=i("92b1"),g=i("5a5c");var v;(function(e){e[e["Noop"]=0]="Noop",e[e["Resize"]=1]="Resize",e[e["Drag"]=2]="Drag",e[e["GroupSelect"]=3]="GroupSelect"})(v=t.SelectOperations||(t.SelectOperations={}));const m=new c.GlobalPoint(-1e3,-1e3);let y=class extends r.default{constructor(){super(...arguments),this.name="Select",this.showContextMenu=!1,this.active=!1,this.mode=v.Noop,this.resizePoint=0,this.deltaChanged=!1,this.dragRay=new c.Ray(new c.LocalPoint(0,0),new c.Vector(0,0)),this.selectionStartPoint=m,this.selectionHelper=new d.Rect(m,0,0)}created(){this.selectionHelper.globalCompositeOperation="source-over"}onMouseDown(e){const t=u.layerManager.getLayer();if(void 0===t)return void console.log("No active layer!");this.selectionHelper.owners.includes(h.gameStore.username)||this.selectionHelper.addOwner(h.gameStore.username);const i=g.getMouse(e),s=p.l2g(i);let n,o=!1;n=t.selection.length?t.shapes.concat(t.selection):t.shapes;for(let r=n.length-1;r>=0;r--){const e=n[r];if(this.resizePoint=e.getPointIndex(s,p.l2gz(3)),this.resizePoint>=0){t.selection=[e],a.getRef("selectionInfo").shape=e,this.mode=v.Resize,t.invalidate(!0),o=!0;break}if(e.contains(s)){const s=e;-1===t.selection.indexOf(s)&&(t.selection=[s],a.getRef("selectionInfo").shape=s),this.mode=v.Drag;const n=p.g2l(s.refPoint);this.dragRay=new c.Ray(n,i.subtract(n)),t.invalidate(!0),o=!0;break}}if(!o){this.mode=v.GroupSelect;for(const e of t.selection)a.getRef("selectionInfo").shape=e;this.selectionStartPoint=s,this.selectionHelper.refPoint=this.selectionStartPoint,this.selectionHelper.w=0,this.selectionHelper.h=0,t.selection=[this.selectionHelper],t.invalidate(!0)}this.active=!0}onMouseMove(e){const t=u.layerManager.getLayer();if(void 0===t)return void console.log("No active layer!");const i=g.getMouse(e),s=p.l2g(i);if(this.deltaChanged=!1,this.mode===v.GroupSelect){const e=s;this.selectionHelper.w=Math.abs(e.x-this.selectionStartPoint.x),this.selectionHelper.h=Math.abs(e.y-this.selectionStartPoint.y),this.selectionHelper.refPoint=new c.GlobalPoint(Math.min(this.selectionStartPoint.x,e.x),Math.min(this.selectionStartPoint.y,e.y)),t.invalidate(!0)}else if(t.selection.length){const n=p.g2l(t.selection[t.selection.length-1].refPoint),o=n.add(this.dragRay.direction);let r=i.subtract(o).multiply(1/h.gameStore.zoomFactor);const a=r;if(this.mode===v.Drag){if("tokens"===t.name&&(!e.shiftKey||!h.gameStore.IS_DM))for(const e of t.selection)e.ownedBy()&&e.uuid!==this.selectionHelper.uuid&&(r=f.calculateDelta(r,e),r!==a&&(this.deltaChanged=!0));for(const e of t.selection)e.ownedBy()&&(e.refPoint=e.refPoint.add(r),e!==this.selectionHelper&&(e.visionObstruction&&h.gameStore.recalculateVision(!0),l.socket.emit("Shape.Update",{shape:e.asDict(),redraw:!0,temporary:!0})));t.invalidate(!1)}else if(this.mode===v.Resize)for(const e of t.selection)e.ownedBy()&&(e.resize(this.resizePoint,i),e!==this.selectionHelper&&(e.visionObstruction&&h.gameStore.recalculateVision(!0),l.socket.emit("Shape.Update",{shape:e.asDict(),redraw:!0,temporary:!0})),t.invalidate(!1),this.updateCursor(t,s));else this.updateCursor(t,s)}else document.body.style.cursor="default"}onMouseUp(e){if(!this.active)return;if(void 0===u.layerManager.getLayer())return void console.log("No active layer!");const t=u.layerManager.getLayer();this.mode===v.GroupSelect?(t.clearSelection(),t.shapes.forEach(e=>{if(!e.ownedBy())return;if(e===this.selectionHelper)return;const i=e.getBoundingBox();e.ownedBy()&&this.selectionHelper.refPoint.x<=i.topRight.x&&this.selectionHelper.refPoint.x+this.selectionHelper.w>=i.topLeft.x&&this.selectionHelper.refPoint.y<=i.botLeft.y&&this.selectionHelper.refPoint.y+this.selectionHelper.h>=i.topLeft.y&&t.selection.push(e)}),t.selection.length>0&&t.selection.push(this.selectionHelper),t.invalidate(!0)):t.selection.length&&t.selection.forEach(i=>{if(i.ownedBy()){if(this.mode===v.Drag){if(this.dragRay.origin.x===p.g2lx(i.refPoint.x)&&this.dragRay.origin.y===p.g2ly(i.refPoint.y))return;!h.gameStore.useGrid||e.altKey||this.deltaChanged||i.snapToGrid(),i!==this.selectionHelper&&(i.visionObstruction&&h.gameStore.recalculateVision(),i.movementObstruction&&h.gameStore.recalculateMovement(),l.socket.emit("Shape.Update",{shape:i.asDict(),redraw:!0,temporary:!1})),t.invalidate(!1)}this.mode===v.Resize&&(h.gameStore.useGrid&&!e.altKey&&i.resizeToGrid(),i!==this.selectionHelper&&(i.visionObstruction&&h.gameStore.recalculateVision(),i.movementObstruction&&h.gameStore.recalculateMovement(),l.socket.emit("Shape.Update",{shape:i.asDict(),redraw:!0,temporary:!1})),t.invalidate(!1))}}),this.mode=v.Noop,this.active=!1}onContextMenu(e){if(void 0===u.layerManager.getLayer())return void console.log("No active layer!");const t=u.layerManager.getLayer(),i=g.getMouse(e),s=p.l2g(i);for(const n of t.selection)if(n.contains(s)&&n!==this.selectionHelper)return t.selection=[n],a.getRef("selectionInfo").shape=n,t.invalidate(!0),void this.$parent.$refs.shapecontext.open(e,n);this.$refs.selectcontext.open(e)}updateCursor(e,t){for(const i of e.selection){const e=i.getPointIndex(t,p.l2gz(3));if(e<0)document.body.style.cursor="default";else{let t=i.getPointOrientation(e).angle();t<0&&(t+=360);const s=22.5;(t>=315+s||t=135+s&&t<225-s)&&(document.body.style.cursor="ew-resize"),(t>=45+s&&t<135-s||t>=225+s&&t<315-s)&&(document.body.style.cursor="ns-resize"),(t>=s&&t<90-s||t>=180+s&&t<270-s)&&(document.body.style.cursor="nwse-resize"),(t>=90+s&&t<180-s||t>=270+s&&t<360-s)&&(document.body.style.cursor="nesw-resize")}}}};y=s.__decorate([n.default({components:{SelectContext:o.default}})],y),t.default=y},2838:function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0});const s=i("8f0a"),n=i("6f92"),o=i("f10f"),r=i("d6be"),a=i("98ef"),l=i("4aee");function c(e,t,i){if(0===e.x&&0===e.y)return e;if("bvh"===o.gameStore.visionMode){void 0===i&&(i=[]);const r=t.getBoundingBox(),a=r.offset(e);let l=!1;for(const t of o.gameStore.movementblockers){if(i.includes(t))continue;const o=n.layerManager.UUIDMap.get(t),c=o.getBoundingBox();let u=c.intersectsWithInner(a);if(!u){const t=s.Ray.fromPoints(r.topLeft.add(e.normalize()),a.topLeft),i=t.direction.inverse(),n=[i.x<0,i.y<0];u=c.intersectP(t,i,n).hit}if(u){const n=c.center(),o=r.center(),a=o.subtract(n),u=new s.Vector(1,0),d=new s.Vector(0,1);let h=a.dot(u),f=a.dot(d);h>c.w/2&&(h=c.w/2),h<-c.w/2&&(h=-c.w/2),f>c.h/2&&(f=c.h/2),f<-c.h/2&&(f=-c.h/2);const p=n.add(u.multiply(h)).add(d.multiply(f));p.x===r.topLeft.x||p.x===r.topRight.x?e=new s.Vector(0,e.y):p.y===r.topLeft.y||p.y===r.botLeft.y?e=new s.Vector(e.x,0):p.xr.topRight.x?e=new s.Vector(p.x-r.topRight.x,e.y):p.yr.botLeft.y&&(e=new s.Vector(e.x,p.y-r.botLeft.y)),l=!0,i.push(t);break}}return l&&(e=c(e,t,i)),e}{const i=r.PA_CDT.movement.locate(t.center().asArray(),null).loc;for(const s of t.points){const t=r.PA_CDT.movement.locate(s,i),n=t.loc;null!==n&&(e=u(s,n,e))}return e}}function u(e,t,i,n=[]){const o=new s.GlobalPoint(e[0],e[1]),r=o.add(i).asArray();if(t.contains(r))return i;n.push(t);for(let c=0;c<3;c++){if(n.includes(t.neighbours[c]))continue;const d=t.vertices[l.cw(c)].point,h=t.vertices[l.ccw(c)].point,f=l.intersection(e,r,d,h);if(null===f)continue;if(!t.isConstrained(c))return u(e,t.neighbours[c],i,n);if(f[0]===o.x&&f[1]===o.y){l.orientation;const t=l.orientation(e,r,h);if(t===a.Sign.LEFT_TURN)continue;if(t===a.Sign.ZERO)continue}let p=new s.GlobalPoint(f[0],f[1]).subtract(o).multiply(.8);p.length()<1&&(p=new s.Vector(0,0)),p.length()!["__files"].includes(e)).sort(a.alphSort)}get files(){return this.asset.__files?this.asset.__files.concat().sort((e,t)=>e.name.toLowerCase()>t.name.toLowerCase()?1:-1):[]}toggle(e){for(let t=0;tthis.$children[0].$el.focus())}close(){this.visible=!1,this.shape=null}getLayers(){return c.layerManager.layers.filter(e=>e.selectable&&(u.gameStore.IS_DM||e.playerEditable))}getActiveLayer(){return c.layerManager.getLayer()}getInitiativeWord(){return null===this.shape?"":a.getRef("initiative").contains(this.shape.uuid)?"Show":"Add"}setLayer(e){null!==this.shape&&(this.shape.moveLayer(e,!0),this.close())}moveToBack(){if(null===this.shape)return;const e=this.getActiveLayer();e.moveShapeOrder(this.shape,0,!0),this.close()}moveToFront(){if(null===this.shape)return;const e=this.getActiveLayer();e.moveShapeOrder(this.shape,e.shapes.length-1,!0),this.close()}addInitiative(){if(null===this.shape)return;const e=a.getRef("initiative");e.contains(this.shape.uuid)||e.addInitiative(this.shape.getInitiativeRepr()),e.visible=!0,this.close()}openEditDialog(){l.EventBus.$emit("EditDialog.Open",this.shape),this.close()}};d=s.__decorate([o.default({components:{ContextMenu:r.default}})],d),t.default=d},3481:function(e,t,i){"use strict";i.r(t);var s=i("47e6"),n=i.n(s);for(var o in s)"default"!==o&&function(e){i.d(t,e,function(){return s[e]})}(o);t["default"]=n.a},"38c9":function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0});const s=i("bab4"),n=i("f10f");class o extends s.Layer{invalidate(){this.valid=!1}draw(e){this.valid||this.drawGrid()}drawGrid(){const e=this.ctx;this.clear(),e.beginPath();const t=n.gameStore.gridSize;for(let i=0;i1,expression:"showUI && layers.length>1"}],attrs:{id:"layerselect"}},[i("ul",e._l(e.layers,function(t){return i("li",{key:t.name,class:{"layer-selected":t===e.selectedLayer},on:{mousedown:function(i){e.selectLayer(t)}}},[i("a",{attrs:{href:"#"}},[e._v(e._s(t))])])}))])],2),i("selection-info",{directives:[{name:"show",rawName:"v-show",value:e.showUI,expression:"showUI"}],ref:"selectionInfo"}),i("initiative-dialog",{ref:"initiative",attrs:{id:"initiativedialog"}}),i("note-dialog",{ref:"note"}),i("label-dialog",{ref:"labels"}),i("zoom-slider",{directives:[{name:"show",rawName:"v-show",value:e.showUI,expression:"showUI"}],attrs:{id:"zoomer",height:6,width:200,min:0,max:1,interval:.1,"dot-width":8,"dot-height":20,"tooltip-dir":"bottom",tooltip:"hover",formatter:e.zoomDisplay.toFixed(1),"slider-style":{"border-radius":"15%"},"bg-style":{"background-color":"#fff","box-shadow":"0.5px 0.5px 3px 1px rgba(0, 0, 0, .36)"},"process-style":{"background-color":"#fff"}},model:{value:e.zoomDisplay,callback:function(t){e.zoomDisplay=t},expression:"zoomDisplay"}}),i("prompt-dialog",{ref:"prompt"}),i("confirm-dialog",{ref:"confirm"})],1)},n=[];i.d(t,"a",function(){return s}),i.d(t,"b",function(){return n})},4185:function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0});const s=i("8f0a"),n=i("bab4"),o=i("6f92"),r=i("d1ec"),a=i("4709"),l=i("f10f"),c=i("92b1"),u=i("5a5c"),d=i("cee3");class h extends n.Layer{constructor(e,t){super(e,t),this.isVisionLayer=!0,this.preFogShapes=[],this.virtualCanvas=document.createElement("canvas"),this.virtualCanvas.width=window.innerWidth,this.virtualCanvas.height=window.innerHeight,this.vCtx=this.virtualCanvas.getContext("2d")}addShape(e,t,i,s=!0){super.addShape(e,t,i,s),e.options.has("preFogShape")&&e.options.get("preFogShape")&&this.preFogShapes.push(e)}removeShape(e,t,i){if(e.options.has("preFogShape")&&e.options.get("preFogShape")){const t=this.preFogShapes.findIndex(t=>t.uuid===e.uuid);this.preFogShapes.splice(t,1)}super.removeShape(e,t,i)}draw(){if(!this.valid){const e=this.ctx;if(r.Settings.skipLightFOW)return e.clearRect(0,0,this.canvas.width,this.canvas.height),void(this.valid=!0);const t=e.globalCompositeOperation;e.clearRect(0,0,this.canvas.width,this.canvas.height),e.fillStyle="rgba(0, 0, 0, 1)";const i=o.layerManager.getLayer("draw").ctx;(r.Settings.drawAngleLines||r.Settings.drawFirstLightHit)&&i.clearRect(0,0,i.canvas.width,i.canvas.height),l.gameStore.fullFOW&&o.layerManager.hasLayer("tokens")&&o.layerManager.getLayer("tokens").shapes.forEach(t=>{if(!t.ownedBy()||!t.isToken)return;const i=t.getBoundingBox(),s=c.g2l(t.center()),n=.8*c.g2lz(i.w);e.beginPath(),e.arc(s.x,s.y,n,0,2*Math.PI);const o=e.createRadialGradient(s.x,s.y,n/2,s.x,s.y,n);o.addColorStop(0,"rgba(0, 0, 0, 1)"),o.addColorStop(1,"rgba(0, 0, 0, 0)"),e.fillStyle=o,e.fill()}),this.vCtx.clearRect(0,0,window.innerWidth,window.innerHeight);for(const n of l.gameStore.visionSources){const t=o.layerManager.UUIDMap.get(n.shape);if(void 0===t)continue;const u=t.auras.find(e=>e.uuid===n.aura);if(void 0===u)continue;const h=c.getUnitDistance(u.value+u.dim),f=t.center(),p=c.g2l(f),g=new a.Circle(f,h);if(g.visibleInCanvas(e.canvas))if("bvh"===l.gameStore.visionMode){let t=-1;const n=new Path2D;let o;n.moveTo(p.x,p.y);for(let a=0;a<2*Math.PI;a+=r.Settings.angleSteps/180*Math.PI){const d=new s.GlobalPoint(f.x+h*Math.cos(a),f.y+h*Math.sin(a));r.Settings.drawAngleLines&&(i.beginPath(),i.moveTo(c.g2lx(f.x),c.g2ly(f.y)),i.lineTo(c.g2lx(d.x),c.g2ly(d.y)),i.stroke());const g=s.Ray.fromPoints(f,d),v=l.gameStore.BV.intersect(g);if(0===a&&(o=v.hit?v.intersect:d),v.hit)-1!==t&&(n.arc(p.x,p.y,c.g2lr(u.value+u.dim),t,a),t=-1),n.lineTo(c.g2lx(v.intersect.x),c.g2ly(v.intersect.y));else if(-1===t){t=a;const i=c.g2l(d);e.lineTo(i.x,i.y)}}if(-1===t?n.lineTo(c.g2lx(o.x),c.g2ly(o.y)):n.arc(p.x,p.y,c.g2lr(u.value+u.dim),t,2*Math.PI),l.gameStore.fullFOW){if(u.dim>0){const t=e.createRadialGradient(p.x,p.y,c.g2lr(u.value),p.x,p.y,c.g2lr(u.value+u.dim));t.addColorStop(0,"rgba(0, 0, 0, 1)"),t.addColorStop(1,"rgba(0, 0, 0, 0)"),e.fillStyle=t}else e.fillStyle="rgba(0, 0, 0, 1)";e.fill(n)}u.lastPath=n}else{this.vCtx.globalCompositeOperation="source-over",this.vCtx.fillStyle="rgba(0, 0, 0, 1)";const t=d.computeVisibility(f,"vision");this.vCtx.beginPath(),this.vCtx.moveTo(c.g2lx(t[0][0]),c.g2ly(t[0][1]));for(const e of t)this.vCtx.lineTo(c.g2lx(e[0]),c.g2ly(e[1]));if(this.vCtx.closePath(),this.vCtx.fill(),u.dim>0){const e=this.vCtx.createRadialGradient(p.x,p.y,c.g2lr(u.value),p.x,p.y,c.g2lr(u.value+u.dim));e.addColorStop(0,"rgba(0, 0, 0, 1)"),e.addColorStop(1,"rgba(0, 0, 0, 0)"),this.vCtx.fillStyle=e}else this.vCtx.fillStyle="rgba(0, 0, 0, 1)";this.vCtx.globalCompositeOperation="source-in",this.vCtx.beginPath(),this.vCtx.arc(p.x,p.y,c.g2lr(u.value+u.dim),0,2*Math.PI),this.vCtx.fill(),e.drawImage(this.virtualCanvas,0,0)}}l.gameStore.fowLOS&&(e.globalCompositeOperation="source-in",e.drawImage(o.layerManager.getLayer("fow-players").canvas,0,0));for(const s of this.preFogShapes){if(!s.visibleInCanvas(this.canvas))continue;const t=s.globalCompositeOperation;l.gameStore.fullFOW||("source-over"===s.globalCompositeOperation?s.globalCompositeOperation="destination-out":"destination-out"===s.globalCompositeOperation&&(s.globalCompositeOperation="source-over")),s.draw(e),s.globalCompositeOperation=t}l.gameStore.fullFOW&&(e.globalCompositeOperation="source-out",e.fillStyle=u.getFogColour(),e.fillRect(0,0,e.canvas.width,e.canvas.height)),super.draw(!1),e.globalCompositeOperation=t}}}t.FOWLayer=h},4486:function(e,t,i){"use strict";i.r(t);var s=i("a097"),n=i.n(s);for(var o in s)"default"!==o&&function(e){i.d(t,e,function(){return s[e]})}(o);t["default"]=n.a},"45bf":function(e,t,i){"use strict";var s=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{attrs:{id:"menuContainer"}},[i("div",{ref:"rm",style:{left:e.visible.settings?"200px":"0",top:e.visible.locations?"100px":"0"},attrs:{id:"radialmenu"}},[i("div",{staticClass:"rm-wrapper"},[i("div",{staticClass:"rm-toggler"},[i("ul",{staticClass:"rm-list",class:{"rm-list-dm":e.IS_DM}},[e.IS_DM?i("li",{staticClass:"rm-item",attrs:{id:"rm-locations"},on:{click:function(t){e.visible.locations=!e.visible.locations}}},[e._m(0)]):e._e(),i("li",{staticClass:"rm-item",attrs:{id:"rm-settings"},on:{click:function(t){e.visible.settings=!e.visible.settings}}},[e._m(1)])])]),e._m(2)])]),i("transition",{attrs:{name:"settings"},on:{enter:function(t){e.$refs.rm.style.transition="left 500ms"}}},[e.visible.settings?i("div",{ref:"settings",attrs:{id:"menu"},on:{click:e.settingsClick}},[i("div",{staticStyle:{width:"200px",height:"90%","overflow-y":"auto","overflow-x":"hidden"}},[e.IS_DM?[i("button",{staticClass:"accordion"},[e._v("Assets")]),i("div",{staticClass:"accordion-panel"},[i("a",{staticClass:"actionButton",attrs:{href:"/assets",target:"blank",title:"Open asset manager"}},[i("i",{staticClass:"fas fa-external-link-alt"})]),i("div",{staticClass:"directory",attrs:{id:"menu-tokens"}},[i("asset-node",{attrs:{asset:e.assets}}),e.assets?e._e():i("div",[e._v("No assets")])],1)]),i("button",{staticClass:"accordion"},[e._v("Notes")]),i("div",{staticClass:"accordion-panel"},[i("div",{staticClass:"accordion-subpanel",attrs:{id:"menu-notes"}},[i("a",{staticClass:"actionButton",on:{click:e.createNote}},[i("i",{staticClass:"far fa-plus-square"})]),e._l(e.notes,function(t){return i("div",{key:t.uuid,staticStyle:{cursor:"pointer"},on:{click:function(i){e.openNote(t)}}},[e._v(e._s(t.title||"[?]"))])}),e.notes.length?e._e():i("div",[e._v("No notes")])],2)]),i("button",{staticClass:"accordion"},[e._v("DM Options")]),i("div",{staticClass:"accordion-panel"},[i("div",{staticClass:"accordion-subpanel"},[i("label",{attrs:{for:"useGridInput"}},[e._v("Use grid:")]),i("input",{directives:[{name:"model",rawName:"v-model",value:e.useGrid,expression:"useGrid"}],attrs:{id:"useGridInput",type:"checkbox",checked:"checked"},domProps:{checked:Array.isArray(e.useGrid)?e._i(e.useGrid,null)>-1:e.useGrid},on:{change:function(t){var i=e.useGrid,s=t.target,n=!!s.checked;if(Array.isArray(i)){var o=null,r=e._i(i,o);s.checked?r<0&&(e.useGrid=i.concat([o])):r>-1&&(e.useGrid=i.slice(0,r).concat(i.slice(r+1)))}else e.useGrid=n}}}),i("label",{attrs:{for:"useFOWInput"}},[e._v("Fill entire canvas with FOW:")]),i("input",{directives:[{name:"model",rawName:"v-model",value:e.fullFOW,expression:"fullFOW"}],attrs:{id:"useFOWInput",type:"checkbox"},domProps:{checked:Array.isArray(e.fullFOW)?e._i(e.fullFOW,null)>-1:e.fullFOW},on:{change:function(t){var i=e.fullFOW,s=t.target,n=!!s.checked;if(Array.isArray(i)){var o=null,r=e._i(i,o);s.checked?r<0&&(e.fullFOW=i.concat([o])):r>-1&&(e.fullFOW=i.slice(0,r).concat(i.slice(r+1)))}else e.fullFOW=n}}}),i("label",{attrs:{for:"fowOpacity"}},[e._v("FOW opacity:")]),i("input",{directives:[{name:"model",rawName:"v-model.number",value:e.fowOpacity,expression:"fowOpacity",modifiers:{number:!0}}],attrs:{id:"fowOpacity",type:"number",min:"0",max:"1",step:"0.1"},domProps:{value:e.fowOpacity},on:{input:function(t){t.target.composing||(e.fowOpacity=e._n(t.target.value))},blur:function(t){e.$forceUpdate()}}}),i("label",{attrs:{for:"fowLOS"}},[e._v("Only show lights in LoS:")]),i("input",{directives:[{name:"model",rawName:"v-model",value:e.fowLOS,expression:"fowLOS"}],attrs:{id:"fowLOS",type:"checkbox"},domProps:{checked:Array.isArray(e.fowLOS)?e._i(e.fowLOS,null)>-1:e.fowLOS},on:{change:function(t){var i=e.fowLOS,s=t.target,n=!!s.checked;if(Array.isArray(i)){var o=null,r=e._i(i,o);s.checked?r<0&&(e.fowLOS=i.concat([o])):r>-1&&(e.fowLOS=i.slice(0,r).concat(i.slice(r+1)))}else e.fowLOS=n}}}),i("label",{attrs:{for:"unitSizeInput"}},[e._v("Unit Size (in ft.):")]),i("input",{directives:[{name:"model",rawName:"v-model.number",value:e.unitSize,expression:"unitSize",modifiers:{number:!0}}],attrs:{id:"unitSizeInput",type:"number"},domProps:{value:e.unitSize},on:{input:function(t){t.target.composing||(e.unitSize=e._n(t.target.value))},blur:function(t){e.$forceUpdate()}}}),i("label",{attrs:{for:"gridSizeInput"}},[e._v("Grid Size (in pixels):")]),i("input",{directives:[{name:"model",rawName:"v-model.number",value:e.gridSize,expression:"gridSize",modifiers:{number:!0}}],attrs:{id:"gridSizeInput",type:"number",min:"0"},domProps:{value:e.gridSize},on:{input:function(t){t.target.composing||(e.gridSize=e._n(t.target.value))},blur:function(t){e.$forceUpdate()}}}),i("label",{attrs:{for:"visionMode"}},[e._v("Vision Mode:")]),i("select",{attrs:{id:"visionMode"},on:{change:e.changeVisionMode}},[i("option",{domProps:{selected:"bvh"===e.$store.state.game.visionMode}},[e._v("BVH")]),i("option",{domProps:{selected:"triangle"===e.$store.state.game.visionMode}},[e._v("Triangle")])]),i("label",{attrs:{for:"vmininp"}},[e._v("Minimal full vision (ft):")]),i("input",{directives:[{name:"model",rawName:"v-model.lazy.number",value:e.visionRangeMin,expression:"visionRangeMin",modifiers:{lazy:!0,number:!0}}],attrs:{id:"vmininp",type:"number",min:"0"},domProps:{value:e.visionRangeMin},on:{change:function(t){e.visionRangeMin=e._n(t.target.value)},blur:function(t){e.$forceUpdate()}}}),i("label",{attrs:{for:"vmaxinp"}},[e._v("Maximal vision (ft):")]),i("input",{directives:[{name:"model",rawName:"v-model.lazy.number",value:e.visionRangeMax,expression:"visionRangeMax",modifiers:{lazy:!0,number:!0}}],attrs:{id:"vmaxinp",type:"number",min:"0"},domProps:{value:e.visionRangeMax},on:{change:function(t){e.visionRangeMax=e._n(t.target.value)},blur:function(t){e.$forceUpdate()}}}),i("label",{attrs:{for:"invitation"}},[e._v("Invitation Code:")]),i("input",{attrs:{id:"invitation",type:"text",readonly:"readonly"},domProps:{value:e.invitationCode}})])])]:e._e(),i("button",{staticClass:"accordion"},[e._v("Client Options")]),i("div",{staticClass:"accordion-panel"},[i("div",{staticClass:"accordion-subpanel"},[i("label",{attrs:{for:"gridColour"}},[e._v("Grid Colour:")]),i("color-picker",{attrs:{id:"gridColour",color:e.gridColour},on:{"update:color":function(t){e.gridColour=t}}}),i("label",{attrs:{for:"fowColour"}},[e._v("FOW Colour:")]),i("color-picker",{attrs:{id:"fowColour",color:e.fowColour},on:{"update:color":function(t){e.fowColour=t}}}),i("label",{attrs:{for:"rulerColour"}},[e._v("Ruler Colour:")]),i("color-picker",{attrs:{id:"rulerColour",color:e.rulerColour},on:{"update:color":function(t){e.rulerColour=t}}})],1)])],2),i("router-link",{staticClass:"accordion",staticStyle:{"text-decoration":"none",display:"inline-block",position:"absolute",bottom:"0"},attrs:{to:"/dashboard"}},[e._v("Exit")])],1):e._e()]),i("transition",{attrs:{name:"locations"},on:{enter:function(t){e.$refs.rm.style.transition="top 500ms"}}},[e.IS_DM&&e.visible.locations?i("div",{attrs:{id:"locations-menu"}},[i("div",[e._l(e.locations,function(t){return i("div",{key:t,on:{click:function(i){e.changeLocation(t)}}},[e._v(e._s(t))])}),i("div",{on:{click:e.createLocation}},[i("i",{staticClass:"fas fa-plus"})])],2)]):e._e()]),i("img",{attrs:{id:"dragImage"}})],1)},n=[function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("a",{attrs:{href:"#"}},[i("i",{staticClass:"far fa-compass"})])},function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("a",{attrs:{href:"#"}},[i("i",{staticClass:"fas fa-cog"})])},function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("span",{staticClass:"rm-topper"},[i("i",{staticClass:"icon-share-alt"})])}];i.d(t,"a",function(){return s}),i.d(t,"b",function(){return n})},"45fb":function(e,t,i){"use strict";var s=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("Modal",{attrs:{visible:e.visible,mask:!1},on:{close:function(t){e.visible=!1}},scopedSlots:e._u([{key:"header",fn:function(t){return i("div",{staticClass:"modal-header",attrs:{draggable:"true"},on:{dragstart:t.dragStart,dragend:t.dragEnd}},[i("div",[e._v("Edit asset")]),i("div",{staticClass:"header-close",on:{click:function(t){e.visible=!1}}},[i("i",{staticClass:"far fa-window-close"})])])}}])},[i("div",{staticClass:"modal-body"},[i("div",{staticClass:"grid"},[i("label",{attrs:{for:"shapeselectiondialog-name"}},[e._v("Name")]),i("input",{directives:[{name:"model",rawName:"v-model",value:e.shape.name,expression:"shape.name"}],staticStyle:{"grid-column":"numerator / remove"},attrs:{type:"text",id:"shapeselectiondialog-name",disabled:!e.owned},domProps:{value:e.shape.name},on:{change:function(t){e.updateShape(!1)},input:function(t){t.target.composing||e.$set(e.shape,"name",t.target.value)}}}),i("div",{style:{opacity:e.shape.nameVisible?1:.3,textAlign:"center"},attrs:{disabled:!e.owned},on:{click:function(t){e.shape.nameVisible=!e.shape.nameVisible,e.updateShape(!1)}}},[i("i",{staticClass:"fas fa-eye"})]),i("label",{attrs:{for:"shapeselectiondialog-istoken"}},[e._v("Is a token")]),i("input",{staticClass:"styled-checkbox",staticStyle:{"grid-column-start":"remove"},attrs:{type:"checkbox",id:"shapeselectiondialog-istoken",disabled:!e.owned},domProps:{checked:e.shape.isToken},on:{click:e.setToken}}),i("label",{attrs:{for:"shapeselectiondialog-visionblocker"}},[e._v("Blocks vision/light")]),i("input",{directives:[{name:"model",rawName:"v-model",value:e.shape.visionObstruction,expression:"shape.visionObstruction"}],staticStyle:{"grid-column-start":"remove"},attrs:{type:"checkbox",id:"shapeselectiondialog-visionblocker",disabled:!e.owned},domProps:{checked:Array.isArray(e.shape.visionObstruction)?e._i(e.shape.visionObstruction,null)>-1:e.shape.visionObstruction},on:{change:[function(t){var i=e.shape.visionObstruction,s=t.target,n=!!s.checked;if(Array.isArray(i)){var o=null,r=e._i(i,o);s.checked?r<0&&e.$set(e.shape,"visionObstruction",i.concat([o])):r>-1&&e.$set(e.shape,"visionObstruction",i.slice(0,r).concat(i.slice(r+1)))}else e.$set(e.shape,"visionObstruction",n)},e.setVisionBlocker]}}),i("label",{attrs:{for:"shapeselectiondialog-moveblocker"}},[e._v("Blocks movement")]),i("input",{staticStyle:{"grid-column-start":"remove"},attrs:{type:"checkbox",id:"shapeselectiondialog-moveblocker",disabled:!e.owned},domProps:{checked:e.shape.movementObstruction},on:{click:e.setMovementBlocker}}),i("label",{attrs:{for:"shapeselectiondialog-strokecolour"}},[e._v("Border colour")]),i("color-picker",{staticStyle:{"grid-column-start":"remove"},attrs:{color:e.shape.strokeColour,disabled:!e.owned},on:{"update:color":function(t){e.$set(e.shape,"strokeColour",t)},input:function(t){e.updateShape(!0,!0)},change:function(t){e.updateShape(!0)}}}),i("label",{attrs:{for:"shapeselectiondialog-fillcolour"}},[e._v("Fill colour")]),i("color-picker",{staticStyle:{"grid-column-start":"remove"},attrs:{color:e.shape.fillColour,disabled:!e.owned},on:{"update:color":function(t){e.$set(e.shape,"fillColour",t)},input:function(t){e.updateShape(!0,!0)},change:function(t){e.updateShape(!0)}}}),i("div",{staticClass:"spanrow header"},[e._v("Access")]),e._l(e.shape.owners,function(t){return[i("input",{key:t,staticStyle:{"grid-column-start":"name"},attrs:{type:"text",placeholder:"name",disabled:!e.owned},domProps:{value:t},on:{change:function(i){e.updateOwner(i,t)}}}),""!==t?i("div",{key:"remove-"+t,style:{opacity:e.owned?1:.3,textAlign:"center",gridColumnStart:"remove"},attrs:{disabled:!e.owned},on:{click:function(i){e.removeOwner(t)}}},[i("i",{staticClass:"fas fa-trash-alt"})]):e._e()]}),i("div",{staticClass:"spanrow header"},[e._v("Trackers")]),e._l(e.shape.trackers,function(t){return[i("input",{directives:[{name:"model",rawName:"v-model",value:t.name,expression:"tracker.name"}],key:"name-"+t.uuid,staticStyle:{"grid-column-start":"name"},attrs:{type:"text",placeholder:"name",disabled:!e.owned},domProps:{value:t.name},on:{change:function(t){e.updateShape(!1)},input:function(i){i.target.composing||e.$set(t,"name",i.target.value)}}}),i("input",{directives:[{name:"model",rawName:"v-model.number",value:t.value,expression:"tracker.value",modifiers:{number:!0}}],key:"value-"+t.uuid,attrs:{type:"text",title:"Current value",disabled:!e.owned},domProps:{value:t.value},on:{change:function(t){e.updateShape(!1)},input:function(i){i.target.composing||e.$set(t,"value",e._n(i.target.value))},blur:function(t){e.$forceUpdate()}}}),i("span",{key:"fspan-"+t.uuid},[e._v("/")]),i("input",{directives:[{name:"model",rawName:"v-model.number",value:t.maxvalue,expression:"tracker.maxvalue",modifiers:{number:!0}}],key:"maxvalue-"+t.uuid,attrs:{type:"text",title:"Current value",disabled:!e.owned},domProps:{value:t.maxvalue},on:{change:function(t){e.updateShape(!1)},input:function(i){i.target.composing||e.$set(t,"maxvalue",e._n(i.target.value))},blur:function(t){e.$forceUpdate()}}}),i("span",{key:"sspan-"+t.uuid}),i("div",{key:"visibility-"+t.uuid,style:{opacity:t.visible?1:.3,textAlign:"center"},attrs:{disabled:!e.owned},on:{click:function(i){t.visible=!t.visible,e.updateShape(!1)}}},[i("i",{staticClass:"fas fa-eye"})]),i("span",{key:"tspan-"+t.uuid}),""!==t.name||0!==t.value?i("div",{key:"remove-"+t.uuid,style:{opacity:e.owned?1:.3,textAlign:"center"},attrs:{disabled:!e.owned},on:{click:function(i){e.removeTracker(t.uuid)}}},[i("i",{staticClass:"fas fa-trash-alt"})]):e._e()]}),i("div",{staticClass:"spanrow header"},[e._v("Auras")]),e._l(e.shape.auras,function(t){return[i("input",{directives:[{name:"model",rawName:"v-model",value:t.name,expression:"aura.name"}],key:"name-"+t.uuid,staticStyle:{"grid-column-start":"name"},attrs:{type:"text",placeholder:"name",disabled:!e.owned},domProps:{value:t.name},on:{change:function(t){e.updateShape(!1)},input:function(i){i.target.composing||e.$set(t,"name",i.target.value)}}}),i("input",{directives:[{name:"model",rawName:"v-model.number",value:t.value,expression:"aura.value",modifiers:{number:!0}}],key:"value-"+t.uuid,attrs:{type:"text",title:"Current value",disabled:!e.owned},domProps:{value:t.value},on:{change:function(t){e.updateShape(!0)},input:function(i){i.target.composing||e.$set(t,"value",e._n(i.target.value))},blur:function(t){e.$forceUpdate()}}}),i("span",{key:"fspan-"+t.uuid},[e._v("/")]),i("input",{directives:[{name:"model",rawName:"v-model.number",value:t.dim,expression:"aura.dim",modifiers:{number:!0}}],key:"dimvalue-"+t.uuid,attrs:{type:"text",title:"Dim value",disabled:!e.owned},domProps:{value:t.dim},on:{change:function(t){e.updateShape(!0)},input:function(i){i.target.composing||e.$set(t,"dim",e._n(i.target.value))},blur:function(t){e.$forceUpdate()}}}),i("color-picker",{key:"colour-"+t.uuid,attrs:{color:t.colour,disabled:!e.owned},on:{"update:color":function(i){e.$set(t,"colour",i)},input:function(i){e.updateAuraColour(t,i)},change:function(t){e.updateShape(!0)}}}),i("div",{key:"visibility-"+t.uuid,style:{opacity:t.visible?1:.3,textAlign:"center"},attrs:{disabled:!e.owned},on:{click:function(i){t.visible=!t.visible,e.updateShape(!0)}}},[i("i",{staticClass:"fas fa-eye"})]),i("div",{key:"visionsource-"+t.uuid,style:{opacity:t.visionSource?1:.3,textAlign:"center"},attrs:{disabled:!e.owned},on:{click:function(i){e.updateAuraVisionSource(t)}}},[i("i",{staticClass:"fas fa-lightbulb"})]),""!==t.name||0!==t.value?i("div",{key:"remove-"+t.uuid,style:{opacity:e.owned?1:.3,textAlign:"center"},attrs:{disabled:!e.owned},on:{click:function(i){e.removeAura(t.uuid)}}},[i("i",{staticClass:"fas fa-trash-alt"})]):e._e()]}),i("div",{staticClass:"spanrow header"},[e._v("Labels")]),i("div",{staticClass:"spanrow",attrs:{id:"labels"}},[e._l(e.shape.labels,function(t){return i("div",{key:t.uuid,staticClass:"label"},[t.category?[i("div",{staticClass:"label-user"},[e._v(e._s(t.category))]),i("div",{staticClass:"label-main",on:{click:function(i){e.removeLabel(t.uuid)}}},[e._v(e._s(t.name))])]:e._e(),t.category?e._e():[i("div",{staticClass:"label-main",on:{click:function(i){e.removeLabel(t.uuid)}}},[e._v(e._s(t.name))])]],2)}),e.owned?i("div",{staticClass:"label",attrs:{id:"label-add"}},[i("div",{staticClass:"label-main",on:{click:e.openLabelManager}},[e._v("+")])]):e._e()],2),i("div",{staticClass:"spanrow header"},[e._v("Annotation")]),i("textarea",{staticClass:"spanrow",attrs:{disabled:!e.owned},domProps:{value:e.shape.annotation},on:{change:e.updateAnnotation}})],2)])])},n=[];i.d(t,"a",function(){return s}),i.d(t,"b",function(){return n})},4709:function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0});const s=i("8f0a"),n=i("8db6"),o=i("2469"),r=i("f10f"),a=i("2838"),l=i("92b1"),c=i("5a5c");class u extends o.Shape{constructor(e,t,i,s,n){super(e,i,s,n),this.type="circle",this.r=t||1}asDict(){return Object.assign(this.getBaseDict(),{radius:this.r})}fromDict(e){super.fromDict(e),this.r=e.radius}getBoundingBox(){return new n.BoundingRect(new s.GlobalPoint(this.refPoint.x-this.r,this.refPoint.y-this.r),2*this.r,2*this.r)}get points(){return this.getBoundingBox().points}draw(e){super.draw(e),e.beginPath(),"fog"===this.fillColour?e.fillStyle=c.getFogColour():e.fillStyle=this.fillColour;const t=l.g2l(this.refPoint);e.arc(t.x,t.y,l.g2lz(this.r),0,2*Math.PI),e.fill(),"rgba(0, 0, 0, 0)"!==this.strokeColour&&(e.beginPath(),e.lineWidth=l.g2lz(5),e.strokeStyle=this.strokeColour,e.arc(t.x,t.y,l.g2lz(this.r),0,2*Math.PI),e.stroke())}contains(e){return Math.pow(e.x-this.refPoint.x,2)+Math.pow(e.y-this.refPoint.y,2){const t=16*Math.random()|0,i="x"===e?t:3&t|8;return i.toString(16)})}function o(e){return e.charAt(0).toUpperCase()+e.slice(1)}function r(e,t){return e.toLowerCase()t(e)?i[1].push(e):i[0].push(e)),i}function u(e,t,i,s){const n=.2*Number(e.font.split("px")[0]),o=e.measureText(t).width;return Math.min(i/o,s/n)}function d(e){return encodeURIComponent(e).replace(/[!'()*]/g,e=>{return"%"+e.charCodeAt(0).toString(16)})}t.uuidv4=n,t.capitalize=o,t.alphSort=r,t.getHTMLFont=a,t.getHTMLTextWidth=l,t.partition=c,t.calcFontScale=u,t.fixedEncodeURIComponent=d;class h{constructor(){this.keys=[],this.values=[]}get length(){return this.keys.length}get(e){return this.values[this.keys.indexOf(e)]}getIndexValue(e){return this.values[e]}getIndexKey(e){return this.keys[e]}set(e,t){this.keys.push(e),this.values.push(t)}has(e){return this.indexOf(e)>=0}indexOf(e){return this.keys.indexOf(e)}remove(e){const t=this.indexOf(e);this.keys.splice(t,1),this.values.splice(t,1)}}function f(){return s.app.$children[0].$refs.activeComponent}function p(e){const t=s.app.$children[0].$refs.activeComponent;return t.$refs[e]}t.OrderedMap=h,t.getComponent=f,t.getRef=p},"4aec":function(e,t,i){"use strict";i.r(t);var s=i("a755"),n=i("f51a");for(var o in n)"default"!==o&&function(e){i.d(t,e,function(){return n[e]})}(o);var r=i("2877"),a=Object(r["a"])(n["default"],s["a"],s["b"],!1,null,null,null);a.options.__file="contextMenu.vue",t["default"]=a.exports},"4aee":function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0});const s=i("98ef");function n(e){return(e+2)%3}function o(e){return(e+1)%3}function r(e,t){const i=new s.EdgeCirculator(e,null);if(i.valid)do{const n=3-i.t.indexV(e)-i.ri,o=i.t.vertices[n];if(!o.infinite){if(o===t)return{includes:!0,vi:t,fr:i.t,i:i.ri};{const n=c(e.point,t.point,o.point);if(n===s.Sign.COLLINEAR&&a(e.point,o.point,t.point))return{includes:!0,vi:o,fr:i.t,i:i.ri}}}}while(i.next());return{includes:!1}}function a(e,t,i){let n,o;return l(0,e,i)===s.Sign.EQUAL?(n=l(1,e,t),o=l(1,t,i)):(n=l(0,e,t),o=l(0,t,i)),n===s.Sign.SMALLER&&o===s.Sign.SMALLER||n===s.Sign.LARGER&&o===s.Sign.LARGER}function l(e,t,i){return t[e]i[e]?s.Sign.LARGER:s.Sign.EQUAL}function c(e,t,i){const n=e[0],o=e[1],r=t[0],a=t[1],l=i[0],c=i[1],d=r-n,h=a-o,f=l-n,p=c-o,g=u(d,h,f,p);let v=Math.abs(d),m=Math.abs(h);const y=Math.abs(f),b=Math.abs(p);if(vm&&([v,m]=[m,v]),v<2e-162&&0===v)return s.Sign.ZERO;if(m<1e153){const e=Number.EPSILON*v*m;if(g>e)return s.Sign.POSITIVE;if(g<-e)return s.Sign.NEGATIVE}return s.Sign.ZERO}function u(e,t,i,s){return e*s-t*i}function d(e,t,i){return u(t[0]-e[0],t[1]-e[1],i[0]-e[0],i[1]-e[1])<0}function h(e,t,i){if(!e.isInfinite())return f(e.vertices[0].point,e.vertices[1].point,e.vertices[2].point,t,i);throw new Error("SSS")}function f(e,t,i,n,o){const r=m(e,t,i,n);if(r!==s.Sign.ON_ORIENTED_BOUNDARY||!o)return r;const a=[e,t,i,n];a.sort((e,t)=>e[0]-t[0]||e[1]-t[1]);for(const l of a.reverse()){if(l===n)return s.Sign.ON_NEGATIVE_SIDE;let o=c(e,t,n);if(l===i&&o!==s.Sign.COLLINEAR)return o;if(o=c(e,n,i),l===t&&o!==s.Sign.COLLINEAR)return o;if(o=c(n,t,i),l===e&&o!==s.Sign.COLLINEAR)return o}return s.Sign.ON_NEGATIVE_SIDE}function p(e,t){return e[0]===t[0]&&e[1]===t[1]}function g(e,t){return e[0]y&&([m,y]=[y,m]),m<1e-73&&0===m)return s.Sign.ON_ORIENTED_BOUNDARY;if(y<1e76){const e=Number.EPSILON*m*y*(y*y);if(v>e)return s.Sign.ON_POSITIVE_SIDE;if(v<-e)return s.Sign.ON_NEGATIVE_SIDE}return s.Sign.ZERO}function y(e,t,i,n){switch(c(e,t,i)){case s.Sign.LEFT_TURN:return c(i,n,t)!==s.Sign.RIGHT_TURN;case s.Sign.RIGHT_TURN:return c(i,n,t)!==s.Sign.LEFT_TURN;case s.Sign.COLLINEAR:return!0}}function b(e,t,i,n){switch(c(e,t,i)){case s.Sign.LEFT_TURN:return c(e,t,n)!==s.Sign.LEFT_TURN;case s.Sign.RIGHT_TURN:return c(e,t,n)!==s.Sign.RIGHT_TURN;case s.Sign.COLLINEAR:return!0}}function _(e,t,i,s){const n=x(e,t,i,s);switch(n.intersectionType){case w.POINT:return n.point;case w.NO_INTERSECTION:return null}throw new Error("sdfgighowen")}var w;function S(e,t){if(e[0]===t[0])return[1,0,-e[0]];if(e[1]===t[1])return[0,1,-e[1]];const i=t[0]-e[0],s=t[1]-e[1];return[-s,i,-i*e[1]+s*e[0]]}function x(e,t,i,s){if(!C(e,t,i,s))return{intersectionType:w.NO_INTERSECTION,point:null};const n=S(e,t),o=S(i,s),r=M(n,o);switch(r.intersectionType){case w.POINT:return r}throw new Error("gzseuihgpib")}function M(e,t){const i=e[0]*t[1]-t[0]*e[1],s=e[1]*t[2]-t[1]*e[2],n=t[0]*e[2]-e[0]*t[2];return{intersectionType:w.POINT,point:[s/i,n/i]}}function C(e,t,i,n){if(g(e,t)){if(g(i,n)){if(g(t,i)||g(n,e))return!1}else if(g(t,n)||g(i,e))return!1}else if(g(i,n)){if(g(e,i)||g(n,t))return!1}else if(g(e,n)||g(i,t))return!1;if(g(e,t))if(g(i,n))switch(v(e,i)){case s.Sign.SMALLER:switch(v(t,i)){case s.Sign.SMALLER:return!1;case s.Sign.EQUAL:return!0;default:switch(v(t,n)){case s.Sign.SMALLER:return y(e,t,i,n);case s.Sign.EQUAL:return!0;default:return b(e,t,i,n)}}case s.Sign.EQUAL:return!0;default:switch(v(n,e)){case s.Sign.SMALLER:return!1;case s.Sign.EQUAL:return!0;default:switch(v(n,t)){case s.Sign.SMALLER:return y(i,n,e,t);case s.Sign.EQUAL:return!0;default:return b(i,n,e,t)}}}else switch(v(e,n)){case s.Sign.SMALLER:switch(v(t,n)){case s.Sign.SMALLER:return!1;case s.Sign.EQUAL:return!0;default:switch(v(t,i)){case s.Sign.SMALLER:return y(e,t,n,i);case s.Sign.EQUAL:return!0;default:return b(e,t,n,i)}}case s.Sign.EQUAL:return!0;default:switch(v(i,e)){case s.Sign.SMALLER:return!1;case s.Sign.EQUAL:return!0;default:switch(v(i,t)){case s.Sign.SMALLER:return y(n,i,e,t);case s.Sign.EQUAL:return!0;default:return b(n,i,e,t)}}}else if(g(i,n))switch(v(t,i)){case s.Sign.SMALLER:switch(v(e,i)){case s.Sign.SMALLER:return!1;case s.Sign.EQUAL:return!0;default:switch(v(e,n)){case s.Sign.SMALLER:return y(t,e,i,n);case s.Sign.EQUAL:return!0;default:return b(t,e,i,n)}}case s.Sign.EQUAL:return!0;default:switch(v(n,t)){case s.Sign.SMALLER:return!1;case s.Sign.EQUAL:return!0;default:switch(v(n,e)){case s.Sign.SMALLER:return y(i,n,t,e);case s.Sign.EQUAL:return!0;default:return b(i,n,t,e)}}}else switch(v(t,n)){case s.Sign.SMALLER:switch(v(e,n)){case s.Sign.SMALLER:return!1;case s.Sign.EQUAL:return!0;default:switch(v(e,i)){case s.Sign.SMALLER:return y(t,e,n,i);case s.Sign.EQUAL:return!0;default:return b(t,e,n,i)}}case s.Sign.EQUAL:return!0;default:switch(v(i,t)){case s.Sign.SMALLER:return!1;case s.Sign.EQUAL:return!0;default:switch(v(i,e)){case s.Sign.SMALLER:return y(n,i,t,e);case s.Sign.EQUAL:return!0;default:return b(n,i,t,e)}}}}function L(e){if(e!==e)return e;if(e===-1/0)return-Number.MAX_VALUE;if(e===1/0)return 1/0;if(e===+Number.MAX_VALUE)return 1/0;let t=e*(e<0?1-Number.EPSILON/2:1+Number.EPSILON);t===e&&(t=Number.MIN_VALUE*Number.EPSILON>0?e+Number.MIN_VALUE*Number.EPSILON:e+Number.MIN_VALUE),t===1/0&&(t=+Number.MAX_VALUE);const i=e+(t-e)/2;ewindow.innerWidth-100&&(t=window.innerWidth-100),i<0&&(i=0),i>window.innerHeight-100&&(i=window.innerHeight-100),this.$refs.container.style.left=t+"px",this.$refs.container.style.top=i+"px",this.$refs.container.style.display="block"}dragOver(e){this.dragging&&(this.$refs.container.style.display="none")}};s.__decorate([r.Prop(Boolean)],a.prototype,"visible",void 0),s.__decorate([r.Prop({type:Boolean,default:!0})],a.prototype,"mask",void 0),a=s.__decorate([o.default],a),t.default=a},5338:function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0});const s=i("9ab4"),n=s.__importDefault(i("8055")),o=i("2d5b");t.socket=n.default(location.protocol+"//"+location.host+"/pa_assetmgmt",{autoConnect:!1}),t.socket.on("connect",()=>{console.log("Connected")}),t.socket.on("disconnect",()=>{console.log("Disconnected")}),t.socket.on("redirect",e=>{console.log("redirecting"),window.location.href=e}),t.socket.on("Folder.Root.Set",e=>{o.assetStore.setRoot(e)}),t.socket.on("Folder.Set",e=>{if(o.assetStore.clear(),e.children)for(const t of e.children)o.assetStore.idMap.set(t.id,t),t.file_hash?o.assetStore.files.push(t.id):o.assetStore.folders.push(t.id)}),t.socket.on("Folder.Create",e=>{o.assetStore.folders.push(e.id),o.assetStore.idMap.set(e.id,e)}),t.socket.on("Asset.Upload.Finish",e=>{o.assetStore.idMap.set(e.id,e),o.assetStore.files.push(e.id)})},5394:function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0});const s=i("9ab4"),n=s.__importDefault(i("65d9")),o=s.__importDefault(i("1289")),r=s.__importDefault(i("ea6a")),a=i("0bc6"),l=i("6f92"),c=i("f10f");let u=class extends r.default{constructor(){super(...arguments),this.name="Filter",this.active=!1}get labels(){const e={};for(const t of Object.keys(c.gameStore.labels)){const i=c.gameStore.labels[t];i.category?(i.category in e||(e[i.category]=[]),e[i.category].push([i.uuid,i.name]),e[i.category].sort((e,t)=>e[1].localeCompare(t[1]))):e[""].push([i.uuid,i.name])}return e}get initalValues(){const e={};for(const t of Object.keys(this.labels))e[t]=c.gameStore.labelFilters.filter(e=>this.labels[t].map(e=>e[0]).includes(e));return e}get categories(){return Object.keys(this.labels).sort()}isFilter(e){return c.gameStore.labelFilters.includes(e)}toggleFilter(e){const t=c.gameStore.labelFilters.indexOf(e);t>=0?c.gameStore.labelFilters.splice(t,1):c.gameStore.labelFilters.push(e),l.layerManager.invalidate()}toggleUnlabeled(){c.gameStore.toggleUnlabeledFilter(),l.layerManager.invalidate()}updateSelection(e){if(e.title in this.labels){for(const[t,i]of this.labels[e.title]){const i=c.gameStore.labelFilters.indexOf(t),s=e.selection.includes(t);i>=0&&!s?(c.gameStore.labelFilters.splice(i,1),a.socket.emit("Labels.Filter.Remove",t)):i<0&&s&&(c.gameStore.labelFilters.push(t),a.socket.emit("Labels.Filter.Add",t))}l.layerManager.invalidate()}}};u=s.__decorate([n.default({components:{accordion:o.default}})],u),t.default=u},"53ec":function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0});const s=i("9ab4"),n=s.__importDefault(i("a026")),o=s.__importDefault(i("65d9")),r=i("60a3");let a=class extends n.default{constructor(){super(...arguments),this.selected=[],this.active=!1}mounted(){this.selected=this.initialValues,this.updateCategory()}toggleDisplay(e){this.active=!this.active}toggleCategory(){const e=this.$refs.overall;e.checked?this.selected=this.items.map(e=>e[0]):this.selected=[],this.$emit("selectionupdate",{title:this.title,selection:this.selected})}updateCategory(){const e=this.$refs.overall;0===this.selected.length?(e.checked=!1,e.indeterminate=!1):this.selected.length===this.items.length?(e.checked=!0,e.indeterminate=!1):(e.checked=!1,e.indeterminate=!0)}toggleSelection(e){const t=this.selected.indexOf(e);-1===t?this.selected.push(e):this.selected.splice(t,1),this.updateCategory(),this.$emit("selectionupdate",{title:this.title,selection:this.selected})}};s.__decorate([r.Prop(String)],a.prototype,"title",void 0),s.__decorate([r.Prop({default:!0,type:Boolean})],a.prototype,"showArrow",void 0),s.__decorate([r.Prop({default:()=>[]})],a.prototype,"items",void 0),s.__decorate([r.Prop({default:()=>[]})],a.prototype,"initialValues",void 0),a=s.__decorate([o.default],a),t.default=a},"561b":function(e,t,i){"use strict";var s=i("a450"),n=i.n(s);n.a},5722:function(e,t,i){},"574e":function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0});const s=i("8f0a"),n=i("8db6"),o=i("2469"),r=i("92b1"),a=i("5a5c");class l extends o.Shape{constructor(e,t,i,s,n){super(e,"rgba(0, 0, 0, 0)",s||"#000",n),this.type="multiline",this._points=[],this._points=t||[],this.lineWidth=i||3}get refPoint(){return this._refPoint}set refPoint(e){const t=e.subtract(this._refPoint);this._refPoint=e;for(let i=0;i({x:e.x,y:e.y}))})}fromDict(e){super.fromDict(e),this._points=e.points.map(e=>new s.GlobalPoint(e.x,e.y))}get points(){return this._points.map(e=>[e.x,e.y])}getBoundingBox(){let e=this.refPoint.x,t=this.refPoint.x,i=this.refPoint.y,o=this.refPoint.y;for(const s of this._points)s.xt&&(t=s.x),s.yo&&(o=s.y);return new n.BoundingRect(new s.GlobalPoint(e,i),t-e,o-i)}draw(e){super.draw(e),e.beginPath(),e.lineCap="round",e.lineJoin="round",e.moveTo(r.g2lx(this.refPoint.x),r.g2ly(this.refPoint.y));for(const t of this._points)e.lineTo(r.g2lx(t.x),r.g2ly(t.y));"fog"===this.strokeColour?e.strokeStyle=a.getFogColour():e.strokeStyle=this.strokeColour,e.lineWidth=r.g2lz(this.lineWidth),e.stroke()}contains(e){return this.getBoundingBox().contains(e)}center(e){return this.getBoundingBox().center()}visibleInCanvas(e){return this.getBoundingBox().visibleInCanvas(e)}snapToGrid(){}resizeToGrid(){}resize(e,t){0===e?this._refPoint=r.l2g(t):this._points[e-1]=r.l2g(t)}}t.MultiLine=l},"59d8":function(e,t,i){"use strict";i.r(t);var s=i("e5ca"),n=i("6f8d");for(var o in n)"default"!==o&&function(e){i.d(t,e,function(){return n[e]})}(o);i("a7b3");var r=i("2877"),a=Object(r["a"])(n["default"],s["a"],s["b"],!1,null,"639cd890",null);a.options.__file="draw.vue",t["default"]=a.exports},"59f0":function(e,t,i){"use strict";var s=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("modal",{attrs:{visible:e.visible,mask:!1},on:{close:function(t){e.visible=!1}},scopedSlots:e._u([{key:"header",fn:function(t){return i("div",{staticClass:"modal-header",attrs:{draggable:"true"},on:{dragstart:t.dragStart,dragend:t.dragEnd}},[i("div",[e._v("Initiative")]),i("div",{staticClass:"header-close",on:{click:function(t){e.visible=!1}}},[i("i",{staticClass:"far fa-window-close"})])])}}])},[i("div",{staticClass:"modal-body"},[i("draggable",{attrs:{id:"initiative-list",options:{setData:e.fakeSetData,disabled:!e.$store.state.game.IS_DM}},on:{change:e.updateOrder},model:{value:e.data,callback:function(t){e.data=t},expression:"data"}},[e._l(e.data,function(t){return[i("div",{key:t.uuid,staticStyle:{display:"flex","flex-direction":"column","align-items":"flex-end"}},[i("div",{staticClass:"initiative-actor",class:{"initiative-selected":e.currentActor===t.uuid},style:{cursor:e.$store.state.game.IS_DM&&"move"},on:{mouseenter:function(i){e.toggleHighlight(t,!0)},mouseleave:function(i){e.toggleHighlight(t,!1)}}},[t.has_img?[i("img",{attrs:{src:t.source,width:"30px",height:"30px"}})]:[i("span",{staticStyle:{width:"auto"}},[e._v(e._s(t.source))])],i("input",{directives:[{name:"model",rawName:"v-model.lazy.number",value:t.initiative,expression:"actor.initiative",modifiers:{lazy:!0,number:!0}}],class:{notAllowed:!e.owns(t)},attrs:{type:"text",placeholder:"value",disabled:!e.owns(t)},domProps:{value:t.initiative},on:{change:[function(i){e.$set(t,"initiative",e._n(i.target.value))},function(i){e.syncInitiative(t)}],blur:function(t){e.$forceUpdate()}}}),i("div",{staticClass:"initiative-effects-icon",class:{notAllowed:!e.owns(t)},staticStyle:{opacity:"0.6"},on:{click:function(i){e.createEffect(t,e.getDefaultEffect(),!0)}}},[i("i",{staticClass:"fas fa-stopwatch"}),t.effects?[e._v(e._s(t.effects.length))]:[e._v("0")]],2),i("div",{class:{notAllowed:!e.owns(t)},style:{opacity:t.visible?"1.0":"0.3"},on:{click:function(i){e.toggleOption(t,"visible")}}},[i("i",{staticClass:"fas fa-eye"})]),i("div",{class:{notAllowed:!e.owns(t)},style:{opacity:t.group?"1.0":"0.3"},on:{click:function(i){e.toggleOption(t,"group")}}},[i("i",{staticClass:"fas fa-users"})]),i("div",{class:{notAllowed:!e.owns(t)},style:{opacity:e.owns(t)?"1.0":"0.3"},on:{click:function(i){e.removeInitiative(t.uuid,!0,!0)}}},[i("i",{staticClass:"fas fa-trash-alt"})])],2),t.effects?i("div",{staticClass:"initiative-effect"},e._l(t.effects,function(s){return i("div",{key:s.uuid},[i("input",{directives:[{name:"model",rawName:"v-model",value:s.name,expression:"effect.name"}],attrs:{type:"text",size:s.name.length||1},domProps:{value:s.name},on:{change:function(i){e.updateEffect(t.uuid,s,!0)},input:function(t){t.target.composing||e.$set(s,"name",t.target.value)}}}),i("input",{directives:[{name:"model",rawName:"v-model",value:s.turns,expression:"effect.turns"}],attrs:{type:"text",size:s.turns.toString().length||1},domProps:{value:s.turns},on:{change:function(i){e.updateEffect(t.uuid,s,!0)},input:function(t){t.target.composing||e.$set(s,"turns",t.target.value)}}})])})):e._e()])]})],2),i("div",{attrs:{id:"initiative-bar"}},[i("div",{attrs:{id:"initiative-round"}},[e._v("Round "+e._s(e.roundCounter))]),i("div",{staticStyle:{display:"flex"}}),i("div",{staticClass:"initiative-bar-button",class:{notAllowed:!e.$store.state.game.IS_DM},on:{click:function(t){e.setRound(0,!0),e.updateTurn(e.data[0].uuid,!0)}}},[i("i",{staticClass:"fas fa-sync-alt"})]),i("div",{staticClass:"initiative-bar-button",class:{notAllowed:!e.$store.state.game.IS_DM},on:{click:e.nextTurn}},[i("i",{staticClass:"fas fa-chevron-right"})])])],1)])},n=[];i.d(t,"a",function(){return s}),i.d(t,"b",function(){return n})},"5a5c":function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0});const s=i("9ab4"),n=s.__importDefault(i("66cb")),o=i("8f0a"),r=i("f10f");function a(e){return new o.LocalPoint(e.pageX,e.pageY)}function l(e=!1){const t=n.default(r.gameStore.fowColour);return r.gameStore.IS_DM?t.setAlpha(e?1:r.gameStore.fowOpacity):t.setAlpha(1),t.toRgbString()}function c(e){return 1/(-5/3+28/15*Math.exp(1.83*e))}function u(e){return Math.log(15/28*(1/e+5/3))/1.83}t.getMouse=a,t.getFogColour=l,t.zoomValue=c,t.zoomDisplay=u},"5a81":function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0});const s=i("9ab4"),n=s.__importStar(i("66cb")),o=s.__importDefault(i("a026")),r=s.__importDefault(i("65d9")),a=i("2f62"),l=s.__importDefault(i("3b36")),c=s.__importDefault(i("d65f")),u=i("4a5b"),d=i("8f0a"),h=i("6f92"),f=i("1327"),p=i("f10f"),g=i("92b1"),v=i("60a3");let m=class extends o.default{constructor(){super(...arguments),this.x=0,this.y=0,this.visible=!1,this.text="X",this.fillColour="rgba(255, 255, 255, 1)",this.borderColour="rgba(0, 0, 0, 1)"}mounted(){this.updatePreview()}onTextChange(e,t){this.updatePreview()}onFillChange(e,t){this.updatePreview()}onBorderChange(e,t){this.updatePreview()}open(e,t){this.visible=!0,this.x=e,this.y=t}submit(){const e=h.layerManager.getLayer();if(void 0===e)return;const t=new f.CircularToken(g.l2g(new d.LocalPoint(this.x,this.y)),g.getUnitDistance(p.gameStore.unitSize/2),this.text,"10px serif",this.fillColour,this.borderColour);t.addOwner(p.gameStore.username),e.addShape(t,!0),e.invalidate(!1),this.visible=!1}updatePreview(){const e=this.$refs.canvas.getContext("2d");e.clearRect(0,0,e.canvas.width,e.canvas.height),e.beginPath();const t={x:e.canvas.width/2,y:e.canvas.height/2},i=.9*Math.min(t.x,t.y);e.fillStyle=this.fillColour,e.arc(t.x,t.y,i,0,2*Math.PI),e.fill(),"rgba(0, 0, 0, 0)"!==this.borderColour&&(e.beginPath(),e.lineWidth=5,e.strokeStyle=this.borderColour,e.arc(t.x,t.y,i,0,2*Math.PI),e.stroke()),e.save(),e.textAlign="center",e.textBaseline="middle";const s=u.calcFontScale(e,this.text,i,i),o=0;e.transform(s,o,-o,s,t.x,t.y),e.fillStyle=n.mostReadable(this.fillColour,["#000","#fff"]).toHexString(),e.fillText(this.text,0,0),e.restore()}};s.__decorate([v.Watch("text")],m.prototype,"onTextChange",null),s.__decorate([v.Watch("fillColour")],m.prototype,"onFillChange",null),s.__decorate([v.Watch("borderColour")],m.prototype,"onBorderChange",null),m=s.__decorate([r.default({components:{Modal:c.default,"color-picker":l.default},computed:Object.assign({},a.mapState("game",["unitSize"]))})],m),t.default=m},"5ae5":function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0});const s=i("9ab4"),n=s.__importDefault(i("a026")),o=s.__importDefault(i("65d9")),r=s.__importDefault(i("d65f")),a=i("4a5b"),l=i("f10f");let c=class extends n.default{constructor(){super(...arguments),this.visible=!1,this.note=null}open(e){this.visible=!0,this.note=e}calcHeight(){if(this.$refs.textarea){const e=this.$refs.textarea;return e.style.height="auto",e.style.height=e.scrollHeight+"px",e.scrollHeight+"px"}return"100px"}updateNote(){this.note&&l.gameStore.updateNote({note:this.note,sync:!0})}removeNote(){a.getRef("confirm").open("Are you sure you wish to remove this?").then(e=>{e&&this.note&&(l.gameStore.removeNote({note:this.note,sync:!0}),this.visible=!1)},()=>{})}};c=s.__decorate([o.default({components:{Modal:r.default}})],c),t.default=c},"5b69":function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0});const s=i("9ab4"),n=s.__importDefault(i("65d9")),o=i("60a3"),r=s.__importDefault(i("3b36")),a=s.__importDefault(i("ea6a")),l=i("0bc6"),c=i("8f0a"),u=i("6f92"),d=i("4709"),h=i("5e7c"),f=i("574e"),p=i("e4ea"),g=i("b2ed"),v=i("f10f"),m=i("92b1"),y=i("5a5c");let b=class extends a.default{constructor(){super(...arguments),this.name="Draw",this.active=!1,this.startPoint=null,this.shape=null,this.brushHelper=null,this.ruler=null,this.fillColour="rgba(0, 0, 0, 1)",this.borderColour="rgba(255, 255, 255, 0)",this.shapeSelect="square",this.shapes=["square","circle","draw-polygon","paint-brush"],this.modeSelect="normal",this.modes=["normal","reveal","hide"],this.brushSize=m.getUnitDistance(v.gameStore.unitSize)}get helperSize(){return"paint-brush"===this.shapeSelect?this.brushSize/2:m.getUnitDistance(this.unitSize)/8}get IS_DM(){return v.gameStore.IS_DM}get unitSize(){return v.gameStore.unitSize}get useGrid(){return v.gameStore.useGrid}onFillChange(){this.brushHelper&&(this.brushHelper.fillColour=this.fillColour)}onModeUpdate(e,t){this.onModeChange(e,t)}setupBrush(){null!==this.brushHelper&&("reveal"===this.modeSelect||"hide"===this.modeSelect?(this.brushHelper.options.set("preFogShape",!0),this.brushHelper.options.set("skipDraw",!0),this.brushHelper.fillColour="rgba(0, 0, 0, 1)","reveal"===this.modeSelect?this.brushHelper.globalCompositeOperation="source-over":"hide"===this.modeSelect&&(this.brushHelper.globalCompositeOperation="destination-out")):(this.brushHelper.options.delete("preFogShape"),this.brushHelper.options.delete("skipDraw"),this.brushHelper.globalCompositeOperation="source-over",this.brushHelper.fillColour=this.fillColour))}onModeChange(e,t){if(null===this.brushHelper)return;const i=u.layerManager.getLayer("fow"),s=u.layerManager.getLayer();void 0!==i&&void 0!==s&&(this.setupBrush(),"normal"!==e&&"normal"===t?(s.removeShape(this.brushHelper,!1),i.addShape(this.brushHelper,!1)):"normal"===e&&"normal"!==t&&(s.addShape(this.brushHelper,!1),i.removeShape(this.brushHelper,!1)))}getLayer(){return"normal"===this.modeSelect?u.layerManager.getLayer():u.layerManager.getLayer("fow")}onMouseDown(e){const t=this.getLayer();if(void 0!==t){if(this.active)null!==this.shape&&this.shape instanceof p.Polygon&&this.shape._vertices.push(m.l2g(y.getMouse(e)));else{switch(this.startPoint=m.l2g(y.getMouse(e)),this.active=!0,this.shapeSelect){case"square":this.shape=new g.Rect(this.startPoint.clone(),0,0,this.fillColour,this.borderColour);break;case"circle":this.shape=new d.Circle(this.startPoint.clone(),this.helperSize,this.fillColour,this.borderColour);break;case"paint-brush":this.shape=new f.MultiLine(this.startPoint.clone(),[],this.brushSize),this.shape.fillColour=this.fillColour;break;case"draw-polygon":this.shape=new p.Polygon(this.startPoint.clone(),[],this.fillColour,this.borderColour);break;default:return}"normal"!==this.modeSelect&&(this.shape.options.set("preFogShape",!0),this.shape.options.set("skipDraw",!0),this.shape.fillColour="rgba(0, 0, 0, 1)"),"reveal"===this.modeSelect?this.shape.globalCompositeOperation="source-over":"hide"===this.modeSelect&&(this.shape.globalCompositeOperation="destination-out"),this.shape.addOwner(v.gameStore.username),"fow"===t.name&&"normal"===this.modeSelect&&(this.shape.visionObstruction=!0,this.shape.movementObstruction=!0),t.addShape(this.shape,!0,!1,!1),this.pushBrushBack()}if(null!==this.shape&&this.shape instanceof p.Polygon){const i=m.l2g(y.getMouse(e));null===this.ruler?(this.ruler=new h.Line(i,i,3,"black"),t.addShape(this.ruler,!1)):(this.ruler.refPoint=i,this.ruler.endPoint=i),this.shape.visionObstruction&&v.gameStore.recalculateVision(!0),t.invalidate(!1),l.socket.emit("Shape.Update",{shape:this.shape.asDict(),redraw:!0,temporary:!0})}}else console.log("No active layer!")}onMouseMove(e){const t=m.l2g(y.getMouse(e)),i=this.getLayer();if(void 0!==i){if(null!==this.brushHelper&&(this.brushHelper.r=this.helperSize,this.brushHelper.refPoint=t,this.active||i.invalidate(!1)),this.active&&null!==this.startPoint&&null!==this.shape){switch(this.shapeSelect){case"square":this.shape.w=Math.abs(t.x-this.startPoint.x),this.shape.h=Math.abs(t.y-this.startPoint.y),this.shape.refPoint=new c.GlobalPoint(Math.min(this.startPoint.x,t.x),Math.min(this.startPoint.y,t.y));break;case"circle":this.shape.r=t.subtract(this.startPoint).length();break;case"paint-brush":this.shape._points.push(t);break;case"draw-polygon":this.ruler.endPoint=t;break}this.shape instanceof p.Polygon||(l.socket.emit("Shape.Update",{shape:this.shape.asDict(),redraw:!0,temporary:!0}),this.shape.visionObstruction&&v.gameStore.recalculateVision(!0)),i.invalidate(!1)}}else console.log("No active layer!")}onMouseUp(e){!this.active||null===this.shape||this.shape instanceof p.Polygon||(!e.altKey&&this.useGrid&&this.shape.resizeToGrid(),this.finaliseShape())}onContextMenu(e){if(!this.active||null===this.shape||!(this.shape instanceof p.Polygon))return;const t=this.getLayer();void 0!==t?(t.removeShape(this.ruler,!1),this.ruler=null,this.finaliseShape()):console.log("No active layer!")}finaliseShape(){null!==this.shape&&(this.shape.visionObstruction&&v.gameStore.recalculateVision(),this.shape.movementObstruction&&v.gameStore.recalculateMovement(),l.socket.emit("Shape.Update",{shape:this.shape.asDict(),redraw:!0,temporary:!1}),this.active=!1)}onSelect(){const e=this.getLayer();void 0!==e&&(this.brushHelper=new d.Circle(new c.GlobalPoint(-1e3,-1e3),this.brushSize/2,this.fillColour),this.setupBrush(),e.addShape(this.brushHelper,!1))}onDeselect(){const e=this.getLayer();null!==this.brushHelper&&void 0!==e&&e.removeShape(this.brushHelper,!1),this.active&&void 0!==e&&null!==this.shape&&(e.removeShape(this.shape,!0,!1),this.shape=null,this.active=!1,e.invalidate(!1))}pushBrushBack(){const e=this.getLayer();void 0!==e?(null!==this.brushHelper&&e.removeShape(this.brushHelper,!1),this.brushHelper=new d.Circle(new c.GlobalPoint(-1e3,-1e3),this.brushSize/2,this.fillColour),this.setupBrush(),e.addShape(this.brushHelper,!1)):console.log("No active layer!")}};s.__decorate([o.Watch("fillColour")],b.prototype,"onFillChange",null),s.__decorate([o.Watch("modeSelect")],b.prototype,"onModeUpdate",null),b=s.__decorate([n.default({components:{"color-picker":r.default}})],b),t.default=b},"5e7c":function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0});const s=i("8f0a"),n=i("8db6"),o=i("2469"),r=i("92b1");class a extends o.Shape{constructor(e,t,i,s,n){super(e,"rgba(0, 0, 0, 0)",s||"#000",n),this.type="line",this.endPoint=t,this.lineWidth=void 0===i?1:i}asDict(){return Object.assign(this.getBaseDict(),{x2:this.endPoint.x,y2:this.endPoint.y,line_width:this.lineWidth})}get points(){return[[this.refPoint.x,this.refPoint.y],[this.endPoint.x,this.endPoint.y]]}getBoundingBox(){return new n.BoundingRect(new s.GlobalPoint(Math.min(this.refPoint.x,this.endPoint.x),Math.min(this.refPoint.y,this.endPoint.y)),Math.abs(this.refPoint.x-this.endPoint.x),Math.abs(this.refPoint.y-this.endPoint.y))}draw(e){super.draw(e),e.strokeStyle=this.strokeColour,e.beginPath(),e.moveTo(r.g2lx(this.refPoint.x),r.g2ly(this.refPoint.y)),e.lineTo(r.g2lx(this.endPoint.x),r.g2ly(this.endPoint.y)),e.lineWidth=this.lineWidth,e.stroke()}contains(e){return!1}center(e){}visibleInCanvas(e){return this.getBoundingBox().visibleInCanvas(e)}snapToGrid(){}resizeToGrid(){}resize(e,t){0===e?this.refPoint=r.l2g(t):this.endPoint=r.l2g(t)}}t.Line=a},"5f86":function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0});const s=i("9ab4"),n=s.__importDefault(i("bc3a")),o=s.__importDefault(i("a026")),r=s.__importDefault(i("8c4f"));o.default.use(r.default);const a=s.__importDefault(i("e914")),l=s.__importDefault(i("1077")),c=s.__importDefault(i("cad7")),u=s.__importDefault(i("47f7")),d=s.__importDefault(i("c6b4")),h=s.__importDefault(i("07f5")),f=s.__importDefault(i("ce87")),p=i("cc67");t.router=new r.default({mode:"history",base:"/",routes:[{path:"/",redirect:"/dashboard"},{path:"/_load",name:"load",component:u.default},{path:"/assets",component:a.default,meta:{auth:!0}},{path:"/auth",component:{template:""},children:[{path:"login",component:l.default},{path:"logout",component:c.default}]},{path:"/invite/:code",component:f.default,meta:{auth:!0}},{path:"/dashboard",component:d.default,meta:{auth:!0}},{path:"/game/:creator/:room",component:h.default,meta:{auth:!0}}]}),t.router.beforeEach((e,i,s)=>{p.coreStore.initialized||"/_load"===e.path?e.matched.some(e=>e.meta.auth)&&!p.coreStore.authenticated?s({path:"/auth/login",query:{redirect:e.path}}):s():(s({path:"/_load"}),n.default.get("/api/auth").then(i=>{i.data.auth&&(p.coreStore.setAuthenticated(!0),p.coreStore.setUsername(i.data.username)),p.coreStore.setInitialized(!0),t.router.push(e.path)}).catch(()=>{console.error("Authentication check could not be fulfilled.")}))})},"5fa9":function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0});const s=i("9ab4"),n=s.__importDefault(i("a026")),o=s.__importDefault(i("65d9"));let r=class extends n.default{constructor(){super(...arguments),this.name="",this.selected=!1,this.active=!1}get detailRight(){const e=this.$parent.$refs[this.name+"-selector"][0].getBoundingClientRect(),t=e.left+e.width/2;return`${window.innerWidth-Math.min(window.innerWidth-25,t+75)}px`}get detailArrow(){const e=this.$parent.$refs[this.name+"-selector"][0].getBoundingClientRect(),t=e.left+e.width/2,i=Math.min(window.innerWidth-25,t+75);return`${i-t-14}px`}created(){this.$parent.$on("mousedown",(e,t)=>{t===this.name&&this.onMouseDown(e)}),this.$parent.$on("mouseup",(e,t)=>{t===this.name&&this.onMouseUp(e)}),this.$parent.$on("mousemove",(e,t)=>{t===this.name&&this.onMouseMove(e)}),this.$parent.$on("contextmenu",(e,t)=>{t===this.name&&this.onContextMenu(e)}),this.$parent.$on("tools-select-change",(e,t)=>{t===this.name?(this.selected=!1,this.onDeselect()):e===this.name&&(this.selected=!0,this.onSelect())})}onSelect(){}onDeselect(){}onMouseDown(e){}onMouseUp(e){}onMouseMove(e){}onContextMenu(e){}};r=s.__decorate([o.default],r),t.default=r},"602f":function(e,t,i){},6100:function(e,t,i){"use strict";i.r(t);var s=i("f3c9"),n=i("e94f");for(var o in n)"default"!==o&&function(e){i.d(t,e,function(){return n[e]})}(o);i("a5a4");var r=i("2877"),a=Object(r["a"])(n["default"],s["a"],s["b"],!1,null,"cf33581e",null);a.options.__file="tools.vue",t["default"]=a.exports},6465:function(e,t,i){"use strict";i.r(t);var s=i("5fa9"),n=i.n(s);for(var o in s)"default"!==o&&function(e){i.d(t,e,function(){return s[e]})}(o);t["default"]=n.a},"64a9":function(e,t,i){},6542:function(e,t,i){},"6c30":function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0});const s=i("c266"),n=i("f10f"),o=i("92b1");class r extends s.BaseRect{constructor(e,t,i,s,n){super(t,i,s,void 0,void 0,n),this.type="assetrect",this.src="",this.img=e}asDict(){return Object.assign(this.getBaseDict(),{src:this.src})}fromDict(e){super.fromDict(e),this.src=e.src}draw(e){super.draw(e);try{e.drawImage(this.img,o.g2lx(this.refPoint.x),o.g2ly(this.refPoint.y),o.g2lz(this.w),o.g2lz(this.h))}catch(t){console.warn(`Shape ${this.uuid} could not load the image ${this.src}`)}}getInitiativeRepr(){return{uuid:this.uuid,visible:!n.gameStore.IS_DM,group:!1,source:this.src,has_img:!0,effects:[],index:1/0}}}t.Asset=r},"6e4a":function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0});const s=i("98ef"),n=i("4aee");class o{constructor(){this.tds=new s.TDS}insertConstraint(e,t){const i=this.insert(e),s=this.insert(t);i!==s&&this.insertConstraintV(i,s)}insertConstraintV(e,t){const i=[[e,t]];while(i.length>0){const e=i.pop(),t=n.edgeInfo(e[0],e[1]);if(t.includes){this.markConstraint(t.fr,t.i),t.vi!==e[1]&&i.push([t.vi,e[1]]);continue}const s=this.findIntersectedFaces(e[0],e[1]);s.found?s.vi!==e[0]&&s.vi!==e[1]?(i.push([e[0],s.vi]),i.push([s.vi,e[1]])):i.push(e):(this.triangulateHole(s.intersectedFaces,s.listAB,s.listBA),s.vi!==e[1]&&i.push([s.vi,e[1]]))}}triangulateHole(e,t,i){const s=[];this.triangulateHole2(e,t,i,s),this.propagatingFlipE(s)}triangulateHole2(e,t,i,s){if(t.length>0){this.triangulateHalfHole(t,s),this.triangulateHalfHole(i,s);const n=t[0][0],o=i[0][0];n.neighbours[2]=o,o.neighbours[2]=n,n.constraints[2]=!0,o.constraints[2]=!0;while(e.length>0)this.tds.deleteTriangle(e.shift())}}triangulateHalfHole(e,t){let i,o,r=0;const a=()=>e[r],l=()=>e[i],c=a()[0].vertices[n.ccw(a()[1])];let u,d,h,f,p,g;i=r,++i;do{d=a()[0],p=a()[1],null!==d.neighbours[p]&&(u=d.neighbours[p],f=n.cw(u.indexV(d.vertices[n.cw(p)])),d=u.neighbours[f],p=this.tds.mirrorIndex(u,f)),h=l()[0],g=l()[1],null!==h.neighbours[g]&&(u=h.neighbours[g],f=n.cw(u.indexV(h.vertices[n.cw(g)])),h=u.neighbours[f],g=this.tds.mirrorIndex(u,f));const v=d.vertices[n.ccw(p)],m=d.vertices[n.cw(p)],y=h.vertices[n.cw(g)],b=n.orientation(v.point,m.point,y.point);switch(b){case s.Sign.RIGHT_TURN:{const s=this.tds.createTriangle(v,y,m,null,null,null);t.push([s,2]),s.neighbours[1]=d,s.neighbours[0]=h,d.neighbours[p]=s,h.neighbours[g]=s,d.isConstrained(p)&&(s.constraints[1]=!0),h.isConstrained(g)&&(s.constraints[0]=!0),v.triangle=s,m.triangle=s,y.triangle=s,o=r+1,e.splice(r,0,[s,2]),e.splice(Math.max(o,i),1),e.splice(Math.min(o,i),1),i=r,v!==c?--r:++i;break}case s.Sign.LEFT_TURN:case s.Sign.COLLINEAR:++r,++i;break}}while(i0){t=r[0][0],a=r[0][1],l=t.neighbours[a],c=this.tds.mirrorIndex(t,a),u=[t,a],r.splice(r.findIndex(e=>e[0]===u[0]&&e[1]===u[1]),1),d[0]=[t,n.cw(a)],d[1]=[t,n.ccw(a)],d[2]=[l,n.cw(c)],d[3]=[l,n.ccw(c)];for(const e of d){const t=e[0],i=e[1];s=[t.neighbours[i],this.tds.mirrorIndex(t,i)],this.lessEdge(e,s)?r.splice(r.findIndex(t=>t[0]===e[0]&&t[1]===e[1]),1):r.splice(r.findIndex(e=>e[0]===s[0]&&e[1]===s[1]),1)}this.flip(t,a);for(const e of d){const t=e[0],i=e[1];this.isFlipable(t,i)&&(s=[t.neighbours[i],this.tds.mirrorIndex(t,i)],this.lessEdge(e,s)?r.push(e):r.push(s))}}}flip(e,t){const i=e.neighbours[t],s=this.tds.mirrorIndex(e,t),o=e.neighbours[n.cw(t)],r=this.tds.mirrorIndex(e,n.cw(t)),a=e.neighbours[n.ccw(t)],l=this.tds.mirrorIndex(e,n.ccw(t)),c=i.neighbours[n.cw(s)],u=this.tds.mirrorIndex(i,n.cw(s)),d=i.neighbours[n.ccw(s)],h=this.tds.mirrorIndex(i,n.ccw(s));this.tds.flip(e,t),e.constraints[e.indexT(i)]=!1,i.constraints[i.indexT(e)]=!1,o.neighbours[r].constraints[this.tds.mirrorIndex(o,r)]=o.constraints[r],a.neighbours[l].constraints[this.tds.mirrorIndex(a,l)]=a.constraints[l],c.neighbours[u].constraints[this.tds.mirrorIndex(c,u)]=c.constraints[u],d.neighbours[h].constraints[this.tds.mirrorIndex(d,h)]=d.constraints[h]}isFlipable(e,t,i=!0){const o=e.neighbours[t];return!e.isInfinite()&&!o.isInfinite()&&(!e.constraints[t]&&n.sideOfOrientedCircle(o,e.vertices[t].point,i)===s.Sign.ON_POSITIVE_SIDE)}insertb(e,t,i,o){let r,a,l=!1;i===s.LocateType.EDGE&&t.isConstrained(o)&&(l=!0,r=t.vertices[n.ccw(o)],a=t.vertices[n.cw(o)]);const c=this.insertc(e,t,i,o);return l?this.updateConstraintsIncident(c,r,a):i!==s.LocateType.VERTEX&&this.clearConstraintsIncident(c),2===this.tds.dimension&&this.updateConstraintsOpposite(c),c}updateConstraintsIncident(e,t,i){if(0!==this.tds.dimension)if(1===this.tds.dimension){const t=new s.EdgeCirculator(e,null);do{t.t.constraints[2]=!0}while(t.next())}else{const o=new s.FaceCirculator(e,null);do{const s=o.t.indexV(e),r=n.cw(s),a=n.ccw(s);o.t.vertices[r]===t||o.t.vertices[r]===i?(o.t.constraints[a]=!0,o.t.constraints[r]=!1):(o.t.constraints[a]=!1,o.t.constraints[r]=!0)}while(o.next())}}clearConstraintsIncident(e){const t=new s.EdgeCirculator(e,null);if(t.valid)do{const e=t.t,i=t.ri;e.constraints[i]=!1,2===this.tds.dimension&&(e.neighbours[i].constraints[this.tds.mirrorIndex(e,i)]=!1)}while(t.next())}insertc(e,t,i,n){if(1===this.tds.vertices.length)return this.insertFirst(e);if(2===this.tds.vertices.length)return i===s.LocateType.VERTEX?this.tds.finiteVertex:this.insertSecond(e);switch(i){case s.LocateType.VERTEX:return t.vertices[n];case s.LocateType.OUTSIDE_AFFINE_HULL:return this.insertOutsideAffineHull(e);case s.LocateType.OUTSIDE_CONVEX_HULL:return this.insertOutsideConvexHull(e,t);case s.LocateType.EDGE:return this.insertInEdge(e,t,n);case s.LocateType.FACE:return this.insertInFace(e,t)}throw new Error("qwe")}insertInEdge(e,t,i){const s=this.tds.insertInEdge(t,i);return s.point=e,s}insertInFace(e,t){const i=this.tds.insertInFace(t);return i.point=e,i}insertFirst(e){const t=this.tds.insertDimUp();return t.point=e,t}insertSecond(e){const t=this.tds.insertDimUp(this.tds._infinite,!0);return t.point=e,t}insertOutsideAffineHull(e){let t=!1;if(1===this.tds.dimension){const i=this.tds.finiteEdge.first,o=n.orientation(i.vertices[0].point,i.vertices[1].point,e);t=o===s.Sign.COUNTERCLOCKWISE}const i=this.tds.insertDimUp(this.tds._infinite,t);return i.point=e,i}insertOutsideConvexHull(e,t){let i;if(1===this.tds.dimension)throw new Error("sdfasdasd");return i=this.insertOutsideConvexHull2(e,t),i.point=e,i}insertOutsideConvexHull2(e,t){let i=t.indexV(this.tds._infinite);const o=[],r=[];let a=new s.FaceCirculator(this.tds._infinite,t),l=!1;while(!l){a.prev(),i=a.t.indexV(this.tds._infinite);const t=a.t.vertices[n.ccw(i)].point,r=a.t.vertices[n.cw(i)].point;n.orientation(e,t,r)===s.Sign.LEFT_TURN?o.push(a.t):l=!0}a=new s.FaceCirculator(this.tds._infinite,t),l=!1;while(!l){a.next(),i=a.t.indexV(this.tds._infinite);const t=a.t.vertices[n.ccw(i)].point,o=a.t.vertices[n.cw(i)].point;n.orientation(e,t,o)===s.Sign.LEFT_TURN?r.push(a.t):l=!0}const c=this.tds.insertInFace(t);let u;c.point=e;while(o.length>0)u=o[0],i=n.ccw(u.indexV(this.tds._infinite)),this.tds.flip(u,i),o.shift();while(r.length>0)u=r[0],i=n.cw(u.indexV(this.tds._infinite)),this.tds.flip(u,i),r.shift();a=new s.FaceCirculator(c,null);while(!a.t.isInfinite())a.next();return this.tds._infinite.triangle=a.t,c}locate(e,t){let i=0,o=0;if(this.tds.dimension<0)return i=s.LocateType.OUTSIDE_AFFINE_HULL,o=4,{loc:null,lt:i,li:o};if(0===this.tds.dimension)return i=n.xyEqual(e,this.tds.finiteVertex.triangle.vertices[0].point)?s.LocateType.VERTEX:s.LocateType.OUTSIDE_AFFINE_HULL,o=4,{loc:null,lt:i,li:o};if(1===this.tds.dimension)return this.marchLocate1D(e);if(null===t){const e=this.tds._infinite.triangle;t=e.neighbours[e.indexV(this.tds._infinite)]}else t.isInfinite()&&(t=t.neighbours[t.indexV(this.tds._infinite)]);return this.marchLocate2D(t,e)}marchLocate1D(e){const t=this.tds._infinite.triangle,i=t.indexV(this.tds._infinite),o=t.neighbours[i],r=n.orientation(o.vertices[0].point,o.vertices[1].point,e);if(r===s.Sign.RIGHT_TURN||r===s.Sign.LEFT_TURN)return{loc:new s.Triangle,lt:s.LocateType.OUTSIDE_AFFINE_HULL,li:4};const a=o.indexT(t);if(n.collinearBetween(e,o.vertices[1-a].point,o.vertices[a].point))return{loc:t,lt:s.LocateType.OUTSIDE_CONVEX_HULL,li:i};if(n.xyEqual(e,o.vertices[1-a].point))return{loc:o,lt:s.LocateType.VERTEX,li:1-a};throw new Error("sdfsdf")}marchLocate2D(e,t){let i,o,r=null,a=!0;while(1){if(e.isInfinite())return{loc:e,lt:s.LocateType.OUTSIDE_CONVEX_HULL,li:e.indexV(this.tds._infinite)};const l=0,c=e.vertices[0].point,u=e.vertices[1].point,d=e.vertices[2].point;let h,f,p;if(a){if(r=e,a=!1,h=n.orientation(c,u,t),h===s.Sign.NEGATIVE){e=e.neighbours[2];continue}if(f=n.orientation(u,d,t),f===s.Sign.NEGATIVE){e=e.neighbours[0];continue}if(p=n.orientation(d,c,t),p===s.Sign.NEGATIVE){e=e.neighbours[1];continue}}else if(l)if(e.neighbours[0]===r){if(r=e,h=n.orientation(c,u,t),h===s.Sign.NEGATIVE){e=e.neighbours[2];continue}if(p=n.orientation(d,c,t),p===s.Sign.NEGATIVE){e=e.neighbours[1];continue}f=s.Sign.POSITIVE}else if(e.neighbours[1]===r){if(r=e,f=n.orientation(u,d,t),f===s.Sign.NEGATIVE){e=e.neighbours[0];continue}if(h=n.orientation(c,u,t),h===s.Sign.NEGATIVE){e=e.neighbours[2];continue}p=s.Sign.POSITIVE}else{if(r=e,p=n.orientation(d,c,t),p===s.Sign.NEGATIVE){e=e.neighbours[1];continue}if(f=n.orientation(u,d,t),f===s.Sign.NEGATIVE){e=e.neighbours[0];continue}h=s.Sign.POSITIVE}else if(e.neighbours[0]===r){if(r=e,p=n.orientation(d,c,t),p===s.Sign.NEGATIVE){e=e.neighbours[1];continue}if(h=n.orientation(c,u,t),h===s.Sign.NEGATIVE){e=e.neighbours[2];continue}f=s.Sign.POSITIVE}else if(e.neighbours[1]===r){if(r=e,h=n.orientation(c,u,t),h===s.Sign.NEGATIVE){e=e.neighbours[2];continue}if(f=n.orientation(u,d,t),f===s.Sign.NEGATIVE){e=e.neighbours[0];continue}p=s.Sign.POSITIVE}else{if(r=e,f=n.orientation(u,d,t),f===s.Sign.NEGATIVE){e=e.neighbours[0];continue}if(p=n.orientation(d,c,t),p===s.Sign.NEGATIVE){e=e.neighbours[1];continue}h=s.Sign.POSITIVE}const g=(h===s.Sign.COLLINEAR?1:0)+(f===s.Sign.COLLINEAR?1:0)+(p===s.Sign.COLLINEAR?1:0);switch(g){case 0:i=s.LocateType.FACE,o=4;break;case 1:i=s.LocateType.EDGE,o=h===s.Sign.COLLINEAR?2:f===s.Sign.COLLINEAR?0:1;break;case 2:i=s.LocateType.VERTEX,o=h!==s.Sign.COLLINEAR?2:f!==s.Sign.COLLINEAR?0:1;break}if(void 0===i||void 0===o)throw new Error("ert");return{loc:e,lt:i,li:o}}}iLocate(e,t){if(this.tds.dimension<2)return t;if(null===t){const e=this.tds._infinite.triangle;t=e.neighbours[e.indexV(this.tds._infinite)]}else t.isInfinite()&&(t=t.neighbours[t.indexV(this.tds._infinite)]);let i=null,s=t,o=!0,r=2500;while(1){if(!r--)return s;if(s.isInfinite())return s;const t=s.vertices[0].point,a=s.vertices[1].point,l=s.vertices[2].point;if(o){if(i=s,o=!1,n.hasInexactNegativeOrientation(t,a,e)){s=s.neighbours[2];continue}if(n.hasInexactNegativeOrientation(a,l,e)){s=s.neighbours[0];continue}if(n.hasInexactNegativeOrientation(l,t,e)){s=s.neighbours[1];continue}}else if(s.neighbours[0]===i){if(i=s,n.hasInexactNegativeOrientation(t,a,e)){s=s.neighbours[2];continue}if(n.hasInexactNegativeOrientation(l,t,e)){s=s.neighbours[1];continue}}else if(s.neighbours[1]===i){if(i=s,n.hasInexactNegativeOrientation(t,a,e)){s=s.neighbours[2];continue}if(n.hasInexactNegativeOrientation(a,l,e)){s=s.neighbours[0];continue}}else{if(i=s,n.hasInexactNegativeOrientation(l,t,e)){s=s.neighbours[1];continue}if(n.hasInexactNegativeOrientation(a,l,e)){s=s.neighbours[0];continue}}break}return s}}t.CDT=o},"6f8d":function(e,t,i){"use strict";i.r(t);var s=i("5b69"),n=i.n(s);for(var o in s)"default"!==o&&function(e){i.d(t,e,function(){return s[e]})}(o);t["default"]=n.a},"6f92":function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0});const s=i("8f0a"),n=i("6c30"),o=i("f10f"),r=i("92b1");class a{constructor(){this.layers=[],this.width=window.innerWidth,this.height=window.innerHeight,this.UUIDMap=new Map,this.interval=30,this.drawLoop=(()=>{for(let e=this.layers.length-1;e>=0;e--)this.layers[e].draw();requestAnimationFrame(this.drawLoop)}),requestAnimationFrame(this.drawLoop)}reset(){this.layers=[],this.UUIDMap=new Map}setWidth(e){this.width=e;for(const t of this.layers)t.canvas.width=e,t.width=e}setHeight(e){this.height=e;for(const t of this.layers)t.canvas.height=e,t.height=e}addLayer(e){this.layers.push(e),(o.gameStore.IS_DM||e.playerEditable)&&e.selectable&&o.gameStore.addLayer(e.name)}hasLayer(e){return this.layers.some(t=>t.name===e)}getLayer(e){e=void 0===e?o.gameStore.selectedLayer:e;for(const t of this.layers)if(t.name===e)return t}selectLayer(e,t=!0){let i=!1;for(const s of this.layers)s.selectable&&(i&&"fow"!==s.name?s.ctx.globalAlpha=.3:s.ctx.globalAlpha=1,e===s.name&&(o.gameStore.selectLayer({name:e,sync:t}),i=!0),s.clearSelection(),s.invalidate(!0))}getGridLayer(){return this.getLayer("grid")}hasSelection(){const e=this.getSelection();return void 0!==e&&e.length>0}getSelection(){const e=this.getLayer();if(void 0!==e)return e.selection}invalidate(){for(let e=this.layers.length-1;e>=0;e--)this.layers[e].invalidate(!0)}invalidateLight(){for(let e=this.layers.length-1;e>=0;e--)this.layers[e].isVisionLayer&&this.layers[e].invalidate(!0)}dropAsset(e){const t=this.getLayer();if(void 0===t||null===e||null===e.dataTransfer)return;const i=document.createElement("img");i.src=e.dataTransfer.getData("text/plain");const a=new n.Asset(i,new s.GlobalPoint(r.l2gx(e.clientX),r.l2gy(e.clientY)),r.l2gz(i.width),r.l2gz(i.height));if(a.src=new URL(i.src).pathname,o.gameStore.useGrid){const e=o.gameStore.gridSize;a.refPoint=new s.GlobalPoint(Math.round(a.refPoint.x/e)*e,Math.round(a.refPoint.y/e)*e),a.w=Math.max(Math.round(a.w/e)*e,e),a.h=Math.max(Math.round(a.h/e)*e,e)}t.addShape(a,!0)}}t.layerManager=new a,window.lm=t.layerManager},7018:function(e,t,i){"use strict";i.r(t);var s=i("ebb9"),n=i.n(s);for(var o in s)"default"!==o&&function(e){i.d(t,e,function(){return s[e]})}(o);t["default"]=n.a},7420:function(e,t,i){"use strict";i.r(t);var s=i("d320"),n=i("778b");for(var o in n)"default"!==o&&function(e){i.d(t,e,function(){return n[e]})}(o);i("c969");var r=i("2877"),a=Object(r["a"])(n["default"],s["a"],s["b"],!1,null,"73816298",null);a.options.__file="createtoken_modal.vue",t["default"]=a.exports},"76b3":function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0});class s{constructor(e,t){this.children=[],this.nPrimitives=e,this.bbox=t}}t.BoundingNode=s;class n extends s{constructor(e,t,i){super(t,i),this.firstPrimOffset=e}}t.LeafNode=n;class o extends s{constructor(e,t,i){super(0,t.bbox.union(i.bbox)),this.dimension=e,this.children.push(t),this.children.push(i)}}t.InteriorNode=o},"778b":function(e,t,i){"use strict";i.r(t);var s=i("5a81"),n=i.n(s);for(var o in s)"default"!==o&&function(e){i.d(t,e,function(){return s[e]})}(o);t["default"]=n.a},"77a6":function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0});const s=i("4a5b"),n=i("0bc6"),o=i("2b48"),r=i("af17"),a=i("8f0a"),l=i("6f92"),c=i("206a"),u=i("f10f"),d=i("2838");function h(e){if(e.target instanceof HTMLInputElement||e.target instanceof HTMLTextAreaElement);else if("Delete"===e.key||"Del"===e.key||"Backspace"===e.key){if(void 0===l.layerManager.getLayer)return void console.log("No active layer selected for delete operation");const e=l.layerManager.getLayer();for(let t=e.selection.length-1;t>=0;t--){const i=e.selection[t];s.getRef("tools").$refs.selectTool.selectionHelper.uuid!==i.uuid?(e.removeShape(i,!0,!1),r.EventBus.$emit("SelectionInfo.Shape.Set",null),r.EventBus.$emit("Initiative.Remove",i.uuid)):e.selection.splice(t,1)}}}function f(e){if(e.target instanceof HTMLInputElement||e.target instanceof HTMLTextAreaElement)65===e.keyCode&&e.ctrlKey&&e.target.select();else if(e.keyCode>=37&&e.keyCode<=40){const t=Math.round(u.gameStore.gridSize);let i=t*(e.keyCode%2),r=t*(e.keyCode%2?0:1);if(l.layerManager.hasSelection()){const t=l.layerManager.getSelection();i*=e.keyCode<=38?-1:1,r*=e.keyCode<=38?-1:1;let o=new a.Vector(i,r);if(!e.shiftKey||!u.gameStore.IS_DM)for(const e of t)s.getRef("tools").$refs.selectTool.selectionHelper.uuid!==e.uuid&&(o=d.calculateDelta(o,e));for(const e of t)s.getRef("tools").$refs.selectTool.selectionHelper.uuid!==e.uuid&&(e.refPoint=e.refPoint.add(o),n.socket.emit("Shape.Position.Update",{shape:e.asDict(),redraw:!0,temporary:!1}));u.gameStore.recalculateVision(),l.layerManager.getLayer().invalidate(!1)}else u.gameStore.increasePanX(i*(e.keyCode<=38?1:-1)),u.gameStore.increasePanY(r*(e.keyCode<=38?1:-1)),l.layerManager.invalidate(),o.sendClientOptions()}else if(68===e.keyCode){const e=l.layerManager.getLayer();e&&(e.clearSelection(),e.invalidate(!0))}else if("u"===e.key&&e.ctrlKey)e.preventDefault(),e.stopPropagation(),u.gameStore.toggleUI();else if("c"===e.key&&e.ctrlKey){const e=l.layerManager.getLayer();if(!e)return;if(!e.selection)return;const t=[];for(const i of e.selection)s.getRef("tools").$refs.selectTool.selectionHelper.uuid!==i.uuid&&t.push(i.asDict());u.gameStore.setClipboard(t)}else if("v"===e.key&&e.ctrlKey){const e=l.layerManager.getLayer();if(!e)return;if(!u.gameStore.clipboard)return;e.selection=[];for(const t of u.gameStore.clipboard){t.x+=10,t.y+=10,t.uuid=s.uuidv4();const i=t.trackers;t.trackers=[];for(const e of i){const i=Object.assign({},e,{uuid:s.uuidv4()});t.trackers.push(i)}const n=t.auras;t.auras=[];for(const e of n){const i=Object.assign({},e,{uuid:s.uuidv4()});t.auras.push(i)}const o=c.createShapeFromDict(t);void 0!==o&&(e.addShape(o,!0),e.selection.push(o))}1===e.selection.length?r.EventBus.$emit("SelectionInfo.Shape.Set",e.selection[0]):r.EventBus.$emit("SelectionInfo.Shape.Set",null),e.invalidate(!1)}}t.onKeyUp=h,t.onKeyDown=f},"78c7":function(e,t,i){"use strict";var s=i("9227"),n=i.n(s);n.a},7997:function(e,t,i){"use strict";var s=i("39a7"),n=i.n(s);n.a},"7aaa":function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0});const s=i("9ab4"),n=s.__importDefault(i("a026")),o=s.__importDefault(i("033f")),r=s.__importDefault(i("7420")),a=s.__importDefault(i("59d8")),l=s.__importDefault(i("bea6")),c=s.__importDefault(i("dec1")),u=s.__importDefault(i("4899")),d=s.__importDefault(i("c277")),h=i("6f92"),f=i("9cb7"),p=i("f10f"),g=i("d5df"),v=i("92b1"),m=i("5a5c"),y=s.__importDefault(i("65d9"));let b=class extends n.default{constructor(){super(...arguments),this.currentTool="Select",this.tools=["Select","Pan","Draw","Ruler","Map","Filter"],this.dmTools=["Map"]}get IS_DM(){return p.gameStore.IS_DM}get currentToolComponent(){return`${this.currentTool.toLowerCase()}-tool`}get visibleTools(){return this.tools.filter(e=>!this.dmTools.includes(e)||this.IS_DM)}mousedown(e){if("CANVAS"!==e.target.tagName)return;let t=this.currentTool;if(1===e.button)t="Pan";else if(0!==e.button)return;this.$emit("mousedown",e,t)}mouseup(e){if("CANVAS"!==e.target.tagName)return;let t=this.currentTool;if(1===e.button)t="Pan";else if(0!==e.button)return;this.$emit("mouseup",e,t)}mousemove(e){if("CANVAS"!==e.target.tagName)return;let t=this.currentTool;if(0!==(4&e.buttons))t="Pan";else if((1&e.button)>1)return;this.$emit("mousemove",e,t);let i=!1;for(const s of p.gameStore.annotations)if(h.layerManager.UUIDMap.has(s)&&h.layerManager.hasLayer("draw")){const t=h.layerManager.UUIDMap.get(s);t.contains(v.l2g(m.getMouse(e)))&&(i=!0,f.gameManager.annotationManager.setActiveText(t.annotation))}!i&&f.gameManager.annotationManager.shown&&f.gameManager.annotationManager.setActiveText("")}mouseleave(e){0!==(1&e.buttons)&&this.$emit("mouseup",e,this.currentTool)}contextmenu(e){"CANVAS"===e.target.tagName&&2===e.button&&"CANVAS"===e.target.tagName&&this.$emit("contextmenu",e,this.currentTool)}};b=s.__decorate([y.default({components:{"select-tool":d.default,"pan-tool":u.default,"draw-tool":a.default,"ruler-tool":g.RulerTool,"map-tool":c.default,"filter-tool":l.default,"shape-menu":o.default,"createtoken-dialog":r.default},watch:{currentTool(e,t){this.$emit("tools-select-change",e,t)}}})],b),t.default=b},"7ba5":function(e,t,i){"use strict";i.r(t);var s=i("fbdd"),n=i.n(s);for(var o in s)"default"!==o&&function(e){i.d(t,e,function(){return s[e]})}(o);t["default"]=n.a},"7e15":function(e,t,i){"use strict";i.r(t);var s=i("52a8"),n=i.n(s);for(var o in s)"default"!==o&&function(e){i.d(t,e,function(){return s[e]})}(o);t["default"]=n.a},"7f1e":function(e,t,i){"use strict";var s=i("fe11"),n=i.n(s);n.a},"851c":function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0});const s=i("9ab4"),n=s.__importDefault(i("a026")),o=s.__importDefault(i("65d9")),r=s.__importDefault(i("d65f"));let a=class extends n.default{constructor(){super(...arguments),this.visible=!1,this.question="",this.answer="",this.title="",this.resolve=(e=>{}),this.reject=(()=>{})}submit(){this.resolve(this.answer),this.close()}close(){this.reject(),this.visible=!1,this.question="",this.answer="",this.title=""}prompt(e,t){return this.question=e,this.title=t,this.visible=!0,this.$nextTick(()=>{this.$refs.answer.focus()}),new Promise((e,t)=>{this.resolve=e,this.reject=t})}};a=s.__decorate([o.default({components:{Modal:r.default}})],a),t.default=a},8790:function(e,t,i){"use strict";var s=i("a912"),n=i.n(s);n.a},"88af":function(e,t,i){"use strict";var s=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",[e._v(e._s(e.message))])},n=[];i.d(t,"a",function(){return s}),i.d(t,"b",function(){return n})},"8cd4":function(e,t,i){"use strict";i.r(t);var s=i("9587"),n=i.n(s);for(var o in s)"default"!==o&&function(e){i.d(t,e,function(){return s[e]})}(o);t["default"]=n.a},"8db6":function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0});const s=i("8f0a"),n=i("92b1");class o{constructor(e,t,i){this.w=t,this.h=i,this.topLeft=e,this.topRight=new s.GlobalPoint(e.x+t,e.y),this.botRight=new s.GlobalPoint(e.x+t,e.y+i),this.botLeft=new s.GlobalPoint(e.x,e.y+i)}contains(e){return this.topLeft.x<=e.x&&this.topRight.x>=e.x&&this.topLeft.y<=e.y&&this.botLeft.y>=e.y}get points(){return 0===this.w||0===this.h?[[this.topLeft.x,this.topLeft.y]]:[[this.topLeft.x,this.topLeft.y],[this.botLeft.x,this.botLeft.y],[this.botRight.x,this.botRight.y],[this.topRight.x,this.topRight.y]]}offset(e){return new o(this.topLeft.add(e),this.w,this.h)}union(e){const t=Math.min(this.topLeft.x,e.topLeft.x),i=Math.max(this.topRight.x,e.topRight.x),n=Math.min(this.topLeft.y,e.topLeft.y),r=Math.max(this.botLeft.y,e.botLeft.y);return new o(new s.GlobalPoint(t,n),i-t,r-n)}getDiagCorner(e){return e?this.botRight:this.topLeft}intersectsWith(e){return!(e.topLeft.x>this.topRight.x||e.topRight.xthis.botLeft.y||e.botLeft.y=this.topRight.x||e.topRight.x<=this.topLeft.x||e.topLeft.y>=this.botLeft.y||e.botLeft.y<=this.topLeft.y)}intersectP(e,t,i){let s=t.x*(this.getDiagCorner(i[0]).x-e.origin.x),n=t.x*(this.getDiagCorner(!i[0]).x-e.origin.x);const o=t.y*(this.getDiagCorner(i[1]).y-e.origin.y),r=t.y*(this.getDiagCorner(!i[1]).y-e.origin.y);return s>r||o>n?{hit:!1,min:s,max:n}:(o>s&&(s=o),r0,min:s,max:n})}center(){return this.topLeft.add(new s.Vector(this.w/2,this.h/2))}getMaxExtent(){return this.w>this.h?0:1}visibleInCanvas(e){const t=!(n.g2lx(this.topLeft.x)>e.width||n.g2ly(this.topLeft.y)>e.height||n.g2lx(this.topRight.x)<0||n.g2ly(this.botRight.y)<0);return!!t}}t.BoundingRect=o},"8e60":function(e,t,i){"use strict";var s=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{attrs:{id:"formcontainer"}},[e.owned||e.joined?i("form",[i("fieldset",[i("legend",{staticClass:"legend"},[e._v("Your sessions")]),i("div",{staticClass:"input"},[e._l(e.owned,function(t,s){return i("router-link",{key:"o-"+s,attrs:{to:"/game/"+t[1]+"/"+t[0]}},[e._v(e._s(t[0]))])}),e._l(e.joined,function(t,s){return i("router-link",{key:"j-"+s,attrs:{to:"/game/"+t[1]+"/"+t[0]}},[e._v(e._s(t[1])+"/"+e._s(t[0]))])})],2),0===e.owned.length?i("div",{staticClass:"input"},[e._v("No active sessions")]):e._e()])]):e._e(),e._m(0),i("form",{on:{submit:function(t){return t.preventDefault(),e.createRoom(t)}}},[i("fieldset",[e.owned||e.joined?i("div",{staticClass:"input"},[e._v("Create a new session")]):i("legend",{staticClass:"legend"},[e._v("Create a session")]),i("div",{staticClass:"input"},[i("input",{directives:[{name:"model",rawName:"v-model",value:e.newSessionName,expression:"newSessionName"}],attrs:{type:"text",name:"room_name",placeholder:"Session Name"},domProps:{value:e.newSessionName},on:{input:function(t){t.target.composing||(e.newSessionName=t.target.value)}}}),e._m(1)]),e._m(2)])]),i("div",{attrs:{id:"account-options"}},[i("form",{on:{submit:function(e){e.preventDefault()}}},[i("router-link",{staticClass:"submit",attrs:{tag:"button",title:"Account Settings",to:"/account"}},[i("i",{staticClass:"fas fa-cog"})])],1),i("form",{on:{submit:function(e){e.preventDefault()}}},[i("router-link",{staticClass:"submit",attrs:{tag:"button",title:"Logout",to:"/auth/logout"}},[i("i",{staticClass:"fas fa-sign-out-alt"})])],1)])])},n=[function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("h4",[i("span",[e._v("OR")])])},function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("span",[i("i",{staticClass:"fab fa-d-and-d"})])},function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("button",{staticClass:"submit",attrs:{type:"submit",title:"Create"}},[i("i",{staticClass:"fas fa-arrow-right"})])}];i.d(t,"a",function(){return s}),i.d(t,"b",function(){return n})},"8f0a":function(e,t,i){"use strict";function s(e,t){const i=e.x-t.x,s=e.y-t.y;return Math.sqrt(i*i+s*s)}Object.defineProperty(t,"__esModule",{value:!0}),t.getPointDistance=s;class n{constructor(e,t){this.x=e,this.y=t}static fromArray(e){return new n(e[0],e[1])}add(e){return new n(this.x+e.x,this.y+e.y)}subtract(e){return new a(this.x-e.x,this.y-e.y)}clone(){return new n(this.x,this.y)}get(e){return 0===e?this.x:this.y}asArray(){return[this.x,this.y]}}t.Point=n;class o extends n{add(e){return super.add(e)}subtract(e){return super.subtract(e)}clone(){return super.clone()}static fromArray(e){return new o(e[0],e[1])}}t.GlobalPoint=o;class r extends n{add(e){return super.add(e)}subtract(e){return super.subtract(e)}clone(){return super.clone()}}t.LocalPoint=r;class a{constructor(e,t){this.x=e,this.y=t}dot(e){return this.x*e.x+this.y*e.y}inverse(){return new a(0===this.x?0:1/this.x,0===this.y?0:1/this.y)}length(){return Math.sqrt(Math.pow(this.x,2)+Math.pow(this.y,2))}normalize(){const e=this.length();return new a(this.x/e,this.y/e)}reverse(){return new a(-this.x,-this.y)}multiply(e){return new a(this.x*e,this.y*e)}angle(){return 180*Math.atan2(this.y,this.x)/Math.PI}}t.Vector=a;class l{constructor(e,t,i){this.direction=t,this.origin=e,void 0===i&&(i=1/0),this.tMax=i}static fromPoints(e,t){const i=new a(t.x-e.x,t.y-e.y);let s;return s=Math.abs(i.x)>.01?(t.x-e.x)/i.x:(t.y-e.y)/i.y,new l(e,i,s)}get(e){return new n(this.origin.x+e*this.direction.x,this.origin.y+e*this.direction.y)}getDistance(e,t){return Math.sqrt(Math.pow(t-e,2)*(Math.pow(this.direction.x,2)+Math.pow(this.direction.y,2)))}getT(e,t){return e+Math.sqrt(Math.pow(t,2)/(Math.pow(this.direction.x,2)+Math.pow(this.direction.y,2)))}}t.Ray=l},"8f54":function(e,t,i){"use strict";var s=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("ul",[e._l(e.folders,function(t){return i("li",{key:t,staticClass:"folder",on:{click:function(t){return t.stopPropagation(),e.toggle(t)}}},[e._v("\n "+e._s(t)+"\n "),i("asset-node",{attrs:{asset:e.asset[t]}})],1)}),e._l(e.files,function(t){return i("li",{key:t.name,staticClass:"file draggable token",attrs:{draggable:"true"},on:{mouseover:function(i){e.showImage=t.hash},mouseout:function(t){e.showImage=null},dragstart:function(i){e.dragStart(i,"/static/assets/"+t.hash)}}},[e._v("\n "+e._s(t.name)+"\n "),e.showImage==t.hash?i("div",{staticClass:"preview"},[i("img",{staticClass:"asset-preview-image",attrs:{src:"/static/assets/"+t.hash}})]):e._e()])})],2)},n=[];i.d(t,"a",function(){return s}),i.d(t,"b",function(){return n})},9104:function(e,t,i){"use strict";var s=i("afd3"),n=i.n(s);n.a},"919a":function(e,t,i){},"91df":function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0});const s=i("9ab4"),n=s.__importDefault(i("a026")),o=s.__importDefault(i("65d9")),r=s.__importDefault(i("6f79"));i("fe80");const a=i("2ef0"),l=s.__importDefault(i("a535")),c=s.__importDefault(i("cec2")),u=s.__importDefault(i("f5fe")),d=s.__importDefault(i("f74c")),h=s.__importDefault(i("19f9")),f=s.__importDefault(i("f551")),p=s.__importDefault(i("f086")),g=s.__importDefault(i("6100")),v=i("0bc6"),m=i("77a6"),y=i("bb17"),b=i("6f92"),_=i("f10f"),w=i("92b1"),S=i("8f0a");let x=class extends n.default{constructor(){super(...arguments),this.ready={manager:!1,tools:!1}}get showUI(){return _.gameStore.showUI}get IS_DM(){return _.gameStore.IS_DM}get layers(){return _.gameStore.layers}get selectedLayer(){return _.gameStore.selectedLayer}get zoomDisplay(){return _.gameStore.zoomDisplay}set zoomDisplay(e){_.gameStore.updateZoom({newZoomDisplay:e,zoomLocation:w.l2g(new S.LocalPoint(window.innerWidth/2,window.innerHeight/2))})}mounted(){window.addEventListener("resize",this.resizeWindow),window.addEventListener("keyup",m.onKeyUp),window.addEventListener("keydown",m.onKeyDown),this.ready.manager=!0}destroyed(){window.removeEventListener("resize",this.resizeWindow),window.removeEventListener("keyup",m.onKeyUp),window.removeEventListener("keydown",m.onKeyDown),this.ready.manager=!1}zoom(e){a.throttle(y.scrollZoom)(e)}resizeWindow(){b.layerManager.setWidth(window.innerWidth),b.layerManager.setHeight(window.innerHeight),b.layerManager.invalidate()}mousedown(e){this.$refs.tools.mousedown(e)}mouseup(e){this.$refs.tools.mouseup(e)}mousemove(e){this.$refs.tools.mousemove(e)}mouseleave(e){this.$refs.tools.mouseleave(e)}contextmenu(e){this.$refs.tools.contextmenu(e)}selectLayer(e){b.layerManager.selectLayer(e)}drop(e){if(null!==e&&null!==e.dataTransfer)if(e.dataTransfer.files.length>0)this.$refs.confirm.open("Uploading files should be done through the asset manager.","Ok","").then(()=>{},()=>{});else{if(""===e.dataTransfer.getData("text/plain"))return;b.layerManager.dropAsset(e)}}};x=s.__decorate([o.default({components:{"tool-bar":g.default,"selection-info":p.default,"prompt-dialog":c.default,"confirm-dialog":l.default,"menu-bar":h.default,"initiative-dialog":u.default,"zoom-slider":r.default,"note-dialog":f.default,"label-dialog":d.default},beforeRouteEnter(e,t,i){v.createConnection(e),i()},beforeRouteLeave(e,t,i){v.socket.disconnect(),i()}})],x),t.default=x},9227:function(e,t,i){},"92b1":function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0});const s=i("8f0a"),n=i("f10f");function o(e){const t=n.gameStore.zoomFactor,i=n.gameStore.panX,o=n.gameStore.panY;return new s.LocalPoint((e.x+i)*t,(e.y+o)*t)}function r(e){return o(new s.GlobalPoint(e,0)).x}function a(e){return o(new s.GlobalPoint(0,e)).y}function l(e){return e*n.gameStore.zoomFactor}function c(e){return e/n.gameStore.unitSize*n.gameStore.gridSize}function u(e){return l(c(e))}function d(e){const t=n.gameStore.zoomFactor,i=n.gameStore.panX,o=n.gameStore.panY;return e instanceof s.LocalPoint?new s.GlobalPoint(e.x/t-i,e.y/t-o):new s.Ray(d(e.origin),e.direction.multiply(1/t),e.tMax)}function h(e){return d(new s.LocalPoint(e,0)).x}function f(e){return d(new s.LocalPoint(0,e)).y}function p(e){return e/n.gameStore.zoomFactor}function g(e){return p(c(e))}t.g2l=o,t.g2lx=r,t.g2ly=a,t.g2lz=l,t.getUnitDistance=c,t.g2lr=u,t.l2g=d,t.l2gx=h,t.l2gy=f,t.l2gz=p,t.l2gr=g,window.g2lx=r,window.g2ly=a},9587:function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0});const s=i("9ab4"),n=s.__importDefault(i("a026")),o=s.__importDefault(i("65d9")),r=i("2f62"),a=s.__importDefault(i("3b36")),l=s.__importDefault(i("0ddd")),c=i("4a5b"),u=i("0bc6"),d=i("6f92"),h=i("f10f");let f=class extends n.default{constructor(){super(...arguments),this.visible={settings:!1,locations:!1}}get useGrid(){return h.gameStore.useGrid}set useGrid(e){h.gameStore.setUseGrid({useGrid:e,sync:!0})}get fullFOW(){return h.gameStore.fullFOW}set fullFOW(e){h.gameStore.setFullFOW({fullFOW:e,sync:!0})}get fowOpacity(){return h.gameStore.fowOpacity}set fowOpacity(e){"number"===typeof e&&h.gameStore.setFOWOpacity({fowOpacity:e,sync:!0})}get fowLOS(){return h.gameStore.fowLOS}set fowLOS(e){h.gameStore.setLineOfSight({fowLOS:e,sync:!0})}get unitSize(){return h.gameStore.unitSize}set unitSize(e){"number"===typeof e&&h.gameStore.setUnitSize({unitSize:e,sync:!0})}get gridSize(){return h.gameStore.gridSize}set gridSize(e){"number"===typeof e&&h.gameStore.setGridSize({gridSize:e,sync:!0})}get gridColour(){return h.gameStore.gridColour}set gridColour(e){h.gameStore.setGridColour({colour:e,sync:!0})}get fowColour(){return h.gameStore.fowColour}set fowColour(e){h.gameStore.setFOWColour({colour:e,sync:!0})}get rulerColour(){return h.gameStore.rulerColour}set rulerColour(e){h.gameStore.setRulerColour({colour:e,sync:!0})}get visionRangeMin(){return h.gameStore.visionRangeMin}set visionRangeMin(e){"number"===typeof e&&h.gameStore.setVisionRangeMin({value:e,sync:!0})}get visionRangeMax(){return h.gameStore.visionRangeMax}set visionRangeMax(e){"number"===typeof e&&h.gameStore.setVisionRangeMax({value:e,sync:!0})}settingsClick(e){if(e.target.classList.contains("accordion")){e.target.classList.toggle("accordion-active");const t=e.target.nextElementSibling;null!==t&&(t.style.display=""===t.style.display?"block":"")}}changeLocation(e){u.socket.emit("Location.Change",e)}createLocation(){c.getRef("prompt").prompt("New location name:","Create new location").then(e=>{u.socket.emit("Location.New",e)},()=>{})}createNote(){const e={title:"New note",text:"",uuid:c.uuidv4()};h.gameStore.newNote({note:e,sync:!0}),this.openNote(e)}openNote(e){c.getRef("note").open(e)}changeVisionMode(e){const t=e.target.value.toLowerCase();"bvh"!==t&&"triangle"!==t||(h.gameStore.setVisionMode({mode:t,sync:!0}),h.gameStore.recalculateVision(),h.gameStore.recalculateMovement(),d.layerManager.invalidate())}};f=s.__decorate([o.default({components:{"color-picker":a.default,"asset-node":l.default},computed:Object.assign({},r.mapState("game",["invitationCode","IS_DM","locations","assets","notes"]))})],f),t.default=f},"979e":function(e,t,i){"use strict";i.r(t);var s=i("0634"),n=i.n(s);for(var o in s)"default"!==o&&function(e){i.d(t,e,function(){return s[e]})}(o);t["default"]=n.a},9845:function(e,t,i){"use strict";var s=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("ContextMenu",{attrs:{visible:e.visible,left:e.x+"px",top:e.y+"px"},on:{close:e.close}},[e.IS_DM?i("li",{on:{click:e.bringPlayers}},[e._v("Bring players")]):e._e(),i("li",{on:{click:e.createToken}},[e._v("Create basic token")]),i("li",{on:{click:e.showInitiative}},[e._v("Show initiative")])])},n=[];i.d(t,"a",function(){return s}),i.d(t,"b",function(){return n})},"98ef":function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0});const s=i("4aee");let n;var o,r;function a(){return[t.INFINITE,t.INFINITE]}t.INFINITE=-Infinity,function(e){e[e["NEGATIVE"]=-1]="NEGATIVE",e[e["ZERO"]=0]="ZERO",e[e["POSITIVE"]=1]="POSITIVE",e[e["RIGHT_TURN"]=-1]="RIGHT_TURN",e[e["LEFT_TURN"]=1]="LEFT_TURN",e[e["SMALLER"]=-1]="SMALLER",e[e["EQUAL"]=0]="EQUAL",e[e["LARGER"]=1]="LARGER",e[e["CLOCKWISE"]=-1]="CLOCKWISE",e[e["COUNTERCLOCKWISE"]=1]="COUNTERCLOCKWISE",e[e["COLLINEAR"]=0]="COLLINEAR",e[e["COPLANAR"]=0]="COPLANAR",e[e["DEGENERATE"]=0]="DEGENERATE",e[e["ON_NEGATIVE_SIDE"]=-1]="ON_NEGATIVE_SIDE",e[e["ON_ORIENTED_BOUNDARY"]=0]="ON_ORIENTED_BOUNDARY",e[e["ON_POSITIVE_SIDE"]=1]="ON_POSITIVE_SIDE"}(o=t.Sign||(t.Sign={})),function(e){e[e["UNDEFINED"]=-1]="UNDEFINED",e[e["VERTEX_VERTEX"]=0]="VERTEX_VERTEX",e[e["VERTEX_EDGE"]=1]="VERTEX_EDGE",e[e["EDGE_VERTEX"]=2]="EDGE_VERTEX",e[e["EDGE_EDGE"]=3]="EDGE_EDGE"}(r||(r={}));class l{constructor(...e){this.vertices=[],this.neighbours=[null,null,null],this.constraints=[!1,!1,!1],this.uid=l._counter++,this.vertices=e}from(e){return this.vertices=e.vertices.slice(0,e.vertices.length),this.neighbours=e.neighbours.slice(0,e.neighbours.length),this.constraints=e.constraints.slice(0,e.constraints.length),this}get dimension(){return this.vertices.length-1}addVertex(e){void 0===e&&console.log("UNDEFINED HIERE"),this.vertices.push(e),e.triangle=this}isConstrained(e){return this.constraints[e]}reorient(){this.vertices=[this.vertices[1],this.vertices[0],this.vertices[2]].slice(0,this.vertices.length),this.neighbours=[this.neighbours[1],this.neighbours[0],this.neighbours[2]],this.constraints=[this.constraints[1],this.constraints[0],this.constraints[2]]}indexV(e){return this.vertices.indexOf(e)}indexT(e){return this.neighbours.indexOf(e)}isInfinite(e){return void 0===e?this.vertices.includes(n):this.vertices[s.ccw(e)].infinite||this.vertices[s.cw(e)].infinite}contains(e){const t=-this.vertices[1].point[1]*this.vertices[2].point[0]+this.vertices[0].point[1]*(-this.vertices[1].point[0]+this.vertices[2].point[0])+this.vertices[0].point[0]*(this.vertices[1].point[1]-this.vertices[2].point[1])+this.vertices[1].point[0]*this.vertices[2].point[1],i=t<0?-1:1,s=(this.vertices[0].point[1]*this.vertices[2].point[0]-this.vertices[0].point[0]*this.vertices[2].point[1]+(this.vertices[2].point[1]-this.vertices[0].point[1])*e[0]+(this.vertices[0].point[0]-this.vertices[2].point[0])*e[1])*i;if(s<0)return!1;const n=(this.vertices[0].point[0]*this.vertices[1].point[1]-this.vertices[0].point[1]*this.vertices[1].point[0]+(this.vertices[0].point[1]-this.vertices[1].point[1])*e[0]+(this.vertices[1].point[0]-this.vertices[0].point[0])*e[1])*i;return n>0&&s+nt!==e)}setAdjacency(e,t,i,s){e.neighbours[t]=i,i.neighbours[s]=e}get finiteVertex(){return this.vertices[1]}get infiniteVertex(){const e=new c(a());return e.infinite=!0,e}get finiteEdge(){if(this.dimension<1)throw new Error("aspo");const e=new d(this);while(e.valid)e.next();return e.collect()}insertDimUp(e=new c,t=!0){const i=this.createVertex();let s,n;switch(this.dimension++,this.dimension){case 0:s=this.triangles[0],n=new l(i),this.triangles.push(n),this.setAdjacency(s,0,n,0),i.triangle=n;break;case 1:case 2:{const o=[],r=this.triangles.slice(0,this.triangles.length);for(const t of r){const s=(new l).from(t);this.triangles.push(s),t.vertices[this.dimension]=i,s.vertices[this.dimension]=e,this.setAdjacency(t,this.dimension,s,this.dimension),t.vertices.includes(e)&&o.push(s)}for(const e of r){const t=e.neighbours[this.dimension];for(let i=0;ie.center.center().get(r)0){if(i=!0,s=e.tMax=d.min,n=d.max,0===o||t)break;r=a[--o]}else c[u.dimension]?(a[o++]=r+1,r=u.secondChildOffset):(a[o++]=u.secondChildOffset,r++);else{if(0===o)break;r=a[--o]}}return{hit:i,intersect:e.get(s),tMin:s,tMax:n}}compact(){this.offset=0,null!==this.root&&this.flatten(this.root)}flatten(e){const t=this.offset,i=this.offset++;if(0===e.nPrimitives){this.flatten(e.children[0]);const i=this.flatten(e.children[1]);this.nodes[t]={bbox:e.bbox,dimension:e.dimension,nPrimitives:0,secondChildOffset:i}}else this.nodes[t]={bbox:e.bbox,primitivesOffset:e.firstPrimOffset,nPrimitives:e.nPrimitives};return i}createLeaf(e,t,i,s){const n=this.orderedPrims.length;for(let o=e;o1?i("li",[e._v("Layer\n "),i("ul",e._l(e.getLayers(),function(t){return i("li",{key:t.name,style:[e.getActiveLayer().name===t.name?{"background-color":"#82c8a0"}:{}],on:{click:function(i){e.setLayer(t.name)}}},[e._v(e._s(t.name))])}))]):e._e(),i("li",{on:{click:e.moveToBack}},[e._v("Move to back")]),i("li",{on:{click:e.moveToFront}},[e._v("Move to front")]),i("li",{on:{click:e.addInitiative}},[e._v(e._s(e.getInitiativeWord())+" initiative")]),i("li",{on:{click:e.openEditDialog}},[e._v("Show properties")])]):e._e()},n=[];i.d(t,"a",function(){return s}),i.d(t,"b",function(){return n})},a260:function(e,t,i){},a280:function(e,t,i){"use strict";var s=function(){var e=this,t=e.$createElement,i=e._self._c||t;return e.selected?i("div",{staticClass:"tool-detail",style:{"--detailRight":e.detailRight,"--detailArrow":e.detailArrow}},[i("div",{attrs:{id:"accordion-container"}},e._l(e.categories,function(t){return i("accordion",{key:t,attrs:{title:t,showArrow:!1,items:e.labels[t],initialValues:e.initalValues[t]},on:{selectionupdate:e.updateSelection}})}))]):e._e()},n=[];i.d(t,"a",function(){return s}),i.d(t,"b",function(){return n})},a450:function(e,t,i){},a474:function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0});const s=i("9ab4"),n=s.__importDefault(i("bc3a")),o=s.__importDefault(i("a026")),r=s.__importDefault(i("65d9")),a=i("cc67");r.default.registerHooks(["beforeRouteEnter"]);let l=class extends o.default{constructor(){super(...arguments),this.owned=[],this.joined=[],this.error="",this.newSessionName=""}beforeRouteEnter(e,t,i){n.default.get("/api/rooms").then(e=>{i(t=>{t.owned=e.data.owned,t.joined=e.data.joined})}).catch(e=>{i(t=>{t.error=e.message})})}createRoom(e){n.default.post("/api/rooms",{name:this.newSessionName}).then(e=>{this.$router.push(`/game/${a.coreStore.username}/${this.newSessionName}`)}).catch(e=>{this.error=e.message})}};l=s.__decorate([r.default],l),t.default=l},a535:function(e,t,i){"use strict";i.r(t);var s=i("e06e"),n=i("f30c");for(var o in n)"default"!==o&&function(e){i.d(t,e,function(){return n[e]})}(o);i("223d");var r=i("2877"),a=Object(r["a"])(n["default"],s["a"],s["b"],!1,null,"1883e207",null);a.options.__file="confirm.vue",t["default"]=a.exports},a5a4:function(e,t,i){"use strict";var s=i("0b13"),n=i.n(s);n.a},a68b:function(e,t,i){"use strict";i.r(t);var s=i("308b"),n=i.n(s);for(var o in s)"default"!==o&&function(e){i.d(t,e,function(){return s[e]})}(o);t["default"]=n.a},a755:function(e,t,i){"use strict";var s=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("ContextMenu",{attrs:{visible:e.visible,left:e.left+"px",top:e.top+"px"},on:{close:e.close}},[i("li",{on:{click:e.rename}},[e._v("Rename")]),i("li",{on:{click:e.remove}},[e._v("Remove")])])},n=[];i.d(t,"a",function(){return s}),i.d(t,"b",function(){return n})},a7b3:function(e,t,i){"use strict";var s=i("6542"),n=i.n(s);n.a},a912:function(e,t,i){},a9a6:function(e,t,i){"use strict";var s=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("Modal",{attrs:{visible:e.visible,mask:!1},on:{close:function(t){e.visible=!1}},scopedSlots:e._u([{key:"header",fn:function(t){return i("div",{staticClass:"modal-header",attrs:{draggable:"true"},on:{dragstart:t.dragStart,dragend:t.dragEnd}},[i("div",[e._v("Label manager")]),i("div",{staticClass:"header-close",on:{click:function(t){e.visible=!1}}},[i("i",{staticClass:"far fa-window-close"})])])}}])},[i("div",{staticClass:"modal-body"},[i("div",{staticClass:"grid"},[i("div",{staticClass:"header"},[i("abbr",{attrs:{title:"Category"}},[e._v("Cat.")])]),i("div",{staticClass:"header name"},[e._v("Name")]),i("div",{staticClass:"header"},[i("abbr",{attrs:{title:"Visible"}},[e._v("Vis.")])]),i("div",{staticClass:"header"},[i("abbr",{attrs:{title:"Delete"}},[e._v("Del.")])]),i("div",{staticClass:"separator spanrow",staticStyle:{margin:"0 0 7px"}}),i("input",{directives:[{name:"model",rawName:"v-model",value:e.search,expression:"search"}],ref:"search",staticClass:"spanrow",attrs:{type:"text",placeholder:"search"},domProps:{value:e.search},on:{input:function(t){t.target.composing||(e.search=t.target.value)}}})]),i("div",{staticClass:"grid scroll"},[e._l(e.categories,function(t){return[e._l(e.labels[t],function(t){return[i("div",{key:"row-"+t.uuid,staticClass:"row",on:{click:function(i){e.selectLabel(t.uuid)}}},[t.category?[i("div",{key:"cat-"+t.uuid},[e._v(e._s(t.category))]),i("div",{key:"name-"+t.uuid,staticClass:"name"},[e._v(e._s(t.name))])]:e._e(),t.category?e._e():[i("div",{key:"cat-"+t.uuid}),i("div",{key:"name-"+t.uuid,staticClass:"name"},[e._v(e._s(t.name))])],i("div",{key:"visible-"+t.uuid,class:{"lower-opacity":!t.visible},style:{textAlign:"center"},on:{click:function(i){i.stopPropagation(),e.toggleVisibility(t)}}},[i("i",{staticClass:"fas fa-eye"})]),i("div",{key:"delete-"+t.uuid,on:{click:function(i){i.stopPropagation(),e.deleteLabel(t.uuid)}}},[i("i",{staticClass:"fas fa-trash-alt"})])],2)]})]}),0===e.labels.length?[i("div",{attrs:{id:"no-labels"}},[e._v("No labels exist yet")])]:e._e()],2),i("div",{staticClass:"grid"},[i("div",{staticClass:"separator spanrow"}),i("input",{directives:[{name:"model",rawName:"v-model.trim",value:e.newCategory,expression:"newCategory",modifiers:{trim:!0}}],attrs:{type:"text"},domProps:{value:e.newCategory},on:{input:function(t){t.target.composing||(e.newCategory=t.target.value.trim())},blur:function(t){e.$forceUpdate()}}}),i("input",{directives:[{name:"model",rawName:"v-model.trim",value:e.newName,expression:"newName",modifiers:{trim:!0}}],attrs:{type:"text"},domProps:{value:e.newName},on:{input:function(t){t.target.composing||(e.newName=t.target.value.trim())},blur:function(t){e.$forceUpdate()}}}),i("button",{attrs:{id:"addLabelButton"},on:{click:function(t){return t.stopPropagation(),e.addLabel(t)}}},[e._v("Add")])])])])},n=[];i.d(t,"a",function(){return s}),i.d(t,"b",function(){return n})},aa69:function(e,t,i){"use strict";i.r(t);var s=i("0cf7"),n=i.n(s);for(var o in s)"default"!==o&&function(e){i.d(t,e,function(){return s[e]})}(o);t["default"]=n.a},af17:function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0});const s=i("9ab4"),n=s.__importDefault(i("a026"));t.EventBus=new n.default},afd3:function(e,t,i){},b0ac:function(e,t,i){"use strict";i.r(t);var s=i("a474"),n=i.n(s);for(var o in s)"default"!==o&&function(e){i.d(t,e,function(){return s[e]})}(o);t["default"]=n.a},b0c0:function(e,t,i){},b2ed:function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0});const s=i("c266"),n=i("f10f"),o=i("92b1"),r=i("5a5c");class a extends s.BaseRect{constructor(e,t,i,s,n,o){super(e,t,i,s,n,o),this.type="rect"}asDict(){return super.getBaseDict()}draw(e){super.draw(e),"fog"===this.fillColour?e.fillStyle=r.getFogColour():e.fillStyle=this.fillColour;const t=n.gameStore.zoomFactor,i=o.g2l(this.refPoint);e.fillRect(i.x,i.y,this.w*t,this.h*t),"rgba(0, 0, 0, 0)"!==this.strokeColour&&(e.strokeStyle=this.strokeColour,e.lineWidth=5,e.strokeRect(i.x,i.y,this.w*t,this.h*t))}}t.Rect=a},b62e:function(e,t,i){"use strict";var s=i("3eaf"),n=i.n(s);n.a},b6bc:function(e,t,i){"use strict";i.r(t);var s=i("5394"),n=i.n(s);for(var o in s)"default"!==o&&function(e){i.d(t,e,function(){return s[e]})}(o);t["default"]=n.a},b809:function(e,t,i){"use strict";i.r(t);var s=i("ca56"),n=i.n(s);for(var o in s)"default"!==o&&function(e){i.d(t,e,function(){return s[e]})}(o);t["default"]=n.a},b906:function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0});const s=i("8f0a"),n=i("bab4"),o=i("6f92"),r=i("d1ec"),a=i("f10f"),l=i("92b1"),c=i("cee3");class u extends n.Layer{constructor(){super(...arguments),this.isVisionLayer=!0}draw(){if(!this.valid){const t=this.ctx;if(!a.gameStore.fowLOS||r.Settings.skipPlayerFOW)return t.clearRect(0,0,this.canvas.width,this.canvas.height),void(this.valid=!0);t.clearRect(0,0,this.canvas.width,this.canvas.height);const i=t.globalCompositeOperation;t.fillStyle="rgba(0, 0, 0, 1)",a.gameStore.IS_DM||super.draw(!a.gameStore.fullFOW);const n=t.canvas.width+t.canvas.height;for(const u of a.gameStore.ownedtokens){const i=o.layerManager.UUIDMap.get(u);if(void 0===i)continue;const d=i.center(),h=l.g2l(d);if("bvh"===a.gameStore.visionMode){t.beginPath();let e=-1;for(let i=0;i<2*Math.PI;i+=r.Settings.angleSteps/2/180*Math.PI){const o=Math.cos(i),r=Math.sin(i),c=new s.Ray(d,new s.Vector(o,r)),u=a.gameStore.BV.intersect(c);u.hit?(-1!==e&&(t.arc(h.x,h.y,n,e,i),e=-1),t.lineTo(l.g2lx(u.intersect.x),l.g2ly(u.intersect.y))):-1===e&&(t.lineTo(h.x+n*o,h.y+n*r),e=i)}-1!==e?t.arc(h.x,h.y,n,e,2*Math.PI):t.closePath(),t.fill()}else{{const e=t.createRadialGradient(h.x,h.y,l.g2lr(a.gameStore.visionRangeMin),h.x,h.y,l.g2lr(a.gameStore.visionRangeMax));e.addColorStop(0,"rgba(0, 0, 0, 1)"),e.addColorStop(1,"rgba(0, 0, 0, 0)"),t.fillStyle=e}try{const s=c.computeVisibility(i.center(),"vision");t.beginPath(),t.moveTo(l.g2lx(s[0][0]),l.g2ly(s[0][1]));for(const e of s)t.lineTo(l.g2lx(e[0]),l.g2ly(e[1]));t.closePath(),t.fill()}catch(e){}}}a.gameStore.IS_DM&&super.draw(!a.gameStore.fullFOW),t.globalCompositeOperation=i}}}t.FOWPlayersLayer=u},bab4:function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0});const s=i("0bc6"),n=i("af17"),o=i("6f92"),r=i("206a"),a=i("f10f"),l=i("92b1");class c{constructor(e,t){this.selectable=!1,this.playerEditable=!1,this.isVisionLayer=!1,this.valid=!1,this.shapes=[],this.selection=[],this.selectionColor="#CC0000",this.selectionWidth=2,this.canvas=e,this.name=t,this.width=e.width,this.height=e.height,this.ctx=e.getContext("2d")}invalidate(e){this.valid=!1,e||o.layerManager.invalidateLight()}addShape(e,t,i,n=!0){void 0===i&&(i=!1),e.layer=this.name,this.shapes.push(e),o.layerManager.UUIDMap.set(e.uuid,e),e.checkVisionSources(n),e.setMovementBlock(e.movementObstruction,n),e.ownedBy(a.gameStore.username)&&e.isToken&&a.gameStore.ownedtokens.push(e.uuid),e.annotation.length&&a.gameStore.annotations.push(e.uuid),t&&s.socket.emit("Shape.Add",{shape:e.asDict(),temporary:i}),n&&this.invalidate(!t)}setShapes(e){for(const t of e){const e=r.createShapeFromDict(t);if(void 0===e)return void console.log(`Shape with unknown type ${t.type_} could not be added`);this.addShape(e,!1,!1,!1)}this.clearSelection(),this.invalidate(!1)}removeShape(e,t,i){void 0===i&&(i=!1),this.shapes.splice(this.shapes.indexOf(e),1),t&&s.socket.emit("Shape.Remove",{shape:e.asDict(),temporary:i});const n=a.gameStore.visionSources.findIndex(t=>t.shape===e.uuid),r=a.gameStore.visionBlockers.findIndex(t=>t===e.uuid),l=a.gameStore.movementblockers.findIndex(t=>t===e.uuid),c=a.gameStore.annotations.findIndex(t=>t===e.uuid);n>=0&&a.gameStore.visionSources.splice(n,1),r>=0&&a.gameStore.visionBlockers.splice(r,1),l>=0&&a.gameStore.movementblockers.splice(l,1),c>=0&&a.gameStore.annotations.splice(c,1);const u=a.gameStore.annotations.indexOf(e.uuid);u>=0&&a.gameStore.annotations.splice(u,1);const d=a.gameStore.ownedtokens.indexOf(e.uuid);d>=0&&a.gameStore.ownedtokens.splice(d,1),o.layerManager.UUIDMap.delete(e.uuid);const h=this.selection.indexOf(e);h>=0&&this.selection.splice(h,1),r>=0&&a.gameStore.recalculateVision(),l>=0&&a.gameStore.recalculateMovement(),this.invalidate(!t)}clear(){this.ctx.clearRect(0,0,this.width,this.height)}clearSelection(){this.selection=[],n.EventBus.$emit("SelectionInfo.Shape.Set",null)}draw(e){if(!this.valid){const t=this.ctx,i=t.globalCompositeOperation;e=void 0===e||e,e&&this.clear();const s=this;if(this.shapes.forEach(e=>{e.options.has("skipDraw")&&e.options.get("skipDraw")||void 0!==o.layerManager.getLayer()&&e.visibleInCanvas(s.canvas)&&("fow"===s.name&&e.visionObstruction&&o.layerManager.getLayer().name!==s.name||e.drawAuras(t))}),this.shapes.forEach(e=>{e.options.has("skipDraw")&&e.options.get("skipDraw")||0===e.labels.length&&a.gameStore.filterNoLabel||e.labels.length&&a.gameStore.labelFilters.length&&!e.labels.some(e=>a.gameStore.labelFilters.includes(e.uuid))||void 0!==o.layerManager.getLayer()&&e.visibleInCanvas(s.canvas)&&("fow"===s.name&&e.visionObstruction&&o.layerManager.getLayer().name!==s.name||e.draw(t))}),null!=this.selection){t.fillStyle=this.selectionColor,t.strokeStyle=this.selectionColor,t.lineWidth=this.selectionWidth;const e=a.gameStore.zoomFactor;this.selection.forEach(i=>{t.globalCompositeOperation=i.globalCompositeOperation;const s=i.getBoundingBox();t.strokeRect(l.g2lx(s.topLeft.x),l.g2ly(s.topLeft.y),s.w*e,s.h*e);for(const e of i.points)t.beginPath(),t.arc(l.g2lx(e[0]),l.g2ly(e[1]),3,0,2*Math.PI),t.fill();t.beginPath(),t.moveTo(l.g2lx(i.points[0][0]),l.g2ly(i.points[0][1]));for(let e=1;e<=i.points.length;e++){const s=i.points[e%i.points.length];t.lineTo(l.g2lx(s[0]),l.g2ly(s[1]))}t.stroke()})}t.globalCompositeOperation=i,this.valid=!0}}moveShapeOrder(e,t,i){const n=this.shapes.indexOf(e);n!==t&&(this.shapes.splice(n,1),this.shapes.splice(t,0,e),i&&s.socket.emit("Shape.Order.Set",{shape:e.asDict(),index:t}),this.invalidate(!0))}}t.Layer=c},bb17:function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0});const s=i("f10f"),n=i("92b1"),o=i("5a5c");function r(e){if(!e.target||!e.target.tagName||"CANVAS"!==e.target.tagName)return;let t;t=-1*Math.sign(e.deltaY),s.gameStore.updateZoom({newZoomDisplay:s.gameStore.zoomDisplay-.1*t,zoomLocation:n.l2g(o.getMouse(e))})}t.scrollZoom=r},bea6:function(e,t,i){"use strict";i.r(t);var s=i("a280"),n=i("b6bc");for(var o in n)"default"!==o&&function(e){i.d(t,e,function(){return n[e]})}(o);i("e3f5"),i("e037");var r=i("2877"),a=Object(r["a"])(n["default"],s["a"],s["b"],!1,null,"847e7ec4",null);a.options.__file="filter.vue",t["default"]=a.exports},bf44:function(e,t,i){},c1e0:function(e,t,i){},c242:function(e,t,i){"use strict";var s=i("bf44"),n=i.n(s);n.a},c266:function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0});const s=i("8f0a"),n=i("8db6"),o=i("2469"),r=i("f10f"),a=i("2838"),l=i("92b1");class c extends o.Shape{constructor(e,t,i,s,n,o){super(e,s,n,o),this.w=t,this.h=i}getBaseDict(){return Object.assign(super.getBaseDict(),{width:this.w,height:this.h})}getBoundingBox(){return new n.BoundingRect(this.refPoint,this.w,this.h)}get points(){if(0===this.w||0===this.h)return[[this.refPoint.x,this.refPoint.y]];const e=this.refPoint.add(new s.Vector(0,this.h)),t=this.refPoint.add(new s.Vector(this.w,this.h)),i=this.refPoint.add(new s.Vector(this.w,0));return[[this.refPoint.x,this.refPoint.y],[e.x,e.y],[t.x,t.y],[i.x,i.y]]}contains(e){return this.refPoint.x<=e.x&&this.refPoint.x+this.w>=e.x&&this.refPoint.y<=e.y&&this.refPoint.y+this.h>=e.y}center(e){if(void 0===e)return this.refPoint.add(new s.Vector(this.w/2,this.h/2));this.refPoint=new s.GlobalPoint(e.x-this.w/2,e.y-this.h/2)}visibleInCanvas(e){if(super.visibleInCanvas(e))return!0;const t=!(l.g2lx(this.refPoint.x)>e.width||l.g2ly(this.refPoint.y)>e.height||l.g2lx(this.refPoint.x+this.w)<0||l.g2ly(this.refPoint.y+this.h)<0);return!!t}snapToGrid(){const e=r.gameStore.gridSize,t=this.center(),i=t.x,n=t.y;let o,l;o=this.w/e%2===0?Math.round(i/e)*e-this.w/2:(Math.round((i+e/2)/e)-.5)*e-this.w/2,l=this.h/e%2===0?Math.round(n/e)*e-this.h/2:(Math.round((n+e/2)/e)-.5)*e-this.h/2;const c=a.calculateDelta(new s.Vector(o-this.refPoint.x,l-this.refPoint.y),this);this.refPoint=this.refPoint.add(c),this.invalidate(!1)}resizeToGrid(){const e=r.gameStore.gridSize;this.refPoint=new s.GlobalPoint(Math.round(this.refPoint.x/e)*e,Math.round(this.refPoint.y/e)*e),this.w=Math.max(Math.round(this.w/e)*e,e),this.h=Math.max(Math.round(this.h/e)*e,e),this.invalidate(!1)}resize(e,t){const i=r.gameStore.zoomFactor;switch(e){case 0:this.w=l.g2lx(this.refPoint.x)+this.w*i-t.x,this.h=l.g2ly(this.refPoint.y)+this.h*i-t.y,this.refPoint=l.l2g(t);break;case 1:this.w=l.g2lx(this.refPoint.x)+this.w*i-t.x,this.h=t.y-l.g2ly(this.refPoint.y),this.refPoint=new s.GlobalPoint(l.l2gx(t.x),this.refPoint.y);break;case 2:this.w=t.x-l.g2lx(this.refPoint.x),this.h=t.y-l.g2ly(this.refPoint.y);break;case 3:this.w=t.x-l.g2lx(this.refPoint.x),this.h=l.g2ly(this.refPoint.y)+this.h*i-t.y,this.refPoint=new s.GlobalPoint(this.refPoint.x,l.l2gy(t.y));break}this.w/=i,this.h/=i,this.w<0&&(this.refPoint=this.refPoint.add(new s.Vector(this.w,0)),this.w=Math.abs(this.w)),this.h<0&&(this.refPoint=this.refPoint.add(new s.Vector(0,this.h)),this.h=Math.abs(this.h))}}t.BaseRect=c},c277:function(e,t,i){"use strict";i.r(t);var s=i("22bd"),n=i("e27a");for(var o in n)"default"!==o&&function(e){i.d(t,e,function(){return n[e]})}(o);var r=i("2877"),a=Object(r["a"])(n["default"],s["a"],s["b"],!1,null,null,null);a.options.__file="select.vue",t["default"]=a.exports},c31c:function(e,t,i){},c6b4:function(e,t,i){"use strict";i.r(t);var s=i("8e60"),n=i("b0ac");for(var o in n)"default"!==o&&function(e){i.d(t,e,function(){return n[e]})}(o);i("d767");var r=i("2877"),a=Object(r["a"])(n["default"],s["a"],s["b"],!1,null,"61eb1455",null);a.options.__file="main.vue",t["default"]=a.exports},c969:function(e,t,i){"use strict";var s=i("3a20"),n=i.n(s);n.a},c9a2:function(e,t,i){"use strict";var s=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{attrs:{id:"AssetManager"}},[i("div",{attrs:{id:"titlebar"}},[e._v("Asset Manager")]),i("div",{attrs:{id:"main"}},[i("div",{attrs:{id:"assets"},on:{dragover:function(t){return t.preventDefault(),e.moveDrag(t)},drop:function(t){t.preventDefault(),t.stopPropagation(),e.stopDrag(t,e.currentFolder)}}},[i("div",{attrs:{id:"breadcrumbs"}},[i("div",[e._v("/")]),e._l(e.path,function(t){return i("div",{key:t},[e._v(e._s(e.idMap.get(t).name))])})],2),i("div",{attrs:{id:"actionbar"}},[i("input",{attrs:{id:"files",type:"file",multiple:"",hidden:""},on:{change:function(t){e.upload()}}}),i("div",{attrs:{title:"Create folder"},on:{click:e.createDirectory}},[i("i",{staticClass:"fas fa-plus-square"})]),i("div",{attrs:{title:"Upload files"},on:{click:e.prepareUpload}},[i("i",{staticClass:"fas fa-upload"})])]),i("div",{attrs:{id:"explorer"}},[e.path.length?i("div",{staticClass:"inode folder",on:{dblclick:function(t){e.changeDirectory(-1)},dragover:function(t){return t.preventDefault(),e.moveDrag(t)},dragleave:function(t){return t.preventDefault(),e.leaveDrag(t)},drop:function(t){t.preventDefault(),t.stopPropagation(),e.stopDrag(t,e.parentFolder)}}},[i("i",{staticClass:"fas fa-folder",staticStyle:{"font-size":"50px"}}),i("div",{staticClass:"title"},[e._v("..")])]):e._e(),e._l(e.folders,function(t){return i("div",{key:t,staticClass:"inode folder",class:{"inode-selected":e.selected.includes(t)},attrs:{draggable:"true"},on:{click:function(i){e.select(i,t)},dblclick:function(i){e.changeDirectory(t)},contextmenu:function(i){i.preventDefault(),e.$refs.cm.open(i,t)},dragstart:function(i){e.startDrag(i,t)},dragover:function(t){return t.preventDefault(),e.moveDrag(t)},dragleave:function(t){return t.preventDefault(),e.leaveDrag(t)},drop:function(i){i.preventDefault(),i.stopPropagation(),e.stopDrag(i,t)}}},[i("i",{staticClass:"fas fa-folder",staticStyle:{"font-size":"50px"}}),i("div",{staticClass:"title"},[e._v(e._s(e.idMap.get(t).name))])])}),e._l(e.files,function(t){return i("div",{key:t,staticClass:"inode file",class:{"inode-selected":e.selected.includes(t)},attrs:{draggable:"true"},on:{click:function(i){e.select(i,t)},contextmenu:function(i){i.preventDefault(),e.$refs.cm.open(i,t)},dragstart:function(i){e.startDrag(i,t)}}},[i("img",{attrs:{src:"/static/assets/"+e.idMap.get(t).file_hash,width:"50"}}),i("div",{staticClass:"title"},[e._v(e._s(e.idMap.get(t).name))])])})],2)]),e.firstSelectedFile?i("div",{attrs:{id:"asset-details"}},[i("div",{attrs:{id:"asset-detail-title"}},[e._v(e._s(e.firstSelectedFile.name))]),i("img",{attrs:{src:"/static/assets/"+e.firstSelectedFile.file_hash}})]):e._e()]),i("AssetContextMenu",{ref:"cm"}),i("Prompt",{ref:"prompt"}),i("ConfirmDialog",{ref:"confirm"})],1)},n=[];i.d(t,"a",function(){return s}),i.d(t,"b",function(){return n})},ca56:function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0});const s=i("9ab4"),n=s.__importDefault(i("a026")),o=s.__importDefault(i("65d9")),r=s.__importDefault(i("1c76")),a=i("0bc6"),l=i("af17"),c=i("f10f"),u=i("92b1");let d=class extends n.default{constructor(){super(...arguments),this.visible=!1,this.x=0,this.y=0}get IS_DM(){return c.gameStore.IS_DM}open(e){this.visible=!0,this.x=e.pageX,this.y=e.pageY,this.$nextTick(()=>this.$children[0].$el.focus())}close(){this.visible=!1}bringPlayers(){c.gameStore.IS_DM&&(a.socket.emit("Players.Bring",{x:u.l2gx(this.x),y:u.l2gy(this.y)}),this.close())}createToken(){this.$parent.$parent.$refs.createtokendialog.open(this.x,this.y),this.close()}showInitiative(){l.EventBus.$emit("Initiative.Show"),this.close()}};d=s.__decorate([o.default({components:{ContextMenu:r.default}})],d),t.default=d},cad7:function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0});const s=i("9ab4"),n=s.__importDefault(i("bc3a")),o=s.__importDefault(i("a026")),r=s.__importDefault(i("65d9")),a=i("cc67");r.default.registerHooks(["beforeRouteEnter"]);let l=class extends o.default{beforeRouteEnter(e,t,i){n.default.post("/api/logout").then(()=>{a.coreStore.setAuthenticated(!1),a.coreStore.setUsername(""),i({path:"/auth/login"})})}};l=s.__decorate([r.default({})],l),t.default=l},cc67:function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0});const s=i("9ab4"),n=i("6fc5"),o=i("3a0b");let r=class extends n.VuexModule{constructor(){super(...arguments),this.authenticated=!1,this.initialized=!1,this.username=""}setAuthenticated(e){this.authenticated=e}setInitialized(e){this.initialized=e}setUsername(e){this.username=e}};s.__decorate([n.Mutation],r.prototype,"setAuthenticated",null),s.__decorate([n.Mutation],r.prototype,"setInitialized",null),s.__decorate([n.Mutation],r.prototype,"setUsername",null),r=s.__decorate([n.Module({dynamic:!0,store:o.rootStore,name:"core"})],r),t.coreStore=n.getModule(r)},cd49:function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0});const s=i("9ab4"),n=s.__importDefault(i("a026")),o=s.__importDefault(i("3dfd")),r=i("5f86"),a=i("3a0b");n.default.config.productionTip=!1,n.default.config.devtools=!0,n.default.config.performance=!0,t.app=new n.default({router:r.router,store:a.rootStore,render:e=>e(o.default)}).$mount("#app"),window.app=t.app},cde6:function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0});const s=i("9ab4"),n=s.__importDefault(i("a026")),o=s.__importDefault(i("65d9"));let r=class extends n.default{};r=s.__decorate([o.default({props:["visible","left","top"]})],r),t.default=r},ce87:function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0});const s=i("9ab4"),n=s.__importDefault(i("bc3a")),o=s.__importDefault(i("a026")),r=s.__importDefault(i("65d9"));let a=class extends o.default{beforeRouteEnter(e,t,i){n.default.post("/api/invite",{code:e.params.code}).then(e=>{i({path:e.data.sessionUrl})}).catch(e=>{console.error("Invitation code could not be redeemed"),i({path:"/dashboard"})})}};a=s.__decorate([r.default({template:""})],a),t.default=a},cec2:function(e,t,i){"use strict";i.r(t);var s=i("eb57"),n=i("255e");for(var o in n)"default"!==o&&function(e){i.d(t,e,function(){return n[e]})}(o);i("0584");var r=i("2877"),a=Object(r["a"])(n["default"],s["a"],s["b"],!1,null,"0602c2e6",null);a.options.__file="prompt.vue",t["default"]=a.exports},cee3:function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0});const s=i("f10f"),n=i("1216"),o=i("d6be"),r=i("98ef"),a=i("4aee");function l(e,t,i){void 0===i&&(i=s.gameStore.drawTEContour);const r=[e.x,e.y],a=[],l=o.PA_CDT[t].locate(r,null).loc;return null===l?(console.error("Triangle not found"),[]):(a.push(l.vertices[1].point),l.isConstrained(0)||c(r,l.vertices[2].point,l.vertices[1].point,l,0,a),a.push(l.vertices[2].point),l.isConstrained(1)||c(r,l.vertices[0].point,l.vertices[2].point,l,1,a),a.push(l.vertices[0].point),l.isConstrained(2)||c(r,l.vertices[1].point,l.vertices[0].point,l,2,a),i&&n.drawPolygon(a,"red"),a)}function c(e,t,i,s,n,o){const l=s.neighbours[n],d=l.indexT(s),h=a.ccw(d),f=a.cw(d),p=l.vertices[d],g=l.vertices[f],v=l.vertices[h],m=[l,h],y=[l,f],b=a.orientation(e,i,p.point),_=a.orientation(e,t,p.point);if(b===r.Sign.COUNTERCLOCKWISE)if(m[0].isConstrained(m[1]))i!==g.point&&o.push(u(e,i,p.point,g.point)),_===r.Sign.COUNTERCLOCKWISE&&o.push(u(e,t,p.point,g.point));else{if(_===r.Sign.COUNTERCLOCKWISE)return c(e,t,i,l,h,o);c(e,p.point,i,l,h,o)}if(b!==r.Sign.CLOCKWISE&&_!==r.Sign.COUNTERCLOCKWISE&&o.push(p.point),_===r.Sign.CLOCKWISE)return y[0].isConstrained(y[1])?(b===r.Sign.CLOCKWISE&&o.push(u(e,i,p.point,v.point)),void(t!==v.point&&o.push(u(e,t,p.point,v.point)))):b===r.Sign.CLOCKWISE?c(e,t,i,l,f,o):c(e,t,p.point,l,f,o)}function u(e,t,i,s){const n=(s[1]-i[1])*(t[0]-e[0])-(s[0]-i[0])*(t[1]-e[1]),o=((s[0]-i[0])*(e[1]-i[1])-(s[1]-i[1])*(e[0]-i[0]))/n,r=e[0]+o*(t[0]-e[0]),a=e[1]+o*(t[1]-e[1]);return[r,a]}t.computeVisibility=l},cf8f:function(e,t,i){"use strict";var s=function(){var e=this,t=e.$createElement,i=e._self._c||t;return e.selected?i("div",{staticClass:"tool-detail",style:{"--detailRight":e.detailRight,"--detailArrow":e.detailArrow}},[i("div",[e._v("#X")]),i("input",{directives:[{name:"model",rawName:"v-model",value:e.xCount,expression:"xCount"}],attrs:{type:"text"},domProps:{value:e.xCount},on:{input:function(t){t.target.composing||(e.xCount=t.target.value)}}}),i("div",[e._v("#Y")]),i("input",{directives:[{name:"model",rawName:"v-model",value:e.yCount,expression:"yCount"}],attrs:{type:"text"},domProps:{value:e.yCount},on:{input:function(t){t.target.composing||(e.yCount=t.target.value)}}})]):e._e()},n=[];i.d(t,"a",function(){return s}),i.d(t,"b",function(){return n})},d065:function(e,t,i){"use strict";i.r(t);var s=i("45fb"),n=i("f8b3");for(var o in n)"default"!==o&&function(e){i.d(t,e,function(){return n[e]})}(o);i("514b");var r=i("2877"),a=Object(r["a"])(n["default"],s["a"],s["b"],!1,null,"23de098e",null);a.options.__file="edit_dialog.vue",t["default"]=a.exports},d1ec:function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0});class s{}s.angleSteps=4,s.drawAngleLines=!1,s.drawFirstLightHit=!1,s.skipPlayerFOW=!1,s.skipLightFOW=!1,s.tempFill="fog",t.Settings=s},d30b:function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0});const s=i("9ab4"),n=s.__importDefault(i("bc3a")),o=s.__importDefault(i("a026")),r=s.__importDefault(i("65d9")),a=i("cc67");let l=class extends o.default{constructor(){super(...arguments),this.username="",this.password="",this.error=""}login(){n.default.post("/api/login",{username:this.username,password:this.password}).then(e=>{a.coreStore.setUsername(this.username),a.coreStore.setAuthenticated(!0),this.$router.push(this.$route.query.redirect||"/")}).catch(e=>{e.response?this.error=e.response.statusText:this.error="Unknown error occured"})}register(){n.default.post("/api/register",{username:this.username,password:this.password}).then(e=>{a.coreStore.setUsername(this.username),a.coreStore.setAuthenticated(!0),this.$router.push(this.$route.query.redirect||"/")}).catch(e=>{e.response?this.error=e.response.statusText:this.error="Unknown error occured"})}focusin(e){if(e.target&&e.target.nextElementSibling){const t=e.target.nextElementSibling;t.style.opacity="0"}}focusout(e){if(e.target&&e.target.nextElementSibling){const t=e.target.nextElementSibling;t.style.opacity="1"}}};l=s.__decorate([r.default],l),t.default=l},d320:function(e,t,i){"use strict";var s=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("modal",{attrs:{visible:e.visible},on:{close:function(t){e.visible=!1}},scopedSlots:e._u([{key:"header",fn:function(t){return i("div",{staticClass:"modal-header",attrs:{draggable:"true"},on:{dragstart:t.dragStart,dragend:t.dragEnd}},[e._v("Create basic token")])}}])},[i("div",{staticClass:"modal-body"},[i("label",{attrs:{for:"createtokendialog-text"}},[e._v("Text")]),i("input",{directives:[{name:"model",rawName:"v-model",value:e.text,expression:"text"}],attrs:{type:"text",id:"createtokendialog-name"},domProps:{value:e.text},on:{input:function(t){t.target.composing||(e.text=t.target.value)}}}),i("label",[e._v("Colours")]),i("div",{staticClass:"colours"},[i("span",[e._v("Fill:")]),i("color-picker",{attrs:{color:e.fillColour},on:{"update:color":function(t){e.fillColour=t}}}),i("span",[e._v("Border:")]),i("color-picker",{attrs:{color:e.borderColour},on:{"update:color":function(t){e.borderColour=t}}})],1),i("canvas",{ref:"canvas",attrs:{width:"100px",height:"100px"}})]),i("div",{staticClass:"modal-footer"},[i("button",{on:{click:e.submit}},[e._v("Submit")])])])},n=[];i.d(t,"a",function(){return s}),i.d(t,"b",function(){return n})},d323:function(e,t,i){"use strict";var s=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div")},n=[];i.d(t,"a",function(){return s}),i.d(t,"b",function(){return n})},d445:function(e,t,i){"use strict";var s=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("transition",{attrs:{name:"modal"}},[i("div",{directives:[{name:"show",rawName:"v-show",value:e.visible,expression:"visible"}],staticClass:"mask",class:{"modal-mask":e.mask,"dialog-mask":!e.mask},on:{click:e.close,dragover:function(t){return t.preventDefault(),e.dragOver(t)}}},[i("div",{ref:"container",staticClass:"modal-container",on:{click:function(e){e.stopPropagation()}}},[e._t("header",null,{dragStart:e.dragStart,dragEnd:e.dragEnd}),e._t("default")],2)])])},n=[];i.d(t,"a",function(){return s}),i.d(t,"b",function(){return n})},d588:function(e,t,i){"use strict";i.r(t);var s=i("91df"),n=i.n(s);for(var o in s)"default"!==o&&function(e){i.d(t,e,function(){return s[e]})}(o);t["default"]=n.a},d5df:function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0});const s=i("9ab4"),n=s.__importDefault(i("65d9")),o=s.__importDefault(i("ea6a")),r=i("0bc6"),a=i("8f0a"),l=i("6f92"),c=i("5e7c"),u=i("0180"),d=i("f10f"),h=i("92b1"),f=i("5a5c");let p=class extends o.default{constructor(){super(...arguments),this.name="Ruler",this.active=!1,this.startPoint=null,this.ruler=null,this.text=null}onMouseDown(e){const t=l.layerManager.getLayer("draw");void 0!==t?(this.active=!0,this.startPoint=h.l2g(f.getMouse(e)),this.ruler=new c.Line(this.startPoint,this.startPoint,3,d.gameStore.rulerColour),this.text=new u.Text(this.startPoint.clone(),"","bold 20px serif"),this.ruler.addOwner(d.gameStore.username),this.text.addOwner(d.gameStore.username),t.addShape(this.ruler,!0,!0),t.addShape(this.text,!0,!0)):console.log("No draw layer!")}onMouseMove(e){if(!this.active||null===this.ruler||null===this.startPoint||null===this.text)return;const t=l.layerManager.getLayer("draw");if(void 0===t)return void console.log("No draw layer!");const i=h.l2g(f.getMouse(e));this.ruler.endPoint=i,r.socket.emit("Shape.Update",{shape:this.ruler.asDict(),redraw:!0,temporary:!0});const s=Math.sign(i.x-this.startPoint.x)*Math.sign(i.y-this.startPoint.y),n=Math.abs(i.x-this.startPoint.x),o=Math.abs(i.y-this.startPoint.y),c=Math.round(Math.sqrt(Math.pow(n,2)+Math.pow(o,2))*d.gameStore.unitSize/d.gameStore.gridSize)+" ft",u=Math.atan2(s*o,n),p=Math.min(this.startPoint.x,i.x)+n/2,g=Math.min(this.startPoint.y,i.y)+o/2;this.text.refPoint=new a.GlobalPoint(p,g),this.text.text=c,this.text.angle=u,r.socket.emit("Shape.Update",{shape:this.text.asDict(),redraw:!0,temporary:!0}),t.invalidate(!0)}onMouseUp(e){if(!this.active||null===this.ruler||null===this.startPoint||null===this.text)return;const t=l.layerManager.getLayer("draw");void 0!==t?(this.active=!1,t.removeShape(this.ruler,!0,!0),t.removeShape(this.text,!0,!0),t.invalidate(!0),this.ruler=this.startPoint=this.text=null):console.log("No active layer!")}};p=s.__decorate([n.default],p),t.RulerTool=p},d65f:function(e,t,i){"use strict";i.r(t);var s=i("d445"),n=i("7e15");for(var o in n)"default"!==o&&function(e){i.d(t,e,function(){return n[e]})}(o);i("26a5");var r=i("2877"),a=Object(r["a"])(n["default"],s["a"],s["b"],!1,null,"12ed61ba",null);a.options.__file="modal.vue",t["default"]=a.exports},d677:function(e,t,i){"use strict";i.r(t);var s=i("53ec"),n=i.n(s);for(var o in s)"default"!==o&&function(e){i.d(t,e,function(){return s[e]})}(o);t["default"]=n.a},d6be:function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0});const s=i("6f92"),n=i("f10f"),o=i("6e4a");function r(e,i=!1){const r=new o.CDT;let a;a="vision"===e?n.gameStore.visionBlockers:n.gameStore.movementblockers;for(const t of a){const e=s.layerManager.UUIDMap.get(t);if(!i||e.visibleInCanvas(s.layerManager.getLayer().canvas))for(let t=0;t{this.shape=e,this.visible=!0}),d.EventBus.$on("EditDialog.AddLabel",e=>{this.visible&&(this.shape.labels.push(f.gameStore.labels[e]),this.updateShape(!0))})}beforeDestroy(){d.EventBus.$off("EditDialog.Open"),d.EventBus.$off("EditDialog.AddLabel")}updated(){this.addEmpty()}addEmpty(){""!==this.shape.owners[this.shape.owners.length-1]&&this.shape.addOwner(""),this.shape.trackers.length&&""===this.shape.trackers[this.shape.trackers.length-1].name&&0===this.shape.trackers[this.shape.trackers.length-1].value||this.shape.trackers.push({uuid:c.uuidv4(),name:"",value:0,maxvalue:0,visible:!1}),this.shape.auras.length&&""===this.shape.auras[this.shape.auras.length-1].name&&0===this.shape.auras[this.shape.auras.length-1].value||this.shape.auras.push({uuid:c.uuidv4(),name:"",value:0,dim:0,visionSource:!1,colour:"rgba(0,0,0,0)",visible:!1})}updateShape(e,t=!1){this.owned&&(u.socket.emit("Shape.Update",{shape:this.shape.asDict(),redraw:e,temporary:t}),e&&h.layerManager.invalidate(),this.addEmpty())}setToken(e){this.owned&&(this.shape.setIsToken(e.target.checked),this.updateShape(!0))}setVisionBlocker(e){this.owned&&(this.shape.checkVisionSources(),this.updateShape(!0))}setMovementBlocker(e){this.owned&&(this.shape.setMovementBlock(e.target.checked),this.updateShape(!1))}updateAnnotation(e){if(!this.owned)return;const t=""!==this.shape.annotation;this.shape.annotation=e.target.value,""===this.shape.annotation||t?""===this.shape.annotation&&t&&(f.gameStore.annotations.splice(f.gameStore.annotations.findIndex(e=>e===this.shape.uuid)),h.layerManager.hasLayer("draw")&&h.layerManager.getLayer("draw").invalidate(!0)):(f.gameStore.annotations.push(this.shape.uuid),h.layerManager.hasLayer("draw")&&h.layerManager.getLayer("draw").invalidate(!0)),this.updateShape(!1)}updateOwner(e,t){this.owned&&(this.shape.updateOwner(t,e.target.value),this.updateShape(f.gameStore.fowLOS))}removeOwner(e){this.owned&&(this.shape.removeOwner(e),this.updateShape(f.gameStore.fowLOS))}removeTracker(e){this.owned&&(this.shape.trackers=this.shape.trackers.filter(t=>t.uuid!==e),this.updateShape(!1))}removeAura(e){this.owned&&(this.shape.auras=this.shape.auras.filter(t=>t.uuid!==e),this.shape.checkVisionSources(),this.updateShape(!0))}updateAuraVisionSource(e){if(!this.owned)return;e.visionSource=!e.visionSource;const t=f.gameStore.visionSources.findIndex(t=>t.aura===e.uuid);e.visionSource&&-1===t?f.gameStore.visionSources.push({shape:this.shape.uuid,aura:e.uuid}):!e.visionSource&&t>=0&&f.gameStore.visionSources.splice(t,1),this.updateShape(!0)}updateAuraColour(e,t){if(!this.owned)return;const i=h.layerManager.getLayer(this.shape.layer);void 0!==i&&i.invalidate(!e.visionSource)}openLabelManager(){d.EventBus.$emit("LabelManager.Open")}removeLabel(e){this.owned&&(this.shape.labels=this.shape.labels.filter(t=>t.uuid!==e),this.updateShape(!0))}};s.__decorate([r.Prop()],p.prototype,"shape",void 0),p=s.__decorate([o.default({components:{Modal:l.default,"color-picker":a.default}})],p),t.default=p},da03:function(e,t,i){},dc37:function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0});const s=i("9ab4"),n=s.__importDefault(i("a026")),o=s.__importDefault(i("65d9")),r=s.__importDefault(i("d65f"));let a=class extends n.default{constructor(){super(...arguments),this.visible=!1,this.yes="Yes",this.no="No",this.title="",this.resolve=(e=>{}),this.reject=(()=>{})}confirm(){this.resolve(!0),this.close()}deny(){this.resolve(!1),this.close()}close(){this.reject(),this.visible=!1,this.title=""}open(e,t="yes",i="no"){return this.yes=t,this.no=i,this.title=e,this.visible=!0,this.$nextTick(()=>{this.$refs.confirm.focus()}),new Promise((e,t)=>{this.resolve=e,this.reject=t})}};a=s.__decorate([o.default({components:{Modal:r.default}})],a),t.default=a},de21:function(e,t,i){},deb9:function(e,t,i){"use strict";var s=i("c1e0"),n=i.n(s);n.a},dec1:function(e,t,i){"use strict";i.r(t);var s=i("cf8f"),n=i("3481");for(var o in n)"default"!==o&&function(e){i.d(t,e,function(){return n[e]})}(o);var r=i("2877"),a=Object(r["a"])(n["default"],s["a"],s["b"],!1,null,null,null);a.options.__file="map.vue",t["default"]=a.exports},df64:function(e,t,i){"use strict";var s=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{staticClass:"accordion"},[i("div",{attrs:{id:"header"},on:{click:function(t){return t.preventDefault(),e.toggleDisplay(t)}}},[i("input",{ref:"overall",attrs:{type:"checkbox"},on:{click:function(t){return t.stopPropagation(),e.toggleCategory(t)}}}),i("strong",[e._v(e._s(e.title))]),e.showArrow?[i("span",{directives:[{name:"show",rawName:"v-show",value:e.showArrow&&!e.active,expression:"showArrow && !active"}],staticClass:"down-Arrow"},[e._v("▼")]),i("span",{directives:[{name:"show",rawName:"v-show",value:e.showArrow&&e.active,expression:"showArrow && active"}],staticClass:"up-Arrow"},[e._v("▲")])]:e._e()],2),i("div",{directives:[{name:"show",rawName:"v-show",value:e.active,expression:"active"}],attrs:{id:"body"}},e._l(e.items,function(t){return i("div",{key:t[0],staticClass:"item",on:{click:function(i){e.toggleSelection(t[0])}}},[i("input",{attrs:{type:"checkbox"},domProps:{checked:e.selected.includes(t[0])},on:{click:function(e){e.preventDefault()}}}),e._v(" "+e._s(t[1])+"\n ")])}))])},n=[];i.d(t,"a",function(){return s}),i.d(t,"b",function(){return n})},e037:function(e,t,i){"use strict";var s=i("da03"),n=i.n(s);n.a},e06e:function(e,t,i){"use strict";var s=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("modal",{attrs:{visible:e.visible},on:{close:e.close},scopedSlots:e._u([{key:"header",fn:function(t){return i("div",{staticClass:"modal-header",attrs:{draggable:"true"},on:{dragstart:t.dragStart,dragend:t.dragEnd}},[e._v(e._s(e.title))])}}])},[i("div",{staticClass:"modal-body"},[i("button",{ref:"confirm",on:{click:e.confirm}},[e._v(e._s(e.yes))]),e.no?i("button",{on:{click:e.deny}},[e._v(e._s(e.no))]):e._e()])])},n=[];i.d(t,"a",function(){return s}),i.d(t,"b",function(){return n})},e0e9:function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0});const s=i("9ab4"),n=s.__importDefault(i("a026")),o=s.__importDefault(i("65d9")),r=s.__importDefault(i("1c76")),a=i("5338"),l=i("2d5b"),c=i("4a5b");let u=class extends n.default{constructor(){super(...arguments),this.visible=!1,this.left=0,this.top=0}open(e,t){l.assetStore.selected.includes(t)||c.getComponent().select(e,t),this.visible=!0,this.left=e.pageX,this.top=e.pageY,this.$nextTick(()=>{this.$children[0].$el.focus()})}close(){this.visible=!1}rename(){if(1!==l.assetStore.selected.length)return;const e=l.assetStore.idMap.get(l.assetStore.selected[0]);c.getRef("prompt").prompt("New name:",`Renaming ${e.name}`).then(t=>{a.socket.emit("Asset.Rename",{asset:e.id,name:t}),e.name=t,c.getComponent().$forceUpdate()},()=>{}),this.close()}remove(){0!==l.assetStore.selected.length&&(c.getRef("confirm").open("Are you sure you wish to remove this?").then(e=>{if(e){for(const e of l.assetStore.selected)a.socket.emit("Asset.Remove",e),l.assetStore.files.includes(e)?l.assetStore.files.splice(l.assetStore.files.indexOf(e),1):l.assetStore.folders.splice(l.assetStore.folders.indexOf(e),1);l.assetStore.clearSelected()}},()=>{}),this.close())}};u=s.__decorate([o.default({components:{ContextMenu:r.default}})],u),t.default=u},e27a:function(e,t,i){"use strict";i.r(t);var s=i("2756"),n=i.n(s);for(var o in s)"default"!==o&&function(e){i.d(t,e,function(){return s[e]})}(o);t["default"]=n.a},e3f5:function(e,t,i){"use strict";var s=i("a126"),n=i.n(s);n.a},e4b0:function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0});const s=i("9ab4"),n=s.__importDefault(i("a026")),o=s.__importDefault(i("65d9")),r=s.__importDefault(i("d65f")),a=i("4a5b"),l=i("0bc6"),c=i("af17"),u=i("f10f");let d=class extends n.default{constructor(){super(...arguments),this.visible=!1,this.newCategory="",this.newName="",this.search=""}mounted(){c.EventBus.$on("LabelManager.Open",()=>{this.visible=!0,this.newCategory="",this.newName="",this.$nextTick(()=>this.$refs.search.focus())})}beforeDestroy(){c.EventBus.$off("LabelManager.Open")}get labels(){const e={};for(const t of Object.keys(u.gameStore.labels)){const i=u.gameStore.labels[t];this.search.length&&`${i.category.toLowerCase()}${i.name.toLowerCase()}`.search(this.search.toLowerCase())<0||i.user===u.gameStore.username&&(i.category?(i.category in e||(e[i.category]=[]),e[i.category].push(i),e[i.category].sort((e,t)=>e.name.localeCompare(t.name))):e[""].push(i))}return e}get categories(){return Object.keys(this.labels).sort()}selectLabel(e){c.EventBus.$emit("EditDialog.AddLabel",e),this.visible=!1}toggleVisibility(e){e.visible=!e.visible,l.socket.emit("Label.Visibility.Set",{uuid:e.uuid,visible:e.visible})}addLabel(){if(""===this.newName)return;const e={uuid:a.uuidv4(),category:this.newCategory,name:this.newName,visible:!1,user:u.gameStore.username};u.gameStore.addLabel(e),l.socket.emit("Label.Add",e),this.newCategory="",this.newName=""}deleteLabel(e){u.gameStore.deleteLabel({uuid:e,user:u.gameStore.username}),l.socket.emit("Label.Delete",e)}};d=s.__decorate([o.default({components:{Modal:r.default}})],d),t.default=d},e4ea:function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0});const s=i("8f0a"),n=i("92b1"),o=i("5a5c"),r=i("8db6"),a=i("2469");class l extends a.Shape{constructor(e,t=[],i,s,n){super(e,i,s,n),this.type="polygon",this._vertices=[],this._vertices=t}get refPoint(){return this._refPoint}set refPoint(e){const t=e.subtract(this._refPoint);this._refPoint=e;for(let i=0;i({x:e.x,y:e.y}))})}fromDict(e){super.fromDict(e),this._vertices=e.vertices.map(e=>new s.GlobalPoint(e.x,e.y))}get points(){return this.vertices.map(e=>[e.x,e.y])}draw(e){super.draw(e),e.lineCap="round",e.lineJoin="round","fog"===this.strokeColour?e.strokeStyle=o.getFogColour():2===this.vertices.length?e.strokeStyle=this.fillColour:e.strokeStyle=this.strokeColour,"fog"===this.fillColour?e.fillStyle=o.getFogColour():e.fillStyle=this.fillColour,e.lineWidth=n.g2lz(2),e.beginPath(),e.moveTo(n.g2lx(this.vertices[0].x),n.g2ly(this.vertices[0].y));for(let t=1;t<=this.vertices.length;t++){const i=this.vertices[t%this.vertices.length];e.lineTo(n.g2lx(i.x),n.g2ly(i.y))}e.fill(),e.stroke()}contains(e){return this.getBoundingBox().contains(e)}center(e){return this.getBoundingBox().center()}visibleInCanvas(e){return this.getBoundingBox().visibleInCanvas(e)}snapToGrid(){}resizeToGrid(){}resize(e,t){0===e?this._refPoint=n.l2g(t):this._vertices[e-1]=n.l2g(t)}getBoundingBox(){let e=this.refPoint.x,t=this.refPoint.x,i=this.refPoint.y,n=this.refPoint.y;for(const s of this._vertices)s.xt&&(t=s.x),s.yn&&(n=s.y);return new r.BoundingRect(new s.GlobalPoint(e,i),t-e,n-i)}}t.Polygon=l},e5ca:function(e,t,i){"use strict";var s=function(){var e=this,t=e.$createElement,i=e._self._c||t;return e.selected?i("div",{staticClass:"tool-detail",style:{"--detailRight":e.detailRight,"--detailArrow":e.detailArrow}},[i("div",{directives:[{name:"show",rawName:"v-show",value:e.IS_DM,expression:"IS_DM"}]},[e._v("Mode")]),i("div",{directives:[{name:"show",rawName:"v-show",value:e.IS_DM,expression:"IS_DM"}],staticClass:"selectgroup"},e._l(e.modes,function(t){return i("div",{key:t,staticClass:"option",class:{"option-selected":e.modeSelect===t},on:{click:function(i){e.modeSelect=t}}},[e._v(e._s(t))])})),i("div",[e._v("Shape")]),i("div",{staticClass:"selectgroup"},e._l(e.shapes,function(t){return i("div",{key:t,staticClass:"option",class:{"option-selected":e.shapeSelect===t},on:{click:function(i){e.shapeSelect=t}}},[i("i",{staticClass:"fas",class:"fa-"+t})])})),i("div",[e._v("Colours")]),i("div",{staticClass:"selectgroup"},[i("color-picker",{staticClass:"option",attrs:{color:e.fillColour},on:{"update:color":function(t){e.fillColour=t}}}),i("color-picker",{staticClass:"option",attrs:{color:e.borderColour},on:{"update:color":function(t){e.borderColour=t}}})],1),i("div",{directives:[{name:"show",rawName:"v-show",value:"paint-brush"===e.shapeSelect,expression:"shapeSelect === 'paint-brush'"}]},[e._v("Brush size")]),i("input",{directives:[{name:"model",rawName:"v-model",value:e.brushSize,expression:"brushSize"},{name:"show",rawName:"v-show",value:"paint-brush"===e.shapeSelect,expression:"shapeSelect === 'paint-brush'"}],staticStyle:{"max-width":"100px"},attrs:{type:"text"},domProps:{value:e.brushSize},on:{input:function(t){t.target.composing||(e.brushSize=t.target.value)}}})]):e._e()},n=[];i.d(t,"a",function(){return s}),i.d(t,"b",function(){return n})},e756:function(e,t,i){},e7db:function(e,t,i){"use strict";var s=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{staticClass:"outer",on:{click:function(t){return t.target!==t.currentTarget?null:e.open(t)}}},[i("div",{staticClass:"current-color",style:e.transparent?"background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAMCAIAAADZF8uwAAAAGUlEQVQYV2M4gwH+YwCGIasIUwhT25BVBADtzYNYrHvv4gAAAABJRU5ErkJggg==)":"background-color:"+e.color,on:{click:function(t){return t.target!==t.currentTarget?null:e.open(t)}}}),i("div",{directives:[{name:"show",rawName:"v-show",value:e.display,expression:"display"}],staticClass:"mask",on:{click:function(t){return t.target!==t.currentTarget?null:e.closePicker(t)}}}),i("chrome-picker",{directives:[{name:"show",rawName:"v-show",value:e.display,expression:"display"}],ref:"chromePicker",style:{position:"fixed",left:e.left+"px",top:e.top+"px","z-index":9999},attrs:{value:e.color,tabindex:"-1"},on:{input:e.updateColor}})],1)},n=[];i.d(t,"a",function(){return s}),i.d(t,"b",function(){return n})},e914:function(e,t,i){"use strict";i.r(t);var s=i("c9a2"),n=i("aa69");for(var o in n)"default"!==o&&function(e){i.d(t,e,function(){return n[e]})}(o);i("78c7");var r=i("2877"),a=Object(r["a"])(n["default"],s["a"],s["b"],!1,null,null,null);a.options.__file="manager.vue",t["default"]=a.exports},e94f:function(e,t,i){"use strict";i.r(t);var s=i("7aaa"),n=i.n(s);for(var o in s)"default"!==o&&function(e){i.d(t,e,function(){return s[e]})}(o);t["default"]=n.a},ea6a:function(e,t,i){"use strict";i.r(t);var s=i("d323"),n=i("6465");for(var o in n)"default"!==o&&function(e){i.d(t,e,function(){return n[e]})}(o);i("12d3");var r=i("2877"),a=Object(r["a"])(n["default"],s["a"],s["b"],!1,null,null,null);a.options.__file="tool.vue",t["default"]=a.exports},eb57:function(e,t,i){"use strict";var s=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("Modal",{attrs:{visible:e.visible},on:{close:e.close},scopedSlots:e._u([{key:"header",fn:function(t){return i("div",{staticClass:"modal-header",attrs:{draggable:"true"},on:{dragstart:t.dragStart,dragend:t.dragEnd}},[e._v(e._s(e.title))])}}])},[i("div",{staticClass:"modal-body"},[e._v("\n "+e._s(e.question)+"\n "),i("input",{directives:[{name:"model",rawName:"v-model",value:e.answer,expression:"answer"}],ref:"answer",attrs:{type:"text"},domProps:{value:e.answer},on:{keyup:function(t){return"button"in t||!e._k(t.keyCode,"enter",13,t.key,"Enter")?e.submit(t):null},input:function(t){t.target.composing||(e.answer=t.target.value)}}})]),i("div",{staticClass:"modal-footer"},[i("button",{on:{click:e.submit}},[e._v("Submit")])])])},n=[];i.d(t,"a",function(){return s}),i.d(t,"b",function(){return n})},ebb9:function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0});const s=i("9ab4"),n=s.__importDefault(i("a026")),o=s.__importDefault(i("65d9")),r=s.__importDefault(i("1516"));n.default.component("draggable",r.default);const a=s.__importDefault(i("d65f")),l=i("4a5b"),c=i("0bc6"),u=i("af17"),d=i("6f92"),h=i("f10f");let f=class extends n.default{constructor(){super(...arguments),this.visible=!1,this.data=[],this.currentActor=null,this.roundCounter=0}mounted(){u.EventBus.$on("Initiative.Clear",this.clear),u.EventBus.$on("Initiative.Remove",e=>this.removeInitiative(e)),u.EventBus.$on("Initiative.Show",()=>this.visible=!0),c.socket.on("Initiative.Set",e=>{this.data=e}),c.socket.on("Initiative.Turn.Set",e=>this.setTurn(e)),c.socket.on("Initiative.Turn.Update",e=>this.updateTurn(e,!1)),c.socket.on("Initiative.Round.Update",e=>this.setRound(e,!1)),c.socket.on("Initiative.Effect.New",e=>{const t=this.getActor(e.actor);void 0!==t&&this.createEffect(t,e.effect,!1)}),c.socket.on("Initiative.Effect.Update",e=>this.updateEffect(e.actor,e.effect,!1))}beforeDestroy(){u.EventBus.$off("Initiative.Clear"),u.EventBus.$off("Initiative.Remove"),u.EventBus.$off("Initiative.Show")}clear(){this.data=[],this.currentActor=null}getActor(e){return this.data.find(t=>t.uuid===e)}contains(e){return this.data.some(t=>t.uuid===e)}owns(e){if(h.gameStore.IS_DM)return!0;const t=d.layerManager.UUIDMap.get(e.uuid);return void 0!==t&&t.owners.includes(h.gameStore.username)}getDefaultEffect(){return{uuid:l.uuidv4(),name:"New Effect",turns:10}}fakeSetData(e){e.setData("Hack","")}syncInitiative(e){c.socket.emit("Initiative.Update",e)}addInitiative(e){const t=this.data.findIndex(t=>t.uuid===e.uuid);t>=0||(void 0===e.initiative&&(e.initiative=0),this.syncInitiative(e))}removeInitiative(e){const t=this.data.findIndex(t=>t.uuid===e);if(t<0||this.data[t].group)return;this.syncInitiative({uuid:e});const i=d.layerManager.UUIDMap.get(e);void 0!==i&&i.showHighlight&&(i.showHighlight=!1,d.layerManager.getLayer(i.layer).invalidate(!0))}updateOrder(){h.gameStore.IS_DM&&c.socket.emit("Initiative.Set",this.data.map(e=>e.uuid))}updateTurn(e,t){if(!h.gameStore.IS_DM&&t)return;this.currentActor=e;const i=this.data.find(t=>t.uuid===e);if(void 0!==i){if(i.effects)for(let e=i.effects.length-1;e>=0;e--)i.effects[e].turns<=0?i.effects.splice(e,1):i.effects[e].turns--;t&&c.socket.emit("Initiative.Turn.Update",e)}}setRound(e,t){!h.gameStore.IS_DM&&t||(this.roundCounter=e,t&&c.socket.emit("Initiative.Round.Update",e))}setTurn(e){this.currentActor=e}nextTurn(){if(!h.gameStore.IS_DM)return;const e=this.data,t=e[(e.findIndex(e=>e.uuid===this.currentActor)+1)%e.length];this.data[0].uuid===t.uuid&&this.setRound(this.roundCounter+1,!0),this.updateTurn(t.uuid,!0)}toggleHighlight(e,t){const i=d.layerManager.UUIDMap.get(e.uuid);void 0!==i&&(i.showHighlight=t,d.layerManager.getLayer(i.layer).invalidate(!0))}toggleOption(e,t){this.owns(e)&&(e[t]=!e[t],this.syncInitiative(e))}createEffect(e,t,i){this.owns(e)&&(e.effects.push(t),i&&c.socket.emit("Initiative.Effect.New",{actor:e.uuid,effect:t}))}syncEffect(e,t){this.owns(e)&&c.socket.emit("Initiative.Effect.Update",{actor:e.uuid,effect:t})}updateEffect(e,t,i){const s=this.data.find(t=>t.uuid===e);if(void 0===s)return;const n=s.effects.findIndex(e=>e.uuid===t.uuid);void 0!==n&&(s.effects[n]=t,i?this.syncEffect(s,t):this.$forceUpdate())}};f=s.__decorate([o.default({components:{Modal:a.default,draggable:r.default}})],f),t.default=f},ee96:function(e,t,i){},f086:function(e,t,i){"use strict";i.r(t);var s=i("a112"),n=i("7ba5");for(var o in n)"default"!==o&&function(e){i.d(t,e,function(){return n[e]})}(o);i("01be");var r=i("2877"),a=Object(r["a"])(n["default"],s["a"],s["b"],!1,null,"674cf937",null);a.options.__file="selection_info.vue",t["default"]=a.exports},f10f:function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0});const s=i("9ab4"),n=s.__importDefault(i("a026")),o=i("6fc5"),r=i("0bc6"),a=i("2b48"),l=i("6f92"),c=i("92b1"),u=i("5a5c"),d=i("99e3"),h=i("d6be"),f=i("3a0b");let p=class extends o.VuexModule{constructor(){super(...arguments),this.layers=[],this.selectedLayerIndex=-1,this.boardInitialized=!1,this.locations=[],this.assets={},this.notes=[],this.IS_DM=!1,this.gridSize=50,this.username="",this.roomName="",this.roomCreator="",this.invitationCode="",this.gridColour="rgba(0, 0, 0, 1)",this.fowColour="rgba(0, 0, 0, 1)",this.rulerColour="rgba(255, 0, 0, 1)",this.panX=0,this.panY=0,this.zoomDisplay=.5,this.unitSize=5,this.useGrid=!0,this.fullFOW=!1,this.fowOpacity=.3,this.fowLOS=!1,this.locationName="",this.visionSources=[],this.visionBlockers=[],this.annotations=[],this.movementblockers=[],this.ownedtokens=[],this.BV=Object.freeze(new d.BoundingVolume([])),this.visionMode="bvh",this.drawTEContour=!1,this.visionRangeMin=1640,this.visionRangeMax=3281,this.clipboard=[],this.labels={},this.filterNoLabel=!1,this.labelFilters=[],this.showUI=!0}get selectedLayer(){return this.layers[this.selectedLayerIndex]}get zoomFactor(){return u.zoomValue(this.zoomDisplay)}setZoomDisplay(e){e!==this.zoomDisplay&&(e<0&&(e=0),e>1&&(e=1),this.zoomDisplay=e,l.layerManager.invalidate())}setVisionMode(e){this.visionMode=e.mode,e.sync&&r.socket.emit("Location.Options.Set",{vision_mode:e.mode})}setBoardInitialized(e){this.boardInitialized=e}toggleUnlabeledFilter(){this.filterNoLabel=!this.filterNoLabel}addLabel(e){n.default.set(this.labels,e.uuid,e)}setLabelFilters(e){this.labelFilters=e}setLabelVisibility(e){e.uuid in this.labels&&(this.labels[e.uuid].visible=e.visible)}deleteLabel(e){if(!(e.uuid in this.labels))return;const t=this.labels[e.uuid],i=new Set;for(const s of l.layerManager.UUIDMap.values()){const e=s.labels.indexOf(t);e>=0&&(s.labels.splice(e,1),i.add(s.layer))}for(const s of i)l.layerManager.getLayer(s).invalidate(!1);n.default.delete(this.labels,e.uuid)}setDM(e){this.IS_DM=e}setUsername(e){this.username=e}setRoomName(e){this.roomName=e}setRoomCreator(e){this.roomCreator=e}setInvitationCode(e){this.invitationCode=e}addLayer(e){this.layers.push(e),-1===this.selectedLayerIndex&&(this.selectedLayerIndex=this.layers.indexOf(e))}selectLayer(e){const t=this.layers.indexOf(e.name);t>=0&&(this.selectedLayerIndex=t),e.sync&&r.socket.emit("Client.ActiveLayer.Set",e.name)}newNote(e){this.notes.push(e.note),e.sync&&r.socket.emit("Note.New",e.note)}setAssets(e){this.assets=e}setLocations(e){this.locations=e}resetLayerInfo(){this.layers=[],this.selectedLayerIndex=-1}recalculateVision(e=!1){this.boardInitialized&&("triangle"===this.visionMode?h.triangulate("vision",e):this.BV=Object.freeze(new d.BoundingVolume(this.visionBlockers)))}recalculateMovement(e=!1){this.boardInitialized&&"triangle"===this.visionMode&&h.triangulate("movement",e)}updateZoom(e){if(e.newZoomDisplay===this.zoomDisplay)return;e.newZoomDisplay<0&&(e.newZoomDisplay=0),e.newZoomDisplay>1&&(e.newZoomDisplay=1);const t=c.g2l(e.zoomLocation);this.zoomDisplay=e.newZoomDisplay;const i=c.l2g(t),s=i.subtract(e.zoomLocation);this.panX+=s.x,this.panY+=s.y,l.layerManager.invalidate(),a.sendClientOptions()}setGridColour(e){this.gridColour=e.colour,l.layerManager.getGridLayer().drawGrid(),e.sync&&r.socket.emit("Client.Options.Set",{gridColour:e.colour})}setFOWColour(e){this.fowColour=e.colour,l.layerManager.invalidate(),e.sync&&r.socket.emit("Client.Options.Set",{fowColour:e.colour})}setRulerColour(e){this.rulerColour=e.colour,e.sync&&r.socket.emit("Client.Options.Set",{rulerColour:e.colour})}setPanX(e){this.panX=e}setPanY(e){this.panY=e}increasePanX(e){this.panX+=e}increasePanY(e){this.panY+=e}setUnitSize(e){this.unitSize!==e.unitSize&&e.unitSize>0&&e.unitSize<1/0&&(this.unitSize=e.unitSize,l.layerManager.invalidate(),e.sync&&r.socket.emit("Location.Options.Set",{unit_size:e.unitSize}))}setUseGrid(e){if(this.useGrid!==e.useGrid){this.useGrid=e.useGrid;const t=l.layerManager.getGridLayer();e.useGrid?t.canvas.style.display="block":t.canvas.style.display="none",e.sync&&r.socket.emit("Location.Options.Set",{use_grid:e.useGrid})}}setGridSize(e){if(this.gridSize!==e.gridSize&&e.gridSize>0){this.gridSize=e.gridSize;const t=l.layerManager.getGridLayer();void 0!==t&&t.drawGrid(),e.sync&&r.socket.emit("Gridsize.Set",e.gridSize)}}setVisionRangeMin(e){this.visionRangeMin=e.value,l.layerManager.invalidateLight(),e.sync&&r.socket.emit("Location.Options.Set",{vision_min_range:e.value})}setVisionRangeMax(e){this.visionRangeMax=Math.max(e.value,this.visionRangeMin),l.layerManager.invalidateLight(),e.sync&&r.socket.emit("Location.Options.Set",{vision_max_range:this.visionRangeMax})}setFullFOW(e){this.fullFOW!==e.fullFOW&&(this.fullFOW=e.fullFOW,l.layerManager.invalidateLight(),e.sync&&r.socket.emit("Location.Options.Set",{full_fow:e.fullFOW}))}setFOWOpacity(e){this.fowOpacity=e.fowOpacity,l.layerManager.invalidateLight(),e.sync&&r.socket.emit("Location.Options.Set",{fow_opacity:e.fowOpacity})}setLineOfSight(e){this.fowLOS!==e.fowLOS&&(this.fowLOS=e.fowLOS,l.layerManager.invalidate(),e.sync&&r.socket.emit("Location.Options.Set",{fow_los:e.fowLOS}))}setLocationName(e){this.locationName=e}updateNote(e){const t=this.notes.find(t=>t.uuid===e.note.uuid);void 0!==t&&(t.title=e.note.title,t.text=e.note.text,e.sync&&r.socket.emit("Note.Update",t))}removeNote(e){this.notes=this.notes.filter(t=>t.uuid!==e.note.uuid),e.sync&&r.socket.emit("Note.Remove",e.note.uuid)}toggleUI(){this.showUI=!this.showUI}setClipboard(e){this.clipboard=e}clear(){this.context.state.visionSources=[],this.context.state.visionBlockers=[],this.context.state.ownedtokens=[],this.context.state.annotations=[],this.context.state.movementblockers=[],this.context.state.notes=[],this.context.commit("recalculateVision"),this.context.commit("recalculateMovement")}};s.__decorate([o.Mutation],p.prototype,"setZoomDisplay",null),s.__decorate([o.Mutation],p.prototype,"setVisionMode",null),s.__decorate([o.Mutation],p.prototype,"setBoardInitialized",null),s.__decorate([o.Mutation],p.prototype,"toggleUnlabeledFilter",null),s.__decorate([o.Mutation],p.prototype,"addLabel",null),s.__decorate([o.Mutation],p.prototype,"setLabelFilters",null),s.__decorate([o.Mutation],p.prototype,"setLabelVisibility",null),s.__decorate([o.Mutation],p.prototype,"deleteLabel",null),s.__decorate([o.Mutation],p.prototype,"setDM",null),s.__decorate([o.Mutation],p.prototype,"setUsername",null),s.__decorate([o.Mutation],p.prototype,"setRoomName",null),s.__decorate([o.Mutation],p.prototype,"setRoomCreator",null),s.__decorate([o.Mutation],p.prototype,"setInvitationCode",null),s.__decorate([o.Mutation],p.prototype,"addLayer",null),s.__decorate([o.Mutation],p.prototype,"selectLayer",null),s.__decorate([o.Mutation],p.prototype,"newNote",null),s.__decorate([o.Mutation],p.prototype,"setAssets",null),s.__decorate([o.Mutation],p.prototype,"setLocations",null),s.__decorate([o.Mutation],p.prototype,"resetLayerInfo",null),s.__decorate([o.Mutation],p.prototype,"recalculateVision",null),s.__decorate([o.Mutation],p.prototype,"recalculateMovement",null),s.__decorate([o.Mutation],p.prototype,"updateZoom",null),s.__decorate([o.Mutation],p.prototype,"setGridColour",null),s.__decorate([o.Mutation],p.prototype,"setFOWColour",null),s.__decorate([o.Mutation],p.prototype,"setRulerColour",null),s.__decorate([o.Mutation],p.prototype,"setPanX",null),s.__decorate([o.Mutation],p.prototype,"setPanY",null),s.__decorate([o.Mutation],p.prototype,"increasePanX",null),s.__decorate([o.Mutation],p.prototype,"increasePanY",null),s.__decorate([o.Mutation],p.prototype,"setUnitSize",null),s.__decorate([o.Mutation],p.prototype,"setUseGrid",null),s.__decorate([o.Mutation],p.prototype,"setGridSize",null),s.__decorate([o.Mutation],p.prototype,"setVisionRangeMin",null),s.__decorate([o.Mutation],p.prototype,"setVisionRangeMax",null),s.__decorate([o.Mutation],p.prototype,"setFullFOW",null),s.__decorate([o.Mutation],p.prototype,"setFOWOpacity",null),s.__decorate([o.Mutation],p.prototype,"setLineOfSight",null),s.__decorate([o.Mutation],p.prototype,"setLocationName",null),s.__decorate([o.Mutation],p.prototype,"updateNote",null),s.__decorate([o.Mutation],p.prototype,"removeNote",null),s.__decorate([o.Mutation],p.prototype,"toggleUI",null),s.__decorate([o.Mutation],p.prototype,"setClipboard",null),s.__decorate([o.Action],p.prototype,"clear",null),p=s.__decorate([o.Module({dynamic:!0,store:f.rootStore,name:"game",namespaced:!0})],p),t.gameStore=o.getModule(p)},f19c:function(e,t,i){"use strict";var s=i("602f"),n=i.n(s);n.a},f2d0:function(e,t,i){},f30c:function(e,t,i){"use strict";i.r(t);var s=i("dc37"),n=i.n(s);for(var o in s)"default"!==o&&function(e){i.d(t,e,function(){return s[e]})}(o);t["default"]=n.a},f312:function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.aurasFromServer=(e=>{const t=[];for(const i of e)t.push({uuid:i.uuid,visionSource:i.vision_source,visible:i.visible,name:i.name,value:i.value,dim:i.dim,colour:i.colour});return t}),t.aurasToServer=(e=>{const t=[];for(const i of e)t.push({uuid:i.uuid,vision_source:i.visionSource,visible:i.visible,name:i.name,value:i.value,dim:i.dim,colour:i.colour});return t})},f3c9:function(e,t,i){"use strict";var s=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",[i("div",{attrs:{id:"toolselect"}},[i("ul",e._l(e.visibleTools,function(t){return i("li",{key:t,ref:t+"-selector",refInFor:!0,class:{"tool-selected":e.currentTool===t},on:{mousedown:function(i){e.currentTool=t}}},[i("a",{attrs:{href:"#"}},[e._v(e._s(t))])])}))]),i("div",[[i("select-tool",{directives:[{name:"show",rawName:"v-show",value:"Select"===e.currentTool,expression:"currentTool === 'Select'"}],ref:"selectTool"}),i("pan-tool",{directives:[{name:"show",rawName:"v-show",value:"Pan"===e.currentTool,expression:"currentTool === 'Pan'"}]}),i("keep-alive",[i("draw-tool",{directives:[{name:"show",rawName:"v-show",value:"Draw"===e.currentTool,expression:"currentTool === 'Draw'"}]})],1),i("ruler-tool",{directives:[{name:"show",rawName:"v-show",value:"Ruler"===e.currentTool,expression:"currentTool === 'Ruler'"}]}),i("map-tool",{directives:[{name:"show",rawName:"v-show",value:"Map"===e.currentTool,expression:"currentTool === 'Map'"}]}),i("filter-tool",{directives:[{name:"show",rawName:"v-show",value:"Filter"===e.currentTool,expression:"currentTool === 'Filter'"}]}),i("shape-menu",{ref:"shapecontext"}),i("createtoken-dialog",{ref:"createtokendialog"})]],2)])},n=[];i.d(t,"a",function(){return s}),i.d(t,"b",function(){return n})},f51a:function(e,t,i){"use strict";i.r(t);var s=i("e0e9"),n=i.n(s);for(var o in s)"default"!==o&&function(e){i.d(t,e,function(){return s[e]})}(o);t["default"]=n.a},f551:function(e,t,i){"use strict";i.r(t);var s=i("2686"),n=i("1dd6");for(var o in n)"default"!==o&&function(e){i.d(t,e,function(){return n[e]})}(o);i("28b6");var r=i("2877"),a=Object(r["a"])(n["default"],s["a"],s["b"],!1,null,"7a3669fd",null);a.options.__file="note.vue",t["default"]=a.exports},f5fe:function(e,t,i){"use strict";i.r(t);var s=i("59f0"),n=i("7018");for(var o in n)"default"!==o&&function(e){i.d(t,e,function(){return n[e]})}(o);i("deb9");var r=i("2877"),a=Object(r["a"])(n["default"],s["a"],s["b"],!1,null,"af4dc61a",null);a.options.__file="initiative.vue",t["default"]=a.exports},f692:function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0});const s=i("4185"),n=i("b906"),o=i("38c9"),r=i("bab4"),a=i("6f92"),l=i("f10f");function c(e){const t=document.createElement("canvas");let i;t.style.zIndex=a.layerManager.layers.length.toString(),t.width=window.innerWidth,t.height=window.innerHeight,i="grid"===e.type_?new o.GridLayer(t,e.name):"fow"===e.type_?new s.FOWLayer(t,e.name):"fow-players"===e.type_?new n.FOWPlayersLayer(t,e.name):new r.Layer(t,e.name),i.selectable=e.selectable,i.playerEditable=e.player_editable,a.layerManager.addLayer(i);const c=document.getElementById("layers");null!==c?("fow-players"!==e.name&&c.appendChild(t),"grid"===e.type_&&e.size&&l.gameStore.setGridSize({gridSize:e.size,sync:!1}),i.setShapes(e.shapes)):console.warn("Layers div is missing, this will prevent the main game board from loading!")}t.createLayer=c},f74c:function(e,t,i){"use strict";i.r(t);var s=i("a9a6"),n=i("29a2");for(var o in n)"default"!==o&&function(e){i.d(t,e,function(){return n[e]})}(o);i("9104");var r=i("2877"),a=Object(r["a"])(n["default"],s["a"],s["b"],!1,null,"4697341e",null);a.options.__file="labels.vue",t["default"]=a.exports},f8b3:function(e,t,i){"use strict";i.r(t);var s=i("d8ee"),n=i.n(s);for(var o in s)"default"!==o&&function(e){i.d(t,e,function(){return s[e]})}(o);t["default"]=n.a},f994:function(e,t,i){"use strict";var s=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("form",{on:{focusin:e.focusin,focusout:e.focusout,submit:function(t){return t.preventDefault(),e.login(t)}}},[i("fieldset",[i("legend",{staticClass:"legend"},[e._v("PlanarAlly")]),i("div",{staticClass:"input"},[i("input",{directives:[{name:"model",rawName:"v-model",value:e.username,expression:"username"}],attrs:{type:"text",name:"username",placeholder:"Username",autocomplete:"username",required:""},domProps:{value:e.username},on:{input:function(t){t.target.composing||(e.username=t.target.value)}}}),e._m(0)]),i("div",{staticClass:"input"},[i("input",{directives:[{name:"model",rawName:"v-model",value:e.password,expression:"password"}],attrs:{type:"password",name:"password",placeholder:"Password",autocomplete:"current-password",required:""},domProps:{value:e.password},on:{input:function(t){t.target.composing||(e.password=t.target.value)}}}),e._m(1)]),i("div",{staticStyle:{display:"flex"}},[i("button",{staticStyle:{visibility:"hidden",display:"none"},attrs:{type:"submit",name:"login"}}),i("button",{staticClass:"submit",attrs:{type:"button",name:"register",title:"Register"},on:{click:e.register}},[i("i",{staticClass:"fas fa-plus"})]),e._m(2)])]),e.error?i("div",{staticClass:"feedback"},[i("p",{staticClass:"error"},[i("strong",[e._v("Error:")]),e._v("\n "+e._s(e.error)+"\n ")])]):e._e()])},n=[function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("span",[i("i",{staticClass:"fas fa-user-circle"})])},function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("span",[i("i",{staticClass:"fas fa-lock"})])},function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("button",{staticClass:"submit",attrs:{type:"submit",name:"login",title:"Login"}},[i("i",{staticClass:"fas fa-arrow-right"})])}];i.d(t,"a",function(){return s}),i.d(t,"b",function(){return n})},fbdd:function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0});const s=i("9ab4"),n=s.__importDefault(i("a026")),o=s.__importDefault(i("65d9")),r=s.__importDefault(i("d065")),a=i("4a5b"),l=i("0bc6"),c=i("af17"),u=i("6f92");let d=class extends n.default{constructor(){super(...arguments),this.shape=null}mounted(){c.EventBus.$on("SelectionInfo.Shape.Set",e=>{this.shape=e})}beforeDestroy(){c.EventBus.$off("SelectionInfo.Shape.Set")}openEditDialog(){this.$refs.editDialog.visible=!0}changeValue(e,t){null!==this.shape&&a.getRef("prompt").prompt(`New ${e.name} value:`,`Updating ${e.name}`).then(i=>{if(null===this.shape)return;const s=e.value;"+"===i[0]||"-"===i[0]?e.value+=parseInt(i,10):e.value=parseInt(i,10),isNaN(e.value)&&(e.value=s),l.socket.emit("Shape.Update",{shape:this.shape.asDict(),redraw:t,temporary:!1}),t&&u.layerManager.invalidate()},()=>{})}};d=s.__decorate([o.default({components:{"edit-dialog":r.default}})],d),t.default=d},fcac:function(e,t,i){},fe11:function(e,t,i){},fe80:function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0});const s=i("0bc6"),n=i("af17"),o=i("8f0a"),r=i("6f92"),a=i("f692"),l=i("9cb7"),c=i("f10f"),u=i("5f86"),d=i("5a5c");s.socket.on("connect",()=>{console.log("Connected")}),s.socket.on("disconnect",()=>{console.log("Disconnected")}),s.socket.on("connect_error",e=>{console.error("Could not connect to game session."),u.router.push("/dashboard")}),s.socket.on("error",e=>{console.error("Game session does not exist."),u.router.push("/dashboard")}),s.socket.on("redirect",e=>{console.log("redirecting"),u.router.push(e)}),s.socket.on("Room.Info.Set",e=>{c.gameStore.setRoomName(e.name),c.gameStore.setRoomCreator(e.creator),c.gameStore.setInvitationCode(e.invitationCode)}),s.socket.on("Username.Set",e=>{c.gameStore.setUsername(e),c.gameStore.setDM(e===window.location.pathname.split("/")[2])}),s.socket.on("Client.Options.Set",e=>{c.gameStore.setGridColour({colour:e.grid_colour,sync:!1}),c.gameStore.setFOWColour({colour:e.fow_colour,sync:!1}),c.gameStore.setRulerColour({colour:e.ruler_colour,sync:!1}),c.gameStore.setPanX(e.pan_x),c.gameStore.setPanY(e.pan_y),c.gameStore.setZoomDisplay(d.zoomDisplay(e.zoom_factor)),e.active_layer&&r.layerManager.selectLayer(e.active_layer,!1),void 0!==r.layerManager.getGridLayer()&&r.layerManager.getGridLayer().invalidate()}),s.socket.on("Location.Set",e=>{void 0!==e.name&&c.gameStore.setLocationName(e.name),void 0!==e.unit_size&&c.gameStore.setUnitSize({unitSize:e.unit_size,sync:!1}),void 0!==e.use_grid&&c.gameStore.setUseGrid({useGrid:e.use_grid,sync:!1}),void 0!==e.full_fow&&c.gameStore.setFullFOW({fullFOW:e.full_fow,sync:!1}),void 0!==e.fow_opacity&&c.gameStore.setFOWOpacity({fowOpacity:e.fow_opacity,sync:!1}),void 0!==e.fow_los&&c.gameStore.setLineOfSight({fowLOS:e.fow_los,sync:!1}),void 0!==e.vision_min_range&&c.gameStore.setVisionRangeMin({value:e.vision_min_range,sync:!1}),void 0!==e.vision_max_range&&c.gameStore.setVisionRangeMax({value:e.vision_max_range,sync:!1}),void 0!==e.vision_mode&&(c.gameStore.setVisionMode({mode:e.vision_mode,sync:!1}),c.gameStore.recalculateVision(),c.gameStore.recalculateMovement())}),s.socket.on("Position.Set",e=>{l.gameManager.setCenterPosition(new o.GlobalPoint(e.x,e.y))}),s.socket.on("Notes.Set",e=>{for(const t of e)c.gameStore.newNote({note:t,sync:!1})}),s.socket.on("Asset.List.Set",e=>{c.gameStore.setAssets(e)}),s.socket.on("Board.Set",e=>{c.gameStore.clear(),c.gameStore.setLocations(e.locations),document.getElementById("layers").innerHTML="",c.gameStore.resetLayerInfo(),r.layerManager.reset();for(const t of e.layers)a.createLayer(t);r.layerManager.selectLayer(r.layerManager.getLayer().name,!1),n.EventBus.$emit("Initiative.Clear"),c.gameStore.recalculateVision(),c.gameStore.recalculateMovement(),c.gameStore.setBoardInitialized(!0)}),s.socket.on("Gridsize.Set",e=>{c.gameStore.setGridSize({gridSize:e,sync:!1})}),s.socket.on("Shape.Add",e=>{l.gameManager.addShape(e)}),s.socket.on("Shape.Remove",e=>{if(!r.layerManager.UUIDMap.has(e.uuid))return void console.log("Attempted to remove an unknown shape");if(!r.layerManager.hasLayer(e.layer))return void console.log(`Attempted to remove shape from an unknown layer ${e.layer}`);const t=r.layerManager.getLayer(e.layer);t.removeShape(r.layerManager.UUIDMap.get(e.uuid),!1),t.invalidate(!1)}),s.socket.on("Shape.Order.Set",e=>{if(!r.layerManager.UUIDMap.has(e.shape.uuid))return void console.log("Attempted to move the shape order of an unknown shape");if(!r.layerManager.hasLayer(e.shape.layer))return void console.log(`Attempted to remove shape from an unknown layer ${e.shape.layer}`);const t=r.layerManager.UUIDMap.get(e.shape.uuid),i=r.layerManager.getLayer(t.layer);i.moveShapeOrder(t,e.index,!1)}),s.socket.on("Shape.Layer.Change",e=>{const t=r.layerManager.UUIDMap.get(e.uuid);void 0!==t&&t.moveLayer(e.layer,!1)}),s.socket.on("Shape.Update",e=>{l.gameManager.updateShape(e)}),s.socket.on("Temp.Clear",e=>{e.forEach(e=>{if(!r.layerManager.UUIDMap.has(e.uuid))return void console.log("Attempted to remove an unknown temporary shape");if(!r.layerManager.hasLayer(e.layer))return void console.log(`Attempted to remove shape from an unknown layer ${e.layer}`);const t=r.layerManager.UUIDMap.get(e.uuid);r.layerManager.getLayer(e.layer).removeShape(t,!1)})}),s.socket.on("Labels.Set",e=>{for(const t of e)c.gameStore.addLabel(t)}),s.socket.on("Label.Visibility.Set",e=>{c.gameStore.setLabelVisibility(e)}),s.socket.on("Label.Add",e=>{c.gameStore.addLabel(e)}),s.socket.on("Label.Delete",e=>{c.gameStore.deleteLabel(e)}),s.socket.on("Labels.Filter.Add",e=>{c.gameStore.labelFilters.push(e),r.layerManager.invalidate()}),s.socket.on("Labels.Filter.Remove",e=>{const t=c.gameStore.labelFilters.indexOf(e);t>=0&&(c.gameStore.labelFilters.splice(t,1),r.layerManager.invalidate())}),s.socket.on("Labels.Filters.Set",e=>{c.gameStore.setLabelFilters(e)})}}); -//# sourceMappingURL=app.41dd580f.js.map \ No newline at end of file diff --git a/server/static/js/app.41dd580f.js.map b/server/static/js/app.41dd580f.js.map deleted file mode 100644 index b68ec85ed..000000000 --- a/server/static/js/app.41dd580f.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./src/game/shapes/text.ts","webpack:///./src/game/ui/selection/selection_info.vue?cd1b","webpack:///./src/game/ui/selection/shapecontext.vue","webpack:///./src/App.vue?5b85","webpack:///./src/core/components/modals/prompt.vue?d33d","webpack:///./src/core/components/colorpicker.vue?4d88","webpack:///./src/game/game.vue","webpack:///./src/game/api/socket.ts","webpack:///./src/assetManager/manager.vue?5633","webpack:///./src/game/ui/menu/asset_node.vue","webpack:///./src/game/ui/tools/selectcontext.vue?02dc","webpack:///./src/auth/login.vue","webpack:///./src/game/visibility/te/draw.ts","webpack:///./src/core/components/accordion.vue","webpack:///./src/game/ui/tools/tool.vue?5b17","webpack:///./src/game/shapes/circulartoken.ts","webpack:///./src/game/ui/annotation.ts","webpack:///./src/game/ui/menu/menu.vue","webpack:///./src/core/components/contextmenu.vue","webpack:///./src/game/ui/note.vue?49b7","webpack:///./src/auth/login.vue?c159","webpack:///./src/game/shapes/utils.ts","webpack:///./src/core/components/modals/confirm.vue?e6fb","webpack:///./src/game/ui/tools/select.vue?aed4","webpack:///./src/game/ui/tools/select.vue?29b9","webpack:///./src/game/shapes/shape.ts","webpack:///./src/core/components/modals/prompt.vue?d457","webpack:///./src/game/ui/note.vue?a34d","webpack:///./src/game/ui/note.vue?23aa","webpack:///./src/core/components/modals/modal.vue?33b9","webpack:///./src/game/ui/tools/select.vue?49f9","webpack:///./src/game/ui/tools/utils.ts","webpack:///./src/game/ui/note.vue?a508","webpack:///./src/game/ui/labels.vue?15af","webpack:///./src/game/api/utils.ts","webpack:///./src/game/ui/menu/asset_node.vue?f519","webpack:///./src/core/components/contextmenu.vue?f03a","webpack:///./src/core/components/contextmenu.vue?7efa","webpack:///./src/assetManager/store.ts","webpack:///./src/core/components/contextmenu.vue?50e1","webpack:///./src/game/ui/selection/shapecontext.vue?1cf6","webpack:///./src/game/ui/tools/map.vue?284a","webpack:///./src/game/layers/grid.ts","webpack:///./src/store.ts","webpack:///./src/core/components/colorpicker.vue","webpack:///./src/auth/login.vue?3521","webpack:///./src/App.vue?2e53","webpack:///./src/App.vue","webpack:///./src/game/game.vue?b3a0","webpack:///./src/game/game.vue?f5c6","webpack:///./src/game/layers/fow.ts","webpack:///./src/core/components/load.vue?18c2","webpack:///./src/game/ui/menu/menu.vue?002b","webpack:///./src/game/ui/menu/menu.vue?9e9a","webpack:///./src/game/ui/selection/edit_dialog.vue?db09","webpack:///./src/game/ui/selection/edit_dialog.vue?6334","webpack:///./src/game/shapes/circle.ts","webpack:///./src/game/ui/tools/map.vue?a3ab","webpack:///./src/core/components/load.vue","webpack:///./src/game/ui/tools/pan.ts","webpack:///./src/game/ui/tools/selectcontext.vue","webpack:///./src/core/utils.ts","webpack:///./src/assetManager/contextMenu.vue","webpack:///./src/game/visibility/te/triag.ts","webpack:///./src/game/ui/menu/asset_node.vue?1f27","webpack:///./src/game/ui/selection/edit_dialog.vue?1206","webpack:///./src/core/components/modals/modal.vue?44ae","webpack:///./src/assetManager/socket.ts","webpack:///./src/game/ui/tools/filter.vue?ee60","webpack:///./src/core/components/accordion.vue?3e09","webpack:///./src/game/game.vue?5550","webpack:///./src/game/shapes/multiline.ts","webpack:///./src/game/ui/tools/draw.vue","webpack:///./src/game/ui/initiative.vue?497e","webpack:///./src/game/ui/initiative.vue?527e","webpack:///./src/game/utils.ts","webpack:///./src/game/ui/tools/createtoken_modal.vue?d0df","webpack:///./src/game/ui/note.vue?f9bd","webpack:///./src/game/ui/tools/draw.vue?b96d","webpack:///./src/game/shapes/line.ts","webpack:///./src/router.ts","webpack:///./src/game/ui/tools/tool.vue?d136","webpack:///./src/game/ui/tools/tools.vue","webpack:///./src/game/ui/tools/tool.vue?8ce3","webpack:///./src/game/shapes/asset.ts","webpack:///./src/game/visibility/te/cdt.ts","webpack:///./src/game/ui/tools/draw.vue?1261","webpack:///./src/game/layers/manager.ts","webpack:///./src/game/ui/initiative.vue?c7e1","webpack:///./src/game/ui/tools/createtoken_modal.vue","webpack:///./src/game/visibility/bvh/node.ts","webpack:///./src/game/ui/tools/createtoken_modal.vue?f918","webpack:///./src/game/events/keyboard.ts","webpack:///./src/assetManager/manager.vue?433f","webpack:///./src/game/ui/selection/shapecontext.vue?17f5","webpack:///./src/game/ui/tools/tools.vue?25b2","webpack:///./src/game/ui/selection/selection_info.vue?2310","webpack:///./src/core/components/modals/modal.vue?09d2","webpack:///./src/core/components/contextmenu.vue?a0a2","webpack:///./src/core/components/modals/prompt.vue?4e1b","webpack:///./src/core/components/accordion.vue?3d26","webpack:///./src/core/components/load.vue?4ab2","webpack:///./src/core/components/load.vue?0f87","webpack:///./src/game/ui/menu/menu.vue?8b23","webpack:///./src/game/shapes/boundingrect.ts","webpack:///./src/dashboard/main.vue?5e14","webpack:///./src/dashboard/main.vue?94d1","webpack:///./src/game/geom.ts","webpack:///./src/game/ui/menu/asset_node.vue?c55a","webpack:///./src/game/ui/menu/asset_node.vue?3fe9","webpack:///./src/game/ui/labels.vue?33c0","webpack:///./src/game/game.vue?5592","webpack:///./src/game/units.ts","webpack:///./src/game/ui/menu/menu.vue?ae57","webpack:///./src/core/components/colorpicker.vue?1682","webpack:///./src/game/ui/tools/selectcontext.vue?0020","webpack:///./src/game/ui/tools/selectcontext.vue?758c","webpack:///./src/game/visibility/te/tds.ts","webpack:///./src/game/visibility/bvh/bvh.ts","webpack:///./src/game/manager.ts","webpack:///./src/game/ui/menu/asset_node.vue?0d0e","webpack:///./src/core/components/load.vue?8cd0","webpack:///./src/game/ui/selection/selection_info.vue?7cd0","webpack:///./src/game/ui/selection/selection_info.vue?4f48","webpack:///./src/game/ui/selection/shapecontext.vue?4b66","webpack:///./src/game/ui/selection/shapecontext.vue?0558","webpack:///./src/game/ui/tools/filter.vue?5a71","webpack:///./src/game/ui/tools/filter.vue?0072","webpack:///./src/dashboard/main.vue?3f72","webpack:///./src/core/components/modals/confirm.vue","webpack:///./src/game/ui/tools/tools.vue?c704","webpack:///./src/game/ui/selection/shapecontext.vue?aac0","webpack:///./src/assetManager/contextMenu.vue?c131","webpack:///./src/assetManager/contextMenu.vue?a185","webpack:///./src/game/ui/tools/draw.vue?60f4","webpack:///./src/game/ui/labels.vue?6447","webpack:///./src/game/ui/labels.vue?86fc","webpack:///./src/assetManager/manager.vue?a11e","webpack:///./src/game/event-bus.ts","webpack:///./src/dashboard/main.vue?d5a9","webpack:///./src/game/shapes/rect.ts","webpack:///./src/game/game.vue?b235","webpack:///./src/game/ui/tools/filter.vue?b0f4","webpack:///./src/game/ui/tools/selectcontext.vue?6f66","webpack:///./src/game/layers/fowplayers.ts","webpack:///./src/game/layers/layer.ts","webpack:///./src/game/events/mouse.ts","webpack:///./src/game/ui/tools/filter.vue","webpack:///./src/game/ui/menu/menu.vue?904d","webpack:///./src/game/shapes/baserect.ts","webpack:///./src/game/ui/tools/select.vue","webpack:///./src/dashboard/main.vue","webpack:///./src/game/ui/tools/createtoken_modal.vue?6f0b","webpack:///./src/assetManager/manager.vue?765a","webpack:///./src/assetManager/manager.vue?a045","webpack:///./src/game/ui/tools/selectcontext.vue?d61f","webpack:///./src/auth/logout.ts","webpack:///./src/core/store.ts","webpack:///./src/main.ts","webpack:///./src/core/components/contextmenu.vue?f402","webpack:///./src/invitation/invitation.ts","webpack:///./src/core/components/modals/prompt.vue","webpack:///./src/game/visibility/te/te.ts","webpack:///./src/game/ui/tools/map.vue?f96f","webpack:///./src/game/ui/tools/map.vue?7f60","webpack:///./src/game/ui/selection/edit_dialog.vue","webpack:///./src/game/settings.ts","webpack:///./src/auth/login.vue?283c","webpack:///./src/game/ui/tools/createtoken_modal.vue?e7b2","webpack:///./src/game/ui/tools/createtoken_modal.vue?5fcc","webpack:///./src/game/ui/tools/tool.vue?6323","webpack:///./src/game/ui/tools/tool.vue?f5ba","webpack:///./src/core/components/modals/modal.vue?1854","webpack:///./src/core/components/modals/modal.vue?e329","webpack:///./src/game/game.vue?d01c","webpack:///./src/game/ui/tools/ruler.ts","webpack:///./src/core/components/modals/modal.vue","webpack:///./src/core/components/accordion.vue?4b34","webpack:///./src/game/visibility/te/pa.ts","webpack:///./src/dashboard/main.vue?1359","webpack:///./src/game/ui/selection/edit_dialog.vue?9a84","webpack:///./src/core/components/modals/confirm.vue?f9ee","webpack:///./src/game/ui/initiative.vue?59ac","webpack:///./src/game/ui/tools/map.vue","webpack:///./src/core/components/accordion.vue?c7e6","webpack:///./src/core/components/accordion.vue?6229","webpack:///./src/game/ui/tools/filter.vue?77c9","webpack:///./src/core/components/modals/confirm.vue?e141","webpack:///./src/core/components/modals/confirm.vue?be48","webpack:///./src/assetManager/contextMenu.vue?1b1b","webpack:///./src/game/ui/tools/select.vue?b7fd","webpack:///./src/game/ui/tools/filter.vue?6447","webpack:///./src/game/ui/labels.vue?8d8f","webpack:///./src/game/shapes/polygon.ts","webpack:///./src/game/ui/tools/draw.vue?1866","webpack:///./src/game/ui/tools/draw.vue?03b4","webpack:///./src/core/components/colorpicker.vue?0fbc","webpack:///./src/core/components/colorpicker.vue?fb27","webpack:///./src/assetManager/manager.vue","webpack:///./src/game/ui/tools/tools.vue?fa4a","webpack:///./src/game/ui/tools/tool.vue","webpack:///./src/core/components/modals/prompt.vue?0a11","webpack:///./src/core/components/modals/prompt.vue?36e2","webpack:///./src/game/ui/initiative.vue?36c8","webpack:///./src/game/ui/selection/selection_info.vue","webpack:///./src/game/store.ts","webpack:///./src/core/components/colorpicker.vue?4d99","webpack:///./src/core/components/modals/confirm.vue?a22f","webpack:///./src/game/comm/conversion/aura.ts","webpack:///./src/game/ui/tools/tools.vue?47aa","webpack:///./src/game/ui/tools/tools.vue?e95e","webpack:///./src/assetManager/contextMenu.vue?1e9a","webpack:///./src/game/ui/note.vue","webpack:///./src/game/ui/initiative.vue","webpack:///./src/game/layers/utils.ts","webpack:///./src/game/ui/labels.vue","webpack:///./src/game/ui/selection/edit_dialog.vue?3800","webpack:///./src/auth/login.vue?e4a1","webpack:///./src/auth/login.vue?8f9e","webpack:///./src/game/ui/selection/selection_info.vue?5d62","webpack:///./src/game/api/events.ts"],"names":["webpackJsonpCallback","data","moduleId","chunkId","chunkIds","moreModules","executeModules","i","resolves","length","installedChunks","push","Object","prototype","hasOwnProperty","call","modules","parentJsonpFunction","shift","deferredModules","apply","checkDeferredModules","result","deferredModule","fulfilled","j","depId","splice","__webpack_require__","s","installedModules","app","exports","module","l","m","c","d","name","getter","o","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","p","jsonpArray","window","oldJsonpFunction","slice","boundingrect_1","shape_1","units_1","Text","Shape","[object Object]","position","text","font","angle","fillColour","strokeColour","uuid","super","this","type","assign","getBaseDict","points","refPoint","x","y","BoundingRect","ctx","draw","fillStyle","save","dest","g2l","translate","rotate","textAlign","getLines","map","line","fillText","restore","point","centerPoint","canvas","getBoundingBox","visibleInCanvas","resizePoint","lines","lineHeight","widths","measureText","width","Math","max","split","allLines","maxWidth","targetLine","words","word","testLine","metrics","testWidth","_node_modules_mini_css_extract_plugin_dist_loader_js_ref_6_oneOf_1_0_node_modules_css_loader_index_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_6_oneOf_1_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_selection_info_vue_vue_type_style_index_0_id_674cf937_scoped_true_lang_css___WEBPACK_IMPORTED_MODULE_0__","_node_modules_mini_css_extract_plugin_dist_loader_js_ref_6_oneOf_1_0_node_modules_css_loader_index_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_6_oneOf_1_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_selection_info_vue_vue_type_style_index_0_id_674cf937_scoped_true_lang_css___WEBPACK_IMPORTED_MODULE_0___default","__webpack_exports__","_shapecontext_vue_vue_type_template_id_759e5a8a_scoped_true___WEBPACK_IMPORTED_MODULE_0__","_shapecontext_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__","__WEBPACK_IMPORT_KEY__","_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_3__","component","options","__file","_node_modules_mini_css_extract_plugin_dist_loader_js_ref_6_oneOf_1_0_node_modules_css_loader_index_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_6_oneOf_1_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_App_vue_vue_type_style_index_0_lang_css___WEBPACK_IMPORTED_MODULE_0__","_node_modules_mini_css_extract_plugin_dist_loader_js_ref_6_oneOf_1_0_node_modules_css_loader_index_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_6_oneOf_1_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_App_vue_vue_type_style_index_0_lang_css___WEBPACK_IMPORTED_MODULE_0___default","_node_modules_mini_css_extract_plugin_dist_loader_js_ref_6_oneOf_1_0_node_modules_css_loader_index_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_6_oneOf_1_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_prompt_vue_vue_type_style_index_0_id_0602c2e6_scoped_true_lang_css___WEBPACK_IMPORTED_MODULE_0__","_node_modules_mini_css_extract_plugin_dist_loader_js_ref_6_oneOf_1_0_node_modules_css_loader_index_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_6_oneOf_1_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_prompt_vue_vue_type_style_index_0_id_0602c2e6_scoped_true_lang_css___WEBPACK_IMPORTED_MODULE_0___default","tinycolor2_1","tslib_1","__importDefault","vue_1","vue_class_component_1","vue_color_1","vue_property_decorator_1","ColorPicker","default","display","left","top","transparent","$refs","chromePicker","val","rgba","a","setPosition","disabled","$nextTick","$children","$el","focus","newColor","toRgbString","$emit","color","rect","getBoundingClientRect","right","innerWidth","bottom","innerHeight","__decorate","Prop","String","Boolean","components","chrome-picker","Chrome","_game_vue_vue_type_template_id_05b88da7_scoped_true___WEBPACK_IMPORTED_MODULE_0__","_game_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__","_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_4__","socket_io_client_1","createConnection","route","socket","io","opts","query","params","creator","room","connect","location","protocol","host","autoConnect","contextMenu_vue_1","confirm_vue_1","prompt_vue_1","socket_1","store_1","utils_1","AssetManager","path","draggingSelection","folders","assetStore","files","selected","idMap","currentFolder","root","parentFolder","parent","undefined","firstSelectedFile","sel","file_hash","nextFolder","pop","clearSelected","emit","prompt","inode","target","includes","indexOf","delete","event","shiftKey","inodes","start","end","ctrlKey","file","dataTransfer","setData","dropEffect","classList","contains","add","remove","moveInode","upload","document","getElementById","click","fls","CHUNK_SIZE","uuidv4","slices","ceil","size","fr","FileReader","readAsArrayBuffer","min","onload","e","directory","totalSlices","Prompt","ConfirmDialog","AssetContextMenu","to","from","next","disconnect","_asset_node_vue_vue_type_template_id_6d718094_scoped_true___WEBPACK_IMPORTED_MODULE_0__","_asset_node_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__","_node_modules_mini_css_extract_plugin_dist_loader_js_ref_6_oneOf_1_0_node_modules_css_loader_index_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_6_oneOf_1_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_selectcontext_vue_vue_type_style_index_0_id_44a31e42_scoped_true_lang_css___WEBPACK_IMPORTED_MODULE_0__","_node_modules_mini_css_extract_plugin_dist_loader_js_ref_6_oneOf_1_0_node_modules_css_loader_index_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_6_oneOf_1_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_selectcontext_vue_vue_type_style_index_0_id_44a31e42_scoped_true_lang_css___WEBPACK_IMPORTED_MODULE_0___default","_login_vue_vue_type_template_id_bc30fc14_scoped_true___WEBPACK_IMPORTED_MODULE_0__","_login_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__","manager_1","tds_1","triag_1","drawPolygon","polygon","colour","dl","layerManager","getLayer","lineJoin","beginPath","strokeStyle","random","moveTo","g2lx","g2ly","lineTo","closePath","stroke","drawPolygonL","xx","local","yy","I","J","drl","constrained","drawPolygonT","tds","clear","logs","T","clearRect","ei","EdgeIterator","valid","collect","fromP","edge","first","vertices","ccw","second","toP","cw","Infinity","constraints","console","log","pos","triangles","isInfinite","po","arc","PI","fill","DP","DPL","DPT","_accordion_vue_vue_type_template_id_0bf2b7ba_scoped_true___WEBPACK_IMPORTED_MODULE_0__","_accordion_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__","_node_modules_mini_css_extract_plugin_dist_loader_js_ref_6_oneOf_1_0_node_modules_css_loader_index_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_6_oneOf_1_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_tool_vue_vue_type_style_index_0_lang_css___WEBPACK_IMPORTED_MODULE_0__","_node_modules_mini_css_extract_plugin_dist_loader_js_ref_6_oneOf_1_0_node_modules_css_loader_index_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_6_oneOf_1_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_tool_vue_vue_type_style_index_0_lang_css___WEBPACK_IMPORTED_MODULE_0___default","tinycolor","__importStar","circle_1","CircularToken","Circle","center","radius","fromDict","textBaseline","xs","calcFontScale","g2lz","ys","transform","mostReadable","toHexString","visible","gameStore","IS_DM","group","source","has_img","effects","index","geom_1","rect_1","text_1","AnnotationManager","shown","origin","GlobalPoint","annotationText","annotationRect","Rect","layer","hasLayer","warn","addShape","l2g","LocalPoint","getMaxWidth","height","getMaxHeight","w","zoomFactor","h","invalidate","_menu_vue_vue_type_template_id_aaf3f05e_scoped_true___WEBPACK_IMPORTED_MODULE_0__","_menu_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__","_contextmenu_vue_vue_type_template_id_256dde9c___WEBPACK_IMPORTED_MODULE_0__","_contextmenu_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__","_node_modules_cache_loader_dist_cjs_js_ref_12_0_node_modules_thread_loader_dist_cjs_js_node_modules_ts_loader_index_js_ref_12_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_note_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__","_node_modules_cache_loader_dist_cjs_js_ref_12_0_node_modules_thread_loader_dist_cjs_js_node_modules_ts_loader_index_js_ref_12_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_note_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0___default","_node_modules_cache_loader_dist_cjs_js_ref_12_0_node_modules_thread_loader_dist_cjs_js_node_modules_ts_loader_index_js_ref_12_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_login_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__","_node_modules_cache_loader_dist_cjs_js_ref_12_0_node_modules_thread_loader_dist_cjs_js_node_modules_ts_loader_index_js_ref_12_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_login_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0___default","asset_1","circulartoken_1","line_1","multiline_1","polygon_1","createShapeFromDict","shape","sh","type_","fill_colour","stroke_colour","circ","token","Line","x2","y2","line_width","multiline","MultiLine","Polygon","v","asset","img","Image","src","startsWith","URL","pathname","Asset","_node_modules_mini_css_extract_plugin_dist_loader_js_ref_6_oneOf_1_0_node_modules_css_loader_index_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_6_oneOf_1_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_confirm_vue_vue_type_style_index_0_id_1883e207_scoped_true_lang_css___WEBPACK_IMPORTED_MODULE_0__","_node_modules_mini_css_extract_plugin_dist_loader_js_ref_6_oneOf_1_0_node_modules_css_loader_index_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_6_oneOf_1_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_confirm_vue_vue_type_style_index_0_id_1883e207_scoped_true_lang_css___WEBPACK_IMPORTED_MODULE_0___default","render","_vm","_h","$createElement","_c","_self","ref","staticRenderFns","aura_1","nameVisible","trackers","auras","labels","_owners","visionObstruction","movementObstruction","isToken","showHighlight","annotation","globalCompositeOperation","Map","_refPoint","delta","idx","entries","abs","prev","fromArray","vec","subtract","mid","multiply","normalize","skipLightUpdate","recalculate","self","obstructionIndex","visionBlockers","update","recalculateVision","forEach","au","ls","visionSources","findIndex","aura","visionSource","some","blocksMovement","movementblockers","recalculateMovement","ownedBy","ownedtokens","draw_operator","movement_obstruction","vision_obstruction","aurasToServer","owners","name_visible","is_token","JSON","stringify","aurasFromServer","parse","bbox","strokeRect","topLeft","dim","loc","innerRange","g2lr","gradient","createRadialGradient","tc","addColorStop","setAlpha","lastPath","sync","oldLayer","newLayer","shapes","freeze","username","owner","oldValue","newValue","ownerIndex","addOwner","_node_modules_cache_loader_dist_cjs_js_ref_12_0_node_modules_thread_loader_dist_cjs_js_node_modules_ts_loader_index_js_ref_12_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_prompt_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__","_node_modules_cache_loader_dist_cjs_js_ref_12_0_node_modules_thread_loader_dist_cjs_js_node_modules_ts_loader_index_js_ref_12_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_prompt_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0___default","note","attrs","mask","on","close","$event","scopedSlots","_u","fn","staticClass","draggable","dragstart","dragStart","dragend","dragEnd","title","select","staticStyle","font-size","directives","rawName","expression","domProps","change","updateNote","input","composing","$set","style","calcHeight","removeNote","_v","_e","_node_modules_mini_css_extract_plugin_dist_loader_js_ref_6_oneOf_1_0_node_modules_css_loader_index_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_6_oneOf_1_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_modal_vue_vue_type_style_index_0_id_12ed61ba_scoped_true_lang_css___WEBPACK_IMPORTED_MODULE_0__","_node_modules_mini_css_extract_plugin_dist_loader_js_ref_6_oneOf_1_0_node_modules_css_loader_index_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_6_oneOf_1_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_modal_vue_vue_type_style_index_0_id_12ed61ba_scoped_true_lang_css___WEBPACK_IMPORTED_MODULE_0___default","selectcontext_vue_1","tool_vue_1","utils_2","utils_3","SelectOperations","SelectTool","showContextMenu","active","Noop","deltaChanged","dragRay","Ray","Vector","selectionStartPoint","selectionHelper","mouse","getMouse","globalMouse","selectionStack","hit","selection","concat","getPointIndex","l2gz","getRef","Resize","Drag","localRefPoint","GroupSelect","endPoint","og","direction","ogDelta","calculateDelta","asDict","redraw","temporary","resize","updateCursor","body","cursor","clearSelection","topRight","botLeft","useGrid","altKey","snapToGrid","resizeToGrid","$parent","shapecontext","open","selectcontext","getPointOrientation","SelectContext","pa_1","done","visionMode","ogSelBBox","newSelBBox","offset","refine","movementBlocker","blocker","UUIDMap","blockerBBox","found","intersectsWithInner","ray","fromPoints","invDir","inverse","dirIsNegative","intersectP","bCenter","sCenter","ux","uy","dx","dot","dy","centerTriangle","PA_CDT","movement","locate","asArray","lt","triangle","checkTriangle","skip","endpoint","neighbours","_cw","_ccw","ix","intersection","isConstrained","orientation","Sign","LEFT_TURN","ZERO","newDelta","_node_modules_mini_css_extract_plugin_dist_loader_js_ref_6_oneOf_1_0_node_modules_css_loader_index_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_6_oneOf_1_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_note_vue_vue_type_style_index_0_id_7a3669fd_scoped_true_lang_css___WEBPACK_IMPORTED_MODULE_0__","_node_modules_mini_css_extract_plugin_dist_loader_js_ref_6_oneOf_1_0_node_modules_css_loader_index_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_6_oneOf_1_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_note_vue_vue_type_style_index_0_id_7a3669fd_scoped_true_lang_css___WEBPACK_IMPORTED_MODULE_0___default","_node_modules_cache_loader_dist_cjs_js_ref_12_0_node_modules_thread_loader_dist_cjs_js_node_modules_ts_loader_index_js_ref_12_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_labels_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__","_node_modules_cache_loader_dist_cjs_js_ref_12_0_node_modules_thread_loader_dist_cjs_js_node_modules_ts_loader_index_js_ref_12_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_labels_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0___default","sendClientOptions","locationOptions","panX","panY","AssetNode","showImage","keys","filter","el","sort","alphSort","__files","b","toLowerCase","children","imageSource","querySelector","setDragImage","tabindex","blur","_t","vuex_module_decorators_1","AssetStore","VuexModule","Mutation","Module","dynamic","store","rootStore","namespaced","getModule","_node_modules_cache_loader_dist_cjs_js_ref_12_0_node_modules_thread_loader_dist_cjs_js_node_modules_ts_loader_index_js_ref_12_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_contextmenu_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__","_node_modules_cache_loader_dist_cjs_js_ref_12_0_node_modules_thread_loader_dist_cjs_js_node_modules_ts_loader_index_js_ref_12_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_contextmenu_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0___default","contextmenu_vue_1","event_bus_1","ShapeContext","activeLayer","pageX","pageY","layers","selectable","playerEditable","moveLayer","getActiveLayer","moveShapeOrder","initiative","addInitiative","getInitiativeRepr","EventBus","ContextMenu","_node_modules_cache_loader_dist_cjs_js_ref_12_0_node_modules_thread_loader_dist_cjs_js_node_modules_ts_loader_index_js_ref_12_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_map_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__","_node_modules_cache_loader_dist_cjs_js_ref_12_0_node_modules_thread_loader_dist_cjs_js_node_modules_ts_loader_index_js_ref_12_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_map_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0___default","layer_1","GridLayer","Layer","doClear","drawGrid","gs","gridSize","gridColour","lineWidth","vuex_1","use","Store","_colorpicker_vue_vue_type_template_id_d32461a4_scoped_true___WEBPACK_IMPORTED_MODULE_0__","_colorpicker_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__","_node_modules_mini_css_extract_plugin_dist_loader_js_ref_6_oneOf_1_0_node_modules_css_loader_index_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_6_oneOf_1_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_login_vue_vue_type_style_index_0_id_bc30fc14_scoped_true_lang_css___WEBPACK_IMPORTED_MODULE_0__","_node_modules_mini_css_extract_plugin_dist_loader_js_ref_6_oneOf_1_0_node_modules_css_loader_index_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_6_oneOf_1_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_login_vue_vue_type_style_index_0_id_bc30fc14_scoped_true_lang_css___WEBPACK_IMPORTED_MODULE_0___default","id","script","componentNormalizer","mouseleave","wheel","zoom","ready","mousedown","mouseup","mousemove","contextmenu","preventDefault","stopPropagation","dragover","drop","showUI","_l","class","layer-selected","selectedLayer","selectLayer","href","_s","interval","dot-width","dot-height","tooltip-dir","tooltip","formatter","zoomDisplay","toFixed","slider-style","border-radius","bg-style","background-color","box-shadow","process-style","model","callback","$$v","settings_1","te_1","FOWLayer","isVisionLayer","preFogShapes","virtualCanvas","createElement","vCtx","getContext","has","removeShape","Settings","skipLightFOW","originalOperation","dctx","drawAngleLines","drawFirstLightHit","fullFOW","bb","lcenter","alm","light","find","auraLength","getUnitDistance","auraCircle","lastArcAngle","Path2D","firstPoint","angleSteps","anglePoint","cos","sin","lightRay","hitResult","BV","intersect","computeVisibility","drawImage","fowLOS","preShape","ogComposite","getFogColour","fillRect","_node_modules_cache_loader_dist_cjs_js_ref_12_0_node_modules_thread_loader_dist_cjs_js_node_modules_ts_loader_index_js_ref_12_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_load_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__","_node_modules_cache_loader_dist_cjs_js_ref_12_0_node_modules_thread_loader_dist_cjs_js_node_modules_ts_loader_index_js_ref_12_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_load_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0___default","settings","locations","rm-list-dm","_m","enter","rm","transition","settingsClick","overflow-y","overflow-x","assets","createNote","openNote","notes","for","checked","Array","isArray","_i","$$a","$$el","$$c","$$i","modifiers","number","step","fowOpacity","_n","$forceUpdate","unitSize","changeVisionMode","$store","state","game","lazy","visionRangeMin","visionRangeMax","readonly","invitationCode","update:color","fowColour","rulerColour","text-decoration","changeLocation","createLocation","grid-column","owned","updateShape","opacity","grid-column-start","setToken","setVisionBlocker","setMovementBlocker","placeholder","updateOwner","gridColumnStart","removeOwner","tracker","removeTracker","updateAuraColour","updateAuraVisionSource","removeAura","label","category","removeLabel","openLabelManager","updateAnnotation","pow","targetX","targetY","round","diff","sqrt","baserect_1","MapTool","xCount","yCount","startPoint","clone","BaseRect","_load_vue_vue_type_template_id_ff095222___WEBPACK_IMPORTED_MODULE_0__","_load_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__","_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__","PanTool","panStart","distance","increasePanX","increasePanY","_selectcontext_vue_vue_type_template_id_44a31e42_scoped_true___WEBPACK_IMPORTED_MODULE_0__","_selectcontext_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__","main_1","replace","toString","capitalize","charAt","toUpperCase","getHTMLFont","element","parentElement","getComputedStyle","getPropertyValue","getHTMLTextWidth","fakeElement","appendChild","partition","arr","predicate","ret","Number","fontWidth","fixedEncodeURIComponent","str","encodeURIComponent","charCodeAt","OrderedMap","values","getComponent","activeComponent","_contextMenu_vue_vue_type_template_id_606797b4___WEBPACK_IMPORTED_MODULE_0__","_contextMenu_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__","edgeInfo","va","vb","ec","EdgeCirculator","indv","indexV","ri","infinite","vi","orient","COLLINEAR","collinearBetween","q","cPQ","cQR","compare","EQUAL","SMALLER","LARGER","px","py","qx","qy","rx","ry","pqx","pqy","prx","pry","det","determinant","maxX","maxY","aprX","aprY","eps","EPSILON","POSITIVE","NEGATIVE","a00","a01","a10","a11","hasInexactNegativeOrientation","sideOfOrientedCircle","perturb","sideOfOrientedCircleP","Error","p0","p1","p2","os","getOrientedSide","ON_ORIENTED_BOUNDARY","reverse","ON_NEGATIVE_SIDE","xyEqual","xySmaller","xyCompare","qpx","qpy","rpx","rpy","tpx","tpy","tqx","tqy","rqx","rqy","maxx","maxy","arpx","arpy","atqx","atqy","atpx","atpy","arqx","arqy","ON_POSITIVE_SIDE","segSegDoIntersectCrossing","p3","p4","RIGHT_TURN","segSegDoIntersectContained","pa","pb","pc","pd","getIntersectionType","intersectionType","IntersectionType","POINT","NO_INTERSECTION","getLine","doIntersect","l1","l2","info","getIntersectionTypeLine","la","lb","denom","nom1","nom2","A1","A2","B1","B2","nextUp","MAX_VALUE","MIN_VALUE","ulp","_node_modules_cache_loader_dist_cjs_js_ref_12_0_node_modules_thread_loader_dist_cjs_js_node_modules_ts_loader_index_js_ref_12_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_asset_node_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__","_node_modules_cache_loader_dist_cjs_js_ref_12_0_node_modules_thread_loader_dist_cjs_js_node_modules_ts_loader_index_js_ref_12_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_asset_node_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0___default","_node_modules_mini_css_extract_plugin_dist_loader_js_ref_6_oneOf_1_0_node_modules_css_loader_index_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_6_oneOf_1_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_edit_dialog_vue_vue_type_style_index_0_id_23de098e_scoped_true_lang_css___WEBPACK_IMPORTED_MODULE_0__","_node_modules_mini_css_extract_plugin_dist_loader_js_ref_6_oneOf_1_0_node_modules_css_loader_index_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_6_oneOf_1_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_edit_dialog_vue_vue_type_style_index_0_id_23de098e_scoped_true_lang_css___WEBPACK_IMPORTED_MODULE_0___default","Modal","positioned","offsetX","offsetY","screenX","screenY","dragging","updatePosition","container","offsetWidth","offsetHeight","clientX","clientY","parseInt","destination","setRoot","folder","child","set","accordion_vue_1","FilterTool","cat","localeCompare","initalValues","labelFilters","f","categories","toggleUnlabeledFilter","_","accordion","Accordion","initialValues","updateCategory","overall","items","indeterminate","item","_node_modules_mini_css_extract_plugin_dist_loader_js_ref_6_oneOf_1_0_node_modules_css_loader_index_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_6_oneOf_1_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_game_vue_vue_type_style_index_0_lang_css___WEBPACK_IMPORTED_MODULE_0__","_node_modules_mini_css_extract_plugin_dist_loader_js_ref_6_oneOf_1_0_node_modules_css_loader_index_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_6_oneOf_1_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_game_vue_vue_type_style_index_0_lang_css___WEBPACK_IMPORTED_MODULE_0___default","_points","minx","miny","lineCap","_draw_vue_vue_type_template_id_639cd890_scoped_true___WEBPACK_IMPORTED_MODULE_0__","_draw_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__","fakeSetData","updateOrder","actor","flex-direction","align-items","initiative-selected","currentActor","mouseenter","toggleHighlight","notAllowed","owns","syncInitiative","createEffect","getDefaultEffect","toggleOption","removeInitiative","effect","updateEffect","turns","roundCounter","setRound","updateTurn","nextTurn","opposite","zoomValue","exp","colorpicker_vue_1","modal_vue_1","CreateTokenModal","borderColour","updatePreview","Watch","color-picker","computed","mapState","NoteDialog","textarea","scrollHeight","then","DrawTool","brushHelper","ruler","shapeSelect","modeSelect","modes","brushSize","helperSize","onModeChange","fowLayer","normalLayer","setupBrush","_vertices","pushBrushBack","lastPoint","finaliseShape","axios_1","vue_router_1","manager_vue_1","login_vue_1","logout_1","load_vue_1","main_vue_1","game_vue_1","invitation_1","router","base","routes","redirect","meta","auth","template","beforeEach","coreStore","initialized","matched","record","authenticated","response","setAuthenticated","setUsername","setInitialized","catch","error","Tool","detailRight","detailArrow","$on","tool","onMouseDown","onMouseUp","onMouseMove","onContextMenu","onDeselect","onSelect","_tools_vue_vue_type_template_id_cf33581e_scoped_true___WEBPACK_IMPORTED_MODULE_0__","_tools_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__","_node_modules_cache_loader_dist_cjs_js_ref_12_0_node_modules_thread_loader_dist_cjs_js_node_modules_ts_loader_index_js_ref_12_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_tool_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__","_node_modules_cache_loader_dist_cjs_js_ref_12_0_node_modules_thread_loader_dist_cjs_js_node_modules_ts_loader_index_js_ref_12_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_tool_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0___default","topleft","CDT","TDS","insert","insertConstraintV","stack","markConstraint","intersectionInfo","findIntersectedFaces","triangulateHole","intersectedFaces","listAB","listBA","edges","triangulateHole2","propagatingFlipE","triangulateHalfHole","fl","deleteTriangle","conflictBoundaries","iN","iT","iC","current","n1","n2","ind","ind1","ind2","mirrorIndex","v0","v1","v2","newlf","createTriangle","vaa","vbb","aa","lfc","LineFaceCirculator","lf","rf","indexT","unshift","previousFace","currentVertex","i1","i2","vcc","vdd","pi","BoundingBox","dilate","overlaps","removeConstrainedEdge","dimension","indf","locateInfo","iLocate","insertb","li","flipAround","propagatingFlip","depth","isFlipable","maxDepth","ni","flip","e1","e2","uid","eni","eI","edgeSet","lessEdge","indn","ed","tt","ii","u","t1","t2","t3","i3","t4","i4","insertInConstrainedEdge","LocateType","EDGE","insertc","updateConstraintsIncident","VERTEX","clearConstraintsIncident","updateConstraintsOpposite","c1","c2","fc","FaceCirculator","cwi","ccwi","insertFirst","finiteVertex","insertSecond","OUTSIDE_AFFINE_HULL","insertOutsideAffineHull","OUTSIDE_CONVEX_HULL","insertOutsideConvexHull","insertInEdge","FACE","insertInFace","insertDimUp","_infinite","conform","finiteEdge","COUNTERCLOCKWISE","insertOutsideConvexHull2","ccwlist","cwlist","th","marchLocate1D","marchLocate2D","ff","iv","pqt","Triangle","leftFirst","o0","o1","o2","sum","nTurns","_node_modules_cache_loader_dist_cjs_js_ref_12_0_node_modules_thread_loader_dist_cjs_js_node_modules_ts_loader_index_js_ref_12_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_draw_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__","_node_modules_cache_loader_dist_cjs_js_ref_12_0_node_modules_thread_loader_dist_cjs_js_node_modules_ts_loader_index_js_ref_12_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_draw_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0___default","LayerManager","drawLoop","requestAnimationFrame","addLayer","globalAlpha","getSelection","image","getData","l2gx","l2gy","lm","_node_modules_cache_loader_dist_cjs_js_ref_12_0_node_modules_thread_loader_dist_cjs_js_node_modules_ts_loader_index_js_ref_12_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_initiative_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__","_node_modules_cache_loader_dist_cjs_js_ref_12_0_node_modules_thread_loader_dist_cjs_js_node_modules_ts_loader_index_js_ref_12_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_initiative_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0___default","_createtoken_modal_vue_vue_type_template_id_73816298_scoped_true___WEBPACK_IMPORTED_MODULE_0__","_createtoken_modal_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__","BoundingNode","nPrimitives","LeafNode","firstPrimOffset","InteriorNode","union","_node_modules_cache_loader_dist_cjs_js_ref_12_0_node_modules_thread_loader_dist_cjs_js_node_modules_ts_loader_index_js_ref_12_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_createtoken_modal_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__","_node_modules_cache_loader_dist_cjs_js_ref_12_0_node_modules_thread_loader_dist_cjs_js_node_modules_ts_loader_index_js_ref_12_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_createtoken_modal_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0___default","utils_4","onKeyUp","HTMLInputElement","HTMLTextAreaElement","selectTool","onKeyDown","keyCode","hasSelection","toggleUI","clipboard","setClipboard","clip","oldTrackers","newTracker","oldAuras","newAura","_node_modules_mini_css_extract_plugin_dist_loader_js_ref_6_oneOf_1_0_node_modules_css_loader_index_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_6_oneOf_1_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_manager_vue_vue_type_style_index_0_lang_css___WEBPACK_IMPORTED_MODULE_0__","_node_modules_mini_css_extract_plugin_dist_loader_js_ref_6_oneOf_1_0_node_modules_css_loader_index_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_6_oneOf_1_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_manager_vue_vue_type_style_index_0_lang_css___WEBPACK_IMPORTED_MODULE_0___default","_node_modules_mini_css_extract_plugin_dist_loader_js_ref_6_oneOf_1_0_node_modules_css_loader_index_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_6_oneOf_1_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_shapecontext_vue_vue_type_style_index_0_id_759e5a8a_scoped_true_lang_css___WEBPACK_IMPORTED_MODULE_0__","_node_modules_mini_css_extract_plugin_dist_loader_js_ref_6_oneOf_1_0_node_modules_css_loader_index_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_6_oneOf_1_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_shapecontext_vue_vue_type_style_index_0_id_759e5a8a_scoped_true_lang_css___WEBPACK_IMPORTED_MODULE_0___default","shapecontext_vue_1","createtoken_modal_vue_1","draw_vue_1","filter_vue_1","map_vue_1","pan_1","select_vue_1","manager_2","ruler_1","Tools","currentTool","tools","dmTools","currentToolComponent","visibleTools","tagName","targetTool","button","buttons","annotations","gameManager","annotationManager","setActiveText","select-tool","pan-tool","draw-tool","ruler-tool","RulerTool","map-tool","filter-tool","shape-menu","createtoken-dialog","watch","_node_modules_cache_loader_dist_cjs_js_ref_12_0_node_modules_thread_loader_dist_cjs_js_node_modules_ts_loader_index_js_ref_12_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_selection_info_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__","_node_modules_cache_loader_dist_cjs_js_ref_12_0_node_modules_thread_loader_dist_cjs_js_node_modules_ts_loader_index_js_ref_12_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_selection_info_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0___default","_node_modules_cache_loader_dist_cjs_js_ref_12_0_node_modules_thread_loader_dist_cjs_js_node_modules_ts_loader_index_js_ref_12_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_modal_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__","_node_modules_cache_loader_dist_cjs_js_ref_12_0_node_modules_thread_loader_dist_cjs_js_node_modules_ts_loader_index_js_ref_12_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_modal_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0___default","_node_modules_mini_css_extract_plugin_dist_loader_js_ref_6_oneOf_1_0_node_modules_css_loader_index_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_6_oneOf_1_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_contextmenu_vue_vue_type_style_index_0_lang_css___WEBPACK_IMPORTED_MODULE_0__","_node_modules_mini_css_extract_plugin_dist_loader_js_ref_6_oneOf_1_0_node_modules_css_loader_index_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_6_oneOf_1_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_contextmenu_vue_vue_type_style_index_0_lang_css___WEBPACK_IMPORTED_MODULE_0___default","question","answer","resolve","reject","Promise","_node_modules_mini_css_extract_plugin_dist_loader_js_ref_6_oneOf_1_0_node_modules_css_loader_index_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_6_oneOf_1_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_accordion_vue_vue_type_style_index_0_id_0bf2b7ba_scoped_true_lang_css___WEBPACK_IMPORTED_MODULE_0__","_node_modules_mini_css_extract_plugin_dist_loader_js_ref_6_oneOf_1_0_node_modules_css_loader_index_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_6_oneOf_1_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_accordion_vue_vue_type_style_index_0_id_0bf2b7ba_scoped_true_lang_css___WEBPACK_IMPORTED_MODULE_0___default","message","_node_modules_cache_loader_dist_cjs_js_ref_12_0_node_modules_thread_loader_dist_cjs_js_node_modules_ts_loader_index_js_ref_12_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_menu_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__","_node_modules_cache_loader_dist_cjs_js_ref_12_0_node_modules_thread_loader_dist_cjs_js_node_modules_ts_loader_index_js_ref_12_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_menu_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0___default","botRight","vector","other","xmin","xmax","ymin","ymax","botright","dirIsNeg","txmin","getDiagCorner","txmax","tymin","tymax","tMax","coreVisible","joined","submit","createRoom","newSessionName","tag","getPointDistance","Point","scale","atan2","maxT","toggle","mouseover","hash","mouseout","_node_modules_mini_css_extract_plugin_dist_loader_js_ref_6_oneOf_1_0_node_modules_css_loader_index_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_6_oneOf_1_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_labels_vue_vue_type_style_index_0_id_4697341e_scoped_true_lang_css___WEBPACK_IMPORTED_MODULE_0__","_node_modules_mini_css_extract_plugin_dist_loader_js_ref_6_oneOf_1_0_node_modules_css_loader_index_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_6_oneOf_1_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_labels_vue_vue_type_style_index_0_id_4697341e_scoped_true_lang_css___WEBPACK_IMPORTED_MODULE_0___default","vue_slider_component_1","lodash_1","initiative_vue_1","labels_vue_1","menu_vue_1","note_vue_1","selection_info_vue_1","tools_vue_1","keyboard_1","mouse_1","Game","manager","updateZoom","newZoomDisplay","zoomLocation","addEventListener","resizeWindow","removeEventListener","throttle","scrollZoom","setWidth","setHeight","confirm","dropAsset","tool-bar","selection-info","prompt-dialog","confirm-dialog","menu-bar","initiative-dialog","zoom-slider","note-dialog","label-dialog","obj","z","l2gr","asset_node_vue_1","MenuBar","setUseGrid","setFullFOW","setFOWOpacity","setLineOfSight","setUnitSize","setGridSize","setGridColour","setFOWColour","setRulerColour","setVisionRangeMin","setVisionRangeMax","nextElementSibling","newNote","setVisionMode","asset-node","_node_modules_cache_loader_dist_cjs_js_ref_12_0_node_modules_thread_loader_dist_cjs_js_node_modules_ts_loader_index_js_ref_12_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_colorpicker_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__","_node_modules_cache_loader_dist_cjs_js_ref_12_0_node_modules_thread_loader_dist_cjs_js_node_modules_ts_loader_index_js_ref_12_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_colorpicker_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0___default","bringPlayers","createToken","showInitiative","_INFINITE_VERTEX","LineFaceState","newPoint","INFINITE","_counter","vertex","A","sign","Vertex","_point","_ri","Edge","_es","associatedEdge","increment","tr","dir","UNDEFINED","_tr","ic","vt","vr","pqr","VERTEX_VERTEX","VERTEX_EDGE","EDGE_VERTEX","EDGE_EDGE","createVertex","addVertex","infiniteVertex","n0","trig","t0","i0","setAdjacency","deleteList","copy","neighbour","lfit","reorient","vCW","vCCW","tri","bl","bli","vv","g","x1","y1","dist","node_1","BoundingVolume","totalNodes","buildData","orderedPrims","nodes","recursiveBuild","compact","node","createLeaf","centroidBbox","getMaxExtent","pMid","partitionedData","flattened","stopOnFirstHit","tMin","todoOffset","nodeNum","todo","secondChildOffset","flatten","myOffset","secondOffset","primitivesOffset","annotation_1","GameManager","selectedTool","oldShape","redrawInitiative","checkVisionSources","setMovementBlock","setIsToken","localPos","_node_modules_mini_css_extract_plugin_dist_loader_js_ref_6_oneOf_1_0_node_modules_css_loader_index_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_6_oneOf_1_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_asset_node_vue_vue_type_style_index_0_id_6d718094_scoped_true_lang_css___WEBPACK_IMPORTED_MODULE_0__","_node_modules_mini_css_extract_plugin_dist_loader_js_ref_6_oneOf_1_0_node_modules_css_loader_index_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_6_oneOf_1_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_asset_node_vue_vue_type_style_index_0_id_6d718094_scoped_true_lang_css___WEBPACK_IMPORTED_MODULE_0___default","LoadComponent","openEditDialog","changeValue","maxvalue","getLayers","setLayer","moveToBack","moveToFront","getInitiativeWord","--detailRight","--detailArrow","showArrow","selectionupdate","updateSelection","registerHooks","Dashboard","vm","err","post","$router","_confirm_vue_vue_type_template_id_1883e207_scoped_true___WEBPACK_IMPORTED_MODULE_0__","_confirm_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__","_node_modules_mini_css_extract_plugin_dist_loader_js_ref_6_oneOf_1_0_node_modules_css_loader_index_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_6_oneOf_1_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_tools_vue_vue_type_style_index_0_id_cf33581e_scoped_true_lang_css___WEBPACK_IMPORTED_MODULE_0__","_node_modules_mini_css_extract_plugin_dist_loader_js_ref_6_oneOf_1_0_node_modules_css_loader_index_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_6_oneOf_1_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_tools_vue_vue_type_style_index_0_id_cf33581e_scoped_true_lang_css___WEBPACK_IMPORTED_MODULE_0___default","_node_modules_cache_loader_dist_cjs_js_ref_12_0_node_modules_thread_loader_dist_cjs_js_node_modules_ts_loader_index_js_ref_12_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_shapecontext_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__","_node_modules_cache_loader_dist_cjs_js_ref_12_0_node_modules_thread_loader_dist_cjs_js_node_modules_ts_loader_index_js_ref_12_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_shapecontext_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0___default","rename","_node_modules_mini_css_extract_plugin_dist_loader_js_ref_6_oneOf_1_0_node_modules_css_loader_index_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_6_oneOf_1_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_draw_vue_vue_type_style_index_0_id_639cd890_scoped_true_lang_css___WEBPACK_IMPORTED_MODULE_0__","_node_modules_mini_css_extract_plugin_dist_loader_js_ref_6_oneOf_1_0_node_modules_css_loader_index_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_6_oneOf_1_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_draw_vue_vue_type_style_index_0_id_639cd890_scoped_true_lang_css___WEBPACK_IMPORTED_MODULE_0___default","margin","search","selectLabel","lower-opacity","toggleVisibility","deleteLabel","trim","newCategory","newName","addLabel","_node_modules_cache_loader_dist_cjs_js_ref_12_0_node_modules_thread_loader_dist_cjs_js_node_modules_ts_loader_index_js_ref_12_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_manager_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__","_node_modules_cache_loader_dist_cjs_js_ref_12_0_node_modules_thread_loader_dist_cjs_js_node_modules_ts_loader_index_js_ref_12_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_manager_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0___default","_node_modules_cache_loader_dist_cjs_js_ref_12_0_node_modules_thread_loader_dist_cjs_js_node_modules_ts_loader_index_js_ref_12_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_main_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__","_node_modules_cache_loader_dist_cjs_js_ref_12_0_node_modules_thread_loader_dist_cjs_js_node_modules_ts_loader_index_js_ref_12_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_main_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0___default","_node_modules_mini_css_extract_plugin_dist_loader_js_ref_6_oneOf_1_0_node_modules_css_loader_index_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_6_oneOf_1_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_game_vue_vue_type_style_index_1_id_05b88da7_scoped_true_lang_css___WEBPACK_IMPORTED_MODULE_0__","_node_modules_mini_css_extract_plugin_dist_loader_js_ref_6_oneOf_1_0_node_modules_css_loader_index_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_6_oneOf_1_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_game_vue_vue_type_style_index_1_id_05b88da7_scoped_true_lang_css___WEBPACK_IMPORTED_MODULE_0___default","_node_modules_cache_loader_dist_cjs_js_ref_12_0_node_modules_thread_loader_dist_cjs_js_node_modules_ts_loader_index_js_ref_12_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_filter_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__","_node_modules_cache_loader_dist_cjs_js_ref_12_0_node_modules_thread_loader_dist_cjs_js_node_modules_ts_loader_index_js_ref_12_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_filter_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0___default","_node_modules_cache_loader_dist_cjs_js_ref_12_0_node_modules_thread_loader_dist_cjs_js_node_modules_ts_loader_index_js_ref_12_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_selectcontext_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__","_node_modules_cache_loader_dist_cjs_js_ref_12_0_node_modules_thread_loader_dist_cjs_js_node_modules_ts_loader_index_js_ref_12_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_selectcontext_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0___default","FOWPlayersLayer","skipPlayerFOW","maxLength","tokenId","_a","selectionColor","selectionWidth","invalidateLight","serverShape","lsI","lbI","mbI","anI","annotationIndex","ownedIndex","ogOP","drawAuras","filterNoLabel","destinationIndex","oldIdx","deltaY","_filter_vue_vue_type_template_id_847e7ec4_scoped_true___WEBPACK_IMPORTED_MODULE_0__","_filter_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__","_node_modules_mini_css_extract_plugin_dist_loader_js_ref_6_oneOf_1_0_node_modules_css_loader_index_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_6_oneOf_1_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_menu_vue_vue_type_style_index_0_id_aaf3f05e_scoped_true_lang_css___WEBPACK_IMPORTED_MODULE_0__","_node_modules_mini_css_extract_plugin_dist_loader_js_ref_6_oneOf_1_0_node_modules_css_loader_index_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_6_oneOf_1_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_menu_vue_vue_type_style_index_0_id_aaf3f05e_scoped_true_lang_css___WEBPACK_IMPORTED_MODULE_0___default","topright","botleft","mx","my","_select_vue_vue_type_template_id_048b3482___WEBPACK_IMPORTED_MODULE_0__","_select_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__","_main_vue_vue_type_template_id_61eb1455_scoped_true___WEBPACK_IMPORTED_MODULE_0__","_main_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__","_node_modules_mini_css_extract_plugin_dist_loader_js_ref_6_oneOf_1_0_node_modules_css_loader_index_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_6_oneOf_1_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_createtoken_modal_vue_vue_type_style_index_0_id_73816298_scoped_true_lang_css___WEBPACK_IMPORTED_MODULE_0__","_node_modules_mini_css_extract_plugin_dist_loader_js_ref_6_oneOf_1_0_node_modules_css_loader_index_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_6_oneOf_1_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_createtoken_modal_vue_vue_type_style_index_0_id_73816298_scoped_true_lang_css___WEBPACK_IMPORTED_MODULE_0___default","moveDrag","stopDrag","multiple","hidden","createDirectory","prepareUpload","dblclick","changeDirectory","dragleave","leaveDrag","inode-selected","cm","startDrag","createtokendialog","Logout","CoreStore","init","App_vue_1","router_1","config","productionTip","devtools","performance","$mount","props","Initiative","code","sessionUrl","_prompt_vue_vue_type_template_id_0602c2e6_scoped_true___WEBPACK_IMPORTED_MODULE_0__","_prompt_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__","draw_1","drawt","drawTEContour","Q","rawOutput","expandEdge","fh","nfh","nIndex","rIndex","lIndex","nvh","rvh","lvh","re","le","ro","lo","raySegIntersection","CLOCKWISE","denominator","ua","_edit_dialog_vue_vue_type_template_id_23de098e_scoped_true___WEBPACK_IMPORTED_MODULE_0__","_edit_dialog_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__","tempFill","Login","password","$route","statusText","span","modal-mask","dialog-mask","dragOver","_node_modules_cache_loader_dist_cjs_js_ref_12_0_node_modules_thread_loader_dist_cjs_js_node_modules_ts_loader_index_js_ref_12_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_game_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__","_node_modules_cache_loader_dist_cjs_js_ref_12_0_node_modules_thread_loader_dist_cjs_js_node_modules_ts_loader_index_js_ref_12_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_game_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0___default","diffsign","xdiff","ydiff","xmid","ymid","_modal_vue_vue_type_template_id_12ed61ba_scoped_true___WEBPACK_IMPORTED_MODULE_0__","_modal_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__","_node_modules_cache_loader_dist_cjs_js_ref_12_0_node_modules_thread_loader_dist_cjs_js_node_modules_ts_loader_index_js_ref_12_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_accordion_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__","_node_modules_cache_loader_dist_cjs_js_ref_12_0_node_modules_thread_loader_dist_cjs_js_node_modules_ts_loader_index_js_ref_12_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_accordion_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0___default","cdt_1","triangulate","partial","cdt","insertConstraint","vision","_node_modules_mini_css_extract_plugin_dist_loader_js_ref_6_oneOf_1_0_node_modules_css_loader_index_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_6_oneOf_1_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_main_vue_vue_type_style_index_0_id_61eb1455_scoped_true_lang_css___WEBPACK_IMPORTED_MODULE_0__","_node_modules_mini_css_extract_plugin_dist_loader_js_ref_6_oneOf_1_0_node_modules_css_loader_index_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_6_oneOf_1_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_main_vue_vue_type_style_index_0_id_61eb1455_scoped_true_lang_css___WEBPACK_IMPORTED_MODULE_0___default","EditDialog","$off","addEmpty","hadAnnotation","an","yes","no","ok","_node_modules_mini_css_extract_plugin_dist_loader_js_ref_6_oneOf_1_0_node_modules_css_loader_index_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_6_oneOf_1_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_initiative_vue_vue_type_style_index_0_id_af4dc61a_scoped_true_lang_css___WEBPACK_IMPORTED_MODULE_0__","_node_modules_mini_css_extract_plugin_dist_loader_js_ref_6_oneOf_1_0_node_modules_css_loader_index_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_6_oneOf_1_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_initiative_vue_vue_type_style_index_0_id_af4dc61a_scoped_true_lang_css___WEBPACK_IMPORTED_MODULE_0___default","_map_vue_vue_type_template_id_2104f147___WEBPACK_IMPORTED_MODULE_0__","_map_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__","toggleDisplay","toggleCategory","toggleSelection","_node_modules_mini_css_extract_plugin_dist_loader_js_ref_6_oneOf_1_0_node_modules_css_loader_index_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_6_oneOf_1_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_filter_vue_vue_type_style_index_1_id_847e7ec4_scoped_true_lang_css___WEBPACK_IMPORTED_MODULE_0__","_node_modules_mini_css_extract_plugin_dist_loader_js_ref_6_oneOf_1_0_node_modules_css_loader_index_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_6_oneOf_1_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_filter_vue_vue_type_style_index_1_id_847e7ec4_scoped_true_lang_css___WEBPACK_IMPORTED_MODULE_0___default","deny","_node_modules_cache_loader_dist_cjs_js_ref_12_0_node_modules_thread_loader_dist_cjs_js_node_modules_ts_loader_index_js_ref_12_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_select_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__","_node_modules_cache_loader_dist_cjs_js_ref_12_0_node_modules_thread_loader_dist_cjs_js_node_modules_ts_loader_index_js_ref_12_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_select_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0___default","_node_modules_mini_css_extract_plugin_dist_loader_js_ref_6_oneOf_1_0_node_modules_css_loader_index_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_6_oneOf_1_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_filter_vue_vue_type_style_index_0_lang_css___WEBPACK_IMPORTED_MODULE_0__","_node_modules_mini_css_extract_plugin_dist_loader_js_ref_6_oneOf_1_0_node_modules_css_loader_index_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_6_oneOf_1_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_filter_vue_vue_type_style_index_0_lang_css___WEBPACK_IMPORTED_MODULE_0___default","LabelManager","user","option-selected","max-width","currentTarget","closePicker","z-index","updateColor","_manager_vue_vue_type_template_id_5b0def98___WEBPACK_IMPORTED_MODULE_0__","_manager_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__","_node_modules_cache_loader_dist_cjs_js_ref_12_0_node_modules_thread_loader_dist_cjs_js_node_modules_ts_loader_index_js_ref_12_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_tools_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__","_node_modules_cache_loader_dist_cjs_js_ref_12_0_node_modules_thread_loader_dist_cjs_js_node_modules_ts_loader_index_js_ref_12_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_tools_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0___default","_tool_vue_vue_type_template_id_1e034b42___WEBPACK_IMPORTED_MODULE_0__","_tool_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__","keyup","_k","vuedraggable_1","setTurn","getActor","actorId","order","show","option","effectIndex","syncEffect","_selection_info_vue_vue_type_template_id_674cf937_scoped_true___WEBPACK_IMPORTED_MODULE_0__","_selection_info_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__","bvh_1","GameStore","selectedLayerIndex","boardInitialized","roomName","roomCreator","locationName","vision_mode","filters","updatedLayers","Set","isDM","oldLoc","newLoc","getGridLayer","increase","unit_size","gridLayer","use_grid","vision_min_range","vision_max_range","full_fow","fow_opacity","fow_los","actualNote","context","commit","Action","_node_modules_mini_css_extract_plugin_dist_loader_js_ref_6_oneOf_1_0_node_modules_css_loader_index_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_6_oneOf_1_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_colorpicker_vue_vue_type_style_index_0_id_d32461a4_scoped_true_lang_css___WEBPACK_IMPORTED_MODULE_0__","_node_modules_mini_css_extract_plugin_dist_loader_js_ref_6_oneOf_1_0_node_modules_css_loader_index_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_6_oneOf_1_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_colorpicker_vue_vue_type_style_index_0_id_d32461a4_scoped_true_lang_css___WEBPACK_IMPORTED_MODULE_0___default","_node_modules_cache_loader_dist_cjs_js_ref_12_0_node_modules_thread_loader_dist_cjs_js_node_modules_ts_loader_index_js_ref_12_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_confirm_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__","_node_modules_cache_loader_dist_cjs_js_ref_12_0_node_modules_thread_loader_dist_cjs_js_node_modules_ts_loader_index_js_ref_12_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_confirm_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0___default","vision_source","refInFor","tool-selected","_node_modules_cache_loader_dist_cjs_js_ref_12_0_node_modules_thread_loader_dist_cjs_js_node_modules_ts_loader_index_js_ref_12_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_contextMenu_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__","_node_modules_cache_loader_dist_cjs_js_ref_12_0_node_modules_thread_loader_dist_cjs_js_node_modules_ts_loader_index_js_ref_12_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_contextMenu_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0___default","_note_vue_vue_type_template_id_7a3669fd_scoped_true___WEBPACK_IMPORTED_MODULE_0__","_note_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__","_initiative_vue_vue_type_template_id_af4dc61a_scoped_true___WEBPACK_IMPORTED_MODULE_0__","_initiative_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__","fow_1","fowplayers_1","grid_1","createLayer","layerInfo","zIndex","player_editable","setShapes","_labels_vue_vue_type_template_id_4697341e_scoped_true___WEBPACK_IMPORTED_MODULE_0__","_labels_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__","_node_modules_cache_loader_dist_cjs_js_ref_12_0_node_modules_thread_loader_dist_cjs_js_node_modules_ts_loader_index_js_ref_12_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_edit_dialog_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__","_node_modules_cache_loader_dist_cjs_js_ref_12_0_node_modules_thread_loader_dist_cjs_js_node_modules_ts_loader_index_js_ref_12_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_edit_dialog_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0___default","focusin","focusout","login","autocomplete","required","visibility","register","edit_dialog_vue_1","SelectionInfo","editDialog","ogValue","isNaN","edit-dialog","setRoomName","setRoomCreator","setInvitationCode","setDM","grid_colour","fow_colour","ruler_colour","setPanX","pan_x","setPanY","pan_y","setZoomDisplay","zoom_factor","active_layer","setLocationName","setCenterPosition","setAssets","locationInfo","setLocations","innerHTML","resetLayerInfo","reset","setBoardInitialized","realShape","setLabelVisibility","setLabelFilters"],"mappings":"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","file":"static/js/app.41dd580f.js","sourcesContent":[" \t// install a JSONP callback for chunk loading\n \tfunction webpackJsonpCallback(data) {\n \t\tvar chunkIds = data[0];\n \t\tvar moreModules = data[1];\n \t\tvar executeModules = data[2];\n\n \t\t// add \"moreModules\" to the modules object,\n \t\t// then flag all \"chunkIds\" as loaded and fire callback\n \t\tvar moduleId, chunkId, i = 0, resolves = [];\n \t\tfor(;i < chunkIds.length; i++) {\n \t\t\tchunkId = chunkIds[i];\n \t\t\tif(installedChunks[chunkId]) {\n \t\t\t\tresolves.push(installedChunks[chunkId][0]);\n \t\t\t}\n \t\t\tinstalledChunks[chunkId] = 0;\n \t\t}\n \t\tfor(moduleId in moreModules) {\n \t\t\tif(Object.prototype.hasOwnProperty.call(moreModules, moduleId)) {\n \t\t\t\tmodules[moduleId] = moreModules[moduleId];\n \t\t\t}\n \t\t}\n \t\tif(parentJsonpFunction) parentJsonpFunction(data);\n\n \t\twhile(resolves.length) {\n \t\t\tresolves.shift()();\n \t\t}\n\n \t\t// add entry modules from loaded chunk to deferred list\n \t\tdeferredModules.push.apply(deferredModules, executeModules || []);\n\n \t\t// run deferred modules when all chunks ready\n \t\treturn checkDeferredModules();\n \t};\n \tfunction checkDeferredModules() {\n \t\tvar result;\n \t\tfor(var i = 0; i < deferredModules.length; i++) {\n \t\t\tvar deferredModule = deferredModules[i];\n \t\t\tvar fulfilled = true;\n \t\t\tfor(var j = 1; j < deferredModule.length; j++) {\n \t\t\t\tvar depId = deferredModule[j];\n \t\t\t\tif(installedChunks[depId] !== 0) fulfilled = false;\n \t\t\t}\n \t\t\tif(fulfilled) {\n \t\t\t\tdeferredModules.splice(i--, 1);\n \t\t\t\tresult = __webpack_require__(__webpack_require__.s = deferredModule[0]);\n \t\t\t}\n \t\t}\n \t\treturn result;\n \t}\n\n \t// The module cache\n \tvar installedModules = {};\n\n \t// object to store loaded and loading chunks\n \t// undefined = chunk not loaded, null = chunk preloaded/prefetched\n \t// Promise = chunk loading, 0 = chunk loaded\n \tvar installedChunks = {\n \t\t\"app\": 0\n \t};\n\n \tvar deferredModules = [];\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"/\";\n\n \tvar jsonpArray = window[\"webpackJsonp\"] = window[\"webpackJsonp\"] || [];\n \tvar oldJsonpFunction = jsonpArray.push.bind(jsonpArray);\n \tjsonpArray.push = webpackJsonpCallback;\n \tjsonpArray = jsonpArray.slice();\n \tfor(var i = 0; i < jsonpArray.length; i++) webpackJsonpCallback(jsonpArray[i]);\n \tvar parentJsonpFunction = oldJsonpFunction;\n\n\n \t// add entry module to deferred list\n \tdeferredModules.push([0,\"chunk-vendors\"]);\n \t// run deferred modules when ready\n \treturn checkDeferredModules();\n","import { GlobalPoint, LocalPoint } from \"@/game/geom\";\nimport { BoundingRect } from \"@/game/shapes/boundingrect\";\nimport { Shape } from \"@/game/shapes/shape\";\nimport { g2l } from \"@/game/units\";\n\nexport class Text extends Shape {\n type = \"text\";\n text: string;\n font: string;\n angle: number;\n constructor(\n position: GlobalPoint,\n text: string,\n font: string,\n angle?: number,\n fillColour?: string,\n strokeColour?: string,\n uuid?: string,\n ) {\n super(position, fillColour, strokeColour, uuid);\n this.text = text;\n this.font = font;\n this.angle = angle || 0;\n }\n asDict() {\n return Object.assign(this.getBaseDict(), {\n text: this.text,\n font: this.font,\n angle: this.angle,\n });\n }\n get points() {\n return [[this.refPoint.x, this.refPoint.y]];\n }\n getBoundingBox(): BoundingRect {\n return new BoundingRect(this.refPoint, 5, 5); // TODO: fix this bounding box\n }\n draw(ctx: CanvasRenderingContext2D) {\n super.draw(ctx);\n ctx.font = this.font;\n ctx.fillStyle = this.fillColour;\n ctx.save();\n const dest = g2l(this.refPoint);\n ctx.translate(dest.x, dest.y);\n ctx.rotate(this.angle);\n ctx.textAlign = \"center\";\n this.getLines(ctx).map(line => ctx.fillText(line.text, line.x, line.y));\n ctx.restore();\n }\n contains(point: GlobalPoint): boolean {\n return false; // TODO\n }\n\n center(): GlobalPoint;\n center(centerPoint: GlobalPoint): void;\n center(centerPoint?: GlobalPoint): GlobalPoint | void {} // TODO\n visibleInCanvas(canvas: HTMLCanvasElement): boolean {\n return this.getBoundingBox().visibleInCanvas(canvas);\n } // TODO\n snapToGrid(): void {}\n resizeToGrid(): void {}\n resize(resizePoint: number, point: LocalPoint): void {}\n\n getMaxHeight(ctx: CanvasRenderingContext2D) {\n const lines = this.getLines(ctx);\n const lineHeight = 30;\n return lineHeight * lines.length;\n }\n\n getMaxWidth(ctx: CanvasRenderingContext2D) {\n const lines = this.getLines(ctx);\n const widths = lines.map(line => ctx.measureText(line.text).width);\n return Math.max(...widths);\n }\n\n private getLines(ctx: CanvasRenderingContext2D) {\n const lines = this.text.split(\"\\n\");\n const allLines: { text: string; x: number; y: number }[] = [];\n const maxWidth = ctx.canvas.width;\n const lineHeight = 30;\n const x = 0; // this.refPoint.x;\n let y = 0; // this.refPoint.y;\n\n for (const line of lines) {\n let targetLine = \"\";\n const words = line.split(\" \");\n for (const word of words) {\n const testLine = targetLine + word + \" \";\n const metrics = ctx.measureText(testLine);\n const testWidth = metrics.width;\n if (testWidth > maxWidth) {\n ctx.fillText(targetLine, x, y);\n allLines.push({ text: targetLine, x, y });\n targetLine = word + \" \";\n y += lineHeight;\n } else {\n targetLine = testLine;\n }\n }\n allLines.push({ text: targetLine, x, y });\n y += lineHeight;\n }\n return allLines;\n }\n}\n","import mod from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./selection_info.vue?vue&type=style&index=0&id=674cf937&scoped=true&lang=css&\"; export default mod; export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./selection_info.vue?vue&type=style&index=0&id=674cf937&scoped=true&lang=css&\"","import { render, staticRenderFns } from \"./shapecontext.vue?vue&type=template&id=759e5a8a&scoped=true&\"\nimport script from \"./shapecontext.vue?vue&type=script&lang=ts&\"\nexport * from \"./shapecontext.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./shapecontext.vue?vue&type=style&index=0&id=759e5a8a&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"759e5a8a\",\n null\n \n)\n\ncomponent.options.__file = \"shapecontext.vue\"\nexport default component.exports","import mod from \"-!../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../node_modules/cache-loader/dist/cjs.js??ref--0-0!../node_modules/vue-loader/lib/index.js??vue-loader-options!./App.vue?vue&type=style&index=0&lang=css&\"; export default mod; export * from \"-!../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../node_modules/cache-loader/dist/cjs.js??ref--0-0!../node_modules/vue-loader/lib/index.js??vue-loader-options!./App.vue?vue&type=style&index=0&lang=css&\"","import mod from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./prompt.vue?vue&type=style&index=0&id=0602c2e6&scoped=true&lang=css&\"; export default mod; export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./prompt.vue?vue&type=style&index=0&id=0602c2e6&scoped=true&lang=css&\"","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nimport tinycolor from \"tinycolor2\";\nimport Vue from \"vue\";\nimport Component from \"vue-class-component\";\n\nimport { Chrome } from \"vue-color\";\nimport { Prop } from \"vue-property-decorator\";\n\n@Component({\n components: {\n \"chrome-picker\": Chrome,\n },\n})\nexport default class ColorPicker extends Vue {\n @Prop(String) color!: string;\n @Prop(Boolean) disabled!: boolean;\n\n display = false;\n left = 0;\n top = 0;\n transparent = false;\n\n mounted() {\n this.transparent = (this.$refs.chromePicker).val.rgba.a === 0;\n this.setPosition();\n }\n\n open() {\n if (this.display || this.disabled) return; // click on the picker itself\n this.setPosition();\n this.display = true;\n this.$nextTick(() => this.$children[0].$el.focus());\n }\n updateColor(value: { rgba: { r: number; g: number; b: number; a: number } }) {\n this.transparent = value.rgba.a === 0;\n const newColor = tinycolor(value.rgba).toRgbString();\n this.$emit(\"update:color\", newColor);\n this.$emit(\"input\", newColor);\n }\n closePicker() {\n this.display = false;\n this.$emit(\"change\", this.color);\n }\n setPosition() {\n const rect = this.$el.getBoundingClientRect();\n // 224 is the width of the picker, 242 the height\n if (rect.right + 224 > window.innerWidth) this.left = rect.left - 224;\n else this.left = rect.right;\n if (rect.bottom + 242 > window.innerHeight) this.top = rect.top - 242;\n else this.top = rect.bottom;\n }\n}\n","import { render, staticRenderFns } from \"./game.vue?vue&type=template&id=05b88da7&scoped=true&\"\nimport script from \"./game.vue?vue&type=script&lang=ts&\"\nexport * from \"./game.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./game.vue?vue&type=style&index=0&lang=css&\"\nimport style1 from \"./game.vue?vue&type=style&index=1&id=05b88da7&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"05b88da7\",\n null\n \n)\n\ncomponent.options.__file = \"game.vue\"\nexport default component.exports","import io from \"socket.io-client\";\nimport { Route } from \"vue-router\";\n\nexport const socket = io(location.protocol + \"//\" + location.host + \"/planarally\", { autoConnect: false });\n\nexport function createConnection(route: Route) {\n socket.io.opts.query = `user=${route.params.creator}&room=${route.params.room}`;\n socket.connect();\n}\n","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nimport Vue from \"vue\";\nimport Component from \"vue-class-component\";\n\nimport AssetContextMenu from \"@/assetManager/contextMenu.vue\";\nimport ConfirmDialog from \"@/core/components/modals/confirm.vue\";\nimport Prompt from \"@/core/components/modals/prompt.vue\";\n\nimport { socket } from \"@/assetManager/socket\";\nimport { assetStore } from \"@/assetManager/store\";\nimport { Asset } from \"@/core/comm/types\";\nimport { uuidv4 } from \"@/core/utils\";\n\n@Component({\n components: {\n Prompt,\n ConfirmDialog,\n AssetContextMenu,\n },\n beforeRouteEnter(to, from, next) {\n socket.connect();\n next();\n },\n beforeRouteLeave(to, from, next) {\n socket.disconnect();\n next();\n },\n})\nexport default class AssetManager extends Vue {\n path: number[] = [];\n draggingSelection = false;\n\n get folders(): number[] {\n return assetStore.folders;\n }\n\n get files(): number[] {\n return assetStore.files;\n }\n\n get selected(): number[] {\n return assetStore.selected;\n }\n\n get idMap() {\n return assetStore.idMap;\n }\n\n get currentFolder(): number {\n if (this.path.length) return this.path[this.path.length - 1];\n return assetStore.root;\n }\n get parentFolder(): number {\n let parent = this.path[this.path.length - 2];\n if (parent === undefined) parent = assetStore.root;\n return parent;\n }\n get firstSelectedFile(): Asset | null {\n for (const sel of assetStore.selected) {\n if (assetStore.idMap.get(sel)!.file_hash) {\n return assetStore.idMap.get(sel)!;\n }\n }\n return null;\n }\n changeDirectory(nextFolder: number) {\n if (nextFolder < 0) this.path.pop();\n else this.path.push(nextFolder);\n assetStore.clearSelected();\n socket.emit(\"Folder.Get\", this.currentFolder);\n }\n createDirectory() {\n const name = window.prompt(\"New folder name\");\n if (name !== null) {\n socket.emit(\"Folder.Create\", { name, parent: this.currentFolder });\n }\n }\n moveInode(inode: number, target: number) {\n if (assetStore.files.includes(inode)) assetStore.files.splice(assetStore.files.indexOf(inode), 1);\n else assetStore.folders.splice(assetStore.folders.indexOf(inode), 1);\n assetStore.idMap.delete(inode);\n socket.emit(\"Inode.Move\", { inode, target });\n }\n select(event: MouseEvent, inode: number) {\n if (event.shiftKey && assetStore.selected.length > 0) {\n const inodes = [...assetStore.files, ...assetStore.folders];\n const start = inodes.indexOf(assetStore.selected[assetStore.selected.length - 1]);\n const end = inodes.indexOf(inode);\n for (let i = start; i !== end; start < end ? i++ : i--) {\n if (i === start) continue;\n assetStore.selected.push(inodes[i]);\n }\n assetStore.selected.push(inodes[end]);\n } else {\n if (!event.ctrlKey) {\n assetStore.clearSelected();\n }\n assetStore.selected.push(inode);\n }\n }\n startDrag(event: DragEvent, file: number) {\n if (event.dataTransfer === null) return;\n event.dataTransfer.setData(\"Hack\", \"ittyHack\");\n event.dataTransfer.dropEffect = \"move\";\n if (!assetStore.selected.includes(file)) assetStore.selected.push(file);\n this.draggingSelection = true;\n }\n moveDrag(event: DragEvent) {\n if ((event.target).classList.contains(\"folder\"))\n (event.target).classList.add(\"inode-selected\");\n }\n leaveDrag(event: DragEvent) {\n if ((event.target).classList.contains(\"folder\"))\n (event.target).classList.remove(\"inode-selected\");\n }\n stopDrag(event: DragEvent, target: number) {\n (event.target).classList.remove(\"inode-selected\");\n if (this.draggingSelection) {\n if (\n (target === assetStore.root || assetStore.folders.includes(target)) &&\n !assetStore.selected.includes(target)\n ) {\n for (const inode of assetStore.selected) {\n this.moveInode(inode, target);\n }\n }\n assetStore.clearSelected();\n } else if (event.dataTransfer && event.dataTransfer.files.length > 0) {\n this.upload(event.dataTransfer.files, target);\n }\n this.draggingSelection = false;\n }\n prepareUpload() {\n document.getElementById(\"files\")!.click();\n }\n upload(fls?: FileList, target?: number) {\n const files = (document.getElementById(\"files\")!).files;\n if (fls === undefined) {\n if (files) fls = files;\n else return;\n }\n if (target === undefined) target = this.currentFolder;\n const CHUNK_SIZE = 100000;\n for (const file of fls) {\n const uuid = uuidv4();\n const slices = Math.ceil(file.size / CHUNK_SIZE);\n for (let slice = 0; slice < slices; slice++) {\n const fr = new FileReader();\n fr.readAsArrayBuffer(\n file.slice(\n slice * CHUNK_SIZE,\n slice * CHUNK_SIZE + Math.min(CHUNK_SIZE, file.size - slice * CHUNK_SIZE),\n ),\n );\n fr.onload = e => {\n socket.emit(\"Asset.Upload\", {\n name: file.name,\n directory: target,\n data: fr.result,\n slice,\n totalSlices: slices,\n uuid,\n });\n };\n }\n }\n }\n}\n","import { render, staticRenderFns } from \"./asset_node.vue?vue&type=template&id=6d718094&scoped=true&\"\nimport script from \"./asset_node.vue?vue&type=script&lang=ts&\"\nexport * from \"./asset_node.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./asset_node.vue?vue&type=style&index=0&id=6d718094&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"6d718094\",\n null\n \n)\n\ncomponent.options.__file = \"asset_node.vue\"\nexport default component.exports","import mod from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./selectcontext.vue?vue&type=style&index=0&id=44a31e42&scoped=true&lang=css&\"; export default mod; export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./selectcontext.vue?vue&type=style&index=0&id=44a31e42&scoped=true&lang=css&\"","import { render, staticRenderFns } from \"./login.vue?vue&type=template&id=bc30fc14&scoped=true&\"\nimport script from \"./login.vue?vue&type=script&lang=ts&\"\nexport * from \"./login.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./login.vue?vue&type=style&index=0&id=bc30fc14&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"bc30fc14\",\n null\n \n)\n\ncomponent.options.__file = \"login.vue\"\nexport default component.exports","import { layerManager } from \"@/game/layers/manager\";\nimport { g2lx, g2ly } from \"@/game/units\";\nimport { EdgeIterator, TDS } from \"./tds\";\nimport { ccw, cw } from \"./triag\";\n\nexport function drawPolygon(polygon: number[][], colour?: string) {\n const dl = layerManager.getLayer(\"draw\");\n if (dl === undefined) return;\n const ctx = dl.ctx;\n ctx.lineJoin = \"round\";\n // ctx.clearRect(0, 0, window.innerWidth, window.innerHeight);\n ctx.lineJoin = \"round\";\n ctx.beginPath();\n ctx.strokeStyle =\n colour === undefined ? `rgb(${Math.random() * 255}, ${Math.random() * 255}, ${Math.random() * 255})` : colour;\n ctx.moveTo(g2lx(polygon[0][0]), g2ly(polygon[0][1]));\n for (const point of polygon) {\n ctx.lineTo(g2lx(point[0]), g2ly(point[1]));\n }\n ctx.closePath();\n ctx.stroke();\n}\n\nexport function drawPolygonL(polygon: number[][], colour?: string) {\n const dl = layerManager.getLayer(\"draw\");\n if (dl === undefined) return;\n const ctx = dl.ctx;\n ctx.lineJoin = \"round\";\n // ctx.clearRect(0, 0, window.innerWidth, window.innerHeight);\n ctx.lineJoin = \"round\";\n ctx.beginPath();\n ctx.strokeStyle =\n colour === undefined ? `rgb(${Math.random() * 255}, ${Math.random() * 255}, ${Math.random() * 255})` : colour;\n ctx.moveTo(polygon[0][0], polygon[0][1]);\n for (const point of polygon) {\n ctx.lineTo(point[0], point[1]);\n }\n ctx.closePath();\n ctx.stroke();\n}\n\nfunction x(xx: number, local: boolean) {\n if (local) return xx;\n else return g2lx(xx);\n}\n\nfunction y(yy: number, local: boolean) {\n if (local) return yy;\n else return g2ly(yy);\n}\n\nlet I = 0;\nlet J = 0;\n\nfunction drl(ctx: CanvasRenderingContext2D, from: number[], to: number[], constrained: boolean, local: boolean) {\n // J++;\n // if (constrained) {\n // I++;\n // console.log(\"*\", from, to);\n // } else {\n // console.log(\" \", from, to);\n // }\n ctx.beginPath();\n ctx.strokeStyle = constrained ? \"rgba(255, 0, 0, 0.30)\" : \"rgba(0, 0, 0, 0.30)\";\n ctx.moveTo(x(from[0], local), y(from[1], local));\n ctx.lineTo(x(to[0], local), y(to[1], local));\n ctx.closePath();\n ctx.stroke();\n}\n\nfunction drawPolygonT(tds: TDS, local = true, clear = true, logs: 0 | 1 | 2 = 0) {\n I = 0;\n J = 0;\n let T = 0;\n const dl = layerManager.getLayer(\"draw\");\n if (dl === undefined) return;\n const ctx = dl.ctx;\n if (clear) ctx.clearRect(0, 0, 2000, 1000);\n ctx.lineJoin = \"round\";\n // ctx.clearRect(0, 0, window.innerWidth, window.innerHeight);\n ctx.lineJoin = \"round\";\n const ei = new EdgeIterator(tds);\n while (ei.valid) {\n ei.next();\n ei.collect();\n }\n ei.collect();\n do {\n const fromP = ei.edge.first!.vertices[ccw(ei.edge.second)]!.point!;\n const toP = ei.edge.first!.vertices[cw(ei.edge.second)]!.point!;\n if (logs > 0) {\n if (fromP[0] === -Infinity || toP[0] === -Infinity) {\n ei.next();\n continue;\n }\n J++;\n if (ei.edge.first!.constraints[ei.edge.second]) {\n I++;\n if (logs === 2) console.log(`Edge: (*) ${fromP} > ${toP}`);\n } else if (logs === 2) console.log(`Edge: ${fromP} > ${toP}`);\n }\n do {\n ei.next();\n ei.collect();\n } while (ei.valid);\n } while (ei.pos !== null);\n for (const t of tds.triangles) {\n if (t.isInfinite()) continue;\n T++;\n const po = [];\n ctx.fillStyle = \"red\";\n if (t.vertices[0] !== undefined) {\n po.push(t.vertices[0]!.point);\n ctx.beginPath();\n ctx.arc(x(t.vertices[0]!.point![0], local), y(t.vertices[0]!.point![1], local), 5, 0, 2 * Math.PI);\n ctx.closePath();\n ctx.fill();\n }\n if (t.vertices[1] !== undefined) {\n po.push(t.vertices[1]!.point);\n ctx.arc(x(t.vertices[1]!.point![0], local), y(t.vertices[1]!.point![1], local), 5, 0, 2 * Math.PI);\n ctx.closePath();\n ctx.fill();\n }\n if (t.vertices[2] !== undefined) {\n po.push(t.vertices[2]!.point);\n ctx.arc(x(t.vertices[2]!.point![0], local), y(t.vertices[2]!.point![1], local), 5, 0, 2 * Math.PI);\n ctx.closePath();\n ctx.fill();\n }\n if (logs === 2) console.log(\"[T] \", ...po, t.constraints);\n\n ctx.moveTo(x(t.vertices[0]!.point![0], local), y(t.vertices[0]!.point![1], local));\n if (t.vertices[0] !== undefined && t.vertices[1] !== undefined)\n drl(ctx, t.vertices[0]!.point!, t.vertices[1]!.point!, t.constraints[2], local);\n if (t.vertices[1] !== undefined && t.vertices[2] !== undefined)\n drl(ctx, t.vertices[1]!.point!, t.vertices[2]!.point!, t.constraints[0], local);\n if (t.vertices[2] !== undefined && t.vertices[0] !== undefined)\n drl(ctx, t.vertices[2]!.point!, t.vertices[0]!.point!, t.constraints[1], local);\n }\n if (logs > 0) {\n console.log(`Edges: ${I}/${J}`);\n console.log(`Faces: ${T}`);\n }\n}\n\n(window).DP = drawPolygon;\n(window).DPL = drawPolygonL;\n(window).DPT = drawPolygonT;\n","import { render, staticRenderFns } from \"./accordion.vue?vue&type=template&id=0bf2b7ba&scoped=true&\"\nimport script from \"./accordion.vue?vue&type=script&lang=ts&\"\nexport * from \"./accordion.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./accordion.vue?vue&type=style&index=0&id=0bf2b7ba&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"0bf2b7ba\",\n null\n \n)\n\ncomponent.options.__file = \"accordion.vue\"\nexport default component.exports","import mod from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./tool.vue?vue&type=style&index=0&lang=css&\"; export default mod; export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./tool.vue?vue&type=style&index=0&lang=css&\"","import * as tinycolor from \"tinycolor2\";\n\nimport { calcFontScale } from \"@/core/utils\";\nimport { InitiativeData } from \"@/game/comm/types/general\";\nimport { ServerCircularToken } from \"@/game/comm/types/shapes\";\nimport { GlobalPoint } from \"@/game/geom\";\nimport { Circle } from \"@/game/shapes/circle\";\nimport { gameStore } from \"@/game/store\";\nimport { g2l, g2lz } from \"@/game/units\";\n\nexport class CircularToken extends Circle {\n type = \"circulartoken\";\n text: string;\n font: string;\n constructor(\n center: GlobalPoint,\n r: number,\n text: string,\n font: string,\n fillColour?: string,\n strokeColour?: string,\n uuid?: string,\n ) {\n super(center, r, fillColour, strokeColour, uuid);\n this.text = text;\n this.font = font;\n }\n asDict(): ServerCircularToken {\n return Object.assign(this.getBaseDict(), {\n radius: this.r,\n text: this.text,\n font: this.font,\n });\n }\n fromDict(data: ServerCircularToken) {\n super.fromDict(data);\n this.r = data.radius;\n this.text = data.text;\n this.font = data.font;\n }\n draw(ctx: CanvasRenderingContext2D) {\n super.draw(ctx);\n ctx.font = this.font;\n ctx.save();\n const dest = g2l(this.center());\n ctx.textAlign = \"center\";\n ctx.textBaseline = \"middle\";\n const xs = calcFontScale(ctx, this.text, g2lz(this.r), g2lz(this.r));\n const ys = 0;\n ctx.transform(xs, ys, -ys, xs, dest.x, dest.y);\n ctx.fillStyle = tinycolor.mostReadable(this.fillColour, [\"#000\", \"#fff\"]).toHexString();\n ctx.fillText(this.text, 0, 0);\n ctx.restore();\n }\n getInitiativeRepr(): InitiativeData {\n return {\n uuid: this.uuid,\n visible: !gameStore.IS_DM,\n group: false,\n source: this.name === \"\" || this.name === \"Unknown shape\" ? this.text : this.name,\n has_img: false,\n effects: [],\n index: Infinity,\n };\n }\n}\n","import { GlobalPoint, LocalPoint } from \"@/game/geom\";\nimport { Layer } from \"@/game/layers/layer\";\nimport { layerManager } from \"@/game/layers/manager\";\nimport { Rect } from \"@/game/shapes/rect\";\nimport { Text } from \"@/game/shapes/text\";\nimport { gameStore } from \"@/game/store\";\nimport { l2g } from \"@/game/units\";\n\nexport class AnnotationManager {\n annotationText: Text;\n annotationRect: Rect;\n layer: Layer | undefined;\n shown: boolean = false;\n\n constructor() {\n const origin = new GlobalPoint(0, 0);\n this.annotationText = new Text(origin, \"\", \"bold 20px serif\", 0, \"rgba(230, 230, 230, 1)\");\n this.annotationRect = new Rect(origin, 0, 0, \"rgba(0, 0, 0, 0.6)\");\n }\n\n setActiveText(text: string) {\n if (this.layer === undefined) {\n if (layerManager.hasLayer(\"draw\")) {\n this.layer = layerManager.getLayer(\"draw\")!;\n this.layer.addShape(this.annotationRect, false);\n this.layer.addShape(this.annotationText, false);\n } else {\n console.warn(\"There is no draw layer to draw annotations on!\");\n return;\n }\n }\n this.shown = text !== \"\";\n this.annotationText.refPoint = l2g(new LocalPoint(this.layer.canvas.width / 2, 50));\n this.annotationText.text = text;\n const width = this.shown ? this.annotationText.getMaxWidth(this.layer.ctx) + 10 : 0;\n const height = this.shown ? this.annotationText.getMaxHeight(this.layer.ctx) + 10 : 0;\n this.annotationRect.refPoint = l2g(new LocalPoint(this.layer.canvas.width / 2 - width / 2, 30));\n this.annotationRect.w = width / gameStore.zoomFactor;\n this.annotationRect.h = height / gameStore.zoomFactor;\n this.layer.invalidate(true);\n }\n}\n","import { render, staticRenderFns } from \"./menu.vue?vue&type=template&id=aaf3f05e&scoped=true&\"\nimport script from \"./menu.vue?vue&type=script&lang=ts&\"\nexport * from \"./menu.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./menu.vue?vue&type=style&index=0&id=aaf3f05e&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"aaf3f05e\",\n null\n \n)\n\ncomponent.options.__file = \"menu.vue\"\nexport default component.exports","import { render, staticRenderFns } from \"./contextmenu.vue?vue&type=template&id=256dde9c&\"\nimport script from \"./contextmenu.vue?vue&type=script&lang=ts&\"\nexport * from \"./contextmenu.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./contextmenu.vue?vue&type=style&index=0&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\ncomponent.options.__file = \"contextmenu.vue\"\nexport default component.exports","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/ts-loader/index.js??ref--12-2!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./note.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/ts-loader/index.js??ref--12-2!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./note.vue?vue&type=script&lang=ts&\"","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/ts-loader/index.js??ref--12-2!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./login.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/ts-loader/index.js??ref--12-2!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./login.vue?vue&type=script&lang=ts&\"","import {\n ServerAsset,\n ServerCircle,\n ServerCircularToken,\n ServerLine,\n ServerMultiLine,\n ServerPolygon,\n ServerRect,\n ServerShape,\n ServerText,\n} from \"@/game/comm/types/shapes\";\nimport { GlobalPoint } from \"@/game/geom\";\nimport { layerManager } from \"@/game/layers/manager\";\nimport { Asset } from \"@/game/shapes/asset\";\nimport { Circle } from \"@/game/shapes/circle\";\nimport { CircularToken } from \"@/game/shapes/circulartoken\";\nimport { Line } from \"@/game/shapes/line\";\nimport { MultiLine } from \"@/game/shapes/multiline\";\nimport { Rect } from \"@/game/shapes/rect\";\nimport { Shape } from \"@/game/shapes/shape\";\nimport { Text } from \"@/game/shapes/text\";\nimport { Polygon } from \"./polygon\";\n\nexport function createShapeFromDict(shape: ServerShape) {\n let sh: Shape;\n\n // A fromJSON and toJSON on Shape would be cleaner but ts does not allow for static abstracts so yeah.\n\n // Shape Type specifics\n\n const refPoint = new GlobalPoint(shape.x, shape.y);\n if (shape.type_ === \"rect\") {\n const rect = shape;\n sh = new Rect(refPoint, rect.width, rect.height, rect.fill_colour, rect.stroke_colour, rect.uuid);\n } else if (shape.type_ === \"circle\") {\n const circ = shape;\n sh = new Circle(refPoint, circ.radius, circ.fill_colour, circ.stroke_colour, circ.uuid);\n } else if (shape.type_ === \"circulartoken\") {\n const token = shape;\n sh = new CircularToken(\n refPoint,\n token.radius,\n token.text,\n token.font,\n token.fill_colour,\n token.stroke_colour,\n token.uuid,\n );\n } else if (shape.type_ === \"line\") {\n const line = shape;\n sh = new Line(refPoint, new GlobalPoint(line.x2, line.y2), line.line_width, line.stroke_colour, line.uuid);\n } else if (shape.type_ === \"multiline\") {\n const multiline = shape;\n sh = new MultiLine(\n refPoint,\n multiline.points.map(p => new GlobalPoint(p.x, p.y)),\n multiline.line_width,\n multiline.stroke_colour,\n multiline.uuid,\n );\n } else if (shape.type_ === \"polygon\") {\n const polygon = shape;\n sh = new Polygon(\n refPoint,\n polygon.vertices.map(v => new GlobalPoint(v.x, v.y)),\n polygon.fill_colour,\n polygon.stroke_colour,\n polygon.uuid,\n );\n } else if (shape.type_ === \"text\") {\n const text = shape;\n sh = new Text(refPoint, text.text, text.font, text.angle, text.fill_colour, text.stroke_colour, text.uuid);\n } else if (shape.type_ === \"assetrect\") {\n const asset = shape;\n const img = new Image(asset.width, asset.height);\n if (asset.src.startsWith(\"http\")) img.src = new URL(asset.src).pathname;\n else img.src = asset.src;\n sh = new Asset(img, refPoint, asset.width, asset.height, asset.uuid);\n img.onload = () => {\n layerManager.getLayer(shape.layer)!.invalidate(false);\n };\n } else {\n return undefined;\n }\n sh.fromDict(shape);\n return sh;\n}\n","import mod from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./confirm.vue?vue&type=style&index=0&id=1883e207&scoped=true&lang=css&\"; export default mod; export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./confirm.vue?vue&type=style&index=0&id=1883e207&scoped=true&lang=css&\"","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('SelectContext',{ref:\"selectcontext\"})}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","export * from \"-!cache-loader?{\\\"cacheDirectory\\\":\\\"node_modules/.cache/vue-loader\\\",\\\"cacheIdentifier\\\":\\\"74f43d04-vue-loader-template\\\"}!../../../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./select.vue?vue&type=template&id=048b3482&\"","import tinycolor from \"tinycolor2\";\n\nimport { uuidv4 } from \"@/core/utils\";\nimport { socket } from \"@/game/api/socket\";\nimport { aurasFromServer, aurasToServer } from \"@/game/comm/conversion/aura\";\nimport { InitiativeData } from \"@/game/comm/types/general\";\nimport { ServerShape } from \"@/game/comm/types/shapes\";\nimport { GlobalPoint, LocalPoint, Vector } from \"@/game/geom\";\nimport { layerManager } from \"@/game/layers/manager\";\nimport { BoundingRect } from \"@/game/shapes/boundingrect\";\nimport { gameStore } from \"@/game/store\";\nimport { g2l, g2lr, g2lx, g2ly, g2lz } from \"@/game/units\";\n\nexport abstract class Shape {\n // Used to create class instance from server shape data\n abstract readonly type: string;\n // The unique ID of this shape\n readonly uuid: string;\n // The layer the shape is currently on\n layer!: string;\n\n // A reference point regarding that specific shape's structure\n protected _refPoint: GlobalPoint;\n\n // Fill colour of the shape\n fillColour: string = \"#000\";\n strokeColour: string = \"rgba(0,0,0,0)\";\n // The optional name associated with the shape\n name = \"Unknown shape\";\n nameVisible = true;\n\n // Associated trackers/auras/owners\n trackers: Tracker[] = [];\n auras: Aura[] = [];\n labels: Label[] = [];\n protected _owners: string[] = [];\n\n // Block light sources\n visionObstruction = false;\n // Prevent shapes from overlapping with this shape\n movementObstruction = false;\n // Does this shape represent a playable token\n isToken = false;\n // Show a highlight box\n showHighlight = false;\n\n // Mouseover annotation\n annotation: string = \"\";\n\n // Draw modus to use\n globalCompositeOperation: string = \"source-over\";\n\n // Additional options for specialized uses\n options: Map = new Map();\n\n constructor(refPoint: GlobalPoint, fillColour?: string, strokeColour?: string, uuid?: string) {\n this._refPoint = refPoint;\n this.uuid = uuid || uuidv4();\n if (fillColour !== undefined) this.fillColour = fillColour;\n if (strokeColour !== undefined) this.strokeColour = strokeColour;\n }\n\n get refPoint() {\n return this._refPoint;\n }\n set refPoint(point: GlobalPoint) {\n this._refPoint = point;\n }\n\n abstract getBoundingBox(): BoundingRect;\n\n // If inWorldCoord is\n abstract contains(point: GlobalPoint): boolean;\n\n abstract center(): GlobalPoint;\n abstract center(centerPoint: GlobalPoint): void;\n visibleInCanvas(canvas: HTMLCanvasElement): boolean {\n // for (const aura of this.auras) {\n // if (aura.value > 0) {\n // const auraCircle = new Circle(this.center(), aura.value);\n // if (auraCircle.visibleInCanvas(canvas)) return true;\n // }\n // }\n return false;\n }\n\n // Code to snap a shape to the grid\n // This is shape dependent as the shape refPoints are shape specific in\n abstract snapToGrid(): void;\n abstract resizeToGrid(): void;\n abstract resize(resizePoint: number, point: LocalPoint): void;\n\n abstract get points(): number[][];\n\n getPointIndex(p: GlobalPoint, delta = 0): number {\n for (const [idx, point] of this.points.entries()) {\n if (Math.abs(p.x - point[0]) <= delta && Math.abs(p.y - point[1]) <= delta) return idx;\n }\n return -1;\n }\n\n getPointOrientation(i: number): Vector {\n const prev = GlobalPoint.fromArray(this.points[(this.points.length + i - 1) % this.points.length]);\n const point = GlobalPoint.fromArray(this.points[i]);\n const next = GlobalPoint.fromArray(this.points[(i + 1) % this.points.length]);\n const vec = next.subtract(prev);\n const mid = prev.add(vec.multiply(0.5));\n return point.subtract(mid).normalize();\n }\n\n invalidate(skipLightUpdate: boolean) {\n const l = layerManager.getLayer(this.layer);\n if (l) l.invalidate(skipLightUpdate);\n }\n\n checkVisionSources(recalculate = true) {\n const self = this;\n const obstructionIndex = gameStore.visionBlockers.indexOf(this.uuid);\n let update = false;\n if (this.visionObstruction && obstructionIndex === -1) {\n gameStore.visionBlockers.push(this.uuid);\n update = true;\n } else if (!this.visionObstruction && obstructionIndex >= 0) {\n gameStore.visionBlockers.splice(obstructionIndex, 1);\n update = true;\n }\n if (update && recalculate) gameStore.recalculateVision();\n\n // Check if the visionsource auras are in the gameManager\n this.auras.forEach(au => {\n const ls = gameStore.visionSources;\n const i = ls.findIndex(o => o.aura === au.uuid);\n if (au.visionSource && i === -1) {\n ls.push({ shape: self.uuid, aura: au.uuid });\n } else if (!au.visionSource && i >= 0) {\n ls.splice(i, 1);\n }\n });\n // Check if anything in the gameManager referencing this shape is in fact still a visionsource\n for (let i = gameStore.visionSources.length - 1; i >= 0; i--) {\n const ls = gameStore.visionSources[i];\n if (ls.shape === self.uuid) {\n if (!self.auras.some(a => a.uuid === ls.aura && a.visionSource)) gameStore.visionSources.splice(i, 1);\n }\n }\n }\n\n setMovementBlock(blocksMovement: boolean, recalculate = true) {\n this.movementObstruction = blocksMovement || false;\n const obstructionIndex = gameStore.movementblockers.indexOf(this.uuid);\n let update = false;\n if (this.movementObstruction && obstructionIndex === -1) {\n gameStore.movementblockers.push(this.uuid);\n update = true;\n } else if (!this.movementObstruction && obstructionIndex >= 0) {\n gameStore.movementblockers.splice(obstructionIndex, 1);\n update = true;\n }\n if (update && recalculate) gameStore.recalculateMovement();\n }\n\n setIsToken(isToken: boolean) {\n this.isToken = isToken;\n if (this.ownedBy()) {\n const i = gameStore.ownedtokens.indexOf(this.uuid);\n if (this.isToken && i === -1) gameStore.ownedtokens.push(this.uuid);\n else if (!this.isToken && i >= 0) gameStore.ownedtokens.splice(i, 1);\n }\n }\n\n abstract asDict(): ServerShape;\n getBaseDict(): ServerShape {\n return {\n type_: this.type,\n uuid: this.uuid,\n x: this.refPoint.x,\n y: this.refPoint.y,\n layer: this.layer,\n draw_operator: this.globalCompositeOperation,\n movement_obstruction: this.movementObstruction,\n vision_obstruction: this.visionObstruction,\n auras: aurasToServer(this.auras),\n trackers: this.trackers,\n labels: this.labels,\n owners: this._owners,\n fill_colour: this.fillColour,\n stroke_colour: this.strokeColour,\n name: this.name,\n name_visible: this.nameVisible,\n annotation: this.annotation,\n is_token: this.isToken,\n options: JSON.stringify([...this.options]),\n };\n }\n fromDict(data: ServerShape) {\n this.layer = data.layer;\n this.globalCompositeOperation = data.draw_operator;\n this.movementObstruction = data.movement_obstruction;\n this.visionObstruction = data.vision_obstruction;\n this.auras = aurasFromServer(data.auras);\n this.trackers = data.trackers;\n this.labels = data.labels;\n this._owners = data.owners;\n this.isToken = data.is_token;\n this.nameVisible = data.name_visible;\n if (data.annotation) this.annotation = data.annotation;\n if (data.name) this.name = data.name;\n if (data.options) this.options = new Map(JSON.parse(data.options));\n }\n\n draw(ctx: CanvasRenderingContext2D) {\n if (this.globalCompositeOperation !== undefined) ctx.globalCompositeOperation = this.globalCompositeOperation;\n else ctx.globalCompositeOperation = \"source-over\";\n if (this.showHighlight) {\n const bbox = this.getBoundingBox();\n ctx.strokeStyle = \"red\";\n ctx.strokeRect(g2lx(bbox.topLeft.x) - 5, g2ly(bbox.topLeft.y) - 5, g2lz(bbox.w) + 10, g2lz(bbox.h) + 10);\n }\n }\n\n drawAuras(ctx: CanvasRenderingContext2D) {\n for (const aura of this.auras) {\n if (aura.value === 0 && aura.dim === 0) return;\n ctx.beginPath();\n\n const loc = g2l(this.center());\n const innerRange = g2lr(aura.value + aura.dim);\n\n if (aura.dim === 0) ctx.fillStyle = aura.colour;\n else {\n const gradient = ctx.createRadialGradient(\n loc.x,\n loc.y,\n g2lr(aura.value),\n loc.x,\n loc.y,\n g2lr(aura.value + aura.dim),\n );\n const tc = tinycolor(aura.colour);\n ctx.fillStyle = gradient;\n gradient.addColorStop(0, aura.colour);\n gradient.addColorStop(1, tc.setAlpha(0).toRgbString());\n }\n if (!aura.visionSource || aura.lastPath === undefined) {\n ctx.arc(loc.x, loc.y, innerRange, 0, 2 * Math.PI);\n ctx.fill();\n } else {\n try {\n ctx.fill(aura.lastPath);\n } catch (e) {\n ctx.arc(loc.x, loc.y, innerRange, 0, 2 * Math.PI);\n ctx.fill();\n console.warn(e);\n }\n }\n }\n }\n\n getInitiativeRepr(): InitiativeData {\n return {\n uuid: this.uuid,\n visible: !gameStore.IS_DM,\n group: false,\n source: this.name,\n has_img: false,\n effects: [],\n index: Infinity,\n };\n }\n\n moveLayer(layer: string, sync: boolean) {\n const oldLayer = layerManager.getLayer(this.layer);\n const newLayer = layerManager.getLayer(layer);\n if (oldLayer === undefined || newLayer === undefined) return;\n this.layer = layer;\n // Update layer shapes\n oldLayer.shapes.splice(oldLayer.shapes.indexOf(this), 1);\n newLayer.shapes.push(this);\n // Revalidate layers (light should at most be redone once)\n oldLayer.invalidate(true);\n newLayer.invalidate(false);\n // Sync!\n if (sync) socket.emit(\"Shape.Layer.Change\", { uuid: this.uuid, layer });\n }\n\n get owners() {\n return Object.freeze(this._owners.slice());\n }\n\n ownedBy(username?: string) {\n if (username === undefined) username = gameStore.username;\n return gameStore.IS_DM || this._owners.includes(username);\n }\n\n addOwner(owner: string) {\n if (!this._owners.includes(owner)) this._owners.push(owner);\n }\n\n updateOwner(oldValue: string, newValue: string) {\n const ownerIndex = this._owners.findIndex(o => o === oldValue);\n if (ownerIndex >= 0) this._owners.splice(ownerIndex, 1, newValue);\n else this.addOwner(newValue);\n }\n\n removeOwner(owner: string) {\n const ownerIndex = this._owners.findIndex(o => o === owner);\n this._owners.splice(ownerIndex, 1);\n }\n}\n","import mod from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/ts-loader/index.js??ref--12-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./prompt.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/ts-loader/index.js??ref--12-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./prompt.vue?vue&type=script&lang=ts&\"","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return (_vm.note !== null)?_c('modal',{attrs:{\"visible\":_vm.visible,\"mask\":false},on:{\"close\":function($event){_vm.visible = false}},scopedSlots:_vm._u([{key:\"header\",fn:function(m){return _c('div',{staticClass:\"modal-header\",attrs:{\"draggable\":\"true\"},on:{\"dragstart\":m.dragStart,\"dragend\":m.dragEnd}},[_c('span',{on:{\"click\":function($event){_vm.$refs.title.select()}}},[_c('i',{staticClass:\"fas fa-pencil-alt\",staticStyle:{\"font-size\":\"15px\"}})]),_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.note.title),expression:\"note.title\"}],ref:\"title\",domProps:{\"value\":(_vm.note.title)},on:{\"change\":_vm.updateNote,\"input\":function($event){if($event.target.composing){ return; }_vm.$set(_vm.note, \"title\", $event.target.value)}}}),_c('div',{staticClass:\"header-close\",on:{\"click\":function($event){_vm.visible = false}}},[_c('i',{staticClass:\"far fa-window-close\"})])])}}])},[_c('div',{staticClass:\"modal-body\"},[_c('textarea',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.note.text),expression:\"note.text\"}],ref:\"textarea\",style:({'height': _vm.calcHeight()}),domProps:{\"value\":(_vm.note.text)},on:{\"change\":_vm.updateNote,\"input\":function($event){if($event.target.composing){ return; }_vm.$set(_vm.note, \"text\", $event.target.value)}}})]),_c('div',{staticClass:\"modal-footer\"},[_c('button',{on:{\"click\":_vm.removeNote}},[_c('i',{staticClass:\"far fa-trash-alt\"}),_vm._v(\" Remove\\n \")])])]):_vm._e()}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","export * from \"-!cache-loader?{\\\"cacheDirectory\\\":\\\"node_modules/.cache/vue-loader\\\",\\\"cacheIdentifier\\\":\\\"74f43d04-vue-loader-template\\\"}!../../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./note.vue?vue&type=template&id=7a3669fd&scoped=true&\"","import mod from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./modal.vue?vue&type=style&index=0&id=12ed61ba&scoped=true&lang=css&\"; export default mod; export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./modal.vue?vue&type=style&index=0&id=12ed61ba&scoped=true&lang=css&\"","\n\n\n\n\nimport Component from \"vue-class-component\";\n\nimport SelectContext from \"@/game/ui/tools/selectcontext.vue\";\nimport Tool from \"@/game/ui/tools/tool.vue\";\nimport SelectionInfo from \"../selection/selection_info.vue\";\n\nimport { getRef } from \"@/core/utils\";\nimport { socket } from \"@/game/api/socket\";\nimport { GlobalPoint, LocalPoint, Ray, Vector } from \"@/game/geom\";\nimport { Layer } from \"@/game/layers/layer\";\nimport { layerManager } from \"@/game/layers/manager\";\nimport { Rect } from \"@/game/shapes/rect\";\nimport { gameStore } from \"@/game/store\";\nimport { calculateDelta } from \"@/game/ui/tools/utils\";\nimport { g2l, g2lr, g2lx, g2ly, g2lz, l2g, l2gz } from \"@/game/units\";\nimport { getMouse } from \"@/game/utils\";\n\nexport enum SelectOperations {\n Noop,\n Resize,\n Drag,\n GroupSelect,\n}\n\nconst start = new GlobalPoint(-1000, -1000);\n\n@Component({\n components: {\n SelectContext,\n },\n})\nexport default class SelectTool extends Tool {\n name = \"Select\";\n showContextMenu = false;\n active = false;\n\n mode = SelectOperations.Noop;\n resizePoint = 0;\n deltaChanged = false;\n // Because we never drag from the asset's (0, 0) coord and want a smoother drag experience\n // we keep track of the actual offset within the asset.\n dragRay = new Ray(new LocalPoint(0, 0), new Vector(0, 0));\n selectionStartPoint = start;\n selectionHelper = new Rect(start, 0, 0);\n created() {\n this.selectionHelper.globalCompositeOperation = \"source-over\";\n }\n onMouseDown(event: MouseEvent) {\n const layer = layerManager.getLayer();\n if (layer === undefined) {\n console.log(\"No active layer!\");\n return;\n }\n\n if (!this.selectionHelper.owners.includes(gameStore.username)) {\n this.selectionHelper.addOwner(gameStore.username);\n }\n\n const mouse = getMouse(event);\n const globalMouse = l2g(mouse);\n\n let hit = false;\n // The selectionStack allows for lower positioned objects that are selected to have precedence during overlap.\n let selectionStack;\n if (!layer.selection.length) selectionStack = layer.shapes;\n else selectionStack = layer.shapes.concat(layer.selection);\n for (let i = selectionStack.length - 1; i >= 0; i--) {\n const shape = selectionStack[i];\n\n this.resizePoint = shape.getPointIndex(globalMouse, l2gz(3));\n\n // Resize case, a corner is selected\n if (this.resizePoint >= 0) {\n layer.selection = [shape];\n getRef(\"selectionInfo\").shape = shape;\n this.mode = SelectOperations.Resize;\n layer.invalidate(true);\n hit = true;\n break;\n\n // Drag case, a shape is selected\n } else if (shape.contains(globalMouse)) {\n const selection = shape;\n if (layer.selection.indexOf(selection) === -1) {\n layer.selection = [selection];\n getRef(\"selectionInfo\").shape = selection;\n }\n this.mode = SelectOperations.Drag;\n const localRefPoint = g2l(selection.refPoint);\n this.dragRay = new Ray(localRefPoint, mouse.subtract(localRefPoint));\n layer.invalidate(true);\n hit = true;\n break;\n }\n }\n\n // GroupSelect case, draw a selection box to select multiple shapes\n if (!hit) {\n this.mode = SelectOperations.GroupSelect;\n for (const selection of layer.selection) getRef(\"selectionInfo\").shape = selection;\n\n this.selectionStartPoint = globalMouse;\n\n this.selectionHelper.refPoint = this.selectionStartPoint;\n this.selectionHelper.w = 0;\n this.selectionHelper.h = 0;\n\n layer.selection = [this.selectionHelper];\n layer.invalidate(true);\n }\n this.active = true;\n }\n onMouseMove(event: MouseEvent) {\n // if (!this.active) return; we require mousemove for the resize cursor\n const layer = layerManager.getLayer();\n if (layer === undefined) {\n console.log(\"No active layer!\");\n return;\n }\n const mouse = getMouse(event);\n const globalMouse = l2g(mouse);\n this.deltaChanged = false;\n\n if (this.mode === SelectOperations.GroupSelect) {\n // Currently draw on active layer\n const endPoint = globalMouse;\n\n this.selectionHelper.w = Math.abs(endPoint.x - this.selectionStartPoint.x);\n this.selectionHelper.h = Math.abs(endPoint.y - this.selectionStartPoint.y);\n this.selectionHelper.refPoint = new GlobalPoint(\n Math.min(this.selectionStartPoint.x, endPoint.x),\n Math.min(this.selectionStartPoint.y, endPoint.y),\n );\n layer.invalidate(true);\n } else if (layer.selection.length) {\n const og = g2l(layer.selection[layer.selection.length - 1].refPoint);\n const origin = og.add(this.dragRay.direction);\n let delta = mouse.subtract(origin).multiply(1 / gameStore.zoomFactor);\n const ogDelta = delta;\n if (this.mode === SelectOperations.Drag) {\n // If we are on the tokens layer do a movement block check.\n if (layer.name === \"tokens\" && !(event.shiftKey && gameStore.IS_DM)) {\n for (const sel of layer.selection) {\n if (!sel.ownedBy()) continue;\n if (sel.uuid === this.selectionHelper.uuid) continue; // the selection helper should not be treated as a real shape.\n delta = calculateDelta(delta, sel);\n if (delta !== ogDelta) this.deltaChanged = true;\n }\n }\n // Actually apply the delta on all shapes\n for (const sel of layer.selection) {\n if (!sel.ownedBy()) continue;\n sel.refPoint = sel.refPoint.add(delta);\n if (sel !== this.selectionHelper) {\n if (sel.visionObstruction) gameStore.recalculateVision(true);\n socket.emit(\"Shape.Update\", { shape: sel.asDict(), redraw: true, temporary: true });\n }\n }\n layer.invalidate(false);\n } else if (this.mode === SelectOperations.Resize) {\n for (const sel of layer.selection) {\n if (!sel.ownedBy()) continue;\n sel.resize(this.resizePoint, mouse);\n if (sel !== this.selectionHelper) {\n if (sel.visionObstruction) gameStore.recalculateVision(true);\n socket.emit(\"Shape.Update\", { shape: sel.asDict(), redraw: true, temporary: true });\n }\n layer.invalidate(false);\n this.updateCursor(layer, globalMouse);\n }\n } else {\n this.updateCursor(layer, globalMouse);\n }\n } else {\n document.body.style.cursor = \"default\";\n }\n }\n onMouseUp(e: MouseEvent): void {\n if (!this.active) return;\n if (layerManager.getLayer() === undefined) {\n console.log(\"No active layer!\");\n return;\n }\n const layer = layerManager.getLayer()!;\n\n if (this.mode === SelectOperations.GroupSelect) {\n layer.clearSelection();\n layer.shapes.forEach(shape => {\n if (!shape.ownedBy()) return;\n if (shape === this.selectionHelper) return;\n const bbox = shape.getBoundingBox();\n if (!shape.ownedBy()) return;\n if (\n this.selectionHelper!.refPoint.x <= bbox.topRight.x &&\n this.selectionHelper!.refPoint.x + this.selectionHelper!.w >= bbox.topLeft.x &&\n this.selectionHelper!.refPoint.y <= bbox.botLeft.y &&\n this.selectionHelper!.refPoint.y + this.selectionHelper!.h >= bbox.topLeft.y\n ) {\n layer.selection.push(shape);\n }\n });\n\n // Push the selection helper as the last element of the selection\n // This makes sure that it will be the first one to be hit in the hit detection onMouseDown\n if (layer.selection.length > 0) layer.selection.push(this.selectionHelper);\n\n layer.invalidate(true);\n } else if (layer.selection.length) {\n layer.selection.forEach(sel => {\n if (!sel.ownedBy()) return;\n if (this.mode === SelectOperations.Drag) {\n if (\n this.dragRay.origin!.x === g2lx(sel.refPoint.x) &&\n this.dragRay.origin!.y === g2ly(sel.refPoint.y)\n )\n return;\n\n if (gameStore.useGrid && !e.altKey && !this.deltaChanged) {\n sel.snapToGrid();\n }\n\n if (sel !== this.selectionHelper) {\n if (sel.visionObstruction) gameStore.recalculateVision();\n if (sel.movementObstruction) gameStore.recalculateMovement();\n socket.emit(\"Shape.Update\", { shape: sel.asDict(), redraw: true, temporary: false });\n }\n layer.invalidate(false);\n }\n if (this.mode === SelectOperations.Resize) {\n if (gameStore.useGrid && !e.altKey) {\n sel.resizeToGrid();\n }\n if (sel !== this.selectionHelper) {\n if (sel.visionObstruction) gameStore.recalculateVision();\n if (sel.movementObstruction) gameStore.recalculateMovement();\n socket.emit(\"Shape.Update\", { shape: sel.asDict(), redraw: true, temporary: false });\n }\n layer.invalidate(false);\n }\n });\n }\n this.mode = SelectOperations.Noop;\n this.active = false;\n }\n onContextMenu(event: MouseEvent) {\n if (layerManager.getLayer() === undefined) {\n console.log(\"No active layer!\");\n return;\n }\n const layer = layerManager.getLayer()!;\n const mouse = getMouse(event);\n const globalMouse = l2g(mouse);\n\n for (const shape of layer.selection) {\n if (shape.contains(globalMouse) && shape !== this.selectionHelper) {\n layer.selection = [shape];\n getRef(\"selectionInfo\").shape = shape;\n layer.invalidate(true);\n (this.$parent.$refs.shapecontext).open(event, shape);\n return;\n }\n }\n (this.$refs.selectcontext).open(event);\n }\n updateCursor(layer: Layer, globalMouse: GlobalPoint) {\n for (const sel of layer.selection) {\n const resizePoint = sel.getPointIndex(globalMouse, l2gz(3));\n if (resizePoint < 0) document.body.style.cursor = \"default\";\n else {\n let angle = sel.getPointOrientation(resizePoint).angle();\n if (angle < 0) angle += 360;\n const d = 45 / 2;\n if (angle >= 315 + d || angle < d || (angle >= 135 + d && angle < 225 - d))\n document.body.style.cursor = \"ew-resize\";\n if ((angle >= 45 + d && angle < 135 - d) || (angle >= 225 + d && angle < 315 - d))\n document.body.style.cursor = \"ns-resize\";\n if ((angle >= d && angle < 90 - d) || (angle >= 180 + d && angle < 270 - d))\n document.body.style.cursor = \"nwse-resize\";\n if ((angle >= 90 + d && angle < 180 - d) || (angle >= 270 + d && angle < 360 - d))\n document.body.style.cursor = \"nesw-resize\";\n }\n }\n }\n}\n","import { GlobalPoint, Ray, Vector } from \"@/game/geom\";\nimport { layerManager } from \"@/game/layers/manager\";\nimport { Shape } from \"@/game/shapes/shape\";\nimport { gameStore } from \"@/game/store\";\nimport { PA_CDT } from \"@/game/visibility/te/pa\";\nimport { Point, Sign, Triangle } from \"@/game/visibility/te/tds\";\nimport { ccw, cw, intersection, orientation } from \"@/game/visibility/te/triag\";\n\n// First go through each shape in the selection and see if the delta has to be truncated due to movement blockers\n\n// This is definitely super convoluted and inefficient but I was tired and really wanted the smooth wall sliding collision stuff to work\n// And it does now, so hey ¯\\_(ツ)_/¯\nexport function calculateDelta(delta: Vector, sel: Shape, done?: string[]) {\n if (delta.x === 0 && delta.y === 0) return delta;\n if (gameStore.visionMode === \"bvh\") {\n if (done === undefined) done = [];\n const ogSelBBox = sel.getBoundingBox();\n const newSelBBox = ogSelBBox.offset(delta);\n let refine = false;\n for (const movementBlocker of gameStore.movementblockers) {\n if (done.includes(movementBlocker)) continue;\n const blocker = layerManager.UUIDMap.get(movementBlocker)!;\n const blockerBBox = blocker.getBoundingBox();\n let found = blockerBBox.intersectsWithInner(newSelBBox);\n if (!found) {\n // This is an edge case, precalculating the rays is not worth in this case.\n const ray = Ray.fromPoints(ogSelBBox.topLeft.add(delta.normalize()), newSelBBox.topLeft);\n const invDir = ray.direction.inverse();\n const dirIsNegative = [invDir.x < 0, invDir.y < 0];\n found = blockerBBox.intersectP(ray, invDir, dirIsNegative).hit;\n }\n // Check if the bounding box of our destination would intersect with the bounding box of the movementblocker\n if (found) {\n const bCenter = blockerBBox.center();\n const sCenter = ogSelBBox.center();\n\n const d = sCenter.subtract(bCenter);\n const ux = new Vector(1, 0);\n const uy = new Vector(0, 1);\n let dx = d.dot(ux);\n let dy = d.dot(uy);\n if (dx > blockerBBox.w / 2) dx = blockerBBox.w / 2;\n if (dx < -blockerBBox.w / 2) dx = -blockerBBox.w / 2;\n if (dy > blockerBBox.h / 2) dy = blockerBBox.h / 2;\n if (dy < -blockerBBox.h / 2) dy = -blockerBBox.h / 2;\n\n // Closest point / intersection point between the two bboxes. Not the delta intersect!\n const p = bCenter.add(ux.multiply(dx)).add(uy.multiply(dy));\n\n if (p.x === ogSelBBox.topLeft.x || p.x === ogSelBBox.topRight.x) delta = new Vector(0, delta.y);\n else if (p.y === ogSelBBox.topLeft.y || p.y === ogSelBBox.botLeft.y) delta = new Vector(delta.x, 0);\n else {\n if (p.x < ogSelBBox.topLeft.x) delta = new Vector(p.x - ogSelBBox.topLeft.x, delta.y);\n else if (p.x > ogSelBBox.topRight.x) delta = new Vector(p.x - ogSelBBox.topRight.x, delta.y);\n else if (p.y < ogSelBBox.topLeft.y) delta = new Vector(delta.x, p.y - ogSelBBox.topLeft.y);\n else if (p.y > ogSelBBox.botLeft.y) delta = new Vector(delta.x, p.y - ogSelBBox.botLeft.y);\n }\n refine = true;\n done.push(movementBlocker);\n break;\n }\n }\n if (refine) delta = calculateDelta(delta, sel, done);\n return delta;\n } else {\n const centerTriangle = PA_CDT.movement.locate(sel.center().asArray(), null).loc;\n for (const point of sel.points) {\n const lt = PA_CDT.movement.locate(point, centerTriangle);\n const triangle = lt.loc;\n if (triangle === null) continue;\n delta = checkTriangle(point, triangle, delta);\n }\n return delta;\n }\n}\n\nfunction checkTriangle(point: Point, triangle: Triangle, delta: Vector, skip: Triangle[] = []): Vector {\n const p = new GlobalPoint(point[0], point[1]);\n const endpoint = p.add(delta).asArray();\n if (triangle.contains(endpoint)) return delta;\n skip.push(triangle);\n\n for (let i = 0; i < 3; i++) {\n if (skip.includes(triangle.neighbours[i]!)) continue;\n\n const _cw = triangle.vertices[cw(i)]!.point!;\n const _ccw = triangle.vertices[ccw(i)]!.point!;\n const ix = intersection(point, endpoint, _cw, _ccw);\n\n if (ix === null) continue;\n\n if (!triangle.isConstrained(i)) return checkTriangle(point, triangle.neighbours[i]!, delta, skip);\n\n if (ix[0] === p.x && ix[1] === p.y) {\n const OR = orientation;\n const o = orientation(point, endpoint, _ccw);\n // Remember: canvas y axis is inverted\n if (o === Sign.LEFT_TURN) continue;\n if (o === Sign.ZERO) continue;\n }\n let newDelta = new GlobalPoint(ix[0], ix[1]).subtract(p).multiply(0.8);\n if (newDelta.length() < 1) newDelta = new Vector(0, 0);\n if (newDelta.length() < delta.length()) delta = newDelta;\n }\n return delta;\n}\n","import mod from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./note.vue?vue&type=style&index=0&id=7a3669fd&scoped=true&lang=css&\"; export default mod; export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./note.vue?vue&type=style&index=0&id=7a3669fd&scoped=true&lang=css&\"","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/ts-loader/index.js??ref--12-2!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./labels.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/ts-loader/index.js??ref--12-2!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./labels.vue?vue&type=script&lang=ts&\"","import { socket } from \"@/game/api/socket\";\nimport { gameStore } from \"@/game/store\";\n\nexport function sendClientOptions() {\n socket.emit(\"Client.Options.Set\", {\n locationOptions: {\n panX: gameStore.panX,\n panY: gameStore.panY,\n zoomFactor: gameStore.zoomFactor,\n },\n });\n}\n","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nimport Vue from \"vue\";\nimport Component from \"vue-class-component\";\nimport { Prop } from \"vue-property-decorator\";\n\nimport { AssetFile, AssetList } from \"@/core/comm/types\";\nimport { alphSort } from \"@/core/utils\";\n\n@Component({\n name: \"asset-node\",\n})\nexport default class AssetNode extends Vue {\n @Prop() asset!: AssetList;\n\n showImage = null;\n get folders(): string[] {\n return Object.keys(this.asset)\n .filter(el => ![\"__files\"].includes(el))\n .sort(alphSort);\n }\n\n get files(): AssetFile[] {\n if (this.asset.__files)\n return (this.asset.__files)\n .concat()\n .sort((a, b) => (a.name.toLowerCase() > b.name.toLowerCase() ? 1 : -1));\n return [];\n }\n\n toggle(event: { target: HTMLElement }) {\n // tslint:disable-next-line:prefer-for-of\n for (let i = 0; i < event.target.children.length; i++) {\n const el = event.target.children[i];\n el.style.display = el.style.display === \"\" ? \"block\" : \"\";\n }\n }\n\n dragStart(event: DragEvent, imageSource: string) {\n this.showImage = null;\n if (event === null || event.dataTransfer === null) return;\n const img = (event.target).querySelector(\".preview\")!;\n event.dataTransfer.setDragImage(img, 0, 0);\n event.dataTransfer.setData(\"text/plain\", imageSource);\n }\n}\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return (_vm.visible)?_c('div',{staticClass:\"ContextMenu\",style:({left:_vm.left, top:_vm.top}),attrs:{\"tabindex\":\"-1\"},on:{\"blur\":function($event){_vm.$emit('close')}}},[_c('ul',[_vm._t(\"default\")],2)]):_vm._e()}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","export * from \"-!cache-loader?{\\\"cacheDirectory\\\":\\\"node_modules/.cache/vue-loader\\\",\\\"cacheIdentifier\\\":\\\"74f43d04-vue-loader-template\\\"}!../../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./contextmenu.vue?vue&type=template&id=256dde9c&\"","// import Vuex from \"vuex\";\nimport { getModule, Module, Mutation, VuexModule } from \"vuex-module-decorators\";\n\nimport { Asset } from \"@/core/comm/types\";\nimport { rootStore } from \"@/store\";\n\nexport interface AssetState {\n root: number;\n files: number[];\n folders: number[];\n idMap: Map;\n selected: number[];\n}\n\n@Module({ dynamic: true, store: rootStore, name: \"assets\", namespaced: true })\nclass AssetStore extends VuexModule {\n root = -1;\n files: number[] = [];\n folders: number[] = [];\n idMap: Map = new Map();\n selected: number[] = [];\n\n @Mutation\n clear() {\n this.folders = [];\n this.files = [];\n }\n\n @Mutation\n clearSelected() {\n console.log(\"Cleared\");\n this.selected = [];\n }\n\n @Mutation\n setRoot(root: number) {\n this.root = root;\n }\n}\n\nexport const assetStore = getModule(AssetStore);\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/ts-loader/index.js??ref--12-2!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./contextmenu.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/ts-loader/index.js??ref--12-2!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./contextmenu.vue?vue&type=script&lang=ts&\"","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nimport Vue from \"vue\";\nimport Component from \"vue-class-component\";\n\nimport ContextMenu from \"@/core/components/contextmenu.vue\";\nimport Initiative from \"@/game/ui/initiative.vue\";\n\nimport { getRef } from \"@/core/utils\";\nimport { EventBus } from \"@/game/event-bus\";\nimport { layerManager } from \"@/game/layers/manager\";\nimport { Shape } from \"@/game/shapes/shape\";\nimport { gameStore } from \"@/game/store\";\n\n@Component({\n components: {\n ContextMenu,\n },\n})\nexport default class ShapeContext extends Vue {\n visible = false;\n x = 0;\n y = 0;\n shape: Shape | null = null;\n get activeLayer(): string {\n const layer = layerManager.getLayer();\n return layer === undefined ? \"\" : layer.name;\n }\n open(event: MouseEvent, shape: Shape) {\n this.visible = true;\n this.x = event.pageX;\n this.y = event.pageY;\n this.shape = shape;\n this.$nextTick(() => this.$children[0].$el.focus());\n }\n close() {\n this.visible = false;\n this.shape = null;\n }\n getLayers() {\n return layerManager.layers.filter(l => l.selectable && (gameStore.IS_DM || l.playerEditable));\n }\n getActiveLayer() {\n return layerManager.getLayer();\n }\n getInitiativeWord() {\n if (this.shape === null) return \"\";\n return getRef(\"initiative\").contains(this.shape.uuid) ? \"Show\" : \"Add\";\n }\n setLayer(newLayer: string) {\n if (this.shape === null) return;\n this.shape.moveLayer(newLayer, true);\n this.close();\n }\n moveToBack() {\n if (this.shape === null) return;\n const layer = this.getActiveLayer()!;\n layer.moveShapeOrder(this.shape, 0, true);\n this.close();\n }\n moveToFront() {\n if (this.shape === null) return;\n const layer = this.getActiveLayer()!;\n layer.moveShapeOrder(this.shape, layer.shapes.length - 1, true);\n this.close();\n }\n addInitiative() {\n if (this.shape === null) return;\n const initiative = getRef(\"initiative\");\n if (!initiative.contains(this.shape.uuid)) initiative.addInitiative(this.shape.getInitiativeRepr());\n initiative.visible = true;\n this.close();\n }\n openEditDialog() {\n EventBus.$emit(\"EditDialog.Open\", this.shape);\n this.close();\n }\n}\n","import mod from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/ts-loader/index.js??ref--12-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./map.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/ts-loader/index.js??ref--12-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./map.vue?vue&type=script&lang=ts&\"","import { Layer } from \"@/game/layers/layer\";\nimport { gameStore } from \"@/game/store\";\n\nexport class GridLayer extends Layer {\n invalidate(): void {\n this.valid = false;\n }\n draw(doClear?: boolean): void {\n if (!this.valid) {\n this.drawGrid();\n }\n }\n drawGrid(): void {\n const ctx = this.ctx;\n this.clear();\n ctx.beginPath();\n\n const gs = gameStore.gridSize;\n\n for (let i = 0; i < this.width; i += gs * gameStore.zoomFactor) {\n ctx.moveTo(i + (gameStore.panX % gs) * gameStore.zoomFactor, 0);\n ctx.lineTo(i + (gameStore.panX % gs) * gameStore.zoomFactor, this.height);\n ctx.moveTo(0, i + (gameStore.panY % gs) * gameStore.zoomFactor);\n ctx.lineTo(this.width, i + (gameStore.panY % gs) * gameStore.zoomFactor);\n }\n\n ctx.strokeStyle = gameStore.gridColour;\n ctx.lineWidth = 1;\n ctx.stroke();\n this.valid = true;\n }\n}\n","import Vue from \"vue\";\nimport Vuex from \"vuex\";\n\nimport { AssetState } from \"@/assetManager/store\";\nimport { CoreState } from \"@/core/store\";\nimport { GameState } from \"@/game/store\";\n\nVue.use(Vuex);\n\nexport interface RootState {\n assets: AssetState;\n core: CoreState;\n game: GameState;\n}\n\nexport const rootStore = new Vuex.Store({});\n","import { render, staticRenderFns } from \"./colorpicker.vue?vue&type=template&id=d32461a4&scoped=true&\"\nimport script from \"./colorpicker.vue?vue&type=script&lang=ts&\"\nexport * from \"./colorpicker.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./colorpicker.vue?vue&type=style&index=0&id=d32461a4&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"d32461a4\",\n null\n \n)\n\ncomponent.options.__file = \"colorpicker.vue\"\nexport default component.exports","import mod from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./login.vue?vue&type=style&index=0&id=bc30fc14&scoped=true&lang=css&\"; export default mod; export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./login.vue?vue&type=style&index=0&id=bc30fc14&scoped=true&lang=css&\"","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{attrs:{\"id\":\"app\"}},[_c('router-view',{ref:\"activeComponent\"})],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","import { render, staticRenderFns } from \"./App.vue?vue&type=template&id=196415f0&\"\nvar script = {}\nimport style0 from \"./App.vue?vue&type=style&index=0&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\ncomponent.options.__file = \"App.vue\"\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{attrs:{\"id\":\"main\"},on:{\"mouseleave\":_vm.mouseleave,\"wheel\":_vm.zoom}},[(_vm.showUI)?_c('menu-bar'):_vm._e(),_c('div',{attrs:{\"id\":\"board\"}},[(_vm.ready.manager)?[_c('tool-bar',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.showUI),expression:\"showUI\"}],ref:\"tools\"})]:_vm._e(),_c('div',{attrs:{\"id\":\"layers\"},on:{\"mousedown\":_vm.mousedown,\"mouseup\":_vm.mouseup,\"mousemove\":_vm.mousemove,\"contextmenu\":function($event){$event.preventDefault();$event.stopPropagation();return _vm.contextmenu($event)},\"dragover\":function($event){$event.preventDefault();},\"drop\":function($event){$event.preventDefault();$event.stopPropagation();return _vm.drop($event)}}}),_c('div',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.showUI && _vm.layers.length>1),expression:\"showUI && layers.length>1\"}],attrs:{\"id\":\"layerselect\"}},[_c('ul',_vm._l((_vm.layers),function(layer){return _c('li',{key:layer.name,class:{ 'layer-selected': layer === _vm.selectedLayer },on:{\"mousedown\":function($event){_vm.selectLayer(layer)}}},[_c('a',{attrs:{\"href\":\"#\"}},[_vm._v(_vm._s(layer))])])}))])],2),_c('selection-info',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.showUI),expression:\"showUI\"}],ref:\"selectionInfo\"}),_c('initiative-dialog',{ref:\"initiative\",attrs:{\"id\":\"initiativedialog\"}}),_c('note-dialog',{ref:\"note\"}),_c('label-dialog',{ref:\"labels\"}),_c('zoom-slider',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.showUI),expression:\"showUI\"}],attrs:{\"id\":\"zoomer\",\"height\":6,\"width\":200,\"min\":0,\"max\":1,\"interval\":0.1,\"dot-width\":8,\"dot-height\":20,\"tooltip-dir\":'bottom',\"tooltip\":'hover',\"formatter\":_vm.zoomDisplay.toFixed(1),\"slider-style\":{'border-radius': '15%'},\"bg-style\":{'background-color': '#fff', 'box-shadow': '0.5px 0.5px 3px 1px rgba(0, 0, 0, .36)'},\"process-style\":{'background-color': '#fff'}},model:{value:(_vm.zoomDisplay),callback:function ($$v) {_vm.zoomDisplay=$$v},expression:\"zoomDisplay\"}}),_c('prompt-dialog',{ref:\"prompt\"}),_c('confirm-dialog',{ref:\"confirm\"})],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","export * from \"-!cache-loader?{\\\"cacheDirectory\\\":\\\"node_modules/.cache/vue-loader\\\",\\\"cacheIdentifier\\\":\\\"74f43d04-vue-loader-template\\\"}!../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./game.vue?vue&type=template&id=05b88da7&scoped=true&\"","import { GlobalPoint, Ray } from \"@/game/geom\";\nimport { Layer } from \"@/game/layers/layer\";\nimport { layerManager } from \"@/game/layers/manager\";\nimport { Settings } from \"@/game/settings\";\nimport { Circle } from \"@/game/shapes/circle\";\nimport { Shape } from \"@/game/shapes/shape\";\nimport { gameStore } from \"@/game/store\";\nimport { g2l, g2lr, g2lx, g2ly, g2lz, getUnitDistance } from \"@/game/units\";\nimport { getFogColour } from \"@/game/utils\";\nimport { computeVisibility } from \"../visibility/te/te\";\n\nexport class FOWLayer extends Layer {\n isVisionLayer: boolean = true;\n preFogShapes: Shape[] = [];\n virtualCanvas: HTMLCanvasElement;\n vCtx: CanvasRenderingContext2D;\n\n constructor(canvas: HTMLCanvasElement, name: string) {\n super(canvas, name);\n this.virtualCanvas = document.createElement(\"canvas\");\n this.virtualCanvas.width = window.innerWidth;\n this.virtualCanvas.height = window.innerHeight;\n this.vCtx = this.virtualCanvas.getContext(\"2d\")!;\n }\n\n addShape(shape: Shape, sync: boolean, temporary?: boolean, invalidate = true): void {\n super.addShape(shape, sync, temporary, invalidate);\n if (shape.options.has(\"preFogShape\") && shape.options.get(\"preFogShape\")) {\n this.preFogShapes.push(shape);\n }\n }\n\n removeShape(shape: Shape, sync: boolean, temporary?: boolean) {\n if (shape.options.has(\"preFogShape\") && shape.options.get(\"preFogShape\")) {\n const idx = this.preFogShapes.findIndex(s => s.uuid === shape.uuid);\n this.preFogShapes.splice(idx, 1);\n }\n super.removeShape(shape, sync, temporary);\n }\n\n draw(): void {\n if (!this.valid) {\n const ctx = this.ctx;\n\n if (Settings.skipLightFOW) {\n ctx.clearRect(0, 0, this.canvas.width, this.canvas.height);\n this.valid = true;\n return;\n }\n\n const originalOperation = ctx.globalCompositeOperation;\n ctx.clearRect(0, 0, this.canvas.width, this.canvas.height);\n\n ctx.fillStyle = \"rgba(0, 0, 0, 1)\";\n\n const dctx = layerManager.getLayer(\"draw\")!.ctx;\n if (Settings.drawAngleLines || Settings.drawFirstLightHit) {\n dctx.clearRect(0, 0, dctx.canvas.width, dctx.canvas.height);\n }\n\n // At all times provide a minimal vision range to prevent losing your tokens in fog.\n if (gameStore.fullFOW && layerManager.hasLayer(\"tokens\")) {\n layerManager.getLayer(\"tokens\")!.shapes.forEach(sh => {\n if (!sh.ownedBy() || !sh.isToken) return;\n const bb = sh.getBoundingBox();\n const lcenter = g2l(sh.center());\n const alm = 0.8 * g2lz(bb.w);\n ctx.beginPath();\n ctx.arc(lcenter.x, lcenter.y, alm, 0, 2 * Math.PI);\n const gradient = ctx.createRadialGradient(lcenter.x, lcenter.y, alm / 2, lcenter.x, lcenter.y, alm);\n gradient.addColorStop(0, \"rgba(0, 0, 0, 1)\");\n gradient.addColorStop(1, \"rgba(0, 0, 0, 0)\");\n ctx.fillStyle = gradient;\n ctx.fill();\n });\n }\n\n this.vCtx.clearRect(0, 0, window.innerWidth, window.innerHeight);\n\n // First cut out all the light sources\n for (const light of gameStore.visionSources) {\n const shape = layerManager.UUIDMap.get(light.shape);\n if (shape === undefined) continue;\n const aura = shape.auras.find(a => a.uuid === light.aura);\n if (aura === undefined) continue;\n\n const auraLength = getUnitDistance(aura.value + aura.dim);\n const center = shape.center();\n const lcenter = g2l(center);\n\n const auraCircle = new Circle(center, auraLength);\n if (!auraCircle.visibleInCanvas(ctx.canvas)) continue;\n\n if (gameStore.visionMode === \"bvh\") {\n let lastArcAngle = -1;\n\n const path = new Path2D();\n path.moveTo(lcenter.x, lcenter.y);\n let firstPoint: GlobalPoint;\n\n for (let angle = 0; angle < 2 * Math.PI; angle += (Settings.angleSteps / 180) * Math.PI) {\n const anglePoint = new GlobalPoint(\n center.x + auraLength * Math.cos(angle),\n center.y + auraLength * Math.sin(angle),\n );\n if (Settings.drawAngleLines) {\n dctx!.beginPath();\n dctx!.moveTo(g2lx(center.x), g2ly(center.y));\n dctx!.lineTo(g2lx(anglePoint.x), g2ly(anglePoint.y));\n dctx!.stroke();\n }\n\n // Check if there is a hit with one of the nearby light blockers.\n const lightRay = Ray.fromPoints(center, anglePoint);\n const hitResult = gameStore.BV.intersect(lightRay);\n\n if (angle === 0) firstPoint = hitResult.hit ? hitResult.intersect : anglePoint;\n\n // We can move on to the next angle if nothing was hit.\n if (!hitResult.hit) {\n // If an earlier hit caused the aura to leave the arc, we need to go back to the arc\n if (lastArcAngle === -1) {\n // Set the start of a new arc beginning at the current angle\n lastArcAngle = angle;\n // Draw a line from the last non arc location back to the arc\n const dest = g2l(anglePoint);\n ctx.lineTo(dest.x, dest.y);\n }\n continue;\n }\n // If hit , first finish any ongoing arc, then move to the intersection point\n if (lastArcAngle !== -1) {\n path.arc(lcenter.x, lcenter.y, g2lr(aura.value + aura.dim), lastArcAngle, angle);\n lastArcAngle = -1;\n }\n path.lineTo(g2lx(hitResult.intersect.x), g2ly(hitResult.intersect.y));\n }\n // Finish the final arc.\n if (lastArcAngle === -1) path.lineTo(g2lx(firstPoint!.x), g2ly(firstPoint!.y));\n else path.arc(lcenter.x, lcenter.y, g2lr(aura.value + aura.dim), lastArcAngle, 2 * Math.PI);\n\n if (gameStore.fullFOW) {\n if (aura.dim > 0) {\n // Fill the light aura with a radial dropoff towards the outside.\n const gradient = ctx.createRadialGradient(\n lcenter.x,\n lcenter.y,\n g2lr(aura.value),\n lcenter.x,\n lcenter.y,\n g2lr(aura.value + aura.dim),\n );\n gradient.addColorStop(0, \"rgba(0, 0, 0, 1)\");\n gradient.addColorStop(1, \"rgba(0, 0, 0, 0)\");\n ctx.fillStyle = gradient;\n } else {\n ctx.fillStyle = \"rgba(0, 0, 0, 1)\";\n }\n ctx.fill(path);\n }\n\n aura.lastPath = path;\n } else {\n this.vCtx.globalCompositeOperation = \"source-over\";\n this.vCtx.fillStyle = \"rgba(0, 0, 0, 1)\";\n const polygon = computeVisibility(center, \"vision\");\n this.vCtx.beginPath();\n this.vCtx.moveTo(g2lx(polygon[0][0]), g2ly(polygon[0][1]));\n for (const point of polygon) this.vCtx.lineTo(g2lx(point[0]), g2ly(point[1]));\n this.vCtx.closePath();\n this.vCtx.fill();\n if (aura.dim > 0) {\n // Fill the light aura with a radial dropoff towards the outside.\n const gradient = this.vCtx.createRadialGradient(\n lcenter.x,\n lcenter.y,\n g2lr(aura.value),\n lcenter.x,\n lcenter.y,\n g2lr(aura.value + aura.dim),\n );\n gradient.addColorStop(0, \"rgba(0, 0, 0, 1)\");\n gradient.addColorStop(1, \"rgba(0, 0, 0, 0)\");\n this.vCtx.fillStyle = gradient;\n } else {\n this.vCtx.fillStyle = \"rgba(0, 0, 0, 1)\";\n }\n this.vCtx.globalCompositeOperation = \"source-in\";\n this.vCtx.beginPath();\n this.vCtx.arc(lcenter.x, lcenter.y, g2lr(aura.value + aura.dim), 0, 2 * Math.PI);\n this.vCtx.fill();\n ctx.drawImage(this.virtualCanvas, 0, 0);\n }\n }\n\n // At the DM Side due to opacity of the two fow layers, it looks strange if we just render them on top of eachother like players.\n if (gameStore.fowLOS) {\n ctx.globalCompositeOperation = \"source-in\";\n ctx.drawImage(layerManager.getLayer(\"fow-players\")!.canvas, 0, 0);\n }\n\n for (const preShape of this.preFogShapes) {\n if (!preShape.visibleInCanvas(this.canvas)) continue;\n const ogComposite = preShape.globalCompositeOperation;\n if (!gameStore.fullFOW) {\n if (preShape.globalCompositeOperation === \"source-over\")\n preShape.globalCompositeOperation = \"destination-out\";\n else if (preShape.globalCompositeOperation === \"destination-out\")\n preShape.globalCompositeOperation = \"source-over\";\n }\n preShape.draw(ctx);\n preShape.globalCompositeOperation = ogComposite;\n }\n\n if (gameStore.fullFOW) {\n ctx.globalCompositeOperation = \"source-out\";\n ctx.fillStyle = getFogColour();\n ctx.fillRect(0, 0, ctx.canvas.width, ctx.canvas.height);\n }\n\n super.draw(false);\n\n ctx.globalCompositeOperation = originalOperation;\n }\n }\n}\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/ts-loader/index.js??ref--12-2!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./load.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/ts-loader/index.js??ref--12-2!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./load.vue?vue&type=script&lang=ts&\"","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{attrs:{\"id\":\"menuContainer\"}},[_c('div',{ref:\"rm\",style:({\n left: _vm.visible.settings ? '200px' : '0',\n top: _vm.visible.locations ? '100px' : '0'\n }),attrs:{\"id\":\"radialmenu\"}},[_c('div',{staticClass:\"rm-wrapper\"},[_c('div',{staticClass:\"rm-toggler\"},[_c('ul',{staticClass:\"rm-list\",class:{ 'rm-list-dm': _vm.IS_DM }},[(_vm.IS_DM)?_c('li',{staticClass:\"rm-item\",attrs:{\"id\":\"rm-locations\"},on:{\"click\":function($event){_vm.visible.locations = !_vm.visible.locations}}},[_vm._m(0)]):_vm._e(),_c('li',{staticClass:\"rm-item\",attrs:{\"id\":\"rm-settings\"},on:{\"click\":function($event){_vm.visible.settings = !_vm.visible.settings}}},[_vm._m(1)])])]),_vm._m(2)])]),_c('transition',{attrs:{\"name\":\"settings\"},on:{\"enter\":function($event){_vm.$refs.rm.style.transition = 'left 500ms'}}},[(_vm.visible.settings)?_c('div',{ref:\"settings\",attrs:{\"id\":\"menu\"},on:{\"click\":_vm.settingsClick}},[_c('div',{staticStyle:{\"width\":\"200px\",\"height\":\"90%\",\"overflow-y\":\"auto\",\"overflow-x\":\"hidden\"}},[(_vm.IS_DM)?[_c('button',{staticClass:\"accordion\"},[_vm._v(\"Assets\")]),_c('div',{staticClass:\"accordion-panel\"},[_c('a',{staticClass:\"actionButton\",attrs:{\"href\":\"/assets\",\"target\":\"blank\",\"title\":\"Open asset manager\"}},[_c('i',{staticClass:\"fas fa-external-link-alt\"})]),_c('div',{staticClass:\"directory\",attrs:{\"id\":\"menu-tokens\"}},[_c('asset-node',{attrs:{\"asset\":_vm.assets}}),(!_vm.assets)?_c('div',[_vm._v(\"No assets\")]):_vm._e()],1)]),_c('button',{staticClass:\"accordion\"},[_vm._v(\"Notes\")]),_c('div',{staticClass:\"accordion-panel\"},[_c('div',{staticClass:\"accordion-subpanel\",attrs:{\"id\":\"menu-notes\"}},[_c('a',{staticClass:\"actionButton\",on:{\"click\":_vm.createNote}},[_c('i',{staticClass:\"far fa-plus-square\"})]),_vm._l((_vm.notes),function(note){return _c('div',{key:note.uuid,staticStyle:{\"cursor\":\"pointer\"},on:{\"click\":function($event){_vm.openNote(note)}}},[_vm._v(_vm._s(note.title || \"[?]\"))])}),(!_vm.notes.length)?_c('div',[_vm._v(\"No notes\")]):_vm._e()],2)]),_c('button',{staticClass:\"accordion\"},[_vm._v(\"DM Options\")]),_c('div',{staticClass:\"accordion-panel\"},[_c('div',{staticClass:\"accordion-subpanel\"},[_c('label',{attrs:{\"for\":\"useGridInput\"}},[_vm._v(\"Use grid:\")]),_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.useGrid),expression:\"useGrid\"}],attrs:{\"id\":\"useGridInput\",\"type\":\"checkbox\",\"checked\":\"checked\"},domProps:{\"checked\":Array.isArray(_vm.useGrid)?_vm._i(_vm.useGrid,null)>-1:(_vm.useGrid)},on:{\"change\":function($event){var $$a=_vm.useGrid,$$el=$event.target,$$c=$$el.checked?(true):(false);if(Array.isArray($$a)){var $$v=null,$$i=_vm._i($$a,$$v);if($$el.checked){$$i<0&&(_vm.useGrid=$$a.concat([$$v]))}else{$$i>-1&&(_vm.useGrid=$$a.slice(0,$$i).concat($$a.slice($$i+1)))}}else{_vm.useGrid=$$c}}}}),_c('label',{attrs:{\"for\":\"useFOWInput\"}},[_vm._v(\"Fill entire canvas with FOW:\")]),_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.fullFOW),expression:\"fullFOW\"}],attrs:{\"id\":\"useFOWInput\",\"type\":\"checkbox\"},domProps:{\"checked\":Array.isArray(_vm.fullFOW)?_vm._i(_vm.fullFOW,null)>-1:(_vm.fullFOW)},on:{\"change\":function($event){var $$a=_vm.fullFOW,$$el=$event.target,$$c=$$el.checked?(true):(false);if(Array.isArray($$a)){var $$v=null,$$i=_vm._i($$a,$$v);if($$el.checked){$$i<0&&(_vm.fullFOW=$$a.concat([$$v]))}else{$$i>-1&&(_vm.fullFOW=$$a.slice(0,$$i).concat($$a.slice($$i+1)))}}else{_vm.fullFOW=$$c}}}}),_c('label',{attrs:{\"for\":\"fowOpacity\"}},[_vm._v(\"FOW opacity:\")]),_c('input',{directives:[{name:\"model\",rawName:\"v-model.number\",value:(_vm.fowOpacity),expression:\"fowOpacity\",modifiers:{\"number\":true}}],attrs:{\"id\":\"fowOpacity\",\"type\":\"number\",\"min\":\"0\",\"max\":\"1\",\"step\":\"0.1\"},domProps:{\"value\":(_vm.fowOpacity)},on:{\"input\":function($event){if($event.target.composing){ return; }_vm.fowOpacity=_vm._n($event.target.value)},\"blur\":function($event){_vm.$forceUpdate()}}}),_c('label',{attrs:{\"for\":\"fowLOS\"}},[_vm._v(\"Only show lights in LoS:\")]),_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.fowLOS),expression:\"fowLOS\"}],attrs:{\"id\":\"fowLOS\",\"type\":\"checkbox\"},domProps:{\"checked\":Array.isArray(_vm.fowLOS)?_vm._i(_vm.fowLOS,null)>-1:(_vm.fowLOS)},on:{\"change\":function($event){var $$a=_vm.fowLOS,$$el=$event.target,$$c=$$el.checked?(true):(false);if(Array.isArray($$a)){var $$v=null,$$i=_vm._i($$a,$$v);if($$el.checked){$$i<0&&(_vm.fowLOS=$$a.concat([$$v]))}else{$$i>-1&&(_vm.fowLOS=$$a.slice(0,$$i).concat($$a.slice($$i+1)))}}else{_vm.fowLOS=$$c}}}}),_c('label',{attrs:{\"for\":\"unitSizeInput\"}},[_vm._v(\"Unit Size (in ft.):\")]),_c('input',{directives:[{name:\"model\",rawName:\"v-model.number\",value:(_vm.unitSize),expression:\"unitSize\",modifiers:{\"number\":true}}],attrs:{\"id\":\"unitSizeInput\",\"type\":\"number\"},domProps:{\"value\":(_vm.unitSize)},on:{\"input\":function($event){if($event.target.composing){ return; }_vm.unitSize=_vm._n($event.target.value)},\"blur\":function($event){_vm.$forceUpdate()}}}),_c('label',{attrs:{\"for\":\"gridSizeInput\"}},[_vm._v(\"Grid Size (in pixels):\")]),_c('input',{directives:[{name:\"model\",rawName:\"v-model.number\",value:(_vm.gridSize),expression:\"gridSize\",modifiers:{\"number\":true}}],attrs:{\"id\":\"gridSizeInput\",\"type\":\"number\",\"min\":\"0\"},domProps:{\"value\":(_vm.gridSize)},on:{\"input\":function($event){if($event.target.composing){ return; }_vm.gridSize=_vm._n($event.target.value)},\"blur\":function($event){_vm.$forceUpdate()}}}),_c('label',{attrs:{\"for\":\"visionMode\"}},[_vm._v(\"Vision Mode:\")]),_c('select',{attrs:{\"id\":\"visionMode\"},on:{\"change\":_vm.changeVisionMode}},[_c('option',{domProps:{\"selected\":_vm.$store.state.game.visionMode === 'bvh'}},[_vm._v(\"BVH\")]),_c('option',{domProps:{\"selected\":_vm.$store.state.game.visionMode === 'triangle'}},[_vm._v(\"Triangle\")])]),_c('label',{attrs:{\"for\":\"vmininp\"}},[_vm._v(\"Minimal full vision (ft):\")]),_c('input',{directives:[{name:\"model\",rawName:\"v-model.lazy.number\",value:(_vm.visionRangeMin),expression:\"visionRangeMin\",modifiers:{\"lazy\":true,\"number\":true}}],attrs:{\"id\":\"vmininp\",\"type\":\"number\",\"min\":\"0\"},domProps:{\"value\":(_vm.visionRangeMin)},on:{\"change\":function($event){_vm.visionRangeMin=_vm._n($event.target.value)},\"blur\":function($event){_vm.$forceUpdate()}}}),_c('label',{attrs:{\"for\":\"vmaxinp\"}},[_vm._v(\"Maximal vision (ft):\")]),_c('input',{directives:[{name:\"model\",rawName:\"v-model.lazy.number\",value:(_vm.visionRangeMax),expression:\"visionRangeMax\",modifiers:{\"lazy\":true,\"number\":true}}],attrs:{\"id\":\"vmaxinp\",\"type\":\"number\",\"min\":\"0\"},domProps:{\"value\":(_vm.visionRangeMax)},on:{\"change\":function($event){_vm.visionRangeMax=_vm._n($event.target.value)},\"blur\":function($event){_vm.$forceUpdate()}}}),_c('label',{attrs:{\"for\":\"invitation\"}},[_vm._v(\"Invitation Code:\")]),_c('input',{attrs:{\"id\":\"invitation\",\"type\":\"text\",\"readonly\":\"readonly\"},domProps:{\"value\":_vm.invitationCode}})])])]:_vm._e(),_c('button',{staticClass:\"accordion\"},[_vm._v(\"Client Options\")]),_c('div',{staticClass:\"accordion-panel\"},[_c('div',{staticClass:\"accordion-subpanel\"},[_c('label',{attrs:{\"for\":\"gridColour\"}},[_vm._v(\"Grid Colour:\")]),_c('color-picker',{attrs:{\"id\":\"gridColour\",\"color\":_vm.gridColour},on:{\"update:color\":function($event){_vm.gridColour=$event}}}),_c('label',{attrs:{\"for\":\"fowColour\"}},[_vm._v(\"FOW Colour:\")]),_c('color-picker',{attrs:{\"id\":\"fowColour\",\"color\":_vm.fowColour},on:{\"update:color\":function($event){_vm.fowColour=$event}}}),_c('label',{attrs:{\"for\":\"rulerColour\"}},[_vm._v(\"Ruler Colour:\")]),_c('color-picker',{attrs:{\"id\":\"rulerColour\",\"color\":_vm.rulerColour},on:{\"update:color\":function($event){_vm.rulerColour=$event}}})],1)])],2),_c('router-link',{staticClass:\"accordion\",staticStyle:{\"text-decoration\":\"none\",\"display\":\"inline-block\",\"position\":\"absolute\",\"bottom\":\"0\"},attrs:{\"to\":\"/dashboard\"}},[_vm._v(\"Exit\")])],1):_vm._e()]),_c('transition',{attrs:{\"name\":\"locations\"},on:{\"enter\":function($event){_vm.$refs.rm.style.transition = 'top 500ms'}}},[(_vm.IS_DM && _vm.visible.locations)?_c('div',{attrs:{\"id\":\"locations-menu\"}},[_c('div',[_vm._l((_vm.locations),function(location){return _c('div',{key:location,on:{\"click\":function($event){_vm.changeLocation(location)}}},[_vm._v(_vm._s(location))])}),_c('div',{on:{\"click\":_vm.createLocation}},[_c('i',{staticClass:\"fas fa-plus\"})])],2)]):_vm._e()]),_c('img',{attrs:{\"id\":\"dragImage\"}})],1)}\nvar staticRenderFns = [function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('a',{attrs:{\"href\":\"#\"}},[_c('i',{staticClass:\"far fa-compass\"})])},function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('a',{attrs:{\"href\":\"#\"}},[_c('i',{staticClass:\"fas fa-cog\"})])},function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('span',{staticClass:\"rm-topper\"},[_c('i',{staticClass:\"icon-share-alt\"})])}]\n\nexport { render, staticRenderFns }","export * from \"-!cache-loader?{\\\"cacheDirectory\\\":\\\"node_modules/.cache/vue-loader\\\",\\\"cacheIdentifier\\\":\\\"74f43d04-vue-loader-template\\\"}!../../../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./menu.vue?vue&type=template&id=aaf3f05e&scoped=true&\"","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('Modal',{attrs:{\"visible\":_vm.visible,\"mask\":false},on:{\"close\":function($event){_vm.visible = false}},scopedSlots:_vm._u([{key:\"header\",fn:function(m){return _c('div',{staticClass:\"modal-header\",attrs:{\"draggable\":\"true\"},on:{\"dragstart\":m.dragStart,\"dragend\":m.dragEnd}},[_c('div',[_vm._v(\"Edit asset\")]),_c('div',{staticClass:\"header-close\",on:{\"click\":function($event){_vm.visible = false}}},[_c('i',{staticClass:\"far fa-window-close\"})])])}}])},[_c('div',{staticClass:\"modal-body\"},[_c('div',{staticClass:\"grid\"},[_c('label',{attrs:{\"for\":\"shapeselectiondialog-name\"}},[_vm._v(\"Name\")]),_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.shape.name),expression:\"shape.name\"}],staticStyle:{\"grid-column\":\"numerator / remove\"},attrs:{\"type\":\"text\",\"id\":\"shapeselectiondialog-name\",\"disabled\":!_vm.owned},domProps:{\"value\":(_vm.shape.name)},on:{\"change\":function($event){_vm.updateShape(false)},\"input\":function($event){if($event.target.composing){ return; }_vm.$set(_vm.shape, \"name\", $event.target.value)}}}),_c('div',{style:({opacity: _vm.shape.nameVisible ? 1.0 : 0.3, textAlign: 'center'}),attrs:{\"disabled\":!_vm.owned},on:{\"click\":function($event){_vm.shape.nameVisible = !_vm.shape.nameVisible;_vm.updateShape(false)}}},[_c('i',{staticClass:\"fas fa-eye\"})]),_c('label',{attrs:{\"for\":\"shapeselectiondialog-istoken\"}},[_vm._v(\"Is a token\")]),_c('input',{staticClass:\"styled-checkbox\",staticStyle:{\"grid-column-start\":\"remove\"},attrs:{\"type\":\"checkbox\",\"id\":\"shapeselectiondialog-istoken\",\"disabled\":!_vm.owned},domProps:{\"checked\":_vm.shape.isToken},on:{\"click\":_vm.setToken}}),_c('label',{attrs:{\"for\":\"shapeselectiondialog-visionblocker\"}},[_vm._v(\"Blocks vision/light\")]),_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.shape.visionObstruction),expression:\"shape.visionObstruction\"}],staticStyle:{\"grid-column-start\":\"remove\"},attrs:{\"type\":\"checkbox\",\"id\":\"shapeselectiondialog-visionblocker\",\"disabled\":!_vm.owned},domProps:{\"checked\":Array.isArray(_vm.shape.visionObstruction)?_vm._i(_vm.shape.visionObstruction,null)>-1:(_vm.shape.visionObstruction)},on:{\"change\":[function($event){var $$a=_vm.shape.visionObstruction,$$el=$event.target,$$c=$$el.checked?(true):(false);if(Array.isArray($$a)){var $$v=null,$$i=_vm._i($$a,$$v);if($$el.checked){$$i<0&&(_vm.$set(_vm.shape, \"visionObstruction\", $$a.concat([$$v])))}else{$$i>-1&&(_vm.$set(_vm.shape, \"visionObstruction\", $$a.slice(0,$$i).concat($$a.slice($$i+1))))}}else{_vm.$set(_vm.shape, \"visionObstruction\", $$c)}},_vm.setVisionBlocker]}}),_c('label',{attrs:{\"for\":\"shapeselectiondialog-moveblocker\"}},[_vm._v(\"Blocks movement\")]),_c('input',{staticStyle:{\"grid-column-start\":\"remove\"},attrs:{\"type\":\"checkbox\",\"id\":\"shapeselectiondialog-moveblocker\",\"disabled\":!_vm.owned},domProps:{\"checked\":_vm.shape.movementObstruction},on:{\"click\":_vm.setMovementBlocker}}),_c('label',{attrs:{\"for\":\"shapeselectiondialog-strokecolour\"}},[_vm._v(\"Border colour\")]),_c('color-picker',{staticStyle:{\"grid-column-start\":\"remove\"},attrs:{\"color\":_vm.shape.strokeColour,\"disabled\":!_vm.owned},on:{\"update:color\":function($event){_vm.$set(_vm.shape, \"strokeColour\", $event)},\"input\":function($event){_vm.updateShape(true, true)},\"change\":function($event){_vm.updateShape(true)}}}),_c('label',{attrs:{\"for\":\"shapeselectiondialog-fillcolour\"}},[_vm._v(\"Fill colour\")]),_c('color-picker',{staticStyle:{\"grid-column-start\":\"remove\"},attrs:{\"color\":_vm.shape.fillColour,\"disabled\":!_vm.owned},on:{\"update:color\":function($event){_vm.$set(_vm.shape, \"fillColour\", $event)},\"input\":function($event){_vm.updateShape(true, true)},\"change\":function($event){_vm.updateShape(true)}}}),_c('div',{staticClass:\"spanrow header\"},[_vm._v(\"Access\")]),_vm._l((_vm.shape.owners),function(owner){return [_c('input',{key:owner,staticStyle:{\"grid-column-start\":\"name\"},attrs:{\"type\":\"text\",\"placeholder\":\"name\",\"disabled\":!_vm.owned},domProps:{\"value\":owner},on:{\"change\":function($event){_vm.updateOwner($event, owner)}}}),(owner !== '')?_c('div',{key:'remove-' + owner,style:({opacity: _vm.owned ? 1.0 : 0.3, textAlign: 'center', gridColumnStart: 'remove'}),attrs:{\"disabled\":!_vm.owned},on:{\"click\":function($event){_vm.removeOwner(owner)}}},[_c('i',{staticClass:\"fas fa-trash-alt\"})]):_vm._e()]}),_c('div',{staticClass:\"spanrow header\"},[_vm._v(\"Trackers\")]),_vm._l((_vm.shape.trackers),function(tracker){return [_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(tracker.name),expression:\"tracker.name\"}],key:'name-'+tracker.uuid,staticStyle:{\"grid-column-start\":\"name\"},attrs:{\"type\":\"text\",\"placeholder\":\"name\",\"disabled\":!_vm.owned},domProps:{\"value\":(tracker.name)},on:{\"change\":function($event){_vm.updateShape(false);},\"input\":function($event){if($event.target.composing){ return; }_vm.$set(tracker, \"name\", $event.target.value)}}}),_c('input',{directives:[{name:\"model\",rawName:\"v-model.number\",value:(tracker.value),expression:\"tracker.value\",modifiers:{\"number\":true}}],key:'value-'+tracker.uuid,attrs:{\"type\":\"text\",\"title\":\"Current value\",\"disabled\":!_vm.owned},domProps:{\"value\":(tracker.value)},on:{\"change\":function($event){_vm.updateShape(false)},\"input\":function($event){if($event.target.composing){ return; }_vm.$set(tracker, \"value\", _vm._n($event.target.value))},\"blur\":function($event){_vm.$forceUpdate()}}}),_c('span',{key:'fspan-'+tracker.uuid},[_vm._v(\"/\")]),_c('input',{directives:[{name:\"model\",rawName:\"v-model.number\",value:(tracker.maxvalue),expression:\"tracker.maxvalue\",modifiers:{\"number\":true}}],key:'maxvalue-'+tracker.uuid,attrs:{\"type\":\"text\",\"title\":\"Current value\",\"disabled\":!_vm.owned},domProps:{\"value\":(tracker.maxvalue)},on:{\"change\":function($event){_vm.updateShape(false)},\"input\":function($event){if($event.target.composing){ return; }_vm.$set(tracker, \"maxvalue\", _vm._n($event.target.value))},\"blur\":function($event){_vm.$forceUpdate()}}}),_c('span',{key:'sspan-'+tracker.uuid}),_c('div',{key:'visibility-'+tracker.uuid,style:({opacity: tracker.visible ? 1.0 : 0.3, textAlign: 'center'}),attrs:{\"disabled\":!_vm.owned},on:{\"click\":function($event){tracker.visible = !tracker.visible;_vm.updateShape(false)}}},[_c('i',{staticClass:\"fas fa-eye\"})]),_c('span',{key:'tspan-'+tracker.uuid}),(tracker.name !== '' || tracker.value !== 0)?_c('div',{key:'remove-'+tracker.uuid,style:({opacity: _vm.owned ? 1.0 : 0.3, textAlign: 'center'}),attrs:{\"disabled\":!_vm.owned},on:{\"click\":function($event){_vm.removeTracker(tracker.uuid)}}},[_c('i',{staticClass:\"fas fa-trash-alt\"})]):_vm._e()]}),_c('div',{staticClass:\"spanrow header\"},[_vm._v(\"Auras\")]),_vm._l((_vm.shape.auras),function(aura){return [_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(aura.name),expression:\"aura.name\"}],key:'name-'+aura.uuid,staticStyle:{\"grid-column-start\":\"name\"},attrs:{\"type\":\"text\",\"placeholder\":\"name\",\"disabled\":!_vm.owned},domProps:{\"value\":(aura.name)},on:{\"change\":function($event){_vm.updateShape(false)},\"input\":function($event){if($event.target.composing){ return; }_vm.$set(aura, \"name\", $event.target.value)}}}),_c('input',{directives:[{name:\"model\",rawName:\"v-model.number\",value:(aura.value),expression:\"aura.value\",modifiers:{\"number\":true}}],key:'value-'+aura.uuid,attrs:{\"type\":\"text\",\"title\":\"Current value\",\"disabled\":!_vm.owned},domProps:{\"value\":(aura.value)},on:{\"change\":function($event){_vm.updateShape(true)},\"input\":function($event){if($event.target.composing){ return; }_vm.$set(aura, \"value\", _vm._n($event.target.value))},\"blur\":function($event){_vm.$forceUpdate()}}}),_c('span',{key:'fspan-'+aura.uuid},[_vm._v(\"/\")]),_c('input',{directives:[{name:\"model\",rawName:\"v-model.number\",value:(aura.dim),expression:\"aura.dim\",modifiers:{\"number\":true}}],key:'dimvalue-'+aura.uuid,attrs:{\"type\":\"text\",\"title\":\"Dim value\",\"disabled\":!_vm.owned},domProps:{\"value\":(aura.dim)},on:{\"change\":function($event){_vm.updateShape(true)},\"input\":function($event){if($event.target.composing){ return; }_vm.$set(aura, \"dim\", _vm._n($event.target.value))},\"blur\":function($event){_vm.$forceUpdate()}}}),_c('color-picker',{key:'colour-'+aura.uuid,attrs:{\"color\":aura.colour,\"disabled\":!_vm.owned},on:{\"update:color\":function($event){_vm.$set(aura, \"colour\", $event)},\"input\":function($event){_vm.updateAuraColour(aura, $event)},\"change\":function($event){_vm.updateShape(true)}}}),_c('div',{key:'visibility-'+aura.uuid,style:({opacity: aura.visible ? 1.0 : 0.3, textAlign: 'center'}),attrs:{\"disabled\":!_vm.owned},on:{\"click\":function($event){aura.visible = !aura.visible;_vm.updateShape(true)}}},[_c('i',{staticClass:\"fas fa-eye\"})]),_c('div',{key:'visionsource-'+aura.uuid,style:({opacity: aura.visionSource ? 1.0 : 0.3, textAlign: 'center'}),attrs:{\"disabled\":!_vm.owned},on:{\"click\":function($event){_vm.updateAuraVisionSource(aura)}}},[_c('i',{staticClass:\"fas fa-lightbulb\"})]),(aura.name !== '' || aura.value !== 0)?_c('div',{key:'remove-'+aura.uuid,style:({opacity: _vm.owned ? 1.0 : 0.3, textAlign: 'center'}),attrs:{\"disabled\":!_vm.owned},on:{\"click\":function($event){_vm.removeAura(aura.uuid)}}},[_c('i',{staticClass:\"fas fa-trash-alt\"})]):_vm._e()]}),_c('div',{staticClass:\"spanrow header\"},[_vm._v(\"Labels\")]),_c('div',{staticClass:\"spanrow\",attrs:{\"id\":\"labels\"}},[_vm._l((_vm.shape.labels),function(label){return _c('div',{key:label.uuid,staticClass:\"label\"},[(label.category)?[_c('div',{staticClass:\"label-user\"},[_vm._v(_vm._s(label.category))]),_c('div',{staticClass:\"label-main\",on:{\"click\":function($event){_vm.removeLabel(label.uuid)}}},[_vm._v(_vm._s(label.name))])]:_vm._e(),(!label.category)?[_c('div',{staticClass:\"label-main\",on:{\"click\":function($event){_vm.removeLabel(label.uuid)}}},[_vm._v(_vm._s(label.name))])]:_vm._e()],2)}),(_vm.owned)?_c('div',{staticClass:\"label\",attrs:{\"id\":\"label-add\"}},[_c('div',{staticClass:\"label-main\",on:{\"click\":_vm.openLabelManager}},[_vm._v(\"+\")])]):_vm._e()],2),_c('div',{staticClass:\"spanrow header\"},[_vm._v(\"Annotation\")]),_c('textarea',{staticClass:\"spanrow\",attrs:{\"disabled\":!_vm.owned},domProps:{\"value\":_vm.shape.annotation},on:{\"change\":_vm.updateAnnotation}})],2)])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","export * from \"-!cache-loader?{\\\"cacheDirectory\\\":\\\"node_modules/.cache/vue-loader\\\",\\\"cacheIdentifier\\\":\\\"74f43d04-vue-loader-template\\\"}!../../../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./edit_dialog.vue?vue&type=template&id=23de098e&scoped=true&\"","import { ServerCircle } from \"@/game/comm/types/shapes\";\nimport { GlobalPoint, LocalPoint, Vector } from \"@/game/geom\";\nimport { BoundingRect } from \"@/game/shapes/boundingrect\";\nimport { Shape } from \"@/game/shapes/shape\";\nimport { gameStore } from \"@/game/store\";\nimport { calculateDelta } from \"@/game/ui/tools/utils\";\nimport { g2l, g2lz, l2g } from \"@/game/units\";\nimport { getFogColour } from \"@/game/utils\";\n\nexport class Circle extends Shape {\n type = \"circle\";\n r: number;\n constructor(center: GlobalPoint, r: number, fillColour?: string, strokeColour?: string, uuid?: string) {\n super(center, fillColour, strokeColour, uuid);\n this.r = r || 1;\n }\n asDict(): ServerCircle {\n // const base = this.getBaseDict();\n // base.r = this.r;\n // base.border = this.border;\n // return base;\n return Object.assign(this.getBaseDict(), {\n radius: this.r,\n });\n }\n fromDict(data: ServerCircle) {\n super.fromDict(data);\n this.r = data.radius;\n }\n getBoundingBox(): BoundingRect {\n return new BoundingRect(\n new GlobalPoint(this.refPoint.x - this.r, this.refPoint.y - this.r),\n this.r * 2,\n this.r * 2,\n );\n }\n\n get points() {\n return this.getBoundingBox().points;\n }\n\n draw(ctx: CanvasRenderingContext2D) {\n super.draw(ctx);\n ctx.beginPath();\n if (this.fillColour === \"fog\") ctx.fillStyle = getFogColour();\n else ctx.fillStyle = this.fillColour;\n const loc = g2l(this.refPoint);\n ctx.arc(loc.x, loc.y, g2lz(this.r), 0, 2 * Math.PI);\n ctx.fill();\n if (this.strokeColour !== \"rgba(0, 0, 0, 0)\") {\n ctx.beginPath();\n ctx.lineWidth = g2lz(5);\n ctx.strokeStyle = this.strokeColour;\n ctx.arc(loc.x, loc.y, g2lz(this.r), 0, 2 * Math.PI);\n ctx.stroke();\n }\n }\n contains(point: GlobalPoint): boolean {\n return (point.x - this.refPoint.x) ** 2 + (point.y - this.refPoint.y) ** 2 < this.r ** 2;\n }\n center(): GlobalPoint;\n center(centerPoint: GlobalPoint): void;\n center(centerPoint?: GlobalPoint): GlobalPoint | void {\n if (centerPoint === undefined) return this.refPoint;\n this.refPoint = centerPoint;\n }\n visibleInCanvas(canvas: HTMLCanvasElement): boolean {\n return this.getBoundingBox().visibleInCanvas(canvas);\n } // TODO\n snapToGrid() {\n const gs = gameStore.gridSize;\n let targetX;\n let targetY;\n if (((2 * this.r) / gs) % 2 === 0) {\n targetX = Math.round(this.refPoint.x / gs) * gs;\n } else {\n targetX = Math.round((this.refPoint.x - gs / 2) / gs) * gs + this.r;\n }\n if (((2 * this.r) / gs) % 2 === 0) {\n targetY = Math.round(this.refPoint.y / gs) * gs;\n } else {\n targetY = Math.round((this.refPoint.y - gs / 2) / gs) * gs + this.r;\n }\n const delta = calculateDelta(new Vector(targetX - this.refPoint.x, targetY - this.refPoint.y), this);\n this.refPoint = this.refPoint.add(delta);\n this.invalidate(false);\n }\n resizeToGrid() {\n const gs = gameStore.gridSize;\n this.r = Math.max(Math.round(this.r / gs) * gs, gs / 2);\n this.invalidate(false);\n }\n resize(resizePoint: number, point: LocalPoint) {\n const z = gameStore.zoomFactor;\n const diff = l2g(point).subtract(this.refPoint);\n this.r = Math.sqrt(Math.pow(diff.length(), 2) / 2);\n }\n}\n","\n\n\n\n\n\n\n\n\n\n\n\n\n\nimport Tool from \"@/game/ui/tools/tool.vue\";\n\nimport { GlobalPoint } from \"@/game/geom\";\nimport { layerManager } from \"@/game/layers/manager\";\nimport { BaseRect } from \"@/game/shapes/baserect\";\nimport { Rect } from \"@/game/shapes/rect\";\nimport { gameStore } from \"@/game/store\";\nimport { l2g } from \"@/game/units\";\nimport { getMouse } from \"@/game/utils\";\nimport Component from \"vue-class-component\";\n\n@Component\nexport default class MapTool extends Tool {\n name = \"Map\";\n active = false;\n xCount = 3;\n yCount = 3;\n startPoint: GlobalPoint | null = null;\n rect: Rect | null = null;\n\n onMouseDown(event: MouseEvent) {\n const layer = layerManager.getLayer();\n if (layer === undefined) {\n console.log(\"No active layer!\");\n return;\n }\n this.active = true;\n\n this.startPoint = l2g(getMouse(event));\n this.rect = new Rect(this.startPoint.clone(), 0, 0, \"rgba(0,0,0,0)\", \"black\");\n layer.addShape(this.rect, false, false);\n }\n onMouseMove(event: MouseEvent) {\n if (!this.active || this.rect === null || this.startPoint === null) return;\n const layer = layerManager.getLayer();\n if (layer === undefined) {\n console.log(\"No active layer!\");\n return;\n }\n\n const endPoint = l2g(getMouse(event));\n\n this.rect.w = Math.abs(endPoint.x - this.startPoint.x);\n this.rect.h = Math.abs(endPoint.y - this.startPoint.y);\n this.rect.refPoint = new GlobalPoint(\n Math.min(this.startPoint.x, endPoint.x),\n Math.min(this.startPoint.y, endPoint.y),\n );\n layer.invalidate(false);\n }\n onMouseUp(event: MouseEvent) {\n if (!this.active || this.rect === null) return;\n const layer = layerManager.getLayer();\n if (layer === undefined) {\n console.log(\"No active layer!\");\n return;\n }\n this.active = false;\n\n if (layer.selection.length !== 1) {\n layer.removeShape(this.rect, false, false);\n return;\n }\n\n const w = this.rect.w;\n const h = this.rect.h;\n const sel = layer.selection[0];\n\n if (sel instanceof BaseRect) {\n sel.w *= (this.xCount * gameStore.gridSize) / w;\n sel.h *= (this.yCount * gameStore.gridSize) / h;\n }\n\n layer.removeShape(this.rect, false, false);\n }\n}\n","import { render, staticRenderFns } from \"./load.vue?vue&type=template&id=ff095222&\"\nimport script from \"./load.vue?vue&type=script&lang=ts&\"\nexport * from \"./load.vue?vue&type=script&lang=ts&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\ncomponent.options.__file = \"load.vue\"\nexport default component.exports","import Tool from \"@/game/ui/tools/tool.vue\";\n\nimport { sendClientOptions } from \"@/game/api/utils\";\nimport { LocalPoint } from \"@/game/geom\";\nimport { layerManager } from \"@/game/layers/manager\";\nimport { gameStore } from \"@/game/store\";\nimport { getMouse } from \"@/game/utils\";\nimport Component from \"vue-class-component\";\n\n@Component\nexport default class PanTool extends Tool {\n name = \"Pan\";\n panStart = new LocalPoint(0, 0);\n active = false;\n\n onMouseDown(event: MouseEvent) {\n this.panStart = getMouse(event);\n this.active = true;\n }\n onMouseMove(event: MouseEvent) {\n if (!this.active) return;\n const mouse = getMouse(event);\n const distance = mouse.subtract(this.panStart).multiply(1 / gameStore.zoomFactor);\n gameStore.increasePanX(Math.round(distance.x));\n gameStore.increasePanY(Math.round(distance.y));\n this.panStart = mouse;\n layerManager.invalidate();\n }\n onMouseUp(event: MouseEvent) {\n this.active = false;\n sendClientOptions();\n }\n}\n","import { render, staticRenderFns } from \"./selectcontext.vue?vue&type=template&id=44a31e42&scoped=true&\"\nimport script from \"./selectcontext.vue?vue&type=script&lang=ts&\"\nexport * from \"./selectcontext.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./selectcontext.vue?vue&type=style&index=0&id=44a31e42&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"44a31e42\",\n null\n \n)\n\ncomponent.options.__file = \"selectcontext.vue\"\nexport default component.exports","import Vue from \"vue\";\n\nimport { app } from \"@/main\";\n\n// Reference: https://stackoverflow.com/questions/105034/create-guid-uuid-in-javascript\nexport function uuidv4() {\n return \"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx\".replace(/[xy]/g, c => {\n const r = (Math.random() * 16) | 0;\n const v = c === \"x\" ? r : (r & 0x3) | 0x8;\n return v.toString(16);\n });\n}\n\nexport function capitalize(text: string) {\n return text.charAt(0).toUpperCase() + text.slice(1);\n}\n\nexport function alphSort(a: string, b: string) {\n if (a.toLowerCase() < b.toLowerCase()) return -1;\n else return 1;\n}\n\nexport function getHTMLFont(element: HTMLElement) {\n let font = element.style.font;\n while (font === null && element.parentElement !== null) {\n element = element.parentElement;\n font = element.style.font;\n }\n if (font === null) font = window.getComputedStyle(document.body).getPropertyValue(\"font\");\n return font;\n}\n\nexport function getHTMLTextWidth(text: string, font: string): number {\n let fakeElement = document.getElementById(\"emptycanvas\");\n if (fakeElement === null) {\n fakeElement = document.createElement(\"canvas\");\n fakeElement.id = \"emptycanvas\";\n fakeElement.style.display = \"\";\n document.body.appendChild(fakeElement);\n }\n const ctx = fakeElement.getContext(\"2d\")!;\n ctx.font = font;\n return Math.ceil(ctx.measureText(text).width);\n}\n\nexport function partition(arr: T[], predicate: (n: T) => boolean) {\n const ret: T[][] = [[], []];\n arr.forEach(n => (predicate(n) ? ret[1].push(n) : ret[0].push(n)));\n return ret;\n}\n\nexport function calcFontScale(ctx: CanvasRenderingContext2D, text: string, width: number, height: number) {\n const points = Number(ctx.font.split(\"px\")[0]) * 0.2;\n const fontWidth = ctx.measureText(text).width;\n return Math.min(width / fontWidth, height / points);\n}\n\nexport function fixedEncodeURIComponent(str: string) {\n return encodeURIComponent(str).replace(/[!'()*]/g, c => {\n return \"%\" + c.charCodeAt(0).toString(16);\n });\n}\n\nexport class OrderedMap {\n keys: K[] = [];\n values: V[] = [];\n\n get length() {\n return this.keys.length;\n }\n\n get(key: K) {\n return this.values[this.keys.indexOf(key)];\n }\n getIndexValue(idx: number) {\n return this.values[idx];\n }\n getIndexKey(idx: number) {\n return this.keys[idx];\n }\n set(key: K, value: V) {\n this.keys.push(key);\n this.values.push(value);\n }\n has(key: K) {\n return this.indexOf(key) >= 0;\n }\n indexOf(element: K) {\n return this.keys.indexOf(element);\n }\n remove(element: K) {\n const idx = this.indexOf(element);\n this.keys.splice(idx, 1);\n this.values.splice(idx, 1);\n }\n}\n\nexport function getComponent(): T {\n return app.$children[0].$refs.activeComponent;\n}\n\nexport function getRef(ref: string): T {\n const active = app.$children[0].$refs.activeComponent;\n return active.$refs[ref];\n}\n","import { render, staticRenderFns } from \"./contextMenu.vue?vue&type=template&id=606797b4&\"\nimport script from \"./contextMenu.vue?vue&type=script&lang=ts&\"\nexport * from \"./contextMenu.vue?vue&type=script&lang=ts&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\ncomponent.options.__file = \"contextMenu.vue\"\nexport default component.exports","import { EdgeCirculator, Point, Sign, Triangle, Vertex } from \"./tds\";\n\ntype Line = number[];\n\nexport function cw(index: number) {\n return (index + 2) % 3;\n}\n\nexport function ccw(index: number) {\n return (index + 1) % 3;\n}\n\nexport function edgeInfo(va: Vertex, vb: Vertex) {\n const ec = new EdgeCirculator(va, null);\n if (ec.valid) {\n do {\n const indv = 3 - ec.t!.indexV(va) - ec.ri;\n const v = ec.t!.vertices[indv]!;\n if (!v.infinite) {\n if (v === vb) {\n return { includes: true, vi: vb, fr: ec.t!, i: ec.ri };\n } else {\n const orient = orientation(va.point!, vb.point!, v.point!);\n if (orient === Sign.COLLINEAR && collinearBetween(va.point!, v.point!, vb.point!)) {\n return { includes: true, vi: v, fr: ec.t!, i: ec.ri };\n }\n }\n }\n } while (ec.next());\n }\n return { includes: false };\n}\n\nexport function collinearBetween(p: Point, q: Point, r: Point): boolean {\n let cPQ: Sign;\n let cQR: Sign;\n if (compare(0, p, r) === Sign.EQUAL) {\n cPQ = compare(1, p, q);\n cQR = compare(1, q, r);\n } else {\n cPQ = compare(0, p, q);\n cQR = compare(0, q, r);\n }\n return (cPQ === Sign.SMALLER && cQR === Sign.SMALLER) || (cPQ === Sign.LARGER && cQR === Sign.LARGER);\n}\n\nfunction compare(index: number, a: Point, b: Point): Sign {\n if (a[index] < b[index]) return Sign.SMALLER;\n if (a[index] > b[index]) return Sign.LARGER;\n return Sign.EQUAL;\n}\n\nexport function orientation(p: Point, q: Point, r: Point) {\n const px = p[0];\n const py = p[1];\n const qx = q[0];\n const qy = q[1];\n const rx = r[0];\n const ry = r[1];\n const pqx = qx - px;\n const pqy = qy - py;\n const prx = rx - px;\n const pry = ry - py;\n const det = determinant(pqx, pqy, prx, pry);\n let maxX = Math.abs(pqx);\n let maxY = Math.abs(pqy);\n const aprX = Math.abs(prx);\n const aprY = Math.abs(pry);\n if (maxX < aprX) maxX = aprX;\n if (maxY < aprY) maxY = aprY;\n if (maxX > maxY) [maxX, maxY] = [maxY, maxX];\n // underflow proection in eps computation?? Math.sqrt(Number.MIN_VALUE, Number.EPSILON)\n if (maxX < 2e-162 && maxX === 0) {\n return Sign.ZERO;\n }\n // overflow protection in det computation\n if (maxY < 1e153) {\n const eps = Number.EPSILON * maxX * maxY;\n if (det > eps) return Sign.POSITIVE;\n if (det < -eps) return Sign.NEGATIVE;\n }\n return Sign.ZERO;\n}\n\nexport function determinant(a00: number, a01: number, a10: number, a11: number) {\n return a00 * a11 - a01 * a10;\n}\n\nexport function hasInexactNegativeOrientation(p: Point, q: Point, r: Point) {\n return determinant(q[0] - p[0], q[1] - p[1], r[0] - p[0], r[1] - p[1]) < 0;\n}\n\nexport function sideOfOrientedCircle(t: Triangle, p: Point, perturb: boolean): Sign {\n if (!t.isInfinite())\n return sideOfOrientedCircleP(t.vertices[0]!.point!, t.vertices[1]!.point!, t.vertices[2]!.point!, p, perturb);\n throw new Error(\"SSS\");\n}\n\nfunction sideOfOrientedCircleP(p0: Point, p1: Point, p2: Point, p: Point, perturb: boolean): Sign {\n const os = getOrientedSide(p0, p1, p2, p);\n if (os !== Sign.ON_ORIENTED_BOUNDARY || !perturb) return os;\n const points = [p0, p1, p2, p];\n points.sort((a, b) => a[0] - b[0] || a[1] - b[1]);\n for (const point of points.reverse()) {\n if (point === p) return Sign.ON_NEGATIVE_SIDE;\n let o = orientation(p0, p1, p);\n if (point === p2 && o !== Sign.COLLINEAR) return o;\n o = orientation(p0, p, p2);\n if (point === p1 && o !== Sign.COLLINEAR) return o;\n o = orientation(p, p1, p2);\n if (point === p0 && o !== Sign.COLLINEAR) return o;\n }\n return Sign.ON_NEGATIVE_SIDE;\n}\n\nexport function xyEqual(p: Point, q: Point) {\n return p[0] === q[0] && p[1] === q[1];\n}\n\nexport function xySmaller(p: Point, q: Point) {\n return p[0] < q[0] || (p[0] === q[0] && p[1] < q[1]);\n}\n\nexport function xyCompare(p: Point, q: Point) {\n if (xySmaller(p, q)) return Sign.SMALLER;\n if (xyEqual(p, q)) return Sign.EQUAL;\n return Sign.LARGER;\n}\n\nfunction getOrientedSide(p: Point, q: Point, r: Point, t: Point): Sign {\n const qpx = q[0] - p[0];\n const qpy = q[1] - p[1];\n const rpx = r[0] - p[0];\n const rpy = r[1] - p[1];\n const tpx = t[0] - p[0];\n const tpy = t[1] - p[1];\n const tqx = t[0] - q[0];\n const tqy = t[1] - q[1];\n const rqx = r[0] - q[0];\n const rqy = r[1] - q[1];\n\n const det = determinant(qpx * tpy - qpy * tpx, tpx * tqx + tpy * tqy, qpx * rpy - qpy * rpx, rpx * rqx + rpy * rqy);\n let maxx = Math.abs(qpx);\n let maxy = Math.abs(qpy);\n const arpx = Math.abs(rpx);\n const arpy = Math.abs(rpy);\n const atqx = Math.abs(tqx);\n const atqy = Math.abs(tqy);\n const atpx = Math.abs(tpx);\n const atpy = Math.abs(tpy);\n const arqx = Math.abs(rqx);\n const arqy = Math.abs(rqy);\n\n if (maxx < arpx) maxx = arpx;\n if (maxx < atpx) maxx = atpx;\n if (maxx < atqx) maxx = atqx;\n if (maxx < arqx) maxx = arqx;\n\n if (maxy < arpy) maxy = arpy;\n if (maxy < atpy) maxy = atpy;\n if (maxy < atqy) maxy = atqy;\n if (maxy < arqy) maxy = arqy;\n\n if (maxx > maxy) [maxx, maxy] = [maxy, maxx];\n\n if (maxx < 1e-73 && maxx === 0) return Sign.ON_ORIENTED_BOUNDARY;\n // sqrt(sqrt(max_double/16\n else if (maxy < 1e76) {\n const eps = Number.EPSILON * maxx * maxy * (maxy * maxy);\n if (det > eps) return Sign.ON_POSITIVE_SIDE;\n if (det < -eps) return Sign.ON_NEGATIVE_SIDE;\n }\n\n return Sign.ZERO;\n}\n\nfunction segSegDoIntersectCrossing(p1: Point, p2: Point, p3: Point, p4: Point): boolean {\n switch (orientation(p1, p2, p3)) {\n case Sign.LEFT_TURN:\n return orientation(p3, p4, p2) !== Sign.RIGHT_TURN;\n case Sign.RIGHT_TURN:\n return orientation(p3, p4, p2) !== Sign.LEFT_TURN;\n case Sign.COLLINEAR:\n return true;\n }\n}\n\nfunction segSegDoIntersectContained(p1: Point, p2: Point, p3: Point, p4: Point): boolean {\n switch (orientation(p1, p2, p3)) {\n case Sign.LEFT_TURN:\n return orientation(p1, p2, p4) !== Sign.LEFT_TURN;\n case Sign.RIGHT_TURN:\n return orientation(p1, p2, p4) !== Sign.RIGHT_TURN;\n case Sign.COLLINEAR:\n return true;\n }\n}\n\nexport function intersection(pa: Point, pb: Point, pc: Point, pd: Point) {\n const i = getIntersectionType(pa, pb, pc, pd);\n switch (i.intersectionType) {\n case IntersectionType.POINT:\n return i.point!;\n case IntersectionType.NO_INTERSECTION:\n return null;\n }\n throw new Error(\"sdfgighowen\");\n}\n\nenum IntersectionType {\n NO_INTERSECTION,\n POINT,\n SEGMENT,\n}\n\nfunction getLine(p0: Point, p1: Point): Line {\n if (p0[0] === p1[0]) return [1, 0, -p0[0]];\n if (p0[1] === p1[1]) return [0, 1, -p0[1]];\n const x = p1[0] - p0[0];\n const y = p1[1] - p0[1];\n return [-y, x, -x * p0[1] + y * p0[0]];\n}\n\nfunction getIntersectionType(pa: Point, pb: Point, pc: Point, pd: Point) {\n if (!doIntersect(pa, pb, pc, pd)) return { intersectionType: IntersectionType.NO_INTERSECTION, point: null };\n const l1 = getLine(pa, pb);\n const l2 = getLine(pc, pd);\n const info = getIntersectionTypeLine(l1, l2);\n switch (info.intersectionType) {\n case IntersectionType.POINT: {\n return info;\n }\n }\n throw new Error(\"gzseuihgpib\");\n}\n\nfunction getIntersectionTypeLine(la: Line, lb: Line) {\n const denom = la[0] * lb[1] - lb[0] * la[1];\n const nom1 = la[1] * lb[2] - lb[1] * la[2];\n const nom2 = lb[0] * la[2] - la[0] * lb[2];\n return {\n intersectionType: IntersectionType.POINT,\n point: [nom1 / denom, nom2 / denom],\n };\n}\n\nfunction doIntersect(A1: Point, A2: Point, B1: Point, B2: Point): boolean {\n if (xySmaller(A1, A2)) {\n if (xySmaller(B1, B2)) {\n if (xySmaller(A2, B1) || xySmaller(B2, A1)) return false;\n } else {\n if (xySmaller(A2, B2) || xySmaller(B1, A1)) return false;\n }\n } else {\n if (xySmaller(B1, B2)) {\n if (xySmaller(A1, B1) || xySmaller(B2, A2)) return false;\n } else {\n if (xySmaller(A1, B2) || xySmaller(B1, A2)) return false;\n }\n }\n if (xySmaller(A1, A2)) {\n if (xySmaller(B1, B2)) {\n switch (xyCompare(A1, B1)) {\n case Sign.SMALLER: {\n switch (xyCompare(A2, B1)) {\n case Sign.SMALLER:\n return false;\n case Sign.EQUAL:\n return true;\n default: {\n switch (xyCompare(A2, B2)) {\n case Sign.SMALLER:\n return segSegDoIntersectCrossing(A1, A2, B1, B2);\n case Sign.EQUAL:\n return true;\n default:\n return segSegDoIntersectContained(A1, A2, B1, B2);\n }\n }\n }\n }\n case Sign.EQUAL:\n return true;\n default:\n switch (xyCompare(B2, A1)) {\n case Sign.SMALLER:\n return false;\n case Sign.EQUAL:\n return true;\n default: {\n switch (xyCompare(B2, A2)) {\n case Sign.SMALLER:\n return segSegDoIntersectCrossing(B1, B2, A1, A2);\n case Sign.EQUAL:\n return true;\n default:\n return segSegDoIntersectContained(B1, B2, A1, A2);\n }\n }\n }\n }\n } else {\n switch (xyCompare(A1, B2)) {\n case Sign.SMALLER: {\n switch (xyCompare(A2, B2)) {\n case Sign.SMALLER:\n return false;\n case Sign.EQUAL:\n return true;\n default: {\n switch (xyCompare(A2, B1)) {\n case Sign.SMALLER:\n return segSegDoIntersectCrossing(A1, A2, B2, B1);\n case Sign.EQUAL:\n return true;\n default:\n return segSegDoIntersectContained(A1, A2, B2, B1);\n }\n }\n }\n }\n case Sign.EQUAL:\n return true;\n default:\n switch (xyCompare(B1, A1)) {\n case Sign.SMALLER:\n return false;\n case Sign.EQUAL:\n return true;\n default: {\n switch (xyCompare(B1, A2)) {\n case Sign.SMALLER:\n return segSegDoIntersectCrossing(B2, B1, A1, A2);\n case Sign.EQUAL:\n return true;\n default:\n return segSegDoIntersectContained(B2, B1, A1, A2);\n }\n }\n }\n }\n }\n } else {\n if (xySmaller(B1, B2)) {\n switch (xyCompare(A2, B1)) {\n case Sign.SMALLER: {\n switch (xyCompare(A1, B1)) {\n case Sign.SMALLER:\n return false;\n case Sign.EQUAL:\n return true;\n default: {\n switch (xyCompare(A1, B2)) {\n case Sign.SMALLER:\n return segSegDoIntersectCrossing(A2, A1, B1, B2);\n case Sign.EQUAL:\n return true;\n default:\n return segSegDoIntersectContained(A2, A1, B1, B2);\n }\n }\n }\n }\n case Sign.EQUAL:\n return true;\n default:\n switch (xyCompare(B2, A2)) {\n case Sign.SMALLER:\n return false;\n case Sign.EQUAL:\n return true;\n default: {\n switch (xyCompare(B2, A1)) {\n case Sign.SMALLER:\n return segSegDoIntersectCrossing(B1, B2, A2, A1);\n case Sign.EQUAL:\n return true;\n default:\n return segSegDoIntersectContained(B1, B2, A2, A1);\n }\n }\n }\n }\n } else {\n switch (xyCompare(A2, B2)) {\n case Sign.SMALLER: {\n switch (xyCompare(A1, B2)) {\n case Sign.SMALLER:\n return false;\n case Sign.EQUAL:\n return true;\n default: {\n switch (xyCompare(A1, B1)) {\n case Sign.SMALLER:\n return segSegDoIntersectCrossing(A2, A1, B2, B1);\n case Sign.EQUAL:\n return true;\n default:\n return segSegDoIntersectContained(A2, A1, B2, B1);\n }\n }\n }\n }\n case Sign.EQUAL:\n return true;\n default:\n switch (xyCompare(B1, A2)) {\n case Sign.SMALLER:\n return false;\n case Sign.EQUAL:\n return true;\n default: {\n switch (xyCompare(B1, A1)) {\n case Sign.SMALLER:\n return segSegDoIntersectCrossing(B2, B1, A2, A1);\n case Sign.EQUAL:\n return true;\n default:\n return segSegDoIntersectContained(B2, B1, A2, A1);\n }\n }\n }\n }\n }\n }\n}\n\nfunction nextUp(x: number) {\n if (x !== x) {\n return x;\n }\n if (x === -1 / 0) {\n return -Number.MAX_VALUE;\n }\n if (x === +1 / 0) {\n return +1 / 0;\n }\n if (x === +Number.MAX_VALUE) {\n return +1 / 0;\n }\n let y = x * (x < 0 ? 1 - Number.EPSILON / 2 : 1 + Number.EPSILON);\n if (y === x) {\n y = Number.MIN_VALUE * Number.EPSILON > 0 ? x + Number.MIN_VALUE * Number.EPSILON : x + Number.MIN_VALUE;\n }\n if (y === +1 / 0) {\n y = +Number.MAX_VALUE;\n }\n const b = x + (y - x) / 2;\n if (x < b && b < y) {\n y = b;\n }\n const c = (y + x) / 2;\n if (x < c && c < y) {\n y = c;\n }\n return y === 0 ? -0 : y;\n}\n\nexport function ulp(x: number) {\n return x < 0 ? nextUp(x) - x : x + nextUp(-x);\n}\n","import mod from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/ts-loader/index.js??ref--12-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./asset_node.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/ts-loader/index.js??ref--12-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./asset_node.vue?vue&type=script&lang=ts&\"","import mod from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./edit_dialog.vue?vue&type=style&index=0&id=23de098e&scoped=true&lang=css&\"; export default mod; export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./edit_dialog.vue?vue&type=style&index=0&id=23de098e&scoped=true&lang=css&\"","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nimport Vue from \"vue\";\nimport Component from \"vue-class-component\";\nimport { Prop } from \"vue-property-decorator\";\n\n@Component\nexport default class Modal extends Vue {\n @Prop(Boolean) visible!: boolean;\n @Prop({ type: Boolean, default: true }) mask!: boolean;\n\n $refs!: {\n container: HTMLElement;\n };\n\n positioned = false;\n offsetX = 0;\n offsetY = 0;\n screenX = 0;\n screenY = 0;\n dragging = false;\n\n // Example of mounted required: opening note\n mounted() {\n this.updatePosition();\n }\n // Example of updated required: opening initiative\n updated() {\n this.updatePosition();\n }\n\n close(event: MouseEvent) {\n this.$emit(\"close\");\n }\n updatePosition() {\n if (!this.positioned) {\n const container = this.$refs.container;\n if (container.offsetWidth === 0 && container.offsetHeight === 0) return;\n this.$refs.container.style.left = (window.innerWidth - container.offsetWidth) / 2 + \"px\";\n this.$refs.container.style.top = (window.innerHeight - container.offsetHeight) / 2 + \"px\";\n this.positioned = true;\n }\n }\n dragStart(event: DragEvent) {\n if (event === null || event.dataTransfer === null) return;\n event.dataTransfer.setData(\"Hack\", \"\");\n // Because the drag event is happening on the header, we have to change the drag image\n // in order to give the impression that the entire modal is dragged.\n event.dataTransfer.setDragImage(this.$refs.container, event.offsetX, event.offsetY);\n this.offsetX = event.offsetX;\n this.offsetY = event.offsetY;\n this.screenX = event.screenX;\n this.screenY = event.screenY;\n this.dragging = true;\n }\n dragEnd(event: DragEvent) {\n this.dragging = false;\n let left = event.clientX - this.offsetX;\n let top = event.clientY - this.offsetY;\n if (event.clientX === 0 && event.clientY === 0 && event.pageX === 0 && event.pageY === 0) {\n left = parseInt(this.$refs.container.style.left!, 10) - (this.screenX - event.screenX);\n top = parseInt(this.$refs.container.style.top!, 10) - (this.screenY - event.screenY);\n }\n if (left < 0) left = 0;\n if (left > window.innerWidth - 100) left = window.innerWidth - 100;\n if (top < 0) top = 0;\n if (top > window.innerHeight - 100) top = window.innerHeight - 100;\n this.$refs.container.style.left = left + \"px\";\n this.$refs.container.style.top = top + \"px\";\n this.$refs.container.style.display = \"block\";\n }\n dragOver(event: DragEvent) {\n if (this.dragging) this.$refs.container.style.display = \"none\";\n }\n}\n","import io from \"socket.io-client\";\n\nimport { Asset } from \"@/core/comm/types\";\nimport { assetStore } from \"./store\";\n\nexport const socket = io(location.protocol + \"//\" + location.host + \"/pa_assetmgmt\", { autoConnect: false });\n\n// export const socket = io.connect(location.protocol + \"//\" + location.host + \"/pa_assetmgmt\");\nsocket.on(\"connect\", () => {\n console.log(\"Connected\");\n});\nsocket.on(\"disconnect\", () => {\n console.log(\"Disconnected\");\n});\nsocket.on(\"redirect\", (destination: string) => {\n console.log(\"redirecting\");\n window.location.href = destination;\n});\nsocket.on(\"Folder.Root.Set\", (root: number) => {\n assetStore.setRoot(root);\n});\nsocket.on(\"Folder.Set\", (folder: Asset) => {\n assetStore.clear();\n if (folder.children) {\n for (const child of folder.children) {\n assetStore.idMap.set(child.id, child);\n if (child.file_hash) {\n assetStore.files.push(child.id);\n } else {\n assetStore.folders.push(child.id);\n }\n }\n }\n});\nsocket.on(\"Folder.Create\", (folder: Asset) => {\n assetStore.folders.push(folder.id);\n assetStore.idMap.set(folder.id, folder);\n});\nsocket.on(\"Asset.Upload.Finish\", (asset: Asset) => {\n assetStore.idMap.set(asset.id, asset);\n assetStore.files.push(asset.id);\n});\n","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nimport Component from \"vue-class-component\";\n\nimport Accordion from \"@/core/components/accordion.vue\";\nimport Tool from \"@/game/ui/tools/tool.vue\";\n\nimport { socket } from \"@/game/api/socket\";\nimport { layerManager } from \"@/game/layers/manager\";\nimport { gameStore } from \"@/game/store\";\n\n@Component({\n components: {\n accordion: Accordion,\n },\n})\nexport default class FilterTool extends Tool {\n name = \"Filter\";\n active = false;\n\n get labels() {\n const cat: { [category: string]: [string, string][] } = {};\n for (const uuid of Object.keys(gameStore.labels)) {\n const label = gameStore.labels[uuid];\n if (!label.category) cat[\"\"].push([label.uuid, label.name]);\n else {\n if (!(label.category in cat)) cat[label.category] = [];\n cat[label.category].push([label.uuid, label.name]);\n cat[label.category].sort((a, b) => a[1].localeCompare(b[1]));\n }\n }\n return cat;\n }\n\n get initalValues() {\n const values: { [category: string]: string[] } = {};\n for (const cat of Object.keys(this.labels)) {\n values[cat] = gameStore.labelFilters.filter(f => this.labels[cat].map(l => l[0]).includes(f));\n }\n return values;\n }\n\n get categories() {\n return Object.keys(this.labels).sort();\n }\n\n isFilter(uuid: string): boolean {\n return gameStore.labelFilters.includes(uuid);\n }\n\n toggleFilter(uuid: string) {\n const i = gameStore.labelFilters.indexOf(uuid);\n if (i >= 0) gameStore.labelFilters.splice(i, 1);\n else gameStore.labelFilters.push(uuid);\n layerManager.invalidate();\n }\n\n toggleUnlabeled() {\n gameStore.toggleUnlabeledFilter();\n layerManager.invalidate();\n }\n\n updateSelection(data: { title: string; selection: string[] }) {\n if (!(data.title in this.labels)) return;\n for (const [uuid, _] of this.labels[data.title]) {\n const idx = gameStore.labelFilters.indexOf(uuid);\n const selected = data.selection.includes(uuid);\n if (idx >= 0 && !selected) {\n gameStore.labelFilters.splice(idx, 1);\n socket.emit(\"Labels.Filter.Remove\", uuid);\n } else if (idx < 0 && selected) {\n gameStore.labelFilters.push(uuid);\n socket.emit(\"Labels.Filter.Add\", uuid);\n }\n }\n layerManager.invalidate();\n }\n}\n","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nimport Vue from \"vue\";\nimport Component from \"vue-class-component\";\n\nimport { Prop } from \"vue-property-decorator\";\nimport { gameStore } from '../../game/store';\n\n@Component\nexport default class Accordion extends Vue {\n @Prop(String) title!: string;\n @Prop({ default: true, type: Boolean }) showArrow!: boolean;\n @Prop({ default: () => []}) items!: [string, string][];\n @Prop({ default: () => []}) initialValues!: string[];\n\n selected: string[] = [];\n\n active = false;\n\n mounted() {\n this.selected = this.initialValues;\n this.updateCategory();\n }\n\n toggleDisplay(event: MouseEvent) {\n this.active = !this.active;\n }\n\n toggleCategory() {\n const overall = this.$refs.overall as HTMLInputElement;\n if (overall.checked) this.selected = this.items.map((i) => i[0]);\n else this.selected = [];\n this.$emit(\"selectionupdate\", {title: this.title, selection: this.selected});\n }\n\n updateCategory() {\n const overall = this.$refs.overall as HTMLInputElement;\n if (this.selected.length === 0) {\n overall.checked = false;\n overall.indeterminate = false;\n } else if(this.selected.length === this.items.length) {\n overall.checked = true;\n overall.indeterminate = false;\n } else {\n overall.checked = false;\n overall.indeterminate = true;\n }\n }\n\n toggleSelection(item: string) {\n const found = this.selected.indexOf(item);\n if (found === -1) this.selected.push(item);\n else this.selected.splice(found, 1);\n this.updateCategory();\n this.$emit(\"selectionupdate\", {title: this.title, selection: this.selected});\n }\n}\n","import mod from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./game.vue?vue&type=style&index=0&lang=css&\"; export default mod; export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./game.vue?vue&type=style&index=0&lang=css&\"","import { GlobalPoint, LocalPoint } from \"@/game/geom\";\nimport { BoundingRect } from \"@/game/shapes/boundingrect\";\nimport { Shape } from \"@/game/shapes/shape\";\nimport { g2lx, g2ly, g2lz, l2g } from \"@/game/units\";\nimport { getFogColour } from \"@/game/utils\";\nimport { ServerMultiLine } from \"../comm/types/shapes\";\n\nexport class MultiLine extends Shape {\n type = \"multiline\";\n _points: GlobalPoint[] = [];\n lineWidth: number;\n constructor(\n startPoint: GlobalPoint,\n points?: GlobalPoint[],\n lineWidth?: number,\n strokeColour?: string,\n uuid?: string,\n ) {\n super(startPoint, \"rgba(0, 0, 0, 0)\", strokeColour || \"#000\", uuid);\n this._points = points || [];\n this.lineWidth = lineWidth || 3;\n }\n\n get refPoint() {\n return this._refPoint;\n }\n set refPoint(point: GlobalPoint) {\n const delta = point.subtract(this._refPoint);\n this._refPoint = point;\n for (let i = 0; i < this._points.length; i++) this._points[i] = this._points[i].add(delta);\n }\n\n asDict() {\n return Object.assign(this.getBaseDict(), {\n line_width: this.lineWidth,\n points: this._points.map(p => ({ x: p.x, y: p.y })),\n });\n }\n fromDict(data: ServerMultiLine) {\n super.fromDict(data);\n this._points = data.points.map(p => new GlobalPoint(p.x, p.y));\n }\n get points() {\n return this._points.map(point => [point.x, point.y]);\n }\n getBoundingBox(): BoundingRect {\n let minx: number = this.refPoint.x;\n let maxx: number = this.refPoint.x;\n let miny: number = this.refPoint.y;\n let maxy: number = this.refPoint.y;\n for (const p of this._points) {\n if (p.x < minx) minx = p.x;\n if (p.x > maxx) maxx = p.x;\n if (p.y < miny) miny = p.y;\n if (p.y > maxy) maxy = p.y;\n }\n return new BoundingRect(new GlobalPoint(minx, miny), maxx - minx, maxy - miny);\n }\n draw(ctx: CanvasRenderingContext2D) {\n super.draw(ctx);\n ctx.beginPath();\n ctx.lineCap = \"round\";\n ctx.lineJoin = \"round\";\n ctx.moveTo(g2lx(this.refPoint.x), g2ly(this.refPoint.y));\n for (const p of this._points) ctx.lineTo(g2lx(p.x), g2ly(p.y));\n if (this.strokeColour === \"fog\") ctx.strokeStyle = getFogColour();\n else ctx.strokeStyle = this.strokeColour;\n ctx.lineWidth = g2lz(this.lineWidth);\n ctx.stroke();\n }\n contains(point: GlobalPoint): boolean {\n return this.getBoundingBox().contains(point);\n }\n\n center(): GlobalPoint;\n center(centerPoint: GlobalPoint): void;\n center(centerPoint?: GlobalPoint): GlobalPoint | void {\n return this.getBoundingBox().center();\n }\n visibleInCanvas(canvas: HTMLCanvasElement): boolean {\n return this.getBoundingBox().visibleInCanvas(canvas);\n } // TODO\n snapToGrid(): void {}\n resizeToGrid(): void {}\n resize(resizePoint: number, point: LocalPoint): void {\n if (resizePoint === 0) this._refPoint = l2g(point);\n else this._points[resizePoint - 1] = l2g(point);\n }\n}\n","import { render, staticRenderFns } from \"./draw.vue?vue&type=template&id=639cd890&scoped=true&\"\nimport script from \"./draw.vue?vue&type=script&lang=ts&\"\nexport * from \"./draw.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./draw.vue?vue&type=style&index=0&id=639cd890&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"639cd890\",\n null\n \n)\n\ncomponent.options.__file = \"draw.vue\"\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('modal',{attrs:{\"visible\":_vm.visible,\"mask\":false},on:{\"close\":function($event){_vm.visible = false}},scopedSlots:_vm._u([{key:\"header\",fn:function(m){return _c('div',{staticClass:\"modal-header\",attrs:{\"draggable\":\"true\"},on:{\"dragstart\":m.dragStart,\"dragend\":m.dragEnd}},[_c('div',[_vm._v(\"Initiative\")]),_c('div',{staticClass:\"header-close\",on:{\"click\":function($event){_vm.visible = false}}},[_c('i',{staticClass:\"far fa-window-close\"})])])}}])},[_c('div',{staticClass:\"modal-body\"},[_c('draggable',{attrs:{\"id\":\"initiative-list\",\"options\":{setData: _vm.fakeSetData, disabled: !_vm.$store.state.game.IS_DM}},on:{\"change\":_vm.updateOrder},model:{value:(_vm.data),callback:function ($$v) {_vm.data=$$v},expression:\"data\"}},[_vm._l((_vm.data),function(actor){return [_c('div',{key:actor.uuid,staticStyle:{\"display\":\"flex\",\"flex-direction\":\"column\",\"align-items\":\"flex-end\"}},[_c('div',{staticClass:\"initiative-actor\",class:{'initiative-selected': _vm.currentActor === actor.uuid},style:({'cursor': _vm.$store.state.game.IS_DM && 'move'}),on:{\"mouseenter\":function($event){_vm.toggleHighlight(actor, true)},\"mouseleave\":function($event){_vm.toggleHighlight(actor, false)}}},[(actor.has_img)?[_c('img',{attrs:{\"src\":actor.source,\"width\":\"30px\",\"height\":\"30px\"}})]:[_c('span',{staticStyle:{\"width\":\"auto\"}},[_vm._v(_vm._s(actor.source))])],_c('input',{directives:[{name:\"model\",rawName:\"v-model.lazy.number\",value:(actor.initiative),expression:\"actor.initiative\",modifiers:{\"lazy\":true,\"number\":true}}],class:{'notAllowed': !_vm.owns(actor)},attrs:{\"type\":\"text\",\"placeholder\":\"value\",\"disabled\":!_vm.owns(actor)},domProps:{\"value\":(actor.initiative)},on:{\"change\":[function($event){_vm.$set(actor, \"initiative\", _vm._n($event.target.value))},function($event){_vm.syncInitiative(actor)}],\"blur\":function($event){_vm.$forceUpdate()}}}),_c('div',{staticClass:\"initiative-effects-icon\",class:{'notAllowed': !_vm.owns(actor)},staticStyle:{\"opacity\":\"0.6\"},on:{\"click\":function($event){_vm.createEffect(actor, _vm.getDefaultEffect(), true)}}},[_c('i',{staticClass:\"fas fa-stopwatch\"}),(actor.effects)?[_vm._v(_vm._s(actor.effects.length))]:[_vm._v(\"0\")]],2),_c('div',{class:{'notAllowed': !_vm.owns(actor)},style:({'opacity': actor.visible ? '1.0' : '0.3'}),on:{\"click\":function($event){_vm.toggleOption(actor, 'visible')}}},[_c('i',{staticClass:\"fas fa-eye\"})]),_c('div',{class:{'notAllowed': !_vm.owns(actor)},style:({'opacity': actor.group ? '1.0' : '0.3'}),on:{\"click\":function($event){_vm.toggleOption(actor, 'group')}}},[_c('i',{staticClass:\"fas fa-users\"})]),_c('div',{class:{'notAllowed': !_vm.owns(actor)},style:({'opacity': _vm.owns(actor) ? '1.0' : '0.3'}),on:{\"click\":function($event){_vm.removeInitiative(actor.uuid, true, true)}}},[_c('i',{staticClass:\"fas fa-trash-alt\"})])],2),(actor.effects)?_c('div',{staticClass:\"initiative-effect\"},_vm._l((actor.effects),function(effect){return _c('div',{key:effect.uuid},[_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(effect.name),expression:\"effect.name\"}],attrs:{\"type\":\"text\",\"size\":effect.name.length || 1},domProps:{\"value\":(effect.name)},on:{\"change\":function($event){_vm.updateEffect(actor.uuid, effect, true)},\"input\":function($event){if($event.target.composing){ return; }_vm.$set(effect, \"name\", $event.target.value)}}}),_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(effect.turns),expression:\"effect.turns\"}],attrs:{\"type\":\"text\",\"size\":effect.turns.toString().length || 1},domProps:{\"value\":(effect.turns)},on:{\"change\":function($event){_vm.updateEffect(actor.uuid, effect, true)},\"input\":function($event){if($event.target.composing){ return; }_vm.$set(effect, \"turns\", $event.target.value)}}})])})):_vm._e()])]})],2),_c('div',{attrs:{\"id\":\"initiative-bar\"}},[_c('div',{attrs:{\"id\":\"initiative-round\"}},[_vm._v(\"Round \"+_vm._s(_vm.roundCounter))]),_c('div',{staticStyle:{\"display\":\"flex\"}}),_c('div',{staticClass:\"initiative-bar-button\",class:{'notAllowed': !_vm.$store.state.game.IS_DM},on:{\"click\":function($event){_vm.setRound(0, true); _vm.updateTurn(_vm.data[0].uuid, true)}}},[_c('i',{staticClass:\"fas fa-sync-alt\"})]),_c('div',{staticClass:\"initiative-bar-button\",class:{'notAllowed': !_vm.$store.state.game.IS_DM},on:{\"click\":_vm.nextTurn}},[_c('i',{staticClass:\"fas fa-chevron-right\"})])])],1)])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","export * from \"-!cache-loader?{\\\"cacheDirectory\\\":\\\"node_modules/.cache/vue-loader\\\",\\\"cacheIdentifier\\\":\\\"74f43d04-vue-loader-template\\\"}!../../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./initiative.vue?vue&type=template&id=af4dc61a&scoped=true&\"","import tinycolor from \"tinycolor2\";\n\nimport { LocalPoint } from \"@/game/geom\";\nimport { gameStore } from \"@/game/store\";\n\nexport function getMouse(e: MouseEvent): LocalPoint {\n return new LocalPoint(e.pageX, e.pageY);\n}\n\nexport function getFogColour(opposite: boolean = false): string {\n const tc = tinycolor(gameStore.fowColour);\n if (gameStore.IS_DM) tc.setAlpha(opposite ? 1 : gameStore.fowOpacity);\n else tc.setAlpha(1);\n return tc.toRgbString();\n}\n\nexport function zoomValue(display: number) {\n // Powercurve 0.2/3/10\n // Based on https://stackoverflow.com/a/17102320\n return 1 / (-5 / 3 + (28 / 15) * Math.exp(1.83 * display));\n}\n\nexport function zoomDisplay(value: number) {\n return Math.log((1 / value + 5 / 3) * (15 / 28)) / 1.83;\n}\n","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nimport * as tinycolor from \"tinycolor2\";\nimport Vue from \"vue\";\nimport Component from \"vue-class-component\";\n\nimport { mapState } from \"vuex\";\n\nimport ColorPicker from \"@/core/components/colorpicker.vue\";\nimport Modal from \"@/core/components/modals/modal.vue\";\n\nimport { calcFontScale } from \"@/core/utils\";\nimport { LocalPoint } from \"@/game/geom\";\nimport { layerManager } from \"@/game/layers/manager\";\nimport { CircularToken } from \"@/game/shapes/circulartoken\";\nimport { gameStore } from \"@/game/store\";\nimport { getUnitDistance, l2g } from \"@/game/units\";\nimport { Watch } from \"vue-property-decorator\";\n\n@Component({\n components: {\n Modal,\n \"color-picker\": ColorPicker,\n },\n computed: {\n ...mapState(\"game\", [\"unitSize\"]),\n },\n})\nexport default class CreateTokenModal extends Vue {\n x = 0;\n y = 0;\n visible = false;\n text = \"X\";\n fillColour = \"rgba(255, 255, 255, 1)\";\n borderColour = \"rgba(0, 0, 0, 1)\";\n\n mounted() {\n this.updatePreview();\n }\n\n @Watch(\"text\")\n onTextChange(newValue: string, oldValue: string) {\n this.updatePreview();\n }\n @Watch(\"fillColour\")\n onFillChange(newValue: string, oldValue: string) {\n this.updatePreview();\n }\n @Watch(\"borderColour\")\n onBorderChange(newValue: string, oldValue: string) {\n this.updatePreview();\n }\n\n open(x: number, y: number) {\n this.visible = true;\n this.x = x;\n this.y = y;\n }\n submit() {\n const layer = layerManager.getLayer();\n if (layer === undefined) return;\n const token = new CircularToken(\n l2g(new LocalPoint(this.x, this.y)),\n getUnitDistance(gameStore.unitSize / 2),\n this.text,\n \"10px serif\",\n this.fillColour,\n this.borderColour,\n );\n token.addOwner(gameStore.username);\n layer.addShape(token, true);\n layer.invalidate(false);\n this.visible = false;\n }\n updatePreview() {\n const ctx = (this.$refs.canvas).getContext(\"2d\")!;\n ctx.clearRect(0, 0, ctx.canvas.width, ctx.canvas.height);\n ctx.beginPath();\n const dest = { x: ctx.canvas.width / 2, y: ctx.canvas.height / 2 };\n const r = Math.min(dest.x, dest.y) * 0.9;\n\n ctx.fillStyle = this.fillColour;\n\n ctx.arc(dest.x, dest.y, r, 0, 2 * Math.PI);\n ctx.fill();\n if (this.borderColour !== \"rgba(0, 0, 0, 0)\") {\n ctx.beginPath();\n ctx.lineWidth = 5;\n ctx.strokeStyle = this.borderColour;\n ctx.arc(dest.x, dest.y, r, 0, 2 * Math.PI);\n ctx.stroke();\n }\n ctx.save();\n ctx.textAlign = \"center\";\n ctx.textBaseline = \"middle\";\n const xs = calcFontScale(ctx, this.text, r, r);\n const ys = 0;\n ctx.transform(xs, ys, -ys, xs, dest.x, dest.y);\n ctx.fillStyle = tinycolor.mostReadable(this.fillColour, [\"#000\", \"#fff\"]).toHexString();\n ctx.fillText(this.text, 0, 0);\n ctx.restore();\n }\n}\n","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nimport Vue from \"vue\";\nimport Component from \"vue-class-component\";\n\nimport ConfirmDialog from \"@/core/components/modals/confirm.vue\";\nimport Modal from \"@/core/components/modals/modal.vue\";\n\nimport { getRef } from \"@/core/utils\";\nimport { Note } from \"@/game/comm/types/general\";\nimport { gameStore } from \"@/game/store\";\n\n@Component({\n components: {\n Modal,\n },\n})\nexport default class NoteDialog extends Vue {\n visible = false;\n note: Note | null = null;\n\n open(note: Note) {\n this.visible = true;\n this.note = note;\n }\n calcHeight() {\n if (this.$refs.textarea) {\n const el = this.$refs.textarea;\n el.style.height = \"auto\";\n el.style.height = el.scrollHeight + \"px\";\n // Using the return value without the above did not achieve what I want, so hey /shrug\n return el.scrollHeight + \"px\";\n }\n return \"100px\";\n }\n updateNote() {\n if (this.note) gameStore.updateNote({ note: this.note, sync: true });\n }\n removeNote() {\n getRef(\"confirm\")\n .open(\"Are you sure you wish to remove this?\")\n .then(\n (result: boolean) => {\n if (result && this.note) {\n gameStore.removeNote({ note: this.note, sync: true });\n this.visible = false;\n }\n },\n () => {},\n );\n }\n}\n","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nimport Component from \"vue-class-component\";\n\nimport { Watch } from \"vue-property-decorator\";\n\nimport ColorPicker from \"@/core/components/colorpicker.vue\";\nimport Tool from \"@/game/ui/tools/tool.vue\";\n\nimport { socket } from \"@/game/api/socket\";\nimport { GlobalPoint } from \"@/game/geom\";\nimport { layerManager } from \"@/game/layers/manager\";\nimport { Circle } from \"@/game/shapes/circle\";\nimport { Line } from \"@/game/shapes/line\";\nimport { MultiLine } from \"@/game/shapes/multiline\";\nimport { Polygon } from \"@/game/shapes/polygon\";\nimport { Rect } from \"@/game/shapes/rect\";\nimport { Shape } from \"@/game/shapes/shape\";\nimport { gameStore } from \"@/game/store\";\nimport { getUnitDistance, l2g } from \"@/game/units\";\nimport { getMouse } from \"@/game/utils\";\n\n@Component({\n components: {\n \"color-picker\": ColorPicker,\n },\n})\nexport default class DrawTool extends Tool {\n name = \"Draw\";\n active = false;\n\n startPoint: GlobalPoint | null = null;\n shape: Shape | null = null;\n brushHelper: Circle | null = null;\n ruler: Line | null = null;\n\n fillColour = \"rgba(0, 0, 0, 1)\";\n borderColour = \"rgba(255, 255, 255, 0)\";\n\n shapeSelect = \"square\";\n shapes = [\"square\", \"circle\", \"draw-polygon\", \"paint-brush\"];\n modeSelect = \"normal\";\n modes = [\"normal\", \"reveal\", \"hide\"];\n\n brushSize = getUnitDistance(gameStore.unitSize);\n\n get helperSize(): number {\n if (this.shapeSelect === \"paint-brush\") return this.brushSize / 2;\n return getUnitDistance(this.unitSize) / 8;\n }\n get IS_DM(): boolean {\n return gameStore.IS_DM;\n }\n get unitSize(): number {\n return gameStore.unitSize;\n }\n get useGrid(): boolean {\n return gameStore.useGrid;\n }\n\n @Watch(\"fillColour\")\n onFillChange() {\n if (this.brushHelper) this.brushHelper.fillColour = this.fillColour;\n }\n\n @Watch(\"modeSelect\")\n onModeUpdate(newValue: string, oldValue: string) {\n this.onModeChange(newValue, oldValue);\n }\n\n setupBrush() {\n if (this.brushHelper === null) return;\n if (this.modeSelect === \"reveal\" || this.modeSelect === \"hide\") {\n this.brushHelper.options.set(\"preFogShape\", true);\n this.brushHelper.options.set(\"skipDraw\", true);\n this.brushHelper.fillColour = \"rgba(0, 0, 0, 1)\";\n\n if (this.modeSelect === \"reveal\") this.brushHelper.globalCompositeOperation = \"source-over\";\n else if (this.modeSelect === \"hide\") this.brushHelper.globalCompositeOperation = \"destination-out\";\n } else {\n this.brushHelper.options.delete(\"preFogShape\");\n this.brushHelper.options.delete(\"skipDraw\");\n this.brushHelper.globalCompositeOperation = \"source-over\";\n this.brushHelper.fillColour = this.fillColour;\n }\n }\n onModeChange(newValue: string, oldValue: string) {\n if (this.brushHelper === null) return;\n\n const fowLayer = layerManager.getLayer(\"fow\");\n const normalLayer = layerManager.getLayer();\n if (fowLayer === undefined || normalLayer === undefined) return;\n\n this.setupBrush();\n\n if (newValue !== \"normal\" && oldValue === \"normal\") {\n normalLayer.removeShape(this.brushHelper, false);\n fowLayer.addShape(this.brushHelper, false);\n } else if (newValue === \"normal\" && oldValue !== \"normal\") {\n normalLayer.addShape(this.brushHelper, false);\n fowLayer.removeShape(this.brushHelper, false);\n }\n }\n getLayer() {\n if (this.modeSelect === \"normal\") return layerManager.getLayer();\n return layerManager.getLayer(\"fow\");\n }\n onMouseDown(event: MouseEvent) {\n const layer = this.getLayer();\n if (layer === undefined) {\n console.log(\"No active layer!\");\n return;\n }\n if (!this.active) {\n this.startPoint = l2g(getMouse(event));\n this.active = true;\n switch (this.shapeSelect) {\n case \"square\": {\n this.shape = new Rect(this.startPoint.clone(), 0, 0, this.fillColour, this.borderColour);\n break;\n }\n case \"circle\": {\n this.shape = new Circle(\n this.startPoint.clone(),\n this.helperSize,\n this.fillColour,\n this.borderColour,\n );\n break;\n }\n case \"paint-brush\": {\n this.shape = new MultiLine(this.startPoint.clone(), [], this.brushSize);\n this.shape.fillColour = this.fillColour;\n break;\n }\n case \"draw-polygon\": {\n this.shape = new Polygon(this.startPoint.clone(), [], this.fillColour, this.borderColour);\n break;\n }\n default:\n return;\n }\n\n if (this.modeSelect !== \"normal\") {\n this.shape.options.set(\"preFogShape\", true);\n this.shape.options.set(\"skipDraw\", true);\n this.shape.fillColour = \"rgba(0, 0, 0, 1)\";\n }\n if (this.modeSelect === \"reveal\") this.shape.globalCompositeOperation = \"source-over\";\n else if (this.modeSelect === \"hide\") this.shape.globalCompositeOperation = \"destination-out\";\n\n this.shape.addOwner(gameStore.username);\n if (layer.name === \"fow\" && this.modeSelect === \"normal\") {\n this.shape.visionObstruction = true;\n this.shape.movementObstruction = true;\n }\n layer.addShape(this.shape, true, false, false);\n\n // Push brushhelper to back\n this.pushBrushBack();\n } else if (this.shape !== null && this.shape instanceof Polygon) {\n // For polygon draw\n this.shape._vertices.push(l2g(getMouse(event)));\n }\n if (this.shape !== null && this.shape instanceof Polygon) {\n const lastPoint = l2g(getMouse(event));\n if (this.ruler === null) {\n this.ruler = new Line(lastPoint, lastPoint, 3, \"black\");\n layer.addShape(this.ruler, false);\n } else {\n this.ruler.refPoint = lastPoint;\n this.ruler.endPoint = lastPoint;\n }\n if (this.shape.visionObstruction) gameStore.recalculateVision(true);\n layer.invalidate(false);\n socket.emit(\"Shape.Update\", { shape: this.shape!.asDict(), redraw: true, temporary: true });\n }\n }\n onMouseMove(event: MouseEvent) {\n const endPoint = l2g(getMouse(event));\n const layer = this.getLayer();\n if (layer === undefined) {\n console.log(\"No active layer!\");\n return;\n }\n\n if (this.brushHelper !== null) {\n this.brushHelper.r = this.helperSize;\n this.brushHelper.refPoint = endPoint;\n if (!this.active) layer.invalidate(false);\n }\n\n if (!this.active || this.startPoint === null || this.shape === null) return;\n\n switch (this.shapeSelect) {\n case \"square\": {\n (this.shape).w = Math.abs(endPoint.x - this.startPoint.x);\n (this.shape).h = Math.abs(endPoint.y - this.startPoint.y);\n this.shape.refPoint = new GlobalPoint(\n Math.min(this.startPoint.x, endPoint.x),\n Math.min(this.startPoint.y, endPoint.y),\n );\n break;\n }\n case \"circle\": {\n (this.shape).r = endPoint.subtract(this.startPoint).length();\n break;\n }\n case \"paint-brush\": {\n (this.shape)._points.push(endPoint);\n break;\n }\n case \"draw-polygon\": {\n this.ruler!.endPoint = endPoint;\n break;\n }\n }\n\n if (!(this.shape instanceof Polygon)) {\n socket.emit(\"Shape.Update\", { shape: this.shape!.asDict(), redraw: true, temporary: true });\n if (this.shape.visionObstruction) gameStore.recalculateVision(true);\n }\n layer.invalidate(false);\n }\n onMouseUp(event: MouseEvent) {\n if (!this.active || this.shape === null || this.shape instanceof Polygon) return;\n if (!event.altKey && this.useGrid) {\n this.shape.resizeToGrid();\n }\n this.finaliseShape();\n }\n onContextMenu(event: MouseEvent) {\n if (!this.active || this.shape === null || !(this.shape instanceof Polygon)) return;\n const layer = this.getLayer();\n if (layer === undefined) {\n console.log(\"No active layer!\");\n return;\n }\n layer.removeShape(this.ruler!, false);\n this.ruler = null;\n this.finaliseShape();\n }\n\n private finaliseShape() {\n if (this.shape === null) return;\n if (this.shape.visionObstruction) gameStore.recalculateVision();\n if (this.shape.movementObstruction) gameStore.recalculateMovement();\n socket.emit(\"Shape.Update\", { shape: this.shape!.asDict(), redraw: true, temporary: false });\n this.active = false;\n }\n\n onSelect() {\n const layer = this.getLayer();\n if (layer === undefined) return;\n this.brushHelper = new Circle(new GlobalPoint(-1000, -1000), this.brushSize / 2, this.fillColour);\n this.setupBrush();\n layer.addShape(this.brushHelper, false); // during mode change the shape is already added\n }\n onDeselect() {\n const layer = this.getLayer();\n if (this.brushHelper !== null && layer !== undefined) layer.removeShape(this.brushHelper, false);\n if (this.active && layer !== undefined && this.shape !== null) {\n layer.removeShape(this.shape, true, false);\n this.shape = null;\n this.active = false;\n layer.invalidate(false);\n }\n }\n\n private pushBrushBack() {\n const layer = this.getLayer();\n if (layer === undefined) {\n console.log(\"No active layer!\");\n return;\n }\n if (this.brushHelper !== null) layer.removeShape(this.brushHelper, false);\n this.brushHelper = new Circle(new GlobalPoint(-1000, -1000), this.brushSize / 2, this.fillColour);\n this.setupBrush();\n layer.addShape(this.brushHelper, false); // during mode change the shape is already added\n }\n}\n","import { GlobalPoint, LocalPoint } from \"@/game/geom\";\nimport { BoundingRect } from \"@/game/shapes/boundingrect\";\nimport { Shape } from \"@/game/shapes/shape\";\nimport { g2lx, g2ly, l2g } from \"@/game/units\";\n\nexport class Line extends Shape {\n type = \"line\";\n endPoint: GlobalPoint;\n lineWidth: number;\n constructor(\n startPoint: GlobalPoint,\n endPoint: GlobalPoint,\n lineWidth?: number,\n strokeColour?: string,\n uuid?: string,\n ) {\n super(startPoint, \"rgba(0, 0, 0, 0)\", strokeColour || \"#000\", uuid);\n this.endPoint = endPoint;\n this.lineWidth = lineWidth === undefined ? 1 : lineWidth;\n }\n asDict() {\n return Object.assign(this.getBaseDict(), {\n x2: this.endPoint.x,\n y2: this.endPoint.y,\n line_width: this.lineWidth,\n });\n }\n get points() {\n return [[this.refPoint.x, this.refPoint.y], [this.endPoint.x, this.endPoint.y]];\n }\n getBoundingBox(): BoundingRect {\n return new BoundingRect(\n new GlobalPoint(Math.min(this.refPoint.x, this.endPoint.x), Math.min(this.refPoint.y, this.endPoint.y)),\n Math.abs(this.refPoint.x - this.endPoint.x),\n Math.abs(this.refPoint.y - this.endPoint.y),\n );\n }\n draw(ctx: CanvasRenderingContext2D) {\n super.draw(ctx);\n ctx.strokeStyle = this.strokeColour;\n ctx.beginPath();\n ctx.moveTo(g2lx(this.refPoint.x), g2ly(this.refPoint.y));\n ctx.lineTo(g2lx(this.endPoint.x), g2ly(this.endPoint.y));\n ctx.lineWidth = this.lineWidth;\n ctx.stroke();\n }\n contains(point: GlobalPoint): boolean {\n return false; // TODO\n }\n\n center(): GlobalPoint;\n center(centerPoint: GlobalPoint): void;\n center(centerPoint?: GlobalPoint): GlobalPoint | void {} // TODO\n visibleInCanvas(canvas: HTMLCanvasElement): boolean {\n return this.getBoundingBox().visibleInCanvas(canvas);\n } // TODO\n snapToGrid(): void {}\n resizeToGrid(): void {}\n resize(resizePoint: number, point: LocalPoint): void {\n if (resizePoint === 0) this.refPoint = l2g(point);\n else this.endPoint = l2g(point);\n }\n}\n","// import \"./class-component-hooks\";\n\nimport axios, { AxiosResponse } from \"axios\";\nimport Vue from \"vue\";\nimport Router from \"vue-router\";\n\nVue.use(Router);\n\nimport AssetManager from \"@/assetManager/manager.vue\";\nimport Login from \"@/auth/login.vue\";\nimport Logout from \"@/auth/logout\";\nimport LoadComponent from \"@/core/components/load.vue\";\nimport Dashboard from \"@/dashboard/main.vue\";\nimport Game from \"@/game/game.vue\";\nimport Invitation from \"@/invitation/invitation\";\n\nimport { coreStore } from \"@/core/store\";\n// import { AssetManager } from \"./assetManager/assets\";\n// const AssetManager = () => import(\"./assetManager/assets\").then(m => m.AssetManager);\n\nexport const router = new Router({\n mode: \"history\",\n base: process.env.BASE_URL,\n routes: [\n {\n path: \"/\",\n redirect: \"/dashboard\",\n },\n {\n path: \"/_load\",\n name: \"load\",\n component: LoadComponent,\n },\n {\n path: \"/assets\",\n component: AssetManager,\n meta: {\n auth: true,\n },\n },\n {\n path: \"/auth\",\n component: { template: \"\" },\n children: [{ path: \"login\", component: Login }, { path: \"logout\", component: Logout }],\n },\n {\n path: \"/invite/:code\",\n component: Invitation,\n meta: {\n auth: true,\n },\n },\n {\n path: \"/dashboard\",\n component: Dashboard,\n meta: {\n auth: true,\n },\n },\n {\n path: \"/game/:creator/:room\",\n component: Game,\n meta: {\n auth: true,\n },\n },\n ],\n});\n\nrouter.beforeEach((to, from, next) => {\n if (!coreStore.initialized && to.path !== \"/_load\") {\n next({ path: \"/_load\" });\n axios\n .get(\"/api/auth\")\n .then((response: AxiosResponse) => {\n if (response.data.auth) {\n coreStore.setAuthenticated(true);\n coreStore.setUsername(response.data.username);\n }\n coreStore.setInitialized(true);\n router.push(to.path);\n })\n .catch(() => {\n console.error(\"Authentication check could not be fulfilled.\");\n });\n } else if (to.matched.some(record => record.meta.auth) && !coreStore.authenticated) {\n next({ path: \"/auth/login\", query: { redirect: to.path } });\n } else {\n next();\n }\n});\n","\n\n\nimport Vue from \"vue\";\nimport Component from \"vue-class-component\";\n\n@Component\nexport default class Tool extends Vue {\n name = \"\";\n selected = false;\n active = false;\n get detailRight(): string {\n const rect = (this.$parent.$refs[this.name + \"-selector\"])[0].getBoundingClientRect();\n const mid = rect.left + rect.width / 2;\n\n return `${window.innerWidth - Math.min(window.innerWidth - 25, mid + 75)}px`;\n }\n get detailArrow(): string {\n const rect = (this.$parent.$refs[this.name + \"-selector\"])[0].getBoundingClientRect();\n const mid = rect.left + rect.width / 2;\n const right = Math.min(window.innerWidth - 25, mid + 75);\n return `${right - mid - 14}px`; // border width\n }\n created() {\n this.$parent.$on(\"mousedown\", (event: MouseEvent, tool: string) => {\n if (tool === this.name) this.onMouseDown(event);\n });\n this.$parent.$on(\"mouseup\", (event: MouseEvent, tool: string) => {\n if (tool === this.name) this.onMouseUp(event);\n });\n this.$parent.$on(\"mousemove\", (event: MouseEvent, tool: string) => {\n if (tool === this.name) this.onMouseMove(event);\n });\n this.$parent.$on(\"contextmenu\", (event: MouseEvent, tool: string) => {\n if (tool === this.name) this.onContextMenu(event);\n });\n this.$parent.$on(\"tools-select-change\", (newValue: string, oldValue: string) => {\n if (oldValue === this.name) {\n this.selected = false;\n this.onDeselect();\n } else if (newValue === this.name) {\n this.selected = true;\n this.onSelect();\n }\n });\n }\n onSelect() {}\n onDeselect() {}\n onMouseDown(event: MouseEvent) {}\n onMouseUp(event: MouseEvent) {}\n onMouseMove(event: MouseEvent) {}\n onContextMenu(event: MouseEvent) {}\n}\n","import { render, staticRenderFns } from \"./tools.vue?vue&type=template&id=cf33581e&scoped=true&\"\nimport script from \"./tools.vue?vue&type=script&lang=ts&\"\nexport * from \"./tools.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./tools.vue?vue&type=style&index=0&id=cf33581e&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"cf33581e\",\n null\n \n)\n\ncomponent.options.__file = \"tools.vue\"\nexport default component.exports","import mod from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/ts-loader/index.js??ref--12-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./tool.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/ts-loader/index.js??ref--12-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./tool.vue?vue&type=script&lang=ts&\"","import { InitiativeData } from \"@/game/comm/types/general\";\nimport { ServerAsset } from \"@/game/comm/types/shapes\";\nimport { GlobalPoint } from \"@/game/geom\";\nimport { BaseRect } from \"@/game/shapes/baserect\";\nimport { gameStore } from \"@/game/store\";\nimport { g2lx, g2ly, g2lz } from \"@/game/units\";\n\nexport class Asset extends BaseRect {\n type = \"assetrect\";\n img: HTMLImageElement;\n src: string = \"\";\n constructor(img: HTMLImageElement, topleft: GlobalPoint, w: number, h: number, uuid?: string) {\n super(topleft, w, h, undefined, undefined, uuid);\n this.img = img;\n }\n asDict() {\n return Object.assign(this.getBaseDict(), {\n src: this.src,\n });\n }\n fromDict(data: ServerAsset) {\n super.fromDict(data);\n this.src = data.src;\n }\n draw(ctx: CanvasRenderingContext2D) {\n super.draw(ctx);\n try {\n ctx.drawImage(this.img, g2lx(this.refPoint.x), g2ly(this.refPoint.y), g2lz(this.w), g2lz(this.h));\n } catch (error) {\n console.warn(`Shape ${this.uuid} could not load the image ${this.src}`);\n }\n }\n getInitiativeRepr(): InitiativeData {\n return {\n uuid: this.uuid,\n visible: !gameStore.IS_DM,\n group: false,\n source: this.src,\n has_img: true,\n effects: [],\n index: Infinity,\n };\n }\n}\n","import {\n BoundingBox,\n EdgeCirculator,\n FaceCirculator,\n LineFaceCirculator,\n LocateType,\n Point,\n Sign,\n TDS,\n Triangle,\n Vertex,\n} from \"./tds\";\nimport {\n ccw,\n collinearBetween,\n cw,\n edgeInfo,\n hasInexactNegativeOrientation,\n intersection,\n orientation,\n sideOfOrientedCircle,\n xyEqual,\n} from \"./triag\";\n\nexport type Edge = [Triangle, number];\n\nexport class CDT {\n tds: TDS;\n constructor() {\n this.tds = new TDS();\n }\n insertConstraint(a: Point, b: Point) {\n const va = this.insert(a);\n const vb = this.insert(b);\n if (va !== vb) this.insertConstraintV(va, vb);\n }\n\n insertConstraintV(va: Vertex, vb: Vertex) {\n const stack = [[va, vb]];\n while (stack.length > 0) {\n const v = stack.pop()!;\n const info = edgeInfo(v[0], v[1]);\n if (info.includes) {\n this.markConstraint(info.fr!, info.i!);\n if (info.vi! !== v[1]) {\n stack.push([info.vi!, v[1]]);\n }\n continue;\n }\n const intersectionInfo = this.findIntersectedFaces(v[0], v[1]);\n if (intersectionInfo.found) {\n if (intersectionInfo.vi !== v[0] && intersectionInfo.vi !== v[1]) {\n stack.push([v[0], intersectionInfo.vi]);\n stack.push([intersectionInfo.vi, v[1]]);\n } else {\n stack.push(v);\n }\n continue;\n }\n this.triangulateHole(intersectionInfo.intersectedFaces, intersectionInfo.listAB, intersectionInfo.listBA);\n if (intersectionInfo.vi !== v[1]) {\n stack.push([intersectionInfo.vi, v[1]]);\n }\n }\n }\n\n triangulateHole(intersectedFaces: Triangle[], listAB: Edge[], listBA: Edge[]) {\n const edges: Edge[] = [];\n this.triangulateHole2(intersectedFaces, listAB, listBA, edges);\n this.propagatingFlipE(edges);\n }\n\n triangulateHole2(intersectedFaces: Triangle[], listAB: Edge[], listBA: Edge[], edges: Edge[]) {\n if (listAB.length > 0) {\n this.triangulateHalfHole(listAB, edges);\n this.triangulateHalfHole(listBA, edges);\n const fl = listAB[0][0];\n const fr = listBA[0][0];\n fl.neighbours[2] = fr;\n fr.neighbours[2] = fl;\n fl.constraints[2] = true;\n fr.constraints[2] = true;\n\n while (intersectedFaces.length > 0) {\n this.tds.deleteTriangle(intersectedFaces.shift()!);\n }\n }\n }\n\n triangulateHalfHole(conflictBoundaries: Edge[], edges: Edge[]) {\n let iC = 0;\n let iN: number;\n let iT: number;\n const current = () => conflictBoundaries[iC];\n const next = () => conflictBoundaries[iN];\n const tempo = () => conflictBoundaries[iT];\n\n const va = current()[0].vertices[ccw(current()[1])]!;\n iN = iC;\n ++iN;\n\n let n: Triangle;\n let n1: Triangle;\n let n2: Triangle;\n let ind: number;\n let ind1: number;\n let ind2: number;\n do {\n n1 = current()[0];\n ind1 = current()[1];\n if (n1.neighbours[ind1] !== null) {\n n = n1.neighbours[ind1]!;\n ind = cw(n.indexV(n1.vertices[cw(ind1)]!));\n n1 = n.neighbours[ind]!;\n ind1 = this.tds.mirrorIndex(n, ind);\n }\n n2 = next()[0];\n ind2 = next()[1];\n if (n2.neighbours[ind2] !== null) {\n n = n2.neighbours[ind2]!;\n ind = cw(n.indexV(n2.vertices[cw(ind2)]!));\n n2 = n.neighbours[ind]!;\n ind2 = this.tds.mirrorIndex(n, ind);\n }\n const v0 = n1.vertices[ccw(ind1)]!;\n const v1 = n1.vertices[cw(ind1)]!;\n const v2 = n2.vertices[cw(ind2)]!;\n const orient = orientation(v0.point!, v1.point!, v2.point!);\n switch (orient) {\n case Sign.RIGHT_TURN: {\n const newlf = this.tds.createTriangle(v0, v2, v1, null, null, null);\n edges.push([newlf, 2]);\n newlf.neighbours[1] = n1;\n newlf.neighbours[0] = n2;\n n1.neighbours[ind1] = newlf;\n n2.neighbours[ind2] = newlf;\n if (n1.isConstrained(ind1)) newlf.constraints[1] = true;\n if (n2.isConstrained(ind2)) newlf.constraints[0] = true;\n v0.triangle = newlf;\n v1.triangle = newlf;\n v2.triangle = newlf;\n iT = iC + 1;\n conflictBoundaries.splice(iC, 0, [newlf, 2]);\n conflictBoundaries.splice(Math.max(iT, iN), 1);\n conflictBoundaries.splice(Math.min(iT, iN), 1);\n iN = iC;\n if (v0 !== va) --iC;\n else ++iN;\n break;\n }\n case Sign.LEFT_TURN:\n case Sign.COLLINEAR: {\n ++iC;\n ++iN;\n break;\n }\n }\n } while (iN < conflictBoundaries.length);\n }\n\n findIntersectedFaces(vaa: Vertex, vbb: Vertex) {\n const aa = vaa.point!;\n const bb = vbb.point!;\n const listAB: Edge[] = [];\n const listBA: Edge[] = [];\n const intersectedFaces: Triangle[] = [];\n const lfc = new LineFaceCirculator(vaa, this, bb);\n let ind = lfc.pos!.indexV(vaa);\n let vi: Vertex;\n if (lfc.pos!.isConstrained(ind)) {\n vi = this.intersect(lfc.pos!, ind, vaa, vbb);\n return { found: true, vi, listAB, listBA, intersectedFaces };\n }\n let lf = lfc.pos!.neighbours[ccw(ind)]!;\n let rf = lfc.pos!.neighbours[cw(ind)]!;\n listAB.push([lf, lf.indexT(lfc.pos!)]);\n listBA.unshift([rf, rf.indexT(lfc.pos!)]);\n intersectedFaces.unshift(lfc.pos!);\n let previousFace = lfc.pos!;\n lfc.next();\n ind = lfc.pos!.indexT(previousFace);\n let currentVertex = lfc.pos!.vertices[ind]!;\n let done = false;\n while (currentVertex !== vbb && !done) {\n let i1: number;\n let i2: number;\n const orient = orientation(aa, bb, currentVertex.point!);\n switch (orient) {\n case Sign.COLLINEAR: {\n done = true;\n break;\n }\n case Sign.LEFT_TURN:\n case Sign.RIGHT_TURN: {\n if (orient === Sign.LEFT_TURN) {\n i1 = ccw(ind);\n i2 = cw(ind);\n } else {\n i1 = cw(ind);\n i2 = ccw(ind);\n }\n if (lfc.pos!.isConstrained(i1)) {\n vi = this.intersect(lfc.pos!, i1, vaa, vbb);\n return { found: true, vi, listAB, listBA, intersectedFaces };\n } else {\n lf = lfc.pos!.neighbours[i2]!;\n intersectedFaces.unshift(lfc.pos!);\n if (orient === Sign.LEFT_TURN) listAB.push([lf, lf.indexT(lfc.pos!)]);\n else listBA.unshift([lf, lf.indexT(lfc.pos!)]);\n previousFace = lfc.pos!;\n lfc.next();\n ind = lfc.pos!.indexT(previousFace);\n currentVertex = lfc.pos!.vertices[ind]!;\n }\n break;\n }\n }\n }\n vi = currentVertex;\n intersectedFaces.unshift(lfc.pos!);\n lf = lfc.pos!.neighbours[cw(ind)]!;\n listAB.push([lf, lf.indexT(lfc.pos!)]);\n rf = lfc.pos!.neighbours[ccw(ind)]!;\n listBA.unshift([rf, rf.indexT(lfc.pos!)]);\n return { found: false, vi, listAB, listBA, intersectedFaces };\n }\n\n intersect(t: Triangle, i: number, vaa: Vertex, vbb: Vertex): Vertex {\n const vcc = t.vertices[cw(i)]!;\n const vdd = t.vertices[ccw(i)]!;\n const pa = vaa.point!;\n const pb = vbb.point!;\n const pc = vcc.point!;\n const pd = vdd.point!;\n let pi = intersection(pa, pb, pc, pd);\n if (pi !== pa && pi !== pb && pi !== pc && pi !== pd) {\n const bbox = new BoundingBox(pi!);\n bbox.dilate(4);\n if (bbox.overlaps(new BoundingBox(pa))) pi = pa;\n if (bbox.overlaps(new BoundingBox(pb))) pi = pb;\n if (bbox.overlaps(new BoundingBox(pc))) pi = pc;\n if (bbox.overlaps(new BoundingBox(pd))) pi = pd;\n }\n let vi: Vertex;\n if (pi === null) throw new Error(\"what\");\n else {\n this.removeConstrainedEdge(t, i);\n vi = this.insert(pi, t);\n }\n\n if (vi !== vcc && vi !== vdd) {\n this.insertConstraintV(vcc, vi);\n this.insertConstraintV(vi, vdd);\n } else {\n this.insertConstraintV(vcc, vdd);\n }\n return vi;\n }\n\n removeConstrainedEdge(t: Triangle, i: number) {\n t.constraints[i] = false;\n if (this.tds.dimension === 2) t.neighbours[i]!.constraints[this.tds.mirrorIndex(t, i)] = false;\n }\n\n updateConstraintsOpposite(v: Vertex) {\n let t = v.triangle!;\n const start = t;\n let indf: number;\n do {\n indf = t.indexV(v);\n if (t.neighbours[indf]!.constraints[this.tds.mirrorIndex(t, indf)]) t.constraints[indf] = true;\n else t.constraints[indf] = false;\n t = t.neighbours[ccw(indf)]!;\n } while (t !== start);\n }\n\n markConstraint(t: Triangle, i: number) {\n if (this.tds.dimension === 1) t.constraints[2] = true;\n else {\n t.constraints[i] = true;\n t.neighbours[i]!.constraints[this.tds.mirrorIndex(t, i)] = true;\n }\n }\n\n insert(p: Point, start: Triangle | null = null) {\n const locateInfo = this.locate(p, this.iLocate(p, start));\n const va = this.insertb(p, locateInfo.loc, locateInfo.lt, locateInfo.li);\n this.flipAround(va);\n return va;\n }\n\n flipAround(v: Vertex) {\n if (this.tds.dimension <= 1) return;\n let t = v.triangle!;\n let i: number;\n let next: Triangle;\n const start = t;\n do {\n i = t.indexV(v);\n next = t.neighbours[ccw(i)]!;\n this.propagatingFlip(t, i);\n t = next;\n } while (next !== start);\n }\n\n propagatingFlip(t: Triangle, i: number, depth = 0) {\n if (!this.isFlipable(t, i)) return;\n const maxDepth = 100;\n if (depth === maxDepth) {\n throw new Error(\"maxde\");\n return;\n }\n const ni = t.neighbours[i]!;\n this.flip(t, i);\n this.propagatingFlip(t, i, depth + 1);\n i = ni.indexV(t.vertices[i]!);\n this.propagatingFlip(ni, i, depth + 1);\n }\n\n lessEdge(e1: Edge, e2: Edge) {\n const ind1 = e1[1];\n const ind2 = e2[1];\n return e1[0].uid < e2[0].uid || (e1[0].uid === e2[0].uid && ind1 < ind2);\n }\n\n propagatingFlipE(edges: Edge[]) {\n let eI = 0;\n let t: Triangle;\n let i: number;\n let eni: Edge;\n const edgeSet: Edge[] = [];\n while (eI < edges.length) {\n t = edges[eI][0];\n i = edges[eI][1];\n if (this.isFlipable(t, i)) {\n eni = [t.neighbours[i]!, this.tds.mirrorIndex(t, i)];\n if (this.lessEdge(edges[eI], eni)) edgeSet.push(edges[eI]);\n else edgeSet.push(eni);\n }\n ++eI;\n }\n let indf: number;\n let ni: Triangle;\n let indn: number;\n let ei: Edge;\n const e: (Edge | null)[] = [null, null, null, null];\n while (edgeSet.length > 0) {\n t = edgeSet[0][0];\n indf = edgeSet[0][1];\n ni = t.neighbours[indf]!;\n indn = this.tds.mirrorIndex(t, indf);\n ei = [t, indf];\n edgeSet.splice(edgeSet.findIndex(ed => ed[0] === ei[0] && ed[1] === ei[1]), 1);\n e[0] = [t, cw(indf)];\n e[1] = [t, ccw(indf)];\n e[2] = [ni, cw(indn)];\n e[3] = [ni, ccw(indn)];\n\n for (const edge of e) {\n const tt = edge![0];\n const ii = edge![1];\n eni = [tt.neighbours[ii]!, this.tds.mirrorIndex(tt, ii)];\n if (this.lessEdge(edge!, eni))\n edgeSet.splice(edgeSet.findIndex(ed => ed[0] === edge![0] && ed[1] === edge![1]), 1);\n else edgeSet.splice(edgeSet.findIndex(ed => ed[0] === eni[0] && ed[1] === eni[1]), 1);\n }\n\n this.flip(t, indf);\n\n for (const edge of e) {\n const tt = edge![0];\n const ii = edge![1];\n if (this.isFlipable(tt, ii)) {\n eni = [tt.neighbours[ii]!, this.tds.mirrorIndex(tt, ii)];\n if (this.lessEdge(edge!, eni)) edgeSet.push(edge!);\n else edgeSet.push(eni);\n }\n }\n }\n }\n\n flip(t: Triangle, i: number) {\n const u = t.neighbours[i]!;\n const j = this.tds.mirrorIndex(t, i);\n const t1 = t.neighbours[cw(i)]!;\n const i1 = this.tds.mirrorIndex(t, cw(i));\n const t2 = t.neighbours[ccw(i)]!;\n const i2 = this.tds.mirrorIndex(t, ccw(i));\n const t3 = u.neighbours[cw(j)]!;\n const i3 = this.tds.mirrorIndex(u, cw(j));\n const t4 = u.neighbours[ccw(j)]!;\n const i4 = this.tds.mirrorIndex(u, ccw(j));\n this.tds.flip(t, i);\n t.constraints[t.indexT(u)] = false;\n u.constraints[u.indexT(t)] = false;\n t1.neighbours[i1]!.constraints[this.tds.mirrorIndex(t1, i1)] = t1.constraints[i1];\n t2.neighbours[i2]!.constraints[this.tds.mirrorIndex(t2, i2)] = t2.constraints[i2];\n t3.neighbours[i3]!.constraints[this.tds.mirrorIndex(t3, i3)] = t3.constraints[i3];\n t4.neighbours[i4]!.constraints[this.tds.mirrorIndex(t4, i4)] = t4.constraints[i4];\n }\n\n isFlipable(t: Triangle, i: number, perturb = true) {\n const ni = t.neighbours[i]!;\n if (t.isInfinite() || ni.isInfinite()) return false;\n if (t.constraints[i]) return false;\n return sideOfOrientedCircle(ni, t.vertices[i]!.point!, perturb) === Sign.ON_POSITIVE_SIDE;\n }\n\n insertb(a: Point, loc: Triangle | null, lt: LocateType, li: number): Vertex {\n let insertInConstrainedEdge = false;\n let v1: Vertex;\n let v2: Vertex;\n if (lt === LocateType.EDGE && loc!.isConstrained(li)) {\n insertInConstrainedEdge = true;\n v1 = loc!.vertices[ccw(li)]!;\n v2 = loc!.vertices[cw(li)]!;\n }\n const va = this.insertc(a, loc, lt, li);\n if (insertInConstrainedEdge) this.updateConstraintsIncident(va, v1!, v2!);\n else if (lt !== LocateType.VERTEX) this.clearConstraintsIncident(va);\n if (this.tds.dimension === 2) this.updateConstraintsOpposite(va);\n return va;\n }\n\n updateConstraintsIncident(va: Vertex, c1: Vertex, c2: Vertex) {\n if (this.tds.dimension === 0) return;\n if (this.tds.dimension === 1) {\n const ec = new EdgeCirculator(va, null);\n do {\n ec.t!.constraints[2] = true;\n } while (ec.next());\n } else {\n const fc = new FaceCirculator(va, null);\n do {\n const indf = fc.t!.indexV(va);\n const cwi = cw(indf);\n const ccwi = ccw(indf);\n if (fc.t!.vertices[cwi] === c1 || fc.t!.vertices[cwi] === c2) {\n fc.t!.constraints[ccwi] = true;\n fc.t!.constraints[cwi] = false;\n } else {\n fc.t!.constraints[ccwi] = false;\n fc.t!.constraints[cwi] = true;\n }\n } while (fc.next());\n }\n }\n\n clearConstraintsIncident(v: Vertex) {\n const ec = new EdgeCirculator(v, null);\n if (ec.valid) {\n do {\n const t = ec.t!;\n const indf = ec.ri;\n t.constraints[indf] = false;\n if (this.tds.dimension === 2) t.neighbours[indf]!.constraints[this.tds.mirrorIndex(t, indf)] = false;\n } while (ec.next());\n }\n }\n\n insertc(p: Point, loc: Triangle | null, lt: LocateType, li: number): Vertex {\n if (this.tds.vertices.length === 1) {\n return this.insertFirst(p);\n } else if (this.tds.vertices.length === 2) {\n if (lt === LocateType.VERTEX) return this.tds.finiteVertex;\n else return this.insertSecond(p);\n }\n switch (lt) {\n case LocateType.VERTEX: {\n return loc!.vertices[li]!;\n }\n case LocateType.OUTSIDE_AFFINE_HULL: {\n return this.insertOutsideAffineHull(p);\n }\n case LocateType.OUTSIDE_CONVEX_HULL: {\n return this.insertOutsideConvexHull(p, loc!);\n }\n case LocateType.EDGE: {\n return this.insertInEdge(p, loc!, li);\n }\n case LocateType.FACE: {\n return this.insertInFace(p, loc!);\n }\n }\n throw new Error(\"qwe\");\n return new Vertex();\n }\n\n insertInEdge(p: Point, loc: Triangle, li: number): Vertex {\n const v = this.tds.insertInEdge(loc, li);\n v.point = p;\n return v;\n }\n\n insertInFace(p: Point, loc: Triangle): Vertex {\n const v = this.tds.insertInFace(loc);\n v.point = p;\n return v;\n }\n\n insertFirst(p: Point): Vertex {\n const v = this.tds.insertDimUp();\n v.point = p;\n return v;\n }\n\n insertSecond(p: Point): Vertex {\n const v = this.tds.insertDimUp(this.tds._infinite, true);\n v.point = p;\n return v;\n }\n\n insertOutsideAffineHull(p: Point): Vertex {\n let conform = false;\n if (this.tds.dimension === 1) {\n const t = this.tds.finiteEdge.first!;\n const orient = orientation(t.vertices[0]!.point!, t.vertices[1]!.point!, p);\n conform = orient === Sign.COUNTERCLOCKWISE;\n }\n const v = this.tds.insertDimUp(this.tds._infinite, conform);\n v.point = p;\n return v;\n }\n\n insertOutsideConvexHull(p: Point, t: Triangle): Vertex {\n let v: Vertex;\n if (this.tds.dimension === 1) {\n throw new Error(\"sdfasdasd\");\n } else {\n v = this.insertOutsideConvexHull2(p, t);\n }\n v.point = p;\n return v;\n }\n\n insertOutsideConvexHull2(p: Point, t: Triangle): Vertex {\n let li = t.indexV(this.tds._infinite);\n const ccwlist: Triangle[] = [];\n const cwlist: Triangle[] = [];\n let fc = new FaceCirculator(this.tds._infinite, t);\n let done = false;\n while (!done) {\n fc.prev();\n li = fc.t!.indexV(this.tds._infinite);\n const q = fc.t!.vertices[ccw(li)]!.point!;\n const r = fc.t!.vertices[cw(li)]!.point!;\n if (orientation(p, q, r) === Sign.LEFT_TURN) ccwlist.push(fc.t!);\n else done = true;\n }\n fc = new FaceCirculator(this.tds._infinite, t);\n done = false;\n while (!done) {\n fc.next();\n li = fc.t!.indexV(this.tds._infinite);\n const q = fc.t!.vertices[ccw(li)]!.point!;\n const r = fc.t!.vertices[cw(li)]!.point!;\n if (orientation(p, q, r) === Sign.LEFT_TURN) cwlist.push(fc.t!);\n else done = true;\n }\n const v = this.tds.insertInFace(t);\n v.point = p;\n let th;\n while (ccwlist.length > 0) {\n th = ccwlist[0];\n li = ccw(th.indexV(this.tds._infinite));\n this.tds.flip(th, li);\n ccwlist.shift();\n }\n while (cwlist.length > 0) {\n th = cwlist[0];\n li = cw(th.indexV(this.tds._infinite));\n this.tds.flip(th, li);\n cwlist.shift();\n }\n fc = new FaceCirculator(v, null);\n while (!fc.t!.isInfinite()) fc.next();\n this.tds._infinite.triangle = fc.t!;\n return v;\n }\n\n locate(p: Point, start: Triangle | null) {\n let lt = 0;\n let li = 0;\n if (this.tds.dimension < 0) {\n lt = LocateType.OUTSIDE_AFFINE_HULL;\n li = 4;\n return { loc: null, lt, li };\n } else if (this.tds.dimension === 0) {\n if (xyEqual(p, this.tds.finiteVertex.triangle!.vertices[0]!.point!)) {\n lt = LocateType.VERTEX;\n } else {\n lt = LocateType.OUTSIDE_AFFINE_HULL;\n }\n li = 4;\n return { loc: null, lt, li };\n } else if (this.tds.dimension === 1) {\n return this.marchLocate1D(p);\n }\n if (start === null) {\n const t = this.tds._infinite.triangle!;\n start = t.neighbours[t.indexV(this.tds._infinite)]!;\n } else if (start.isInfinite()) {\n start = start.neighbours[start.indexV(this.tds._infinite)]!;\n }\n return this.marchLocate2D(start, p);\n }\n\n marchLocate1D(p: Point) {\n const ff = this.tds._infinite.triangle!;\n const iv = ff.indexV(this.tds._infinite);\n const t = ff.neighbours[iv]!;\n const pqt = orientation(t.vertices[0]!.point!, t.vertices[1]!.point!, p);\n if (pqt === Sign.RIGHT_TURN || pqt === Sign.LEFT_TURN) {\n return { loc: new Triangle(), lt: LocateType.OUTSIDE_AFFINE_HULL, li: 4 };\n }\n const i = t.indexT(ff);\n if (collinearBetween(p, t.vertices[1 - i]!.point!, t.vertices[i]!.point!))\n return { loc: ff, lt: LocateType.OUTSIDE_CONVEX_HULL, li: iv };\n\n if (xyEqual(p, t.vertices[1 - i]!.point!)) return { loc: t, lt: LocateType.VERTEX, li: 1 - i };\n throw new Error(\"sdfsdf\");\n }\n\n marchLocate2D(c: Triangle, p: Point) {\n let prev = null;\n let first = true;\n let lt: LocateType | undefined;\n let li: number | undefined;\n while (true) {\n if (c.isInfinite()) {\n return { loc: c, lt: LocateType.OUTSIDE_CONVEX_HULL, li: c.indexV(this.tds._infinite) };\n }\n const leftFirst = 0; // Math.round(Math.random());\n const p0 = c.vertices[0]!.point!;\n const p1 = c.vertices[1]!.point!;\n const p2 = c.vertices[2]!.point!;\n let o0: Sign;\n let o1: Sign;\n let o2: Sign;\n if (first) {\n prev = c;\n first = false;\n o0 = orientation(p0, p1, p);\n if (o0 === Sign.NEGATIVE) {\n c = c.neighbours[2]!;\n continue;\n }\n o1 = orientation(p1, p2, p);\n if (o1 === Sign.NEGATIVE) {\n c = c.neighbours[0]!;\n continue;\n }\n o2 = orientation(p2, p0, p);\n if (o2 === Sign.NEGATIVE) {\n c = c.neighbours[1]!;\n continue;\n }\n } else if (leftFirst) {\n if (c.neighbours[0]! === prev) {\n prev = c;\n o0 = orientation(p0, p1, p);\n if (o0 === Sign.NEGATIVE) {\n c = c.neighbours[2]!;\n continue;\n }\n o2 = orientation(p2, p0, p);\n if (o2 === Sign.NEGATIVE) {\n c = c.neighbours[1]!;\n continue;\n }\n o1 = Sign.POSITIVE;\n } else if (c.neighbours[1]! === prev) {\n prev = c;\n o1 = orientation(p1, p2, p);\n if (o1 === Sign.NEGATIVE) {\n c = c.neighbours[0]!;\n continue;\n }\n o0 = orientation(p0, p1, p);\n if (o0 === Sign.NEGATIVE) {\n c = c.neighbours[2]!;\n continue;\n }\n o2 = Sign.POSITIVE;\n } else {\n prev = c;\n o2 = orientation(p2, p0, p);\n if (o2 === Sign.NEGATIVE) {\n c = c.neighbours[1]!;\n continue;\n }\n o1 = orientation(p1, p2, p);\n if (o1 === Sign.NEGATIVE) {\n c = c.neighbours[0]!;\n continue;\n }\n o0 = Sign.POSITIVE;\n }\n } else {\n if (c.neighbours[0] === prev) {\n prev = c;\n o2 = orientation(p2, p0, p);\n if (o2 === Sign.NEGATIVE) {\n c = c.neighbours[1]!;\n continue;\n }\n o0 = orientation(p0, p1, p);\n if (o0 === Sign.NEGATIVE) {\n c = c.neighbours[2]!;\n continue;\n }\n o1 = Sign.POSITIVE;\n } else if (c.neighbours[1] === prev) {\n prev = c;\n o0 = orientation(p0, p1, p);\n if (o0 === Sign.NEGATIVE) {\n c = c.neighbours[2]!;\n continue;\n }\n o1 = orientation(p1, p2, p);\n if (o1 === Sign.NEGATIVE) {\n c = c.neighbours[0]!;\n continue;\n }\n o2 = Sign.POSITIVE;\n } else {\n prev = c;\n o1 = orientation(p1, p2, p);\n if (o1 === Sign.NEGATIVE) {\n c = c.neighbours[0]!;\n continue;\n }\n o2 = orientation(p2, p0, p);\n if (o2 === Sign.NEGATIVE) {\n c = c.neighbours[1]!;\n continue;\n }\n o0 = Sign.POSITIVE;\n }\n }\n const sum =\n (o0 === Sign.COLLINEAR ? 1 : 0) + (o1 === Sign.COLLINEAR ? 1 : 0) + (o2 === Sign.COLLINEAR ? 1 : 0);\n switch (sum) {\n case 0: {\n lt = LocateType.FACE;\n li = 4;\n break;\n }\n case 1: {\n lt = LocateType.EDGE;\n li = o0 === Sign.COLLINEAR ? 2 : o1 === Sign.COLLINEAR ? 0 : 1;\n break;\n }\n case 2: {\n lt = LocateType.VERTEX;\n li = o0 !== Sign.COLLINEAR ? 2 : o1 !== Sign.COLLINEAR ? 0 : 1;\n break;\n }\n }\n if (lt === undefined || li === undefined) throw new Error(\"ert\");\n return { loc: c, lt, li };\n }\n }\n\n iLocate(p: Point, start: Triangle | null) {\n if (this.tds.dimension < 2) return start;\n if (start === null) {\n const t = this.tds._infinite.triangle!;\n start = t.neighbours[t.indexV(this.tds._infinite)];\n } else if (start.isInfinite()) {\n start = start.neighbours[start.indexV(this.tds._infinite)];\n }\n let prev = null;\n let c = start!;\n let first = true;\n let nTurns = 2500;\n while (true) {\n if (!nTurns--) return c;\n if (c.isInfinite()) return c;\n const p0 = c.vertices[0]!.point!;\n const p1 = c.vertices[1]!.point!;\n const p2 = c.vertices[2]!.point!;\n if (first) {\n prev = c;\n first = false;\n if (hasInexactNegativeOrientation(p0, p1, p)) {\n c = c.neighbours[2]!;\n continue;\n }\n if (hasInexactNegativeOrientation(p1, p2, p)) {\n c = c.neighbours[0]!;\n continue;\n }\n if (hasInexactNegativeOrientation(p2, p0, p)) {\n c = c.neighbours[1]!;\n continue;\n }\n } else {\n if (c.neighbours[0] === prev) {\n prev = c;\n if (hasInexactNegativeOrientation(p0, p1, p)) {\n c = c.neighbours[2]!;\n continue;\n }\n if (hasInexactNegativeOrientation(p2, p0, p)) {\n c = c.neighbours[1]!;\n continue;\n }\n } else if (c.neighbours[1] === prev) {\n prev = c;\n if (hasInexactNegativeOrientation(p0, p1, p)) {\n c = c.neighbours[2]!;\n continue;\n }\n if (hasInexactNegativeOrientation(p1, p2, p)) {\n c = c.neighbours[0]!;\n continue;\n }\n } else {\n prev = c;\n if (hasInexactNegativeOrientation(p2, p0, p)) {\n c = c.neighbours[1]!;\n continue;\n }\n if (hasInexactNegativeOrientation(p1, p2, p)) {\n c = c.neighbours[0]!;\n continue;\n }\n }\n }\n break;\n }\n return c;\n }\n}\n","import mod from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/ts-loader/index.js??ref--12-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./draw.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/ts-loader/index.js??ref--12-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./draw.vue?vue&type=script&lang=ts&\"","import { GlobalPoint } from \"@/game/geom\";\nimport { GridLayer } from \"@/game/layers/grid\";\nimport { Layer } from \"@/game/layers/layer\";\nimport { Asset } from \"@/game/shapes/asset\";\nimport { Shape } from \"@/game/shapes/shape\";\nimport { gameStore } from \"@/game/store\";\nimport { l2gx, l2gy, l2gz } from \"@/game/units\";\n\nclass LayerManager {\n layers: Layer[] = [];\n width = window.innerWidth;\n height = window.innerHeight;\n\n UUIDMap: Map = new Map();\n\n // Refresh interval and redraw setter.\n interval = 30;\n\n constructor() {\n requestAnimationFrame(this.drawLoop);\n }\n\n reset() {\n this.layers = [];\n this.UUIDMap = new Map();\n }\n\n drawLoop = () => {\n for (let i = this.layers.length - 1; i >= 0; i--) {\n this.layers[i].draw();\n }\n requestAnimationFrame(this.drawLoop);\n };\n\n setWidth(width: number): void {\n this.width = width;\n for (const layer of this.layers) {\n layer.canvas.width = width;\n layer.width = width;\n }\n }\n\n setHeight(height: number): void {\n this.height = height;\n for (const layer of this.layers) {\n layer.canvas.height = height;\n layer.height = height;\n }\n }\n\n addLayer(layer: Layer): void {\n this.layers.push(layer);\n if (!gameStore.IS_DM && !layer.playerEditable) return;\n if (layer.selectable) gameStore.addLayer(layer.name);\n }\n\n hasLayer(name: string): boolean {\n return this.layers.some(l => l.name === name);\n }\n\n getLayer(name?: string) {\n name = name === undefined ? gameStore.selectedLayer : name;\n for (const layer of this.layers) {\n if (layer.name === name) return layer;\n }\n }\n\n selectLayer(name: string, sync: boolean = true): void {\n let found = false;\n for (const layer of this.layers) {\n if (!layer.selectable) continue;\n if (found && layer.name !== \"fow\") layer.ctx.globalAlpha = 0.3;\n else layer.ctx.globalAlpha = 1.0;\n\n if (name === layer.name) {\n gameStore.selectLayer({ name, sync });\n found = true;\n }\n\n layer.clearSelection();\n layer.invalidate(true);\n }\n }\n\n getGridLayer(): GridLayer | undefined {\n return this.getLayer(\"grid\");\n }\n\n hasSelection() {\n const selection = this.getSelection();\n return selection !== undefined && selection.length > 0;\n }\n\n // THIS INCLUDES POTENTIALLY THE SelectTool.SelectionHelper !!!\n getSelection() {\n const layer = this.getLayer();\n if (layer === undefined) return undefined;\n return layer.selection;\n }\n\n invalidate(): void {\n for (let i = this.layers.length - 1; i >= 0; i--) {\n this.layers[i].invalidate(true);\n }\n }\n\n invalidateLight() {\n for (let i = this.layers.length - 1; i >= 0; i--)\n if (this.layers[i].isVisionLayer) this.layers[i].invalidate(true);\n }\n\n dropAsset(event: DragEvent) {\n const layer = this.getLayer();\n if (layer === undefined || event === null || event.dataTransfer === null) return;\n const image = document.createElement(\"img\");\n image.src = event.dataTransfer.getData(\"text/plain\");\n const asset = new Asset(\n image,\n new GlobalPoint(l2gx(event.clientX), l2gy(event.clientY)),\n l2gz(image.width),\n l2gz(image.height),\n );\n asset.src = new URL(image.src).pathname;\n\n if (gameStore.useGrid) {\n const gs = gameStore.gridSize;\n asset.refPoint = new GlobalPoint(\n Math.round(asset.refPoint.x / gs) * gs,\n Math.round(asset.refPoint.y / gs) * gs,\n );\n asset.w = Math.max(Math.round(asset.w / gs) * gs, gs);\n asset.h = Math.max(Math.round(asset.h / gs) * gs, gs);\n }\n\n layer.addShape(asset, true);\n }\n}\n\nexport const layerManager = new LayerManager();\n(window).lm = layerManager;\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/ts-loader/index.js??ref--12-2!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./initiative.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/ts-loader/index.js??ref--12-2!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./initiative.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./createtoken_modal.vue?vue&type=template&id=73816298&scoped=true&\"\nimport script from \"./createtoken_modal.vue?vue&type=script&lang=ts&\"\nexport * from \"./createtoken_modal.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./createtoken_modal.vue?vue&type=style&index=0&id=73816298&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"73816298\",\n null\n \n)\n\ncomponent.options.__file = \"createtoken_modal.vue\"\nexport default component.exports","import { BoundingRect } from \"@/game/shapes/boundingrect\";\n\nexport class BoundingNode {\n bbox: BoundingRect;\n nPrimitives: number;\n children: BoundingNode[] = [];\n constructor(nPrimitives: number, bbox: BoundingRect) {\n this.nPrimitives = nPrimitives;\n this.bbox = bbox;\n }\n}\n\nexport class LeafNode extends BoundingNode {\n firstPrimOffset: number;\n constructor(first: number, n: number, bbox: BoundingRect) {\n super(n, bbox);\n this.firstPrimOffset = first;\n }\n}\n\nexport class InteriorNode extends BoundingNode {\n dimension: number;\n constructor(dimension: number, c1: BoundingNode, c2: BoundingNode) {\n super(0, c1.bbox.union(c2.bbox));\n this.dimension = dimension;\n this.children.push(c1);\n this.children.push(c2);\n }\n}\n","import mod from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/ts-loader/index.js??ref--12-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./createtoken_modal.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/ts-loader/index.js??ref--12-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./createtoken_modal.vue?vue&type=script&lang=ts&\"","import Tools from \"@/game/ui/tools/tools.vue\";\n\nimport { getRef, uuidv4 } from \"@/core/utils\";\nimport { socket } from \"@/game/api/socket\";\nimport { sendClientOptions } from \"@/game/api/utils\";\nimport { ServerAura } from '@/game/comm/types/shapes';\nimport { EventBus } from \"@/game/event-bus\";\nimport { Vector } from \"@/game/geom\";\nimport { layerManager } from \"@/game/layers/manager\";\nimport { createShapeFromDict } from \"@/game/shapes/utils\";\nimport { gameStore } from \"@/game/store\";\nimport { calculateDelta } from \"@/game/ui/tools/utils\";\n\nexport function onKeyUp(event: KeyboardEvent) {\n if (event.target instanceof HTMLInputElement || event.target instanceof HTMLTextAreaElement) {\n } else {\n if (event.key === \"Delete\" || event.key === \"Del\" || event.key === \"Backspace\") {\n if (layerManager.getLayer === undefined) {\n console.log(\"No active layer selected for delete operation\");\n return;\n }\n const l = layerManager.getLayer()!;\n for (let i = l.selection.length - 1; i >= 0; i--) {\n const sel = l.selection[i];\n if ((getRef(\"tools\").$refs.selectTool).selectionHelper.uuid === sel.uuid) {\n l.selection.splice(i, 1);\n continue;\n }\n l.removeShape(sel, true, false);\n EventBus.$emit(\"SelectionInfo.Shape.Set\", null);\n EventBus.$emit(\"Initiative.Remove\", sel.uuid);\n }\n }\n }\n}\n\nexport function onKeyDown(event: KeyboardEvent) {\n if (event.target instanceof HTMLInputElement || event.target instanceof HTMLTextAreaElement) {\n if (event.keyCode === 65 && event.ctrlKey) event.target!.select();\n } else {\n if (event.keyCode >= 37 && event.keyCode <= 40) {\n // todo: this should already be rounded\n const gridSize = Math.round(gameStore.gridSize);\n let offsetX = gridSize * (event.keyCode % 2);\n let offsetY = gridSize * (event.keyCode % 2 ? 0 : 1);\n if (layerManager.hasSelection()) {\n const selection = layerManager.getSelection()!;\n offsetX *= event.keyCode <= 38 ? -1 : 1;\n offsetY *= event.keyCode <= 38 ? -1 : 1;\n let delta = new Vector(offsetX, offsetY);\n if (!event.shiftKey || !gameStore.IS_DM) {\n // First check for collisions. Using the smooth wall slide collision check used on mouse move is overkill here.\n for (const sel of selection) {\n if ((getRef(\"tools\").$refs.selectTool).selectionHelper.uuid === sel.uuid) continue;\n delta = calculateDelta(delta, sel);\n }\n }\n for (const sel of selection) {\n if ((getRef(\"tools\").$refs.selectTool).selectionHelper.uuid === sel.uuid) continue;\n sel.refPoint = sel.refPoint.add(delta);\n // todo: Fix again\n // if (sel.refPoint.x % gridSize !== 0 || sel.refPoint.y % gridSize !== 0) sel.snapToGrid();\n socket.emit(\"Shape.Position.Update\", { shape: sel.asDict(), redraw: true, temporary: false });\n }\n gameStore.recalculateVision();\n layerManager.getLayer()!.invalidate(false);\n } else {\n // The pan offsets should be in the opposite direction to give the correct feel.\n gameStore.increasePanX(offsetX * (event.keyCode <= 38 ? 1 : -1));\n gameStore.increasePanY(offsetY * (event.keyCode <= 38 ? 1 : -1));\n layerManager.invalidate();\n sendClientOptions();\n }\n } else if (event.keyCode === 68) {\n const layer = layerManager.getLayer();\n if (layer) {\n layer.clearSelection();\n layer.invalidate(true);\n }\n } else if (event.key === \"u\" && event.ctrlKey) {\n event.preventDefault();\n event.stopPropagation();\n gameStore.toggleUI();\n } else if (event.key === \"c\" && event.ctrlKey) {\n const layer = layerManager.getLayer();\n if (!layer) return;\n if (!layer.selection) return;\n const clipboard = [];\n for (const shape of layer.selection) {\n if ((getRef(\"tools\").$refs.selectTool).selectionHelper.uuid === shape.uuid) continue;\n clipboard.push(shape.asDict());\n }\n gameStore.setClipboard(clipboard);\n } else if (event.key === \"v\" && event.ctrlKey) {\n const layer = layerManager.getLayer();\n if (!layer) return;\n if (!gameStore.clipboard) return;\n layer.selection = [];\n for (const clip of gameStore.clipboard) {\n clip.x += 10;\n clip.y += 10;\n clip.uuid = uuidv4();\n const oldTrackers = clip.trackers;\n clip.trackers = [];\n for (const tracker of oldTrackers) {\n const newTracker: Tracker = {\n ...tracker,\n uuid: uuidv4()\n }\n clip.trackers.push(newTracker);\n }\n const oldAuras = clip.auras;\n clip.auras = [];\n for (const aura of oldAuras) {\n const newAura: ServerAura = {\n ...aura,\n uuid: uuidv4()\n }\n clip.auras.push(newAura);\n }\n const shape = createShapeFromDict(clip);\n if (shape === undefined) continue;\n layer.addShape(shape, true);\n layer.selection.push(shape);\n }\n if (layer.selection.length === 1) EventBus.$emit(\"SelectionInfo.Shape.Set\", layer.selection[0]);\n else EventBus.$emit(\"SelectionInfo.Shape.Set\", null);\n layer.invalidate(false);\n }\n }\n}\n","import mod from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./manager.vue?vue&type=style&index=0&lang=css&\"; export default mod; export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./manager.vue?vue&type=style&index=0&lang=css&\"","import mod from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./shapecontext.vue?vue&type=style&index=0&id=759e5a8a&scoped=true&lang=css&\"; export default mod; export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./shapecontext.vue?vue&type=style&index=0&id=759e5a8a&scoped=true&lang=css&\"","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nimport Vue from \"vue\";\n\nimport ShapeContext from \"@/game/ui/selection/shapecontext.vue\";\nimport CreateTokenModal from \"@/game/ui/tools/createtoken_modal.vue\";\nimport DrawTool from \"@/game/ui/tools/draw.vue\";\nimport FilterTool from \"@/game/ui/tools/filter.vue\";\nimport MapTool from \"@/game/ui/tools/map.vue\";\nimport PanTool from \"@/game/ui/tools/pan\";\nimport SelectTool from \"@/game/ui/tools/select.vue\";\n\nimport { layerManager } from \"@/game/layers/manager\";\nimport { gameManager } from \"@/game/manager\";\nimport { gameStore } from \"@/game/store\";\nimport { RulerTool } from \"@/game/ui/tools/ruler\";\nimport { l2g } from \"@/game/units\";\nimport { getMouse } from \"@/game/utils\";\nimport Component from \"vue-class-component\";\n\n@Component({\n components: {\n \"select-tool\": SelectTool,\n \"pan-tool\": PanTool,\n \"draw-tool\": DrawTool,\n \"ruler-tool\": RulerTool,\n \"map-tool\": MapTool,\n \"filter-tool\": FilterTool,\n \"shape-menu\": ShapeContext,\n \"createtoken-dialog\": CreateTokenModal,\n },\n watch: {\n currentTool(newValue, oldValue) {\n this.$emit(\"tools-select-change\", newValue, oldValue);\n },\n },\n})\nexport default class Tools extends Vue {\n $refs!: {\n selectTool: InstanceType;\n };\n\n currentTool = \"Select\";\n tools = [\"Select\", \"Pan\", \"Draw\", \"Ruler\", \"Map\", \"Filter\"];\n dmTools = [\"Map\"];\n\n get IS_DM(): boolean {\n return gameStore.IS_DM;\n }\n\n get currentToolComponent(): string {\n return `${this.currentTool.toLowerCase()}-tool`;\n }\n\n get visibleTools(): string[] {\n return this.tools.filter(t => (!this.dmTools.includes(t) || this.IS_DM));\n }\n\n mousedown(event: MouseEvent) {\n if ((event.target).tagName !== \"CANVAS\") return;\n\n let targetTool = this.currentTool;\n if (event.button === 1) {\n targetTool = \"Pan\";\n } else if (event.button !== 0) {\n return;\n }\n\n this.$emit(\"mousedown\", event, targetTool);\n }\n mouseup(event: MouseEvent) {\n if ((event.target).tagName !== \"CANVAS\") return;\n\n let targetTool = this.currentTool;\n if (event.button === 1) {\n targetTool = \"Pan\";\n } else if (event.button !== 0) {\n return;\n }\n\n this.$emit(\"mouseup\", event, targetTool);\n }\n mousemove(event: MouseEvent) {\n if ((event.target).tagName !== \"CANVAS\") return;\n\n let targetTool = this.currentTool;\n if ((event.buttons & 4) !== 0) {\n targetTool = \"Pan\";\n } else if ((event.button & 1) > 1) {\n return;\n }\n\n this.$emit(\"mousemove\", event, targetTool);\n\n // Annotation hover\n let found = false;\n for (const uuid of gameStore.annotations) {\n if (layerManager.UUIDMap.has(uuid) && layerManager.hasLayer(\"draw\")) {\n const shape = layerManager.UUIDMap.get(uuid)!;\n if (shape.contains(l2g(getMouse(event)))) {\n found = true;\n gameManager.annotationManager.setActiveText(shape.annotation);\n }\n }\n }\n if (!found && gameManager.annotationManager.shown) {\n gameManager.annotationManager.setActiveText(\"\");\n }\n }\n mouseleave(event: MouseEvent) {\n // When leaving the window while a mouse is pressed down, act as if it was released\n if ((event.buttons & 1) !== 0) {\n this.$emit(\"mouseup\", event, this.currentTool);\n }\n }\n contextmenu(event: MouseEvent) {\n if ((event.target).tagName !== \"CANVAS\") return;\n if (event.button !== 2 || (event.target).tagName !== \"CANVAS\") return;\n this.$emit(\"contextmenu\", event, this.currentTool);\n }\n}\n","import mod from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/ts-loader/index.js??ref--12-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./selection_info.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/ts-loader/index.js??ref--12-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./selection_info.vue?vue&type=script&lang=ts&\"","import mod from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/ts-loader/index.js??ref--12-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./modal.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/ts-loader/index.js??ref--12-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./modal.vue?vue&type=script&lang=ts&\"","import mod from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./contextmenu.vue?vue&type=style&index=0&lang=css&\"; export default mod; export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./contextmenu.vue?vue&type=style&index=0&lang=css&\"","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nimport Vue from \"vue\";\nimport Component from \"vue-class-component\";\n\nimport Modal from \"@/core/components/modals/modal.vue\";\n\n@Component({\n components: {\n Modal,\n },\n})\nexport default class Prompt extends Vue {\n $refs!: {\n answer: HTMLElement;\n };\n\n visible = false;\n question = \"\";\n answer = \"\";\n title = \"\";\n\n resolve = (value: string) => {};\n reject = () => {};\n\n submit() {\n this.resolve(this.answer);\n this.close();\n }\n close() {\n this.reject();\n this.visible = false;\n this.question = \"\";\n this.answer = \"\";\n this.title = \"\";\n }\n prompt(question: string, title: string): Promise {\n this.question = question;\n this.title = title;\n this.visible = true;\n this.$nextTick(() => {\n this.$refs.answer.focus();\n });\n return new Promise((resolve, reject) => {\n this.resolve = resolve;\n this.reject = reject;\n });\n }\n}\n","import mod from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./accordion.vue?vue&type=style&index=0&id=0bf2b7ba&scoped=true&lang=css&\"; export default mod; export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./accordion.vue?vue&type=style&index=0&id=0bf2b7ba&scoped=true&lang=css&\"","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_vm._v(_vm._s(_vm.message))])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","export * from \"-!cache-loader?{\\\"cacheDirectory\\\":\\\"node_modules/.cache/vue-loader\\\",\\\"cacheIdentifier\\\":\\\"74f43d04-vue-loader-template\\\"}!../../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./load.vue?vue&type=template&id=ff095222&\"","import mod from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/ts-loader/index.js??ref--12-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./menu.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/ts-loader/index.js??ref--12-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./menu.vue?vue&type=script&lang=ts&\"","import { GlobalPoint, Point, Ray, Vector } from \"@/game/geom\";\nimport { g2lx, g2ly } from \"../units\";\n\nexport class BoundingRect {\n readonly w: number;\n readonly h: number;\n readonly topLeft: GlobalPoint;\n readonly topRight: GlobalPoint;\n readonly botRight: GlobalPoint;\n readonly botLeft: GlobalPoint;\n\n constructor(topleft: GlobalPoint, w: number, h: number) {\n this.w = w;\n this.h = h;\n this.topLeft = topleft;\n this.topRight = new GlobalPoint(topleft.x + w, topleft.y);\n this.botRight = new GlobalPoint(topleft.x + w, topleft.y + h);\n this.botLeft = new GlobalPoint(topleft.x, topleft.y + h);\n }\n\n contains(point: GlobalPoint): boolean {\n return (\n this.topLeft.x <= point.x &&\n this.topRight.x >= point.x &&\n this.topLeft.y <= point.y &&\n this.botLeft.y >= point.y\n );\n }\n\n get points() {\n if (this.w === 0 || this.h === 0) return [[this.topLeft.x, this.topLeft.y]];\n return [\n [this.topLeft.x, this.topLeft.y],\n [this.botLeft.x, this.botLeft.y],\n [this.botRight.x, this.botRight.y],\n [this.topRight.x, this.topRight.y],\n ];\n }\n\n offset(vector: Vector): BoundingRect {\n return new BoundingRect(this.topLeft.add(vector), this.w, this.h);\n }\n\n union(other: BoundingRect): BoundingRect {\n const xmin = Math.min(this.topLeft.x, other.topLeft.x);\n const xmax = Math.max(this.topRight.x, other.topRight.x);\n const ymin = Math.min(this.topLeft.y, other.topLeft.y);\n const ymax = Math.max(this.botLeft.y, other.botLeft.y);\n return new BoundingRect(new GlobalPoint(xmin, ymin), xmax - xmin, ymax - ymin);\n }\n\n getDiagCorner(botright: boolean) {\n return botright ? this.botRight : this.topLeft;\n }\n\n intersectsWith(other: BoundingRect): boolean {\n return !(\n other.topLeft.x > this.topRight.x ||\n other.topRight.x < this.topLeft.x ||\n other.topLeft.y > this.botLeft.y ||\n other.botLeft.y < this.topLeft.y\n );\n }\n\n intersectsWithInner(other: BoundingRect): boolean {\n return !(\n other.topLeft.x >= this.topRight.x ||\n other.topRight.x <= this.topLeft.x ||\n other.topLeft.y >= this.botLeft.y ||\n other.botLeft.y <= this.topLeft.y\n );\n }\n\n intersectP(ray: Ray, invDir: Vector, dirIsNeg: boolean[]) {\n let txmin = invDir.x * (this.getDiagCorner(dirIsNeg[0]).x - ray.origin!.x);\n let txmax = invDir.x * (this.getDiagCorner(!dirIsNeg[0]).x - ray.origin!.x);\n const tymin = invDir.y * (this.getDiagCorner(dirIsNeg[1]).y - ray.origin!.y);\n const tymax = invDir.y * (this.getDiagCorner(!dirIsNeg[1]).y - ray.origin!.y);\n if (txmin > tymax || tymin > txmax) return { hit: false, min: txmin, max: txmax };\n if (tymin > txmin) txmin = tymin;\n if (tymax < txmax) txmax = tymax;\n return { hit: txmin < ray.tMax! && txmax > 0, min: txmin, max: txmax };\n }\n\n center(): GlobalPoint {\n return this.topLeft.add(new Vector(this.w / 2, this.h / 2));\n }\n\n getMaxExtent() {\n return this.w > this.h ? 0 : 1;\n }\n visibleInCanvas(canvas: HTMLCanvasElement): boolean {\n const coreVisible = !(\n g2lx(this.topLeft.x) > canvas.width ||\n g2ly(this.topLeft.y) > canvas.height ||\n g2lx(this.topRight.x) < 0 ||\n g2ly(this.botRight.y) < 0\n );\n if (coreVisible) return true;\n return false;\n }\n}\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{attrs:{\"id\":\"formcontainer\"}},[(_vm.owned || _vm.joined)?_c('form',[_c('fieldset',[_c('legend',{staticClass:\"legend\"},[_vm._v(\"Your sessions\")]),_c('div',{staticClass:\"input\"},[_vm._l((_vm.owned),function(room,i){return _c('router-link',{key:'o-'+i,attrs:{\"to\":'/game/' + room[1] + '/' + room[0]}},[_vm._v(_vm._s(room[0]))])}),_vm._l((_vm.joined),function(room,i){return _c('router-link',{key:'j-'+i,attrs:{\"to\":'/game/' + room[1] + '/' + room[0]}},[_vm._v(_vm._s(room[1])+\"/\"+_vm._s(room[0]))])})],2),(_vm.owned.length === 0)?_c('div',{staticClass:\"input\"},[_vm._v(\"No active sessions\")]):_vm._e()])]):_vm._e(),_vm._m(0),_c('form',{on:{\"submit\":function($event){$event.preventDefault();return _vm.createRoom($event)}}},[_c('fieldset',[(!_vm.owned && !_vm.joined)?_c('legend',{staticClass:\"legend\"},[_vm._v(\"Create a session\")]):_c('div',{staticClass:\"input\"},[_vm._v(\"Create a new session\")]),_c('div',{staticClass:\"input\"},[_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.newSessionName),expression:\"newSessionName\"}],attrs:{\"type\":\"text\",\"name\":\"room_name\",\"placeholder\":\"Session Name\"},domProps:{\"value\":(_vm.newSessionName)},on:{\"input\":function($event){if($event.target.composing){ return; }_vm.newSessionName=$event.target.value}}}),_vm._m(1)]),_vm._m(2)])]),_c('div',{attrs:{\"id\":\"account-options\"}},[_c('form',{on:{\"submit\":function($event){$event.preventDefault();}}},[_c('router-link',{staticClass:\"submit\",attrs:{\"tag\":\"button\",\"title\":\"Account Settings\",\"to\":\"/account\"}},[_c('i',{staticClass:\"fas fa-cog\"})])],1),_c('form',{on:{\"submit\":function($event){$event.preventDefault();}}},[_c('router-link',{staticClass:\"submit\",attrs:{\"tag\":\"button\",\"title\":\"Logout\",\"to\":\"/auth/logout\"}},[_c('i',{staticClass:\"fas fa-sign-out-alt\"})])],1)])])}\nvar staticRenderFns = [function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('h4',[_c('span',[_vm._v(\"OR\")])])},function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('span',[_c('i',{staticClass:\"fab fa-d-and-d\"})])},function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('button',{staticClass:\"submit\",attrs:{\"type\":\"submit\",\"title\":\"Create\"}},[_c('i',{staticClass:\"fas fa-arrow-right\"})])}]\n\nexport { render, staticRenderFns }","export * from \"-!cache-loader?{\\\"cacheDirectory\\\":\\\"node_modules/.cache/vue-loader\\\",\\\"cacheIdentifier\\\":\\\"74f43d04-vue-loader-template\\\"}!../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./main.vue?vue&type=template&id=61eb1455&scoped=true&\"","/*\nThis module defines some Point classes.\nA strong focus is made to ensure that at no time a global and a local point are mixed up with each other.\nAt first glance this adds weird looking hacks as ts does not support nominal typing.\n*/\n\nexport function getPointDistance(p1: Point, p2: Point) {\n const a = p1.x - p2.x;\n const b = p1.y - p2.y;\n return Math.sqrt(a * a + b * b);\n}\n\nexport class Point {\n readonly x: number;\n readonly y: number;\n constructor(x: number, y: number) {\n this.x = x;\n this.y = y;\n }\n static fromArray(point: number[]) {\n return new Point(point[0], point[1]);\n }\n add(vec: Vector) {\n return new Point(this.x + vec.x, this.y + vec.y);\n }\n subtract(other: Point) {\n return new Vector(this.x - other.x, this.y - other.y);\n }\n clone(): Point {\n return new Point(this.x, this.y);\n }\n get(dimension: 0 | 1) {\n if (dimension === 0) return this.x;\n return this.y;\n }\n asArray(): number[] {\n return [this.x, this.y];\n }\n}\nexport class GlobalPoint extends Point {\n // This is to differentiate with LocalPoint, is actually never used\n // We do ! to prevent errors that it never gets initialized\n // tslint:disable-next-line:variable-name\n _GlobalPoint!: string;\n add(vec: Vector): GlobalPoint {\n return super.add(vec);\n }\n subtract(other: GlobalPoint): Vector {\n return super.subtract(other);\n }\n clone(): GlobalPoint {\n return super.clone();\n }\n static fromArray(point: number[]) {\n return new GlobalPoint(point[0], point[1]);\n }\n}\n\nexport class LocalPoint extends Point {\n // This is to differentiate with GlobalPoint, is actually never used\n // We do ! to prevent errors that it never gets initialized\n // tslint:disable-next-line:variable-name\n _LocalPoint!: string;\n add(vec: Vector): LocalPoint {\n return super.add(vec);\n }\n subtract(other: LocalPoint): Vector {\n return super.subtract(other);\n }\n clone(): LocalPoint {\n return super.clone();\n }\n}\n\nexport class Vector {\n readonly x: number;\n readonly y: number;\n constructor(x: number, y: number) {\n this.x = x;\n this.y = y;\n }\n dot(other: Vector): number {\n return this.x * other.x + this.y * other.y;\n }\n inverse(): Vector {\n return new Vector(this.x === 0 ? 0 : 1 / this.x, this.y === 0 ? 0 : 1 / this.y);\n }\n length(): number {\n return Math.sqrt(Math.pow(this.x, 2) + Math.pow(this.y, 2));\n }\n normalize(): Vector {\n const l = this.length();\n return new Vector(this.x / l, this.y / l);\n }\n reverse(): Vector {\n return new Vector(-this.x, -this.y);\n }\n multiply(scale: number): Vector {\n return new Vector(this.x * scale, this.y * scale);\n }\n angle(): number {\n return (Math.atan2(this.y, this.x) * 180) / Math.PI;\n }\n}\n\nexport class Ray {\n readonly direction: Vector;\n readonly origin: T;\n tMax: number;\n constructor(origin: T, direction: Vector, tMax?: number) {\n this.direction = direction;\n this.origin = origin;\n if (tMax === undefined) tMax = Infinity;\n this.tMax = tMax;\n }\n static fromPoints(p1: T, p2: T): Ray {\n const vec = new Vector(p2.x - p1.x, p2.y - p1.y);\n let maxT;\n if (Math.abs(vec.x) > 0.01) maxT = (p2.x - p1.x) / vec.x;\n else maxT = (p2.y - p1.y) / vec.y;\n return new Ray(p1, vec, maxT);\n }\n get(t: number): T {\n return new Point(this.origin.x + t * this.direction.x, this.origin.y + t * this.direction.y);\n }\n getDistance(t1: number, t2: number) {\n return Math.sqrt(Math.pow(t2 - t1, 2) * (Math.pow(this.direction.x, 2) + Math.pow(this.direction.y, 2)));\n }\n getT(t1: number, distance: number) {\n return t1 + Math.sqrt(Math.pow(distance, 2) / (Math.pow(this.direction.x, 2) + Math.pow(this.direction.y, 2)));\n }\n}\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('ul',[_vm._l((_vm.folders),function(folder){return _c('li',{key:folder,staticClass:\"folder\",on:{\"click\":function($event){$event.stopPropagation();return _vm.toggle($event)}}},[_vm._v(\"\\n \"+_vm._s(folder)+\"\\n \"),_c('asset-node',{attrs:{\"asset\":_vm.asset[folder]}})],1)}),_vm._l((_vm.files),function(file){return _c('li',{key:file.name,staticClass:\"file draggable token\",attrs:{\"draggable\":\"true\"},on:{\"mouseover\":function($event){_vm.showImage = file.hash},\"mouseout\":function($event){_vm.showImage = null},\"dragstart\":function($event){_vm.dragStart($event, '/static/assets/' + file.hash)}}},[_vm._v(\"\\n \"+_vm._s(file.name)+\"\\n \"),(_vm.showImage == file.hash)?_c('div',{staticClass:\"preview\"},[_c('img',{staticClass:\"asset-preview-image\",attrs:{\"src\":'/static/assets/' + file.hash}})]):_vm._e()])})],2)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","export * from \"-!cache-loader?{\\\"cacheDirectory\\\":\\\"node_modules/.cache/vue-loader\\\",\\\"cacheIdentifier\\\":\\\"74f43d04-vue-loader-template\\\"}!../../../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./asset_node.vue?vue&type=template&id=6d718094&scoped=true&\"","import mod from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./labels.vue?vue&type=style&index=0&id=4697341e&scoped=true&lang=css&\"; export default mod; export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./labels.vue?vue&type=style&index=0&id=4697341e&scoped=true&lang=css&\"","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nimport Vue from \"vue\";\nimport Component from \"vue-class-component\";\nimport vueSlider from \"vue-slider-component\";\n\nimport \"@/game/api/events\";\n\nimport { throttle } from \"lodash\";\nimport { mapGetters, mapState } from \"vuex\";\n\nimport ConfirmDialog from \"@/core/components/modals/confirm.vue\";\nimport Prompt from \"@/core/components/modals/prompt.vue\";\nimport Initiative from \"@/game/ui/initiative.vue\";\nimport LabelManager from \"@/game/ui/labels.vue\";\nimport MenuBar from \"@/game/ui/menu/menu.vue\";\nimport NoteDialog from \"@/game/ui/note.vue\";\nimport SelectionInfo from \"@/game/ui/selection/selection_info.vue\";\nimport Tools from \"@/game/ui/tools/tools.vue\";\n\nimport { createConnection, socket } from \"@/game/api/socket\";\nimport { onKeyDown, onKeyUp } from \"@/game/events/keyboard\";\nimport { scrollZoom } from \"@/game/events/mouse\";\nimport { layerManager } from \"@/game/layers/manager\";\nimport { gameStore } from \"@/game/store\";\nimport { l2g } from \"@/game/units\";\nimport { LocalPoint } from \"./geom\";\n\n@Component({\n components: {\n \"tool-bar\": Tools,\n \"selection-info\": SelectionInfo,\n \"prompt-dialog\": Prompt,\n \"confirm-dialog\": ConfirmDialog,\n \"menu-bar\": MenuBar,\n \"initiative-dialog\": Initiative,\n \"zoom-slider\": vueSlider,\n \"note-dialog\": NoteDialog,\n \"label-dialog\": LabelManager,\n },\n beforeRouteEnter(to, from, next) {\n createConnection(to);\n next();\n },\n beforeRouteLeave(to, from, next) {\n socket.disconnect();\n next();\n },\n})\nexport default class Game extends Vue {\n $refs!: {\n confirm: InstanceType;\n tools: InstanceType;\n };\n\n ready = {\n manager: false,\n tools: false,\n };\n\n get showUI(): boolean {\n return gameStore.showUI;\n }\n\n get IS_DM(): boolean {\n return gameStore.IS_DM;\n }\n\n get layers(): string[] {\n return gameStore.layers;\n }\n\n get selectedLayer(): string {\n return gameStore.selectedLayer;\n }\n\n get zoomDisplay(): number {\n return gameStore.zoomDisplay;\n }\n\n set zoomDisplay(value: number) {\n gameStore.updateZoom({\n newZoomDisplay: value,\n zoomLocation: l2g(new LocalPoint(window.innerWidth / 2, window.innerHeight / 2)),\n });\n }\n\n mounted() {\n window.addEventListener(\"resize\", this.resizeWindow);\n window.addEventListener(\"keyup\", onKeyUp);\n window.addEventListener(\"keydown\", onKeyDown);\n this.ready.manager = true;\n }\n\n destroyed() {\n window.removeEventListener(\"resize\", this.resizeWindow);\n window.removeEventListener(\"keyup\", onKeyUp);\n window.removeEventListener(\"keydown\", onKeyDown);\n this.ready.manager = false;\n }\n\n // Window events\n\n zoom(event: WheelEvent) {\n throttle(scrollZoom)(event);\n }\n\n resizeWindow() {\n layerManager.setWidth(window.innerWidth);\n layerManager.setHeight(window.innerHeight);\n layerManager.invalidate();\n }\n\n // Mouse events\n\n mousedown(event: MouseEvent) {\n this.$refs.tools.mousedown(event);\n }\n mouseup(event: MouseEvent) {\n this.$refs.tools.mouseup(event);\n }\n mousemove(event: MouseEvent) {\n this.$refs.tools.mousemove(event);\n }\n mouseleave(event: MouseEvent) {\n this.$refs.tools.mouseleave(event);\n }\n contextmenu(event: MouseEvent) {\n this.$refs.tools.contextmenu(event);\n }\n selectLayer(layer: string) {\n layerManager.selectLayer(layer);\n }\n drop(event: DragEvent) {\n if (event === null || event.dataTransfer === null) return;\n if (event.dataTransfer.files.length > 0) {\n this.$refs.confirm\n .open(\"Uploading files should be done through the asset manager.\", \"Ok\", \"\")\n .then(() => {}, () => {});\n } else if (event.dataTransfer.getData(\"text/plain\") === \"\") {\n return;\n } else {\n layerManager.dropAsset(event);\n }\n }\n}\n","import { GlobalPoint, LocalPoint, Ray } from \"@/game/geom\";\nimport { gameStore } from \"@/game/store\";\n\nexport function g2l(obj: GlobalPoint): LocalPoint {\n const z = gameStore.zoomFactor;\n const panX = gameStore.panX;\n const panY = gameStore.panY;\n return new LocalPoint((obj.x + panX) * z, (obj.y + panY) * z);\n}\n\nexport function g2lx(x: number) {\n return g2l(new GlobalPoint(x, 0)).x;\n}\n\nexport function g2ly(y: number) {\n return g2l(new GlobalPoint(0, y)).y;\n}\n\nexport function g2lz(z: number) {\n return z * gameStore.zoomFactor;\n}\n\nexport function getUnitDistance(r: number) {\n return (r / gameStore.unitSize) * gameStore.gridSize;\n}\n\nexport function g2lr(r: number) {\n return g2lz(getUnitDistance(r));\n}\n\nexport function l2g(obj: LocalPoint): GlobalPoint;\nexport function l2g(obj: Ray): Ray;\nexport function l2g(obj: LocalPoint | Ray): GlobalPoint | Ray {\n const z = gameStore.zoomFactor;\n const panX = gameStore.panX;\n const panY = gameStore.panY;\n if (obj instanceof LocalPoint) {\n return new GlobalPoint(obj.x / z - panX, obj.y / z - panY);\n } else {\n return new Ray(l2g(obj.origin), obj.direction.multiply(1 / z), obj.tMax);\n }\n}\n\nexport function l2gx(x: number) {\n return l2g(new LocalPoint(x, 0)).x;\n}\n\nexport function l2gy(y: number) {\n return l2g(new LocalPoint(0, y)).y;\n}\n\nexport function l2gz(z: number) {\n return z / gameStore.zoomFactor;\n}\n\nexport function l2gr(r: number) {\n return l2gz(getUnitDistance(r));\n}\n\n(window).g2lx = g2lx;\n(window).g2ly = g2ly;\n","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nimport Vue from \"vue\";\nimport Component from \"vue-class-component\";\n\nimport { mapState } from \"vuex\";\n\nimport ColorPicker from \"@/core/components/colorpicker.vue\";\nimport Prompt from \"@/core/components/modals/prompt.vue\";\nimport AssetNode from \"@/game/ui/menu/asset_node.vue\";\nimport NoteDialog from \"@/game/ui/note.vue\";\n\nimport { getRef, uuidv4 } from \"@/core/utils\";\nimport { socket } from \"@/game/api/socket\";\nimport { Note } from \"@/game/comm/types/general\";\nimport { layerManager } from \"@/game/layers/manager\";\nimport { gameStore } from \"@/game/store\";\n\n@Component({\n components: {\n \"color-picker\": ColorPicker,\n \"asset-node\": AssetNode,\n },\n computed: {\n ...mapState(\"game\", [\"invitationCode\", \"IS_DM\", \"locations\", \"assets\", \"notes\"]),\n },\n})\nexport default class MenuBar extends Vue {\n visible = {\n settings: false,\n locations: false,\n };\n\n get useGrid(): boolean {\n return gameStore.useGrid;\n }\n set useGrid(value: boolean) {\n gameStore.setUseGrid({ useGrid: value, sync: true });\n }\n get fullFOW(): boolean {\n return gameStore.fullFOW;\n }\n set fullFOW(value: boolean) {\n gameStore.setFullFOW({ fullFOW: value, sync: true });\n }\n get fowOpacity(): number {\n return gameStore.fowOpacity;\n }\n set fowOpacity(value: number) {\n if (typeof value !== \"number\") return;\n gameStore.setFOWOpacity({ fowOpacity: value, sync: true });\n }\n get fowLOS(): boolean {\n return gameStore.fowLOS;\n }\n set fowLOS(value: boolean) {\n gameStore.setLineOfSight({ fowLOS: value, sync: true });\n }\n get unitSize(): number {\n return gameStore.unitSize;\n }\n set unitSize(value: number) {\n if (typeof value !== \"number\") return;\n gameStore.setUnitSize({ unitSize: value, sync: true });\n }\n get gridSize(): number {\n return gameStore.gridSize;\n }\n set gridSize(value: number) {\n if (typeof value !== \"number\") return;\n gameStore.setGridSize({ gridSize: value, sync: true });\n }\n get gridColour(): string {\n return gameStore.gridColour;\n }\n set gridColour(value: string) {\n gameStore.setGridColour({ colour: value, sync: true });\n }\n get fowColour(): string {\n return gameStore.fowColour;\n }\n set fowColour(value: string) {\n gameStore.setFOWColour({ colour: value, sync: true });\n }\n get rulerColour(): string {\n return gameStore.rulerColour;\n }\n set rulerColour(value: string) {\n gameStore.setRulerColour({ colour: value, sync: true });\n }\n get visionRangeMin(): number {\n return gameStore.visionRangeMin;\n }\n set visionRangeMin(value: number) {\n if (typeof value !== \"number\") return;\n gameStore.setVisionRangeMin({ value, sync: true });\n }\n get visionRangeMax(): number {\n return gameStore.visionRangeMax;\n }\n set visionRangeMax(value: number) {\n if (typeof value !== \"number\") return;\n gameStore.setVisionRangeMax({ value, sync: true });\n }\n settingsClick(event: { target: HTMLElement }) {\n if (event.target.classList.contains(\"accordion\")) {\n event.target.classList.toggle(\"accordion-active\");\n const next = event.target.nextElementSibling;\n if (next !== null) next.style.display = next.style.display === \"\" ? \"block\" : \"\";\n }\n }\n changeLocation(name: string) {\n socket.emit(\"Location.Change\", name);\n }\n createLocation() {\n getRef(\"prompt\")\n .prompt(`New location name:`, `Create new location`)\n .then(\n (value: string) => {\n socket.emit(\"Location.New\", value);\n },\n () => {},\n );\n }\n createNote() {\n const note = { title: \"New note\", text: \"\", uuid: uuidv4() };\n gameStore.newNote({ note, sync: true });\n this.openNote(note);\n }\n openNote(note: Note) {\n getRef(\"note\").open(note);\n }\n changeVisionMode(event: { target: HTMLSelectElement }) {\n const value = event.target.value.toLowerCase();\n if (value !== \"bvh\" && value !== \"triangle\") return;\n gameStore.setVisionMode({ mode: value, sync: true });\n gameStore.recalculateVision();\n gameStore.recalculateMovement();\n layerManager.invalidate();\n }\n}\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/ts-loader/index.js??ref--12-2!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./colorpicker.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/ts-loader/index.js??ref--12-2!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./colorpicker.vue?vue&type=script&lang=ts&\"","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('ContextMenu',{attrs:{\"visible\":_vm.visible,\"left\":_vm.x + 'px',\"top\":_vm.y + 'px'},on:{\"close\":_vm.close}},[(_vm.IS_DM)?_c('li',{on:{\"click\":_vm.bringPlayers}},[_vm._v(\"Bring players\")]):_vm._e(),_c('li',{on:{\"click\":_vm.createToken}},[_vm._v(\"Create basic token\")]),_c('li',{on:{\"click\":_vm.showInitiative}},[_vm._v(\"Show initiative\")])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","export * from \"-!cache-loader?{\\\"cacheDirectory\\\":\\\"node_modules/.cache/vue-loader\\\",\\\"cacheIdentifier\\\":\\\"74f43d04-vue-loader-template\\\"}!../../../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./selectcontext.vue?vue&type=template&id=44a31e42&scoped=true&\"","import { CDT } from \"./cdt\";\nimport { ccw, cw, orientation, ulp } from \"./triag\";\n\nexport type Point = number[];\n\nexport const INFINITE = -7e310;\n\nlet _INFINITE_VERTEX: Vertex;\n\nexport enum Sign {\n NEGATIVE = -1,\n ZERO = 0,\n POSITIVE = 1,\n\n RIGHT_TURN = -1,\n LEFT_TURN = 1,\n\n SMALLER = -1,\n EQUAL = 0,\n LARGER = 1,\n\n CLOCKWISE = -1,\n COUNTERCLOCKWISE = 1,\n\n COLLINEAR = 0,\n COPLANAR = 0,\n DEGENERATE = 0,\n\n ON_NEGATIVE_SIDE = -1,\n ON_ORIENTED_BOUNDARY = 0,\n ON_POSITIVE_SIDE = 1,\n}\n\nenum LineFaceState {\n UNDEFINED = -1,\n VERTEX_VERTEX = 0,\n VERTEX_EDGE = 1,\n EDGE_VERTEX = 2,\n EDGE_EDGE = 3,\n}\n\nfunction newPoint(): Point {\n return [INFINITE, INFINITE];\n}\n\nexport class Triangle {\n vertices: (Vertex | null)[] = [];\n neighbours: (Triangle | null)[] = [null, null, null];\n constraints = [false, false, false];\n static _counter = 0;\n uid = Triangle._counter++;\n\n constructor(...vertices: (Vertex | null)[]) {\n this.vertices = vertices;\n }\n\n from(t: Triangle): this {\n this.vertices = t.vertices.slice(0, t.vertices.length);\n this.neighbours = t.neighbours.slice(0, t.neighbours.length);\n this.constraints = t.constraints.slice(0, t.constraints.length);\n return this;\n }\n\n get dimension() {\n return this.vertices.length - 1;\n }\n\n addVertex(vertex: Vertex) {\n if (vertex === undefined) {\n console.log(\"UNDEFINED HIERE\");\n }\n this.vertices.push(vertex);\n vertex.triangle = this;\n }\n\n isConstrained(index: number): boolean {\n return this.constraints[index];\n }\n\n reorient() {\n // If certain indices do not exist yet thay will append faulty undefined's, thus we slice them\n this.vertices = [this.vertices[1], this.vertices[0], this.vertices[2]].slice(0, this.vertices.length);\n this.neighbours = [this.neighbours[1], this.neighbours[0], this.neighbours[2]];\n this.constraints = [this.constraints[1], this.constraints[0], this.constraints[2]];\n }\n\n indexV(v: Vertex): number {\n return this.vertices.indexOf(v);\n }\n\n indexT(t: Triangle): number {\n return this.neighbours.indexOf(t);\n }\n\n isInfinite(index?: number): boolean {\n if (index === undefined) {\n return this.vertices.includes(_INFINITE_VERTEX);\n } else {\n return this.vertices[ccw(index)]!.infinite || this.vertices[cw(index)]!.infinite;\n }\n }\n\n contains(point: Point) {\n const A =\n -this.vertices[1]!.point![1] * this.vertices[2]!.point![0] +\n this.vertices[0]!.point![1] * (-this.vertices[1]!.point![0] + this.vertices[2]!.point![0]) +\n this.vertices[0]!.point![0] * (this.vertices[1]!.point![1] - this.vertices[2]!.point![1]) +\n this.vertices[1]!.point![0] * this.vertices[2]!.point![1];\n const sign = A < 0 ? -1 : 1;\n const s =\n (this.vertices[0]!.point![1] * this.vertices[2]!.point![0] -\n this.vertices[0]!.point![0] * this.vertices[2]!.point![1] +\n (this.vertices[2]!.point![1] - this.vertices[0]!.point![1]) * point[0] +\n (this.vertices[0]!.point![0] - this.vertices[2]!.point![0]) * point[1]) *\n sign;\n if (s < 0) return false;\n const t =\n (this.vertices[0]!.point![0] * this.vertices[1]!.point![1] -\n this.vertices[0]!.point![1] * this.vertices[1]!.point![0] +\n (this.vertices[0]!.point![1] - this.vertices[1]!.point![1]) * point[0] +\n (this.vertices[1]!.point![0] - this.vertices[0]!.point![0]) * point[1]) *\n sign;\n\n return t > 0 && s + t < A * sign;\n }\n}\n\nexport class Vertex {\n infinite = false;\n private _point: Point | undefined;\n triangle: Triangle | undefined;\n\n constructor(point?: Point) {\n this._point = point;\n }\n\n get point(): Point | undefined {\n return this._point;\n }\n\n set point(point: Point | undefined) {\n this._point = point;\n this.infinite = false;\n }\n}\n\nexport class EdgeCirculator {\n ri: number;\n v: Vertex | null;\n t: Triangle | null;\n _ri: number;\n _v: Vertex | null;\n _t: Triangle | null;\n\n constructor(v: Vertex | null, t: Triangle | null) {\n this.v = v;\n this.t = t;\n if (v === null) {\n this.t = null;\n } else if (t === null) {\n this.t = v.triangle!;\n }\n if (this.t == null || this.t.dimension < 1) {\n this.ri = 0;\n this.v = null;\n this.t = null;\n } else {\n const i = this.t.indexV(v!);\n if (this.t.dimension === 2) this.ri = ccw(i);\n else this.ri = 2;\n }\n this._ri = this.ri;\n this._v = this.v;\n this._t = this.t;\n }\n\n get valid() {\n return this.t !== null && this.v !== null;\n }\n\n next(): boolean {\n let i = this.t!.indexV(this.v!);\n if (this.t!.dimension === 1) {\n this.t = this.t!.neighbours[i === 0 ? 1 : 0];\n } else {\n this.t = this.t!.neighbours[ccw(i)];\n i = this.t!.indexV(this.v!);\n this.ri = ccw(i);\n }\n return this.ri !== this._ri || this.v !== this._v || this.t !== this._t;\n }\n}\n\nexport class EdgeIterator {\n private i = 0;\n pos: Triangle | null;\n edge: Edge = new Edge();\n tds: TDS;\n _es = 0;\n constructor(tds: TDS) {\n this.tds = tds;\n this.edge.second = 0;\n if (tds.dimension <= 0) {\n this.pos = null;\n return;\n }\n this.pos = tds.triangles[0];\n if (tds.dimension === 1) this.edge.second = 2;\n while (this.pos !== null && !this.associatedEdge()) {\n throw new Error(\"[poi\");\n }\n\n if (tds.dimension === 1) this._es = 2;\n }\n\n get valid(): boolean {\n return (this.pos !== null || this._es !== this.edge.second) && this.pos!.isInfinite(this.edge.second);\n }\n\n next() {\n do {\n this.increment();\n } while (this.pos !== null && !this.associatedEdge());\n }\n\n collect(): Edge {\n this.edge.first = this.pos;\n return this.edge;\n }\n\n associatedEdge(): boolean {\n if (this.tds.dimension === 1) return true;\n return (\n this.tds.triangles.indexOf(this.pos!) < this.tds.triangles.indexOf(this.pos!.neighbours[this.edge.second]!)\n );\n }\n\n increment() {\n if (this.tds.dimension === 1) {\n this.i++;\n if (this.tds.triangles.length <= this.i) this.pos = null;\n else this.pos = this.tds.triangles[this.i];\n } else if (this.edge.second === 2) {\n this.edge.second = 0;\n this.i++;\n if (this.tds.triangles.length <= this.i) this.pos = null;\n else this.pos = this.tds.triangles[this.i];\n } else {\n this.edge.second++;\n }\n }\n}\n\nexport class FaceCirculator {\n v: Vertex | null;\n t: Triangle | null;\n _v: Vertex | null;\n _t: Triangle | null;\n\n constructor(v: Vertex | null, t: Triangle | null) {\n this.v = v;\n this.t = t;\n if (v === null) {\n this.t = null;\n } else if (t === null) {\n this.t = v.triangle!;\n }\n if (this.t == null || this.t.dimension < 2) {\n this.v = null;\n this.t = null;\n }\n this._v = this.v;\n this._t = this.t;\n }\n\n get valid() {\n return this.t !== null && this.v !== null;\n }\n\n prev() {\n const i = this.t!.indexV(this.v!);\n this.t = this.t!.neighbours[cw(i)];\n }\n\n next(): boolean {\n const i = this.t!.indexV(this.v!);\n this.t = this.t!.neighbours[ccw(i)];\n return this.v !== this._v || this.t !== this._t;\n }\n}\n\nexport class LineFaceCirculator {\n private i = 0;\n pos: Triangle | null = null;\n _tr: CDT;\n s: LineFaceState = LineFaceState.UNDEFINED;\n p: Point;\n q: Point;\n\n constructor(v: Vertex, tr: CDT, dir: Point) {\n this._tr = tr;\n this.p = v.point!;\n this.q = dir;\n\n const fc = new FaceCirculator(v, null);\n let ic = fc.t!.indexV(v);\n let vt = fc.t!.vertices[cw(ic)]!;\n while (v === _INFINITE_VERTEX || orientation(this.p, this.q, vt.point!) !== Sign.LEFT_TURN) {\n fc.next();\n ic = fc.t!.indexV(v);\n vt = fc.t!.vertices[cw(ic)]!;\n if (!fc.valid) {\n return;\n }\n }\n\n let vr = fc.t!.vertices[ccw(ic)]!;\n let pqr: Sign = Sign.RIGHT_TURN;\n // tslint:disable:no-conditional-assignment\n while (vr !== _INFINITE_VERTEX && (pqr = orientation(this.p, this.q, vr.point!)) === Sign.LEFT_TURN) {\n fc.prev();\n ic = fc.t!.indexV(v);\n vr = fc.t!.vertices[ccw(ic)]!;\n }\n\n ic = fc.t!.indexV(v);\n vt = fc.t!.vertices[cw(ic)]!;\n\n if (vr === _INFINITE_VERTEX) {\n fc.prev();\n ic = fc.t!.indexV(v);\n vr = fc.t!.vertices[ccw(ic)]!;\n pqr = orientation(this.p, this.q, vr.point!);\n switch (pqr) {\n case Sign.RIGHT_TURN:\n case Sign.COLLINEAR: {\n fc.next();\n ic = fc.t!.indexV(_INFINITE_VERTEX);\n this.pos = fc.t!;\n this.s = LineFaceState.VERTEX_VERTEX;\n this.i = ic;\n break;\n }\n case Sign.LEFT_TURN: {\n break;\n }\n }\n } else if (pqr === Sign.COLLINEAR) {\n this.pos = fc.t!;\n this.s = LineFaceState.VERTEX_VERTEX;\n this.i = ccw(ic);\n } else {\n this.pos = fc.t!;\n this.s = LineFaceState.VERTEX_EDGE;\n this.i = ic;\n }\n }\n\n next() {\n this.increment();\n }\n\n increment() {\n let o: Sign;\n if (this.s === LineFaceState.VERTEX_VERTEX || this.s === LineFaceState.EDGE_VERTEX) {\n do {\n const n = this.pos!.neighbours[cw(this.i)]!;\n this.i = n.indexT(this.pos!);\n this.pos = n;\n if (this.pos!.vertices[this.i] === _INFINITE_VERTEX) {\n o = Sign.COLLINEAR;\n this.i = cw(this.i);\n break;\n }\n o = orientation(this.p, this.q, this.pos!.vertices[this.i]!.point!);\n this.i = cw(this.i);\n } while (o === Sign.LEFT_TURN);\n if (o === Sign.COLLINEAR) {\n this.s = LineFaceState.VERTEX_VERTEX;\n this.i = ccw(this.i);\n } else {\n this.s = LineFaceState.VERTEX_EDGE;\n }\n } else {\n const n = this.pos!.neighbours[this.i]!;\n const ni = n.indexT(this.pos!);\n this.pos = n;\n o =\n this.pos!.vertices[ni]! === _INFINITE_VERTEX\n ? Sign.COLLINEAR\n : orientation(this.p, this.q, this.pos!.vertices[ni]!.point!);\n switch (o) {\n case Sign.LEFT_TURN: {\n this.s = LineFaceState.EDGE_EDGE;\n this.i = ccw(ni);\n break;\n }\n case Sign.RIGHT_TURN: {\n this.s = LineFaceState.EDGE_EDGE;\n this.i = cw(ni);\n break;\n }\n default: {\n this.s = LineFaceState.EDGE_VERTEX;\n this.i = ni;\n }\n }\n }\n }\n}\n\nclass Edge {\n first: Triangle | null = null;\n second: number = 0;\n}\n\nexport enum LocateType {\n VERTEX,\n EDGE,\n FACE,\n OUTSIDE_CONVEX_HULL,\n OUTSIDE_AFFINE_HULL,\n}\n\nexport class TDS {\n dimension = -1;\n vertices: Vertex[] = [];\n triangles: Triangle[] = [];\n _infinite: Vertex;\n\n constructor() {\n this._infinite = this.createVertex();\n _INFINITE_VERTEX = this._infinite;\n const t = new Triangle();\n t.addVertex(this._infinite);\n this.triangles.push(t);\n }\n\n createVertex(): Vertex {\n const v = this.infiniteVertex;\n if (v === undefined) {\n console.log(\"UNDEFINED HIERE\");\n }\n this.vertices.push(v);\n return v;\n }\n\n createTriangle(\n v0: Vertex | null,\n v1: Vertex | null,\n v2: Vertex | null,\n n0: Triangle | null,\n n1: Triangle | null,\n n2: Triangle | null,\n ) {\n const t = new Triangle(v0, v1, v2);\n t.neighbours[0] = n0;\n t.neighbours[1] = n1;\n t.neighbours[2] = n2;\n this.triangles.push(t);\n return t;\n }\n\n deleteTriangle(trig: Triangle) {\n this.triangles = this.triangles.filter(t => t !== trig);\n }\n\n setAdjacency(t0: Triangle, i0: number, t1: Triangle, i1: number) {\n t0.neighbours[i0] = t1;\n t1.neighbours[i1] = t0;\n }\n\n get finiteVertex(): Vertex {\n return this.vertices[1];\n }\n\n get infiniteVertex(): Vertex {\n const v = new Vertex(newPoint());\n v.infinite = true;\n return v;\n }\n\n get finiteEdge(): Edge {\n if (this.dimension < 1) throw new Error(\"aspo\");\n const ei = new EdgeIterator(this);\n while (ei.valid) ei.next();\n return ei.collect();\n }\n\n insertDimUp(w: Vertex = new Vertex(), orient: boolean = true): Vertex {\n const v = this.createVertex();\n this.dimension++;\n let t1: Triangle;\n let t2: Triangle;\n switch (this.dimension) {\n case 0: {\n t1 = this.triangles[0];\n t2 = new Triangle(v);\n this.triangles.push(t2);\n this.setAdjacency(t1, 0, t2, 0);\n v.triangle = t2;\n break;\n }\n case 1:\n case 2: {\n const deleteList: Triangle[] = [];\n const triangles = this.triangles.slice(0, this.triangles.length);\n for (const trig of triangles) {\n const copy = new Triangle().from(trig);\n this.triangles.push(copy);\n trig.vertices[this.dimension] = v;\n copy.vertices[this.dimension] = w;\n this.setAdjacency(trig, this.dimension, copy, this.dimension);\n if (trig.vertices.includes(w)) deleteList.push(copy);\n }\n for (const trig of triangles) {\n const neighbour = trig.neighbours[this.dimension];\n for (let j = 0; j < this.dimension; ++j) {\n neighbour!.neighbours[j] = trig.neighbours[j]!.neighbours[this.dimension];\n }\n }\n\n let lfit = 0;\n if (this.dimension === 1) {\n if (orient) {\n triangles[lfit].reorient();\n lfit++;\n triangles[lfit].neighbours[1]!.reorient();\n } else {\n triangles[lfit].neighbours[1]!.reorient();\n lfit++;\n triangles[lfit].reorient();\n }\n } else {\n for (const trig of triangles) {\n if (orient) trig.neighbours[2]!.reorient();\n else trig.reorient();\n }\n }\n\n for (const trig of deleteList) {\n let j = 1;\n if (trig.vertices[0] === w) j = 0;\n t1 = trig.neighbours[this.dimension]!;\n const i1 = this.mirrorIndex(trig, this.dimension);\n t2 = trig.neighbours[j]!;\n const i2 = this.mirrorIndex(trig, j);\n this.setAdjacency(t1, i1, t2, i2);\n this.deleteTriangle(trig);\n }\n v.triangle = triangles[0];\n break;\n }\n default: {\n throw new Error(\"Dimension unknown\");\n }\n }\n return v;\n }\n\n mirrorIndex(t: Triangle, i: number): number {\n if (t.dimension === 1) {\n const j = t.neighbours[i]!.indexV(t.vertices[i === 0 ? 1 : 0]!);\n return j === 0 ? 1 : 0;\n }\n return ccw(t.neighbours[i]!.indexV(t.vertices[ccw(i)]!));\n }\n\n insertInFace(t: Triangle) {\n const v = this.createVertex();\n const v0 = t.vertices[0]!;\n const v1 = t.vertices[1]!;\n const v2 = t.vertices[2]!;\n const n1 = t.neighbours[1]!;\n const n2 = t.neighbours[2]!;\n const t1 = this.createTriangle(v0, v, v2, t, n1, null);\n const t2 = this.createTriangle(v0, v1, v, t, null, n2);\n this.setAdjacency(t1, 2, t2, 1);\n if (n1 !== null) {\n const i1 = this.mirrorIndex(t, 1);\n n1.neighbours[i1] = t1;\n }\n if (n2 !== null) {\n const i2 = this.mirrorIndex(t, 2);\n n2.neighbours[i2] = t2;\n }\n t.vertices[0] = v;\n t.neighbours[1] = t1;\n t.neighbours[2] = t2;\n if (v0.triangle === t) v0.triangle = t2;\n v.triangle = t;\n return v;\n }\n\n flip(t: Triangle, i: number) {\n const n = t.neighbours[i]!;\n const ni = this.mirrorIndex(t, i);\n const vCW = t.vertices[cw(i)]!;\n const vCCW = t.vertices[ccw(i)]!;\n const tr = t.neighbours[ccw(i)]!;\n const tri = this.mirrorIndex(t, ccw(i));\n const bl = n.neighbours[ccw(ni)]!;\n const bli = this.mirrorIndex(n, ccw(ni));\n\n t.vertices[cw(i)] = n.vertices[ni]!;\n n.vertices[cw(ni)] = t.vertices[i]!;\n\n this.setAdjacency(t, i, bl, bli);\n this.setAdjacency(t, ccw(i), n, ccw(ni));\n this.setAdjacency(n, ni, tr, tri);\n\n if (vCW.triangle! === t) vCW.triangle = n;\n if (vCCW.triangle! === n) vCCW.triangle = t;\n }\n\n insertInEdge(t: Triangle, i: number) {\n let v: Vertex;\n if (this.dimension === 1) {\n v = this.createVertex();\n const ff = t.neighbours[0]!;\n const vv = t.vertices[1]!;\n const g = this.createTriangle(v, vv, null, ff, t, null);\n t.vertices[1] = v;\n t.neighbours[0] = g;\n ff.neighbours[1] = g;\n v.triangle = g;\n vv.triangle = ff;\n } else {\n const n = t.neighbours[i]!;\n const ni = this.mirrorIndex(t, i);\n v = this.insertInFace(t);\n this.flip(n, ni);\n }\n return v;\n }\n}\n\nexport class BoundingBox {\n x1: number;\n x2: number;\n y1: number;\n y2: number;\n constructor(p: Point) {\n this.x1 = p[0];\n this.y1 = p[1];\n this.x2 = p[0];\n this.y2 = p[1];\n }\n\n dilate(dist: number) {\n this.x1 -= dist * ulp(this.x1);\n this.y1 -= dist * ulp(this.y1);\n this.x2 += dist * ulp(this.x2);\n this.y2 += dist * ulp(this.y2);\n }\n\n overlaps(other: BoundingBox): boolean {\n if (this.x2 < other.x1 || other.x2 < this.x1) return false;\n if (this.y2 < other.y1 || other.y2 < this.y1) return false;\n return true;\n }\n}\n","import { partition } from \"@/core/utils\";\nimport { GlobalPoint, Ray } from \"@/game/geom\";\nimport { layerManager } from \"@/game/layers/manager\";\nimport { BoundingRect } from \"@/game/shapes/boundingrect\";\nimport { gameStore } from \"@/game/store\";\nimport { g2lx, g2ly, g2lz } from \"@/game/units\";\nimport { BoundingNode, InteriorNode, LeafNode } from \"@/game/visibility/bvh/node\";\n\ninterface BuildInfo {\n index: number;\n bbox: BoundingRect;\n center: BoundingRect;\n}\ninterface LinearBHVNode {\n bbox: BoundingRect;\n nPrimitives: number;\n}\ninterface LinearLeafNode extends LinearBHVNode {\n primitivesOffset: number;\n}\ninterface LinearInternalNode extends LinearBHVNode {\n secondChildOffset: number;\n dimension: number;\n}\n\nexport class BoundingVolume {\n totalNodes = 0;\n buildData: BuildInfo[] = [];\n shapes: string[];\n orderedPrims: string[] = [];\n root: BoundingNode | null;\n nodes: LinearBHVNode[] = [];\n\n offset = 0;\n\n constructor(shapes: string[]) {\n this.shapes = shapes;\n if (this.shapes.length === 0) {\n this.root = null;\n this.nodes = [];\n return;\n }\n for (let i = 0; i < shapes.length; i++) {\n const shape = layerManager.UUIDMap.get(shapes[i])!;\n this.buildData.push({\n index: i,\n bbox: shape.getBoundingBox(),\n center: new BoundingRect(shape.center(), 0, 0),\n });\n }\n this.root = this.recursiveBuild(0, shapes.length);\n this.compact();\n }\n\n draw() {\n const ctx = layerManager.getLayer(\"draw\")!.ctx;\n for (const node of this.nodes) {\n const b = node.bbox;\n ctx.strokeRect(g2lx(b.topLeft.x), g2ly(b.topLeft.y), g2lz(b.w), g2lz(b.h));\n }\n }\n\n recursiveBuild(start: number, end: number): BoundingNode {\n this.totalNodes++;\n let bbox = this.buildData[start].bbox;\n for (let i = start + 1; i < end; i++) bbox = bbox.union(this.buildData[i].bbox);\n const nPrimitives = end - start;\n if (nPrimitives === 1) {\n return this.createLeaf(start, end, nPrimitives, bbox);\n } else {\n let centroidBbox = this.buildData[start].center;\n for (let i = start; i < end; i++) centroidBbox = centroidBbox.union(this.buildData[i].center);\n const dimension = centroidBbox.getMaxExtent();\n if (centroidBbox.botRight.get(dimension) === centroidBbox.topLeft.get(dimension)) {\n return this.createLeaf(start, end, nPrimitives, bbox);\n }\n // Use shitty Middle thingy until an introselect js algo is added\n const pMid = 0.5 * (centroidBbox.topLeft.get(dimension) + centroidBbox.botRight.get(dimension));\n const partitionedData = partition(\n this.buildData.slice(start, end),\n (n: BuildInfo) => n.center.center().get(dimension) < pMid,\n );\n const flattened = ([]).concat.apply([], partitionedData);\n if (partitionedData[0].length === 0 || partitionedData[1].length === 0) console.log(\"EMPTY\");\n this.buildData.splice(start, flattened.length, ...flattened);\n const mid = partitionedData[0].length + start;\n return new InteriorNode(dimension, this.recursiveBuild(start, mid), this.recursiveBuild(mid, end));\n }\n }\n\n intersect(ray: Ray, stopOnFirstHit?: boolean) {\n if (this.nodes.length === 0) return { hit: false, intersect: ray.get(0), tMin: 0, tMax: ray.tMax };\n if (stopOnFirstHit === undefined) stopOnFirstHit = false;\n // Initialize return values\n let hit = false;\n let tMin = 0;\n let tMax = ray.tMax;\n\n // Initialize work variables\n let todoOffset = 0;\n let nodeNum = 0;\n const todo: number[] = [];\n\n // Precalculate intersection vectors\n const invDir = ray.direction.inverse();\n const dirIsNegative = [invDir.x < 0, invDir.y < 0];\n\n while (true) {\n const node = this.nodes[nodeNum];\n\n const i = node.bbox.intersectP(ray, invDir, dirIsNegative);\n if (i.hit) {\n if (node.nPrimitives > 0) {\n // TODO: nPrimitives is currently always 1 , this could be generalised\n // for (let i=0; i < node.nPrimitives; i++) {\n // if (this.shapes[(node).primitivesOffset + i])\n // }\n hit = true;\n tMin = ray.tMax = i.min;\n tMax = i.max;\n if (todoOffset === 0 || stopOnFirstHit) break;\n nodeNum = todo[--todoOffset];\n } else {\n if (dirIsNegative[(node).dimension]) {\n todo[todoOffset++] = nodeNum + 1;\n nodeNum = (node).secondChildOffset;\n } else {\n todo[todoOffset++] = (node).secondChildOffset;\n nodeNum++;\n }\n }\n } else {\n if (todoOffset === 0) break;\n nodeNum = todo[--todoOffset];\n }\n }\n return { hit, intersect: ray.get(tMin), tMin, tMax };\n }\n\n private compact() {\n this.offset = 0;\n if (this.root !== null) this.flatten(this.root);\n }\n\n private flatten(node: BoundingNode) {\n const index = this.offset;\n const myOffset = this.offset++;\n if (node.nPrimitives === 0) {\n this.flatten(node.children[0]);\n const secondOffset = this.flatten(node.children[1]);\n this.nodes[index] = {\n bbox: node.bbox,\n dimension: (node).dimension,\n nPrimitives: 0,\n secondChildOffset: secondOffset,\n };\n } else {\n this.nodes[index] = {\n bbox: node.bbox,\n primitivesOffset: (node).firstPrimOffset,\n nPrimitives: node.nPrimitives,\n };\n }\n return myOffset;\n }\n\n private createLeaf(start: number, end: number, nPrimitives: number, bbox: BoundingRect) {\n const size = this.orderedPrims.length;\n for (let i = start; i < end; i++) this.orderedPrims.push(this.shapes[this.buildData[i].index]);\n return new LeafNode(size, nPrimitives, bbox);\n }\n}\n","import Initiative from \"./ui/initiative.vue\";\n\nimport { getRef } from \"@/core/utils\";\nimport { sendClientOptions } from \"@/game/api/utils\";\nimport { ServerShape } from \"@/game/comm/types/shapes\";\nimport { GlobalPoint } from \"@/game/geom\";\nimport { layerManager } from \"@/game/layers/manager\";\nimport { createShapeFromDict } from \"@/game/shapes/utils\";\nimport { gameStore } from \"@/game/store\";\nimport { AnnotationManager } from \"@/game/ui/annotation\";\nimport { g2l } from \"@/game/units\";\n\nexport class GameManager {\n selectedTool: number = 0;\n\n annotationManager = new AnnotationManager();\n\n addShape(shape: ServerShape): void {\n if (!layerManager.hasLayer(shape.layer)) {\n console.log(`Shape with unknown layer ${shape.layer} could not be added`);\n return;\n }\n const layer = layerManager.getLayer(shape.layer)!;\n const sh = createShapeFromDict(shape);\n if (sh === undefined) {\n console.log(`Shape with unknown type ${shape.type_} could not be added`);\n return;\n }\n layer.addShape(sh, false);\n layer.invalidate(false);\n }\n\n updateShape(data: { shape: ServerShape; redraw: boolean; move: boolean; temporary: boolean }): void {\n if (!layerManager.hasLayer(data.shape.layer)) {\n console.log(`Shape with unknown layer ${data.shape.layer} could not be added`);\n return;\n }\n const sh = createShapeFromDict(data.shape);\n if (sh === undefined) {\n console.log(`Shape with unknown type ${data.shape.type_} could not be added`);\n return;\n }\n const oldShape = layerManager.UUIDMap.get(data.shape.uuid);\n if (oldShape === undefined) {\n console.log(`Shape with unknown id could not be updated`);\n return;\n }\n const redrawInitiative = sh.owners !== oldShape.owners;\n const shape = Object.assign(oldShape, sh);\n shape.checkVisionSources();\n shape.setMovementBlock(shape.movementObstruction);\n shape.setIsToken(shape.isToken);\n if (data.redraw) {\n gameStore.recalculateVision(data.temporary);\n layerManager.getLayer(data.shape.layer)!.invalidate(false);\n if (shape.movementObstruction) gameStore.recalculateMovement(data.temporary);\n }\n if (redrawInitiative) getRef(\"initiative\").$forceUpdate();\n }\n\n setCenterPosition(position: GlobalPoint) {\n const localPos = g2l(position);\n gameStore.increasePanX((window.innerWidth / 2 - localPos.x) / gameStore.zoomFactor);\n gameStore.increasePanY((window.innerHeight / 2 - localPos.y) / gameStore.zoomFactor);\n layerManager.invalidate();\n sendClientOptions();\n }\n}\n\nexport const gameManager = new GameManager();\n(window).gameManager = gameManager;\n","import mod from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./asset_node.vue?vue&type=style&index=0&id=6d718094&scoped=true&lang=css&\"; export default mod; export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./asset_node.vue?vue&type=style&index=0&id=6d718094&scoped=true&lang=css&\"","\n\n\n\n\n\nimport Vue from \"vue\";\nimport Component from \"vue-class-component\";\n\n@Component\nexport default class LoadComponent extends Vue {\n message = \"Loading...\";\n}\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return (_vm.shape !== null)?_c('div',[_c('div',{attrs:{\"id\":\"selection-menu\"}},[_c('div',{attrs:{\"id\":\"selection-edit-button\"},on:{\"click\":_vm.openEditDialog}},[_c('i',{staticClass:\"fas fa-edit\"})]),_c('div',{attrs:{\"id\":\"selection-name\"}},[_vm._v(_vm._s(_vm.shape.name))]),_c('div',{attrs:{\"id\":\"selection-trackers\"}},[_vm._l((_vm.shape.trackers),function(tracker){return (tracker.name !== '' || tracker.value !== 0)?[_c('div',{key:'name-' + tracker.uuid},[_vm._v(_vm._s(tracker.name))]),_c('div',{key:'value-' + tracker.uuid,staticClass:\"selection-tracker-value\",on:{\"click\":function($event){_vm.changeValue(tracker, false)}}},[(tracker.maxvalue === 0)?[_vm._v(_vm._s(tracker.value))]:[_vm._v(_vm._s(tracker.value)+\" / \"+_vm._s(tracker.maxvalue))]],2)]:_vm._e()})],2),_c('div',{attrs:{\"id\":\"selection-auras\"}},[_vm._l((_vm.shape.auras),function(aura){return (aura.name !== '' || aura.value !== 0)?[_c('div',{key:'name-' + aura.uuid},[_vm._v(_vm._s(aura.name))]),_c('div',{key:'value-' + aura.uuid,staticClass:\"selection-tracker-value\",on:{\"click\":function($event){_vm.changeValue(aura, true)}}},[(aura.dim === 0)?[_vm._v(_vm._s(aura.value))]:[_vm._v(_vm._s(aura.value)+\" / \"+_vm._s(aura.dim))]],2)]:_vm._e()})],2)]),_c('edit-dialog',{ref:\"editDialog\",attrs:{\"shape\":_vm.shape}})],1):_vm._e()}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","export * from \"-!cache-loader?{\\\"cacheDirectory\\\":\\\"node_modules/.cache/vue-loader\\\",\\\"cacheIdentifier\\\":\\\"74f43d04-vue-loader-template\\\"}!../../../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./selection_info.vue?vue&type=template&id=674cf937&scoped=true&\"","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return (_vm.getActiveLayer() !== undefined)?_c('ContextMenu',{attrs:{\"visible\":_vm.visible,\"left\":_vm.x + 'px',\"top\":_vm.y + 'px'},on:{\"close\":_vm.close}},[(_vm.getLayers().length > 1)?_c('li',[_vm._v(\"Layer\\n \"),_c('ul',_vm._l((_vm.getLayers()),function(layer){return _c('li',{key:layer.name,style:([_vm.getActiveLayer().name === layer.name ? {'background-color':'#82c8a0'}: {}]),on:{\"click\":function($event){_vm.setLayer(layer.name)}}},[_vm._v(_vm._s(layer.name))])}))]):_vm._e(),_c('li',{on:{\"click\":_vm.moveToBack}},[_vm._v(\"Move to back\")]),_c('li',{on:{\"click\":_vm.moveToFront}},[_vm._v(\"Move to front\")]),_c('li',{on:{\"click\":_vm.addInitiative}},[_vm._v(_vm._s(_vm.getInitiativeWord())+\" initiative\")]),_c('li',{on:{\"click\":_vm.openEditDialog}},[_vm._v(\"Show properties\")])]):_vm._e()}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","export * from \"-!cache-loader?{\\\"cacheDirectory\\\":\\\"node_modules/.cache/vue-loader\\\",\\\"cacheIdentifier\\\":\\\"74f43d04-vue-loader-template\\\"}!../../../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./shapecontext.vue?vue&type=template&id=759e5a8a&scoped=true&\"","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return (_vm.selected)?_c('div',{staticClass:\"tool-detail\",style:({'--detailRight': _vm.detailRight, '--detailArrow': _vm.detailArrow})},[_c('div',{attrs:{\"id\":\"accordion-container\"}},_vm._l((_vm.categories),function(category){return _c('accordion',{key:category,attrs:{\"title\":category,\"showArrow\":false,\"items\":_vm.labels[category],\"initialValues\":_vm.initalValues[category]},on:{\"selectionupdate\":_vm.updateSelection}})}))]):_vm._e()}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","export * from \"-!cache-loader?{\\\"cacheDirectory\\\":\\\"node_modules/.cache/vue-loader\\\",\\\"cacheIdentifier\\\":\\\"74f43d04-vue-loader-template\\\"}!../../../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./filter.vue?vue&type=template&id=847e7ec4&scoped=true&\"","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nimport axios, { AxiosError, AxiosResponse } from \"axios\";\nimport Vue from \"vue\";\nimport Component from \"vue-class-component\";\nimport { Route } from \"vue-router\";\n\nimport { coreStore } from \"@/core/store\";\n\nComponent.registerHooks([\"beforeRouteEnter\"]);\n\n@Component\nexport default class Dashboard extends Vue {\n owned = [];\n joined = [];\n error = \"\";\n\n newSessionName = \"\";\n\n beforeRouteEnter(to: Route, from: Route, next: ({}) => {}) {\n axios\n .get(\"/api/rooms\")\n .then((response: AxiosResponse) => {\n next((vm: this) => {\n vm.owned = response.data.owned;\n vm.joined = response.data.joined;\n });\n })\n .catch((err: AxiosError) => {\n next((vm: this) => {\n vm.error = err.message;\n });\n });\n }\n\n createRoom(event: Event) {\n axios\n .post(\"/api/rooms\", {\n name: this.newSessionName,\n })\n .then((response: AxiosResponse) => {\n this.$router.push(`/game/${coreStore.username}/${this.newSessionName}`);\n })\n .catch((err: AxiosError) => {\n this.error = err.message;\n });\n }\n}\n","import { render, staticRenderFns } from \"./confirm.vue?vue&type=template&id=1883e207&scoped=true&\"\nimport script from \"./confirm.vue?vue&type=script&lang=ts&\"\nexport * from \"./confirm.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./confirm.vue?vue&type=style&index=0&id=1883e207&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"1883e207\",\n null\n \n)\n\ncomponent.options.__file = \"confirm.vue\"\nexport default component.exports","import mod from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./tools.vue?vue&type=style&index=0&id=cf33581e&scoped=true&lang=css&\"; export default mod; export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./tools.vue?vue&type=style&index=0&id=cf33581e&scoped=true&lang=css&\"","import mod from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/ts-loader/index.js??ref--12-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./shapecontext.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/ts-loader/index.js??ref--12-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./shapecontext.vue?vue&type=script&lang=ts&\"","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('ContextMenu',{attrs:{\"visible\":_vm.visible,\"left\":_vm.left + 'px',\"top\":_vm.top + 'px'},on:{\"close\":_vm.close}},[_c('li',{on:{\"click\":_vm.rename}},[_vm._v(\"Rename\")]),_c('li',{on:{\"click\":_vm.remove}},[_vm._v(\"Remove\")])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","export * from \"-!cache-loader?{\\\"cacheDirectory\\\":\\\"node_modules/.cache/vue-loader\\\",\\\"cacheIdentifier\\\":\\\"74f43d04-vue-loader-template\\\"}!../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./contextMenu.vue?vue&type=template&id=606797b4&\"","import mod from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./draw.vue?vue&type=style&index=0&id=639cd890&scoped=true&lang=css&\"; export default mod; export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./draw.vue?vue&type=style&index=0&id=639cd890&scoped=true&lang=css&\"","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('Modal',{attrs:{\"visible\":_vm.visible,\"mask\":false},on:{\"close\":function($event){_vm.visible = false}},scopedSlots:_vm._u([{key:\"header\",fn:function(m){return _c('div',{staticClass:\"modal-header\",attrs:{\"draggable\":\"true\"},on:{\"dragstart\":m.dragStart,\"dragend\":m.dragEnd}},[_c('div',[_vm._v(\"Label manager\")]),_c('div',{staticClass:\"header-close\",on:{\"click\":function($event){_vm.visible = false}}},[_c('i',{staticClass:\"far fa-window-close\"})])])}}])},[_c('div',{staticClass:\"modal-body\"},[_c('div',{staticClass:\"grid\"},[_c('div',{staticClass:\"header\"},[_c('abbr',{attrs:{\"title\":\"Category\"}},[_vm._v(\"Cat.\")])]),_c('div',{staticClass:\"header name\"},[_vm._v(\"Name\")]),_c('div',{staticClass:\"header\"},[_c('abbr',{attrs:{\"title\":\"Visible\"}},[_vm._v(\"Vis.\")])]),_c('div',{staticClass:\"header\"},[_c('abbr',{attrs:{\"title\":\"Delete\"}},[_vm._v(\"Del.\")])]),_c('div',{staticClass:\"separator spanrow\",staticStyle:{\"margin\":\"0 0 7px\"}}),_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.search),expression:\"search\"}],ref:\"search\",staticClass:\"spanrow\",attrs:{\"type\":\"text\",\"placeholder\":\"search\"},domProps:{\"value\":(_vm.search)},on:{\"input\":function($event){if($event.target.composing){ return; }_vm.search=$event.target.value}}})]),_c('div',{staticClass:\"grid scroll\"},[_vm._l((_vm.categories),function(category){return [_vm._l((_vm.labels[category]),function(label){return [_c('div',{key:'row-'+label.uuid,staticClass:\"row\",on:{\"click\":function($event){_vm.selectLabel(label.uuid)}}},[(label.category)?[_c('div',{key:'cat-'+label.uuid},[_vm._v(_vm._s(label.category))]),_c('div',{key:'name-'+label.uuid,staticClass:\"name\"},[_vm._v(_vm._s(label.name))])]:_vm._e(),(!label.category)?[_c('div',{key:'cat-'+label.uuid}),_c('div',{key:'name-'+label.uuid,staticClass:\"name\"},[_vm._v(_vm._s(label.name))])]:_vm._e(),_c('div',{key:'visible-'+label.uuid,class:{'lower-opacity': !label.visible},style:({textAlign: 'center'}),on:{\"click\":function($event){$event.stopPropagation();_vm.toggleVisibility(label)}}},[_c('i',{staticClass:\"fas fa-eye\"})]),_c('div',{key:'delete-'+label.uuid,on:{\"click\":function($event){$event.stopPropagation();_vm.deleteLabel(label.uuid)}}},[_c('i',{staticClass:\"fas fa-trash-alt\"})])],2)]})]}),(_vm.labels.length === 0)?[_c('div',{attrs:{\"id\":\"no-labels\"}},[_vm._v(\"No labels exist yet\")])]:_vm._e()],2),_c('div',{staticClass:\"grid\"},[_c('div',{staticClass:\"separator spanrow\"}),_c('input',{directives:[{name:\"model\",rawName:\"v-model.trim\",value:(_vm.newCategory),expression:\"newCategory\",modifiers:{\"trim\":true}}],attrs:{\"type\":\"text\"},domProps:{\"value\":(_vm.newCategory)},on:{\"input\":function($event){if($event.target.composing){ return; }_vm.newCategory=$event.target.value.trim()},\"blur\":function($event){_vm.$forceUpdate()}}}),_c('input',{directives:[{name:\"model\",rawName:\"v-model.trim\",value:(_vm.newName),expression:\"newName\",modifiers:{\"trim\":true}}],attrs:{\"type\":\"text\"},domProps:{\"value\":(_vm.newName)},on:{\"input\":function($event){if($event.target.composing){ return; }_vm.newName=$event.target.value.trim()},\"blur\":function($event){_vm.$forceUpdate()}}}),_c('button',{attrs:{\"id\":\"addLabelButton\"},on:{\"click\":function($event){$event.stopPropagation();return _vm.addLabel($event)}}},[_vm._v(\"Add\")])])])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","export * from \"-!cache-loader?{\\\"cacheDirectory\\\":\\\"node_modules/.cache/vue-loader\\\",\\\"cacheIdentifier\\\":\\\"74f43d04-vue-loader-template\\\"}!../../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./labels.vue?vue&type=template&id=4697341e&scoped=true&\"","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/ts-loader/index.js??ref--12-2!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./manager.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/ts-loader/index.js??ref--12-2!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./manager.vue?vue&type=script&lang=ts&\"","import Vue from \"vue\";\nexport const EventBus = new Vue();\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/ts-loader/index.js??ref--12-2!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./main.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/ts-loader/index.js??ref--12-2!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./main.vue?vue&type=script&lang=ts&\"","import { GlobalPoint } from \"@/game/geom\";\nimport { BaseRect } from \"@/game/shapes/baserect\";\nimport { gameStore } from \"@/game/store\";\nimport { g2l } from \"@/game/units\";\nimport { getFogColour } from \"@/game/utils\";\n\nexport class Rect extends BaseRect {\n type = \"rect\";\n constructor(topleft: GlobalPoint, w: number, h: number, fillColour?: string, strokeColour?: string, uuid?: string) {\n super(topleft, w, h, fillColour, strokeColour, uuid);\n }\n asDict() {\n return super.getBaseDict();\n }\n draw(ctx: CanvasRenderingContext2D) {\n super.draw(ctx);\n if (this.fillColour === \"fog\") ctx.fillStyle = getFogColour();\n else ctx.fillStyle = this.fillColour;\n const z = gameStore.zoomFactor;\n const loc = g2l(this.refPoint);\n ctx.fillRect(loc.x, loc.y, this.w * z, this.h * z);\n if (this.strokeColour !== \"rgba(0, 0, 0, 0)\") {\n ctx.strokeStyle = this.strokeColour;\n ctx.lineWidth = 5;\n ctx.strokeRect(loc.x, loc.y, this.w * z, this.h * z);\n }\n }\n}\n","import mod from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./game.vue?vue&type=style&index=1&id=05b88da7&scoped=true&lang=css&\"; export default mod; export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./game.vue?vue&type=style&index=1&id=05b88da7&scoped=true&lang=css&\"","import mod from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/ts-loader/index.js??ref--12-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./filter.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/ts-loader/index.js??ref--12-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./filter.vue?vue&type=script&lang=ts&\"","import mod from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/ts-loader/index.js??ref--12-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./selectcontext.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/ts-loader/index.js??ref--12-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./selectcontext.vue?vue&type=script&lang=ts&\"","import { Ray, Vector } from \"@/game/geom\";\nimport { Layer } from \"@/game/layers/layer\";\nimport { layerManager } from \"@/game/layers/manager\";\nimport { Settings } from \"@/game/settings\";\nimport { gameStore } from \"@/game/store\";\nimport { g2l, g2lr, g2lx, g2ly } from \"@/game/units\";\nimport { computeVisibility } from \"../visibility/te/te\";\n\nexport class FOWPlayersLayer extends Layer {\n isVisionLayer: boolean = true;\n\n draw(): void {\n if (!this.valid) {\n // console.time(\"VI\");\n const ctx = this.ctx;\n\n if (!gameStore.fowLOS || Settings.skipPlayerFOW) {\n ctx.clearRect(0, 0, this.canvas.width, this.canvas.height);\n this.valid = true;\n return;\n }\n\n ctx.clearRect(0, 0, this.canvas.width, this.canvas.height);\n\n const originalOperation = ctx.globalCompositeOperation;\n\n ctx.fillStyle = \"rgba(0, 0, 0, 1)\";\n\n // For the DM this is done at the end of this function. TODO: why the split up ???\n // This was done in commit be1e65cff1e7369375fe11cfa1643fab1d11beab.\n if (!gameStore.IS_DM) super.draw(!gameStore.fullFOW);\n\n // Then cut out all the player vision auras\n const maxLength = ctx.canvas.width + ctx.canvas.height;\n\n for (const tokenId of gameStore.ownedtokens) {\n const token = layerManager.UUIDMap.get(tokenId);\n if (token === undefined) continue;\n const center = token.center();\n const lcenter = g2l(center);\n if (gameStore.visionMode === \"bvh\") {\n ctx.beginPath();\n let lastArcAngle = -1;\n\n for (let angle = 0; angle < 2 * Math.PI; angle += (Settings.angleSteps / 2 / 180) * Math.PI) {\n const cos = Math.cos(angle);\n const sin = Math.sin(angle);\n // Check if there is a hit with one of the nearby light blockers.\n const lightRay = new Ray(center, new Vector(cos, sin));\n const hitResult = gameStore.BV.intersect(lightRay);\n\n // We can move on to the next angle if nothing was hit.\n if (!hitResult.hit) {\n // If an earlier hit caused the aura to leave the arc, we need to go back to the arc\n if (lastArcAngle === -1) {\n // Draw a line from the last non arc location back to the arc\n ctx.lineTo(lcenter.x + maxLength * cos, lcenter.y + maxLength * sin);\n // Set the start of a new arc beginning at the current angle\n lastArcAngle = angle;\n }\n continue;\n }\n // If hit , first finish any ongoing arc, then move to the intersection point\n if (lastArcAngle !== -1) {\n ctx.arc(lcenter.x, lcenter.y, maxLength, lastArcAngle, angle);\n lastArcAngle = -1;\n }\n ctx.lineTo(g2lx(hitResult.intersect.x), g2ly(hitResult.intersect.y));\n }\n\n // Finish the final arc.\n if (lastArcAngle !== -1) ctx.arc(lcenter.x, lcenter.y, maxLength, lastArcAngle, 2 * Math.PI);\n else ctx.closePath();\n ctx.fill();\n } else {\n if (true) {\n // Add a gradient vision dropoff\n const gradient = ctx.createRadialGradient(\n lcenter.x,\n lcenter.y,\n g2lr(gameStore.visionRangeMin),\n lcenter.x,\n lcenter.y,\n g2lr(gameStore.visionRangeMax),\n );\n gradient.addColorStop(0, \"rgba(0, 0, 0, 1)\");\n gradient.addColorStop(1, \"rgba(0, 0, 0, 0)\");\n ctx.fillStyle = gradient;\n } else {\n ctx.fillStyle = \"rgba(0, 0, 0, 1)\";\n }\n try {\n const polygon = computeVisibility(token.center(), \"vision\");\n ctx.beginPath();\n ctx.moveTo(g2lx(polygon[0][0]), g2ly(polygon[0][1]));\n for (const point of polygon) ctx.lineTo(g2lx(point[0]), g2ly(point[1]));\n ctx.closePath();\n ctx.fill();\n } catch {}\n }\n }\n\n // For the players this is done at the beginning of this function. TODO: why the split up ???\n // This was done in commit be1e65cff1e7369375fe11cfa1643fab1d11beab.\n if (gameStore.IS_DM) super.draw(!gameStore.fullFOW);\n\n ctx.globalCompositeOperation = originalOperation;\n // console.timeEnd(\"VI\");\n }\n }\n}\n","import { socket } from \"@/game/api/socket\";\nimport { ServerShape } from \"@/game/comm/types/shapes\";\nimport { EventBus } from \"@/game/event-bus\";\nimport { layerManager } from \"@/game/layers/manager\";\nimport { Shape } from \"@/game/shapes/shape\";\nimport { createShapeFromDict } from \"@/game/shapes/utils\";\nimport { gameStore } from \"@/game/store\";\nimport { g2lx, g2ly } from \"@/game/units\";\n\nexport class Layer {\n name: string;\n width: number;\n height: number;\n canvas: HTMLCanvasElement;\n ctx: CanvasRenderingContext2D;\n\n selectable: boolean = false;\n playerEditable: boolean = false;\n isVisionLayer: boolean = false;\n\n // When set to false, the layer will be redrawn on the next tick\n valid: boolean = false;\n // The collection of shapes that this layer contains.\n // These are ordered on a depth basis.\n shapes: Shape[] = [];\n\n // Collection of shapes that are currently selected\n selection: Shape[] = [];\n\n // Extra selection highlighting settings\n selectionColor = \"#CC0000\";\n selectionWidth = 2;\n\n constructor(canvas: HTMLCanvasElement, name: string) {\n this.canvas = canvas;\n this.name = name;\n this.width = canvas.width;\n this.height = canvas.height;\n this.ctx = canvas.getContext(\"2d\")!;\n }\n\n invalidate(skipLightUpdate: boolean): void {\n this.valid = false;\n if (!skipLightUpdate) {\n layerManager.invalidateLight();\n }\n }\n\n addShape(shape: Shape, sync: boolean, temporary?: boolean, invalidate = true): void {\n if (temporary === undefined) temporary = false;\n shape.layer = this.name;\n this.shapes.push(shape);\n layerManager.UUIDMap.set(shape.uuid, shape);\n shape.checkVisionSources(invalidate);\n shape.setMovementBlock(shape.movementObstruction, invalidate);\n if (shape.ownedBy(gameStore.username) && shape.isToken) gameStore.ownedtokens.push(shape.uuid);\n if (shape.annotation.length) gameStore.annotations.push(shape.uuid);\n if (sync) socket.emit(\"Shape.Add\", { shape: shape.asDict(), temporary });\n if (invalidate) this.invalidate(!sync);\n }\n\n setShapes(shapes: ServerShape[]): void {\n for (const serverShape of shapes) {\n const shape = createShapeFromDict(serverShape);\n if (shape === undefined) {\n console.log(`Shape with unknown type ${serverShape.type_} could not be added`);\n return;\n }\n this.addShape(shape, false, false, false);\n }\n this.clearSelection(); // TODO: Fix keeping selection on those items that are not moved.\n this.invalidate(false);\n }\n\n removeShape(shape: Shape, sync: boolean, temporary?: boolean) {\n if (temporary === undefined) temporary = false;\n this.shapes.splice(this.shapes.indexOf(shape), 1);\n\n if (sync) socket.emit(\"Shape.Remove\", { shape: shape.asDict(), temporary });\n const lsI = gameStore.visionSources.findIndex(ls => ls.shape === shape.uuid);\n const lbI = gameStore.visionBlockers.findIndex(ls => ls === shape.uuid);\n\n const mbI = gameStore.movementblockers.findIndex(ls => ls === shape.uuid);\n const anI = gameStore.annotations.findIndex(ls => ls === shape.uuid);\n if (lsI >= 0) gameStore.visionSources.splice(lsI, 1);\n if (lbI >= 0) gameStore.visionBlockers.splice(lbI, 1);\n if (mbI >= 0) gameStore.movementblockers.splice(mbI, 1);\n if (anI >= 0) gameStore.annotations.splice(anI, 1);\n\n const annotationIndex = gameStore.annotations.indexOf(shape.uuid);\n if (annotationIndex >= 0) gameStore.annotations.splice(annotationIndex, 1);\n\n const ownedIndex = gameStore.ownedtokens.indexOf(shape.uuid);\n if (ownedIndex >= 0) gameStore.ownedtokens.splice(ownedIndex, 1);\n\n layerManager.UUIDMap.delete(shape.uuid);\n\n const index = this.selection.indexOf(shape);\n if (index >= 0) this.selection.splice(index, 1);\n if (lbI >= 0) gameStore.recalculateVision();\n if (mbI >= 0) gameStore.recalculateMovement();\n this.invalidate(!sync);\n }\n\n clear(): void {\n this.ctx.clearRect(0, 0, this.width, this.height);\n }\n\n clearSelection(): void {\n this.selection = [];\n EventBus.$emit(\"SelectionInfo.Shape.Set\", null);\n }\n\n draw(doClear?: boolean): void {\n if (!this.valid) {\n const ctx = this.ctx;\n const ogOP = ctx.globalCompositeOperation;\n doClear = doClear === undefined ? true : doClear;\n\n if (doClear) this.clear();\n\n const state = this;\n\n // We iteratre twice over all shapes\n // First to draw the auras and a second time to draw the shapes themselves\n // Otherwise auras from one shape could be overlapping another shape itself.\n\n this.shapes.forEach(shape => {\n if (shape.options.has(\"skipDraw\") && shape.options.get(\"skipDraw\")) return;\n if (layerManager.getLayer() === undefined) return;\n if (!shape.visibleInCanvas(state.canvas)) return;\n if (state.name === \"fow\" && shape.visionObstruction && layerManager.getLayer()!.name !== state.name)\n return;\n shape.drawAuras(ctx);\n });\n this.shapes.forEach(shape => {\n if (shape.options.has(\"skipDraw\") && shape.options.get(\"skipDraw\")) return;\n if (shape.labels.length === 0 && gameStore.filterNoLabel) return;\n if (\n shape.labels.length &&\n gameStore.labelFilters.length &&\n !shape.labels.some(l => gameStore.labelFilters.includes(l.uuid))\n )\n return;\n if (layerManager.getLayer() === undefined) return;\n if (!shape.visibleInCanvas(state.canvas)) return;\n if (state.name === \"fow\" && shape.visionObstruction && layerManager.getLayer()!.name !== state.name)\n return;\n shape.draw(ctx);\n });\n\n if (this.selection != null) {\n ctx.fillStyle = this.selectionColor;\n ctx.strokeStyle = this.selectionColor;\n ctx.lineWidth = this.selectionWidth;\n const z = gameStore.zoomFactor;\n this.selection.forEach(sel => {\n ctx.globalCompositeOperation = sel.globalCompositeOperation;\n const bb = sel.getBoundingBox();\n // TODO: REFACTOR THIS TO Shape.drawSelection(ctx);\n ctx.strokeRect(g2lx(bb.topLeft.x), g2ly(bb.topLeft.y), bb.w * z, bb.h * z);\n\n for (const p of sel.points) {\n ctx.beginPath();\n ctx.arc(g2lx(p[0]), g2ly(p[1]), 3, 0, 2 * Math.PI);\n ctx.fill();\n }\n ctx.beginPath();\n ctx.moveTo(g2lx(sel.points[0][0]), g2ly(sel.points[0][1]));\n for (let i = 1; i <= sel.points.length; i++) {\n const vertex = sel.points[i % sel.points.length];\n ctx.lineTo(g2lx(vertex[0]), g2ly(vertex[1]));\n }\n ctx.stroke();\n });\n }\n ctx.globalCompositeOperation = ogOP;\n this.valid = true;\n }\n }\n\n moveShapeOrder(shape: Shape, destinationIndex: number, sync: boolean): void {\n const oldIdx = this.shapes.indexOf(shape);\n if (oldIdx === destinationIndex) return;\n this.shapes.splice(oldIdx, 1);\n this.shapes.splice(destinationIndex, 0, shape);\n if (sync) socket.emit(\"Shape.Order.Set\", { shape: shape.asDict(), index: destinationIndex });\n this.invalidate(true);\n }\n}\n","import { gameStore } from \"@/game/store\";\nimport { l2g } from \"@/game/units\";\nimport { getMouse } from \"@/game/utils\";\n\nexport function scrollZoom(e: WheelEvent) {\n if (!e.target || !(e.target).tagName || (e.target).tagName !== \"CANVAS\") return;\n let delta: number;\n delta = Math.sign(e.deltaY) * -1;\n gameStore.updateZoom({ newZoomDisplay: gameStore.zoomDisplay - 0.1 * delta, zoomLocation: l2g(getMouse(e)) });\n}\n","import { render, staticRenderFns } from \"./filter.vue?vue&type=template&id=847e7ec4&scoped=true&\"\nimport script from \"./filter.vue?vue&type=script&lang=ts&\"\nexport * from \"./filter.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./filter.vue?vue&type=style&index=0&lang=css&\"\nimport style1 from \"./filter.vue?vue&type=style&index=1&id=847e7ec4&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"847e7ec4\",\n null\n \n)\n\ncomponent.options.__file = \"filter.vue\"\nexport default component.exports","import mod from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./menu.vue?vue&type=style&index=0&id=aaf3f05e&scoped=true&lang=css&\"; export default mod; export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./menu.vue?vue&type=style&index=0&id=aaf3f05e&scoped=true&lang=css&\"","import { GlobalPoint, LocalPoint, Vector } from \"@/game/geom\";\nimport { BoundingRect } from \"@/game/shapes/boundingrect\";\nimport { Shape } from \"@/game/shapes/shape\";\nimport { gameStore } from \"@/game/store\";\nimport { calculateDelta } from \"@/game/ui/tools/utils\";\nimport { g2lx, g2ly, l2g, l2gx, l2gy } from \"@/game/units\";\n\nexport abstract class BaseRect extends Shape {\n w: number;\n h: number;\n constructor(topleft: GlobalPoint, w: number, h: number, fillColour?: string, strokeColour?: string, uuid?: string) {\n super(topleft, fillColour, strokeColour, uuid);\n this.w = w;\n this.h = h;\n }\n getBaseDict() {\n return Object.assign(super.getBaseDict(), {\n width: this.w,\n height: this.h,\n });\n }\n getBoundingBox() {\n return new BoundingRect(this.refPoint, this.w, this.h);\n }\n\n get points() {\n if (this.w === 0 || this.h === 0) return [[this.refPoint.x, this.refPoint.y]];\n // note to self: topright and botleft are swapped because I'm retarded.\n const topright = this.refPoint.add(new Vector(0, this.h));\n const botright = this.refPoint.add(new Vector(this.w, this.h));\n const botleft = this.refPoint.add(new Vector(this.w, 0));\n return [\n [this.refPoint.x, this.refPoint.y],\n [topright.x, topright.y],\n [botright.x, botright.y],\n [botleft.x, botleft.y],\n ];\n }\n\n contains(point: GlobalPoint): boolean {\n return (\n this.refPoint.x <= point.x &&\n this.refPoint.x + this.w >= point.x &&\n this.refPoint.y <= point.y &&\n this.refPoint.y + this.h >= point.y\n );\n }\n center(): GlobalPoint;\n center(centerPoint: GlobalPoint): void;\n center(centerPoint?: GlobalPoint): GlobalPoint | void {\n if (centerPoint === undefined) return this.refPoint.add(new Vector(this.w / 2, this.h / 2));\n this.refPoint = new GlobalPoint(centerPoint.x - this.w / 2, centerPoint.y - this.h / 2);\n }\n\n visibleInCanvas(canvas: HTMLCanvasElement): boolean {\n if (super.visibleInCanvas(canvas)) return true;\n const coreVisible = !(\n g2lx(this.refPoint.x) > canvas.width ||\n g2ly(this.refPoint.y) > canvas.height ||\n g2lx(this.refPoint.x + this.w) < 0 ||\n g2ly(this.refPoint.y + this.h) < 0\n );\n if (coreVisible) return true;\n return false;\n }\n snapToGrid() {\n const gs = gameStore.gridSize;\n const center = this.center();\n const mx = center.x;\n const my = center.y;\n\n let targetX;\n let targetY;\n\n if ((this.w / gs) % 2 === 0) {\n targetX = Math.round(mx / gs) * gs - this.w / 2;\n } else {\n targetX = (Math.round((mx + gs / 2) / gs) - 1 / 2) * gs - this.w / 2;\n }\n if ((this.h / gs) % 2 === 0) {\n targetY = Math.round(my / gs) * gs - this.h / 2;\n } else {\n targetY = (Math.round((my + gs / 2) / gs) - 1 / 2) * gs - this.h / 2;\n }\n\n const delta = calculateDelta(new Vector(targetX - this.refPoint.x, targetY - this.refPoint.y), this);\n this.refPoint = this.refPoint.add(delta);\n\n this.invalidate(false);\n }\n resizeToGrid() {\n const gs = gameStore.gridSize;\n this.refPoint = new GlobalPoint(Math.round(this.refPoint.x / gs) * gs, Math.round(this.refPoint.y / gs) * gs);\n this.w = Math.max(Math.round(this.w / gs) * gs, gs);\n this.h = Math.max(Math.round(this.h / gs) * gs, gs);\n this.invalidate(false);\n }\n resize(resizePoint: number, point: LocalPoint) {\n const z = gameStore.zoomFactor;\n switch (resizePoint) {\n case 0: {\n this.w = g2lx(this.refPoint.x) + this.w * z - point.x;\n this.h = g2ly(this.refPoint.y) + this.h * z - point.y;\n this.refPoint = l2g(point);\n break;\n }\n case 1: {\n this.w = g2lx(this.refPoint.x) + this.w * z - point.x;\n this.h = point.y - g2ly(this.refPoint.y);\n this.refPoint = new GlobalPoint(l2gx(point.x), this.refPoint.y);\n break;\n }\n case 2: {\n this.w = point.x - g2lx(this.refPoint.x);\n this.h = point.y - g2ly(this.refPoint.y);\n break;\n }\n case 3: {\n this.w = point.x - g2lx(this.refPoint.x);\n this.h = g2ly(this.refPoint.y) + this.h * z - point.y;\n this.refPoint = new GlobalPoint(this.refPoint.x, l2gy(point.y));\n break;\n }\n }\n\n this.w /= z;\n this.h /= z;\n\n if (this.w < 0) {\n this.refPoint = this.refPoint.add(new Vector(this.w, 0));\n this.w = Math.abs(this.w);\n }\n if (this.h < 0) {\n this.refPoint = this.refPoint.add(new Vector(0, this.h));\n this.h = Math.abs(this.h);\n }\n }\n}\n","import { render, staticRenderFns } from \"./select.vue?vue&type=template&id=048b3482&\"\nimport script from \"./select.vue?vue&type=script&lang=ts&\"\nexport * from \"./select.vue?vue&type=script&lang=ts&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\ncomponent.options.__file = \"select.vue\"\nexport default component.exports","import { render, staticRenderFns } from \"./main.vue?vue&type=template&id=61eb1455&scoped=true&\"\nimport script from \"./main.vue?vue&type=script&lang=ts&\"\nexport * from \"./main.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./main.vue?vue&type=style&index=0&id=61eb1455&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"61eb1455\",\n null\n \n)\n\ncomponent.options.__file = \"main.vue\"\nexport default component.exports","import mod from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./createtoken_modal.vue?vue&type=style&index=0&id=73816298&scoped=true&lang=css&\"; export default mod; export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./createtoken_modal.vue?vue&type=style&index=0&id=73816298&scoped=true&lang=css&\"","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{attrs:{\"id\":\"AssetManager\"}},[_c('div',{attrs:{\"id\":\"titlebar\"}},[_vm._v(\"Asset Manager\")]),_c('div',{attrs:{\"id\":\"main\"}},[_c('div',{attrs:{\"id\":\"assets\"},on:{\"dragover\":function($event){$event.preventDefault();return _vm.moveDrag($event)},\"drop\":function($event){$event.preventDefault();$event.stopPropagation();_vm.stopDrag($event, _vm.currentFolder)}}},[_c('div',{attrs:{\"id\":\"breadcrumbs\"}},[_c('div',[_vm._v(\"/\")]),_vm._l((_vm.path),function(dir){return _c('div',{key:dir},[_vm._v(_vm._s(_vm.idMap.get(dir).name))])})],2),_c('div',{attrs:{\"id\":\"actionbar\"}},[_c('input',{attrs:{\"id\":\"files\",\"type\":\"file\",\"multiple\":\"\",\"hidden\":\"\"},on:{\"change\":function($event){_vm.upload()}}}),_c('div',{attrs:{\"title\":\"Create folder\"},on:{\"click\":_vm.createDirectory}},[_c('i',{staticClass:\"fas fa-plus-square\"})]),_c('div',{attrs:{\"title\":\"Upload files\"},on:{\"click\":_vm.prepareUpload}},[_c('i',{staticClass:\"fas fa-upload\"})])]),_c('div',{attrs:{\"id\":\"explorer\"}},[(_vm.path.length)?_c('div',{staticClass:\"inode folder\",on:{\"dblclick\":function($event){_vm.changeDirectory(-1)},\"dragover\":function($event){$event.preventDefault();return _vm.moveDrag($event)},\"dragleave\":function($event){$event.preventDefault();return _vm.leaveDrag($event)},\"drop\":function($event){$event.preventDefault();$event.stopPropagation();_vm.stopDrag($event, _vm.parentFolder)}}},[_c('i',{staticClass:\"fas fa-folder\",staticStyle:{\"font-size\":\"50px\"}}),_c('div',{staticClass:\"title\"},[_vm._v(\"..\")])]):_vm._e(),_vm._l((_vm.folders),function(key){return _c('div',{key:key,staticClass:\"inode folder\",class:{'inode-selected': _vm.selected.includes(key)},attrs:{\"draggable\":\"true\"},on:{\"click\":function($event){_vm.select($event, key)},\"dblclick\":function($event){_vm.changeDirectory(key)},\"contextmenu\":function($event){$event.preventDefault();_vm.$refs.cm.open($event, key)},\"dragstart\":function($event){_vm.startDrag($event, key)},\"dragover\":function($event){$event.preventDefault();return _vm.moveDrag($event)},\"dragleave\":function($event){$event.preventDefault();return _vm.leaveDrag($event)},\"drop\":function($event){$event.preventDefault();$event.stopPropagation();_vm.stopDrag($event, key)}}},[_c('i',{staticClass:\"fas fa-folder\",staticStyle:{\"font-size\":\"50px\"}}),_c('div',{staticClass:\"title\"},[_vm._v(_vm._s(_vm.idMap.get(key).name))])])}),_vm._l((_vm.files),function(file){return _c('div',{key:file,staticClass:\"inode file\",class:{'inode-selected': _vm.selected.includes(file)},attrs:{\"draggable\":\"true\"},on:{\"click\":function($event){_vm.select($event, file)},\"contextmenu\":function($event){$event.preventDefault();_vm.$refs.cm.open($event, file)},\"dragstart\":function($event){_vm.startDrag($event, file)}}},[_c('img',{attrs:{\"src\":'/static/assets/' + _vm.idMap.get(file).file_hash,\"width\":\"50\"}}),_c('div',{staticClass:\"title\"},[_vm._v(_vm._s(_vm.idMap.get(file).name))])])})],2)]),(_vm.firstSelectedFile)?_c('div',{attrs:{\"id\":\"asset-details\"}},[_c('div',{attrs:{\"id\":\"asset-detail-title\"}},[_vm._v(_vm._s(_vm.firstSelectedFile.name))]),_c('img',{attrs:{\"src\":'/static/assets/' + _vm.firstSelectedFile.file_hash}})]):_vm._e()]),_c('AssetContextMenu',{ref:\"cm\"}),_c('Prompt',{ref:\"prompt\"}),_c('ConfirmDialog',{ref:\"confirm\"})],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","export * from \"-!cache-loader?{\\\"cacheDirectory\\\":\\\"node_modules/.cache/vue-loader\\\",\\\"cacheIdentifier\\\":\\\"74f43d04-vue-loader-template\\\"}!../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./manager.vue?vue&type=template&id=5b0def98&\"","\n\n\n\n\n\n\n\n\nimport Vue from \"vue\";\nimport Component from \"vue-class-component\";\n\nimport ContextMenu from \"@/core/components/contextmenu.vue\";\n\nimport { socket } from \"@/game/api/socket\";\nimport { EventBus } from \"@/game/event-bus\";\nimport { gameStore } from \"@/game/store\";\nimport { l2gx, l2gy } from \"@/game/units\";\n\n@Component({\n components: {\n ContextMenu,\n },\n})\nexport default class SelectContext extends Vue {\n visible = false;\n x = 0;\n y = 0;\n\n get IS_DM(): boolean {\n return gameStore.IS_DM;\n }\n\n open(event: MouseEvent) {\n this.visible = true;\n this.x = event.pageX;\n this.y = event.pageY;\n this.$nextTick(() => this.$children[0].$el.focus());\n }\n close() {\n this.visible = false;\n }\n bringPlayers() {\n if (!gameStore.IS_DM) return;\n socket.emit(\"Players.Bring\", { x: l2gx(this.x), y: l2gy(this.y) });\n this.close();\n }\n createToken() {\n (this.$parent.$parent.$refs.createtokendialog).open(this.x, this.y);\n this.close();\n }\n showInitiative() {\n EventBus.$emit(\"Initiative.Show\");\n this.close();\n }\n}\n","import Axios from \"axios\";\nimport Vue from \"vue\";\nimport Component from \"vue-class-component\";\nimport { Route } from \"vue-router\";\n\nimport { coreStore } from \"@/core/store\";\n\nComponent.registerHooks([\"beforeRouteEnter\"]);\n\n@Component({})\nexport default class Logout extends Vue {\n beforeRouteEnter(to: Route, from: Route, next: ({}) => {}) {\n Axios.post(\"/api/logout\").then(() => {\n coreStore.setAuthenticated(false);\n coreStore.setUsername(\"\");\n next({ path: \"/auth/login\" });\n });\n }\n}\n","import { getModule, Module, Mutation, VuexModule } from \"vuex-module-decorators\";\n\nimport { rootStore } from \"@/store\";\n\nexport interface CoreState {\n authenticated: boolean;\n initialized: boolean;\n username: string;\n}\n\n@Module({ dynamic: true, store: rootStore, name: \"core\" })\nclass CoreStore extends VuexModule implements CoreState {\n authenticated = false;\n initialized = false;\n username = \"\";\n\n @Mutation\n setAuthenticated(auth: boolean) {\n this.authenticated = auth;\n }\n\n @Mutation\n setInitialized(init: boolean) {\n this.initialized = init;\n }\n\n @Mutation\n setUsername(username: string) {\n this.username = username;\n }\n}\n\nexport const coreStore = getModule(CoreStore);\n","import Vue from \"vue\";\n\nimport App from \"@/App.vue\";\nimport { router } from \"@/router\";\nimport { rootStore } from \"@/store\";\n\nVue.config.productionTip = false;\nVue.config.devtools = true;\nVue.config.performance = true;\n\nexport const app = new Vue({\n router,\n store: rootStore,\n render: h => h(App),\n}).$mount(\"#app\");\n\n(window).app = app;\n","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nimport Vue from \"vue\";\nimport Component from \"vue-class-component\";\n\n@Component({\n props: [\"visible\", \"left\", \"top\"],\n})\nexport default class ContextMenu extends Vue {}\n","import Axios, { AxiosError, AxiosResponse } from \"axios\";\nimport Vue from \"vue\";\nimport Component from \"vue-class-component\";\nimport { Route } from \"vue-router\";\n\n@Component({ template: \"\" })\nexport default class Initiative extends Vue {\n beforeRouteEnter(to: Route, from: Route, next: ({}) => {}) {\n Axios.post(\"/api/invite\", {\n code: to.params.code,\n })\n .then((response: AxiosResponse) => {\n next({ path: response.data.sessionUrl });\n })\n .catch((error: AxiosError) => {\n console.error(\"Invitation code could not be redeemed\");\n next({ path: \"/dashboard\" });\n });\n }\n}\n","import { render, staticRenderFns } from \"./prompt.vue?vue&type=template&id=0602c2e6&scoped=true&\"\nimport script from \"./prompt.vue?vue&type=script&lang=ts&\"\nexport * from \"./prompt.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./prompt.vue?vue&type=style&index=0&id=0602c2e6&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"0602c2e6\",\n null\n \n)\n\ncomponent.options.__file = \"prompt.vue\"\nexport default component.exports","import { GlobalPoint } from \"@/game/geom\";\nimport { gameStore } from \"@/game/store\";\n\nimport { Edge } from \"./cdt\";\nimport { drawPolygon } from \"./draw\";\nimport { PA_CDT } from \"./pa\";\nimport { Point, Sign, Triangle } from \"./tds\";\nimport { ccw, cw, orientation } from \"./triag\";\n\nexport function computeVisibility(q: GlobalPoint, target: \"vision\" | \"movement\", drawt?: boolean): number[][] {\n if (drawt === undefined) drawt = gameStore.drawTEContour;\n // console.time(\"CV\");\n const Q: Point = [q.x, q.y];\n const rawOutput: number[][] = [];\n const triangle = PA_CDT[target].locate(Q, null).loc;\n if (triangle === null) {\n console.error(\"Triangle not found\");\n return [];\n }\n // triangle.fill();\n rawOutput.push(triangle.vertices[1]!.point!);\n if (!triangle.isConstrained(0))\n expandEdge(Q, triangle.vertices[2]!.point!, triangle.vertices[1]!.point!, triangle, 0, rawOutput);\n rawOutput.push(triangle.vertices[2]!.point!);\n if (!triangle.isConstrained(1))\n expandEdge(Q, triangle.vertices[0]!.point!, triangle.vertices[2]!.point!, triangle, 1, rawOutput);\n rawOutput.push(triangle.vertices[0]!.point!);\n if (!triangle.isConstrained(2))\n expandEdge(Q, triangle.vertices[1]!.point!, triangle.vertices[0]!.point!, triangle, 2, rawOutput);\n // console.timeEnd(\"CV\");\n\n if (drawt) drawPolygon(rawOutput, \"red\");\n\n return rawOutput;\n}\n\nfunction expandEdge(\n q: Point,\n left: number[],\n right: number[],\n fh: Triangle,\n index: number,\n rawOutput: number[][],\n): void {\n // fh.edge(index).draw();\n const nfh = fh.neighbours[index]!;\n // nfh.fill(\"rgba(255, 0, 0, 0.25)\");\n const nIndex = nfh.indexT(fh);\n const rIndex = ccw(nIndex);\n const lIndex = cw(nIndex);\n const nvh = nfh.vertices[nIndex]!;\n const rvh = nfh.vertices[lIndex]!;\n const lvh = nfh.vertices[rIndex]!;\n\n const re: Edge = [nfh, rIndex];\n const le: Edge = [nfh, lIndex];\n\n const ro = orientation(q, right, nvh.point!);\n const lo = orientation(q, left, nvh.point!);\n\n // const ctx = layerManager.getLayer(\"draw\")!.ctx;\n // ctx.beginPath();\n // ctx.strokeStyle = \"red\";\n // ctx.lineJoin = \"round\";\n // ctx.moveTo(g2lx(q.x), g2ly(q.y));\n // ctx.lineTo(g2lx(left[0]), g2ly(left[1]));\n // ctx.moveTo(g2lx(q.x), g2ly(q.y));\n // ctx.lineTo(g2lx(nvh[0]), g2ly(nvh[1]));\n // ctx.strokeStyle = \"blue\";\n // ctx.moveTo(g2lx(q.x), g2ly(q.y));\n // ctx.lineTo(g2lx(right[0]), g2ly(right[1]));\n // ctx.moveTo(g2lx(q.x), g2ly(q.y));\n // ctx.lineTo(g2lx(nvh[0]), g2ly(nvh[1]));\n // ctx.closePath();\n // ctx.stroke();\n\n // Right edge is seen if the new vertex is ccw of the right ray\n if (ro === Sign.COUNTERCLOCKWISE) {\n if (re[0].isConstrained(re[1])) {\n // See if current right ray is rvh\n if (right !== rvh.point!) rawOutput.push(raySegIntersection(q, right, nvh.point!, rvh.point!));\n if (lo === Sign.COUNTERCLOCKWISE) rawOutput.push(raySegIntersection(q, left, nvh.point!, rvh.point!));\n } else {\n if (lo === Sign.COUNTERCLOCKWISE) return expandEdge(q, left, right, nfh, rIndex, rawOutput);\n else expandEdge(q, nvh.point!, right, nfh, rIndex, rawOutput);\n }\n }\n\n if (ro !== Sign.CLOCKWISE && lo !== Sign.COUNTERCLOCKWISE) {\n rawOutput.push(nvh.point!);\n }\n\n if (lo === Sign.CLOCKWISE) {\n if (le[0].isConstrained(le[1])) {\n if (ro === Sign.CLOCKWISE) {\n rawOutput.push(raySegIntersection(q, right, nvh.point!, lvh.point!));\n }\n if (left !== lvh.point!) {\n rawOutput.push(raySegIntersection(q, left, nvh.point!, lvh.point!));\n }\n return;\n } else {\n if (ro === Sign.CLOCKWISE) {\n return expandEdge(q, left, right, nfh, lIndex, rawOutput);\n } else {\n return expandEdge(q, left, nvh.point!, nfh, lIndex, rawOutput);\n }\n }\n }\n}\n\nfunction raySegIntersection(q: Point, b: Point, s: Point, t: Point) {\n const denominator = (t[1] - s[1]) * (b[0] - q[0]) - (t[0] - s[0]) * (b[1] - q[1]);\n const ua = ((t[0] - s[0]) * (q[1] - s[1]) - (t[1] - s[1]) * (q[0] - s[0])) / denominator;\n // const ub = ((b[0] - q.x) * (q.y - s[1]) - (b[1] - q.y) * (q.x - s[0])) / denominator;\n const x = q[0] + ua * (b[0] - q[0]);\n const y = q[1] + ua * (b[1] - q[1]);\n\n return [x, y];\n}\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return (_vm.selected)?_c('div',{staticClass:\"tool-detail\",style:({'--detailRight': _vm.detailRight, '--detailArrow': _vm.detailArrow})},[_c('div',[_vm._v(\"#X\")]),_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.xCount),expression:\"xCount\"}],attrs:{\"type\":\"text\"},domProps:{\"value\":(_vm.xCount)},on:{\"input\":function($event){if($event.target.composing){ return; }_vm.xCount=$event.target.value}}}),_c('div',[_vm._v(\"#Y\")]),_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.yCount),expression:\"yCount\"}],attrs:{\"type\":\"text\"},domProps:{\"value\":(_vm.yCount)},on:{\"input\":function($event){if($event.target.composing){ return; }_vm.yCount=$event.target.value}}})]):_vm._e()}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","export * from \"-!cache-loader?{\\\"cacheDirectory\\\":\\\"node_modules/.cache/vue-loader\\\",\\\"cacheIdentifier\\\":\\\"74f43d04-vue-loader-template\\\"}!../../../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./map.vue?vue&type=template&id=2104f147&\"","import { render, staticRenderFns } from \"./edit_dialog.vue?vue&type=template&id=23de098e&scoped=true&\"\nimport script from \"./edit_dialog.vue?vue&type=script&lang=ts&\"\nexport * from \"./edit_dialog.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./edit_dialog.vue?vue&type=style&index=0&id=23de098e&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"23de098e\",\n null\n \n)\n\ncomponent.options.__file = \"edit_dialog.vue\"\nexport default component.exports","export class Settings {\n static angleSteps = 4;\n static drawAngleLines = false;\n static drawFirstLightHit = false;\n static skipPlayerFOW = false;\n static skipLightFOW = false;\n\n static tempFill: string = \"fog\";\n}\n","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nimport axios, { AxiosError, AxiosResponse } from \"axios\";\nimport Vue from \"vue\";\nimport Component from \"vue-class-component\";\n\nimport { coreStore } from \"@/core/store\";\n\n@Component\nexport default class Login extends Vue {\n username = \"\";\n password = \"\";\n error = \"\";\n\n login() {\n axios\n .post(\"/api/login\", {\n username: this.username,\n password: this.password,\n })\n .then((response: AxiosResponse) => {\n coreStore.setUsername(this.username);\n coreStore.setAuthenticated(true);\n this.$router.push(this.$route.query.redirect || \"/\");\n })\n .catch((error: AxiosError) => {\n if (error.response) this.error = error.response.statusText;\n else this.error = \"Unknown error occured\";\n });\n }\n\n register() {\n axios\n .post(\"/api/register\", {\n username: this.username,\n password: this.password,\n })\n .then((response: AxiosResponse) => {\n coreStore.setUsername(this.username);\n coreStore.setAuthenticated(true);\n this.$router.push(this.$route.query.redirect || \"/\");\n })\n .catch((error: AxiosError) => {\n if (error.response) this.error = error.response.statusText;\n else this.error = \"Unknown error occured\";\n });\n }\n\n focusin(event: { target?: { nextElementSibling?: HTMLElement } }) {\n if (event.target && event.target.nextElementSibling) {\n const span = event.target.nextElementSibling;\n span.style.opacity = \"0\";\n }\n }\n\n focusout(event: { target?: { nextElementSibling?: HTMLElement } }) {\n if (event.target && event.target.nextElementSibling) {\n const span = event.target.nextElementSibling;\n span.style.opacity = \"1\";\n }\n }\n}\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('modal',{attrs:{\"visible\":_vm.visible},on:{\"close\":function($event){_vm.visible = false}},scopedSlots:_vm._u([{key:\"header\",fn:function(m){return _c('div',{staticClass:\"modal-header\",attrs:{\"draggable\":\"true\"},on:{\"dragstart\":m.dragStart,\"dragend\":m.dragEnd}},[_vm._v(\"Create basic token\")])}}])},[_c('div',{staticClass:\"modal-body\"},[_c('label',{attrs:{\"for\":\"createtokendialog-text\"}},[_vm._v(\"Text\")]),_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.text),expression:\"text\"}],attrs:{\"type\":\"text\",\"id\":\"createtokendialog-name\"},domProps:{\"value\":(_vm.text)},on:{\"input\":function($event){if($event.target.composing){ return; }_vm.text=$event.target.value}}}),_c('label',[_vm._v(\"Colours\")]),_c('div',{staticClass:\"colours\"},[_c('span',[_vm._v(\"Fill:\")]),_c('color-picker',{attrs:{\"color\":_vm.fillColour},on:{\"update:color\":function($event){_vm.fillColour=$event}}}),_c('span',[_vm._v(\"Border:\")]),_c('color-picker',{attrs:{\"color\":_vm.borderColour},on:{\"update:color\":function($event){_vm.borderColour=$event}}})],1),_c('canvas',{ref:\"canvas\",attrs:{\"width\":\"100px\",\"height\":\"100px\"}})]),_c('div',{staticClass:\"modal-footer\"},[_c('button',{on:{\"click\":_vm.submit}},[_vm._v(\"Submit\")])])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","export * from \"-!cache-loader?{\\\"cacheDirectory\\\":\\\"node_modules/.cache/vue-loader\\\",\\\"cacheIdentifier\\\":\\\"74f43d04-vue-loader-template\\\"}!../../../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./createtoken_modal.vue?vue&type=template&id=73816298&scoped=true&\"","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c(\"div\")}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","export * from \"-!cache-loader?{\\\"cacheDirectory\\\":\\\"node_modules/.cache/vue-loader\\\",\\\"cacheIdentifier\\\":\\\"74f43d04-vue-loader-template\\\"}!../../../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./tool.vue?vue&type=template&id=1e034b42&\"","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('transition',{attrs:{\"name\":\"modal\"}},[_c('div',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.visible),expression:\"visible\"}],staticClass:\"mask\",class:{'modal-mask': _vm.mask, 'dialog-mask': !_vm.mask},on:{\"click\":_vm.close,\"dragover\":function($event){$event.preventDefault();return _vm.dragOver($event)}}},[_c('div',{ref:\"container\",staticClass:\"modal-container\",on:{\"click\":function($event){$event.stopPropagation();}}},[_vm._t(\"header\",null,{dragStart:_vm.dragStart,dragEnd:_vm.dragEnd}),_vm._t(\"default\")],2)])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","export * from \"-!cache-loader?{\\\"cacheDirectory\\\":\\\"node_modules/.cache/vue-loader\\\",\\\"cacheIdentifier\\\":\\\"74f43d04-vue-loader-template\\\"}!../../../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./modal.vue?vue&type=template&id=12ed61ba&scoped=true&\"","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/ts-loader/index.js??ref--12-2!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./game.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/ts-loader/index.js??ref--12-2!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./game.vue?vue&type=script&lang=ts&\"","import Component from \"vue-class-component\";\n\nimport Tool from \"@/game/ui/tools/tool.vue\";\n\nimport { socket } from \"@/game/api/socket\";\nimport { GlobalPoint } from \"@/game/geom\";\nimport { layerManager } from \"@/game/layers/manager\";\nimport { Line } from \"@/game/shapes/line\";\nimport { Text } from \"@/game/shapes/text\";\nimport { gameStore } from \"@/game/store\";\nimport { l2g } from \"@/game/units\";\nimport { getMouse } from \"@/game/utils\";\n\n@Component\nexport class RulerTool extends Tool {\n name = \"Ruler\";\n active = false;\n startPoint: GlobalPoint | null = null;\n ruler: Line | null = null;\n text: Text | null = null;\n onMouseDown(event: MouseEvent) {\n const layer = layerManager.getLayer(\"draw\");\n if (layer === undefined) {\n console.log(\"No draw layer!\");\n return;\n }\n this.active = true;\n this.startPoint = l2g(getMouse(event));\n this.ruler = new Line(this.startPoint, this.startPoint, 3, gameStore.rulerColour);\n this.text = new Text(this.startPoint.clone(), \"\", \"bold 20px serif\");\n this.ruler.addOwner(gameStore.username);\n this.text.addOwner(gameStore.username);\n layer.addShape(this.ruler, true, true);\n layer.addShape(this.text, true, true);\n }\n onMouseMove(event: MouseEvent) {\n if (!this.active || this.ruler === null || this.startPoint === null || this.text === null) return;\n\n const layer = layerManager.getLayer(\"draw\");\n if (layer === undefined) {\n console.log(\"No draw layer!\");\n return;\n }\n const endPoint = l2g(getMouse(event));\n\n this.ruler.endPoint = endPoint;\n socket.emit(\"Shape.Update\", { shape: this.ruler!.asDict(), redraw: true, temporary: true });\n\n const diffsign = Math.sign(endPoint.x - this.startPoint.x) * Math.sign(endPoint.y - this.startPoint.y);\n const xdiff = Math.abs(endPoint.x - this.startPoint.x);\n const ydiff = Math.abs(endPoint.y - this.startPoint.y);\n const label =\n Math.round((Math.sqrt(xdiff ** 2 + ydiff ** 2) * gameStore.unitSize) / gameStore.gridSize) + \" ft\";\n const angle = Math.atan2(diffsign * ydiff, xdiff);\n const xmid = Math.min(this.startPoint.x, endPoint.x) + xdiff / 2;\n const ymid = Math.min(this.startPoint.y, endPoint.y) + ydiff / 2;\n this.text.refPoint = new GlobalPoint(xmid, ymid);\n this.text.text = label;\n this.text.angle = angle;\n socket.emit(\"Shape.Update\", { shape: this.text.asDict(), redraw: true, temporary: true });\n layer.invalidate(true);\n }\n onMouseUp(event: MouseEvent) {\n if (!this.active || this.ruler === null || this.startPoint === null || this.text === null) return;\n\n const layer = layerManager.getLayer(\"draw\");\n if (layer === undefined) {\n console.log(\"No active layer!\");\n return;\n }\n this.active = false;\n\n layer.removeShape(this.ruler, true, true);\n layer.removeShape(this.text, true, true);\n layer.invalidate(true);\n this.ruler = this.startPoint = this.text = null;\n }\n}\n","import { render, staticRenderFns } from \"./modal.vue?vue&type=template&id=12ed61ba&scoped=true&\"\nimport script from \"./modal.vue?vue&type=script&lang=ts&\"\nexport * from \"./modal.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./modal.vue?vue&type=style&index=0&id=12ed61ba&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"12ed61ba\",\n null\n \n)\n\ncomponent.options.__file = \"modal.vue\"\nexport default component.exports","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/ts-loader/index.js??ref--12-2!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./accordion.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/ts-loader/index.js??ref--12-2!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./accordion.vue?vue&type=script&lang=ts&\"","import { layerManager } from \"@/game/layers/manager\";\nimport { gameStore } from \"@/game/store\";\n\nimport { CDT } from \"./cdt\";\n\nexport let PA_CDT = {\n vision: new CDT(),\n movement: new CDT(),\n};\n\nexport function triangulate(target: \"vision\" | \"movement\", partial: boolean = false) {\n const cdt = new CDT();\n\n let shapes;\n if (target === \"vision\") shapes = gameStore.visionBlockers;\n else shapes = gameStore.movementblockers;\n\n for (const sh of shapes) {\n const shape = layerManager.UUIDMap.get(sh)!;\n if (partial && !shape.visibleInCanvas(layerManager.getLayer()!.canvas)) continue;\n for (let i = 0; i < shape.points.length; i++) {\n cdt.insertConstraint(shape.points[i], shape.points[(i + 1) % shape.points.length]);\n }\n }\n // LEFT WALL\n cdt.insertConstraint([-1e8, -1e8], [-1e8, 1e8]);\n cdt.insertConstraint([-1e8, 1e8], [-1e11, 1e8]);\n cdt.insertConstraint([-1e11, 1e8], [-1e11, -1e8]);\n cdt.insertConstraint([-1e11, -1e8], [-1e8, -1e8]);\n // TOP WALL\n cdt.insertConstraint([-1e8, -1e8], [1e8, -1e8]);\n cdt.insertConstraint([1e8, -1e8], [1e8, -1e11]);\n cdt.insertConstraint([1e8, -1e11], [-1e8, -1e11]);\n cdt.insertConstraint([-1e8, -1e11], [-1e8, -1e8]);\n // RIGHT WALL\n cdt.insertConstraint([1e8, -1e8], [1e8, 1e8]);\n cdt.insertConstraint([1e8, 1e8], [1e11, 1e8]);\n cdt.insertConstraint([1e11, 1e8], [1e11, -1e8]);\n cdt.insertConstraint([1e11, -1e8], [1e8, -1e8]);\n // BOT WALL\n cdt.insertConstraint([-1e8, 1e8], [1e8, 1e8]);\n cdt.insertConstraint([1e8, 1e8], [1e8, 1e11]);\n cdt.insertConstraint([1e8, 1e11], [-1e8, 1e11]);\n cdt.insertConstraint([-1e8, 1e11], [-1e8, 1e8]);\n PA_CDT[target] = cdt;\n (window).CDT = PA_CDT;\n}\n","import mod from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./main.vue?vue&type=style&index=0&id=61eb1455&scoped=true&lang=css&\"; export default mod; export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./main.vue?vue&type=style&index=0&id=61eb1455&scoped=true&lang=css&\"","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nimport Vue from \"vue\";\nimport Component from \"vue-class-component\";\n\nimport { Prop } from \"vue-property-decorator\";\n\nimport ColorPicker from \"@/core/components/colorpicker.vue\";\nimport Modal from \"@/core/components/modals/modal.vue\";\n\nimport { uuidv4 } from \"@/core/utils\";\nimport { socket } from \"@/game/api/socket\";\nimport { EventBus } from \"@/game/event-bus\";\nimport { layerManager } from \"@/game/layers/manager\";\nimport { Shape } from \"@/game/shapes/shape\";\nimport { gameStore } from \"@/game/store\";\n\n@Component({\n components: {\n Modal,\n \"color-picker\": ColorPicker,\n },\n})\nexport default class EditDialog extends Vue {\n @Prop() shape!: Shape;\n\n visible = false;\n\n get owned(): boolean {\n return this.shape.ownedBy();\n }\n\n mounted() {\n EventBus.$on(\"EditDialog.Open\", (shape: Shape) => {\n this.shape = shape;\n this.visible = true;\n });\n EventBus.$on(\"EditDialog.AddLabel\", (label: string) => {\n if (this.visible) {\n this.shape.labels.push(gameStore.labels[label]);\n this.updateShape(true);\n }\n });\n }\n\n beforeDestroy() {\n EventBus.$off(\"EditDialog.Open\");\n EventBus.$off(\"EditDialog.AddLabel\");\n }\n\n updated() {\n this.addEmpty();\n }\n\n addEmpty() {\n if (this.shape.owners[this.shape.owners.length - 1] !== \"\") this.shape.addOwner(\"\");\n if (\n !this.shape.trackers.length ||\n this.shape.trackers[this.shape.trackers.length - 1].name !== \"\" ||\n this.shape.trackers[this.shape.trackers.length - 1].value !== 0\n )\n this.shape.trackers.push({ uuid: uuidv4(), name: \"\", value: 0, maxvalue: 0, visible: false });\n if (\n !this.shape.auras.length ||\n this.shape.auras[this.shape.auras.length - 1].name !== \"\" ||\n this.shape.auras[this.shape.auras.length - 1].value !== 0\n )\n this.shape.auras.push({\n uuid: uuidv4(),\n name: \"\",\n value: 0,\n dim: 0,\n visionSource: false,\n colour: \"rgba(0,0,0,0)\",\n visible: false,\n });\n }\n updateShape(redraw: boolean, temporary = false) {\n if (!this.owned) return;\n socket.emit(\"Shape.Update\", { shape: this.shape.asDict(), redraw, temporary });\n if (redraw) layerManager.invalidate();\n this.addEmpty();\n }\n setToken(event: { target: HTMLInputElement }) {\n if (!this.owned) return;\n this.shape.setIsToken(event.target.checked);\n this.updateShape(true);\n }\n setVisionBlocker(event: { target: HTMLInputElement }) {\n if (!this.owned) return;\n this.shape.checkVisionSources();\n this.updateShape(true);\n }\n setMovementBlocker(event: { target: HTMLInputElement }) {\n if (!this.owned) return;\n this.shape.setMovementBlock(event.target.checked);\n this.updateShape(false);\n }\n updateAnnotation(event: { target: HTMLInputElement }) {\n if (!this.owned) return;\n const hadAnnotation = this.shape.annotation !== \"\";\n this.shape.annotation = event.target.value;\n if (this.shape.annotation !== \"\" && !hadAnnotation) {\n gameStore.annotations.push(this.shape.uuid);\n if (layerManager.hasLayer(\"draw\")) layerManager.getLayer(\"draw\")!.invalidate(true);\n } else if (this.shape.annotation === \"\" && hadAnnotation) {\n gameStore.annotations.splice(gameStore.annotations.findIndex(an => an === this.shape.uuid));\n if (layerManager.hasLayer(\"draw\")) layerManager.getLayer(\"draw\")!.invalidate(true);\n }\n this.updateShape(false);\n }\n updateOwner(event: { target: HTMLInputElement }, oldValue: string) {\n if (!this.owned) return;\n this.shape.updateOwner(oldValue, event.target.value);\n this.updateShape(gameStore.fowLOS);\n }\n removeOwner(value: string) {\n if (!this.owned) return;\n this.shape.removeOwner(value);\n this.updateShape(gameStore.fowLOS);\n }\n removeTracker(uuid: string) {\n if (!this.owned) return;\n this.shape.trackers = this.shape.trackers.filter(tr => tr.uuid !== uuid);\n this.updateShape(false);\n }\n removeAura(uuid: string) {\n if (!this.owned) return;\n this.shape.auras = this.shape.auras.filter(au => au.uuid !== uuid);\n this.shape.checkVisionSources();\n this.updateShape(true);\n }\n updateAuraVisionSource(aura: Aura) {\n if (!this.owned) return;\n aura.visionSource = !aura.visionSource;\n const i = gameStore.visionSources.findIndex(ls => ls.aura === aura.uuid);\n if (aura.visionSource && i === -1) gameStore.visionSources.push({ shape: this.shape.uuid, aura: aura.uuid });\n else if (!aura.visionSource && i >= 0) gameStore.visionSources.splice(i, 1);\n this.updateShape(true);\n }\n updateAuraColour(aura: Aura, colour: string) {\n if (!this.owned) return;\n const layer = layerManager.getLayer(this.shape.layer);\n if (layer === undefined) return;\n layer.invalidate(!aura.visionSource);\n }\n openLabelManager() {\n EventBus.$emit(\"LabelManager.Open\");\n }\n removeLabel(uuid: string) {\n if(!this.owned) return;\n this.shape.labels = this.shape.labels.filter(l => l.uuid !== uuid);\n this.updateShape(true);\n }\n}\n","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nimport Vue from \"vue\";\nimport Component from \"vue-class-component\";\n\nimport Modal from \"@/core/components/modals/modal.vue\";\n\n@Component({\n components: {\n Modal,\n },\n})\nexport default class ConfirmDialog extends Vue {\n $refs!: {\n confirm: HTMLButtonElement;\n };\n\n visible = false;\n yes = \"Yes\";\n no = \"No\";\n title = \"\";\n\n resolve = (ok: boolean) => {};\n reject = () => {};\n\n confirm() {\n this.resolve(true);\n this.close();\n }\n deny() {\n this.resolve(false);\n this.close();\n }\n close() {\n this.reject();\n this.visible = false;\n this.title = \"\";\n }\n open(title: string, yes = \"yes\", no = \"no\"): Promise {\n this.yes = yes;\n this.no = no;\n this.title = title;\n\n this.visible = true;\n this.$nextTick(() => {\n this.$refs.confirm.focus();\n });\n\n return new Promise((resolve, reject) => {\n this.resolve = resolve;\n this.reject = reject;\n });\n }\n}\n","import mod from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./initiative.vue?vue&type=style&index=0&id=af4dc61a&scoped=true&lang=css&\"; export default mod; export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./initiative.vue?vue&type=style&index=0&id=af4dc61a&scoped=true&lang=css&\"","import { render, staticRenderFns } from \"./map.vue?vue&type=template&id=2104f147&\"\nimport script from \"./map.vue?vue&type=script&lang=ts&\"\nexport * from \"./map.vue?vue&type=script&lang=ts&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\ncomponent.options.__file = \"map.vue\"\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"accordion\"},[_c('div',{attrs:{\"id\":\"header\"},on:{\"click\":function($event){$event.preventDefault();return _vm.toggleDisplay($event)}}},[_c('input',{ref:\"overall\",attrs:{\"type\":\"checkbox\"},on:{\"click\":function($event){$event.stopPropagation();return _vm.toggleCategory($event)}}}),_c('strong',[_vm._v(_vm._s(_vm.title))]),(_vm.showArrow)?[_c('span',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.showArrow && !_vm.active),expression:\"showArrow && !active\"}],staticClass:\"down-Arrow\"},[_vm._v(\"▼\")]),_c('span',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.showArrow && _vm.active),expression:\"showArrow && active\"}],staticClass:\"up-Arrow\"},[_vm._v(\"▲\")])]:_vm._e()],2),_c('div',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.active),expression:\"active\"}],attrs:{\"id\":\"body\"}},_vm._l((_vm.items),function(item){return _c('div',{key:item[0],staticClass:\"item\",on:{\"click\":function($event){_vm.toggleSelection(item[0])}}},[_c('input',{attrs:{\"type\":\"checkbox\"},domProps:{\"checked\":_vm.selected.includes(item[0])},on:{\"click\":function($event){$event.preventDefault();}}}),_vm._v(\" \"+_vm._s(item[1])+\"\\n \")])}))])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","export * from \"-!cache-loader?{\\\"cacheDirectory\\\":\\\"node_modules/.cache/vue-loader\\\",\\\"cacheIdentifier\\\":\\\"74f43d04-vue-loader-template\\\"}!../../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./accordion.vue?vue&type=template&id=0bf2b7ba&scoped=true&\"","import mod from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./filter.vue?vue&type=style&index=1&id=847e7ec4&scoped=true&lang=css&\"; export default mod; export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./filter.vue?vue&type=style&index=1&id=847e7ec4&scoped=true&lang=css&\"","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('modal',{attrs:{\"visible\":_vm.visible},on:{\"close\":_vm.close},scopedSlots:_vm._u([{key:\"header\",fn:function(m){return _c('div',{staticClass:\"modal-header\",attrs:{\"draggable\":\"true\"},on:{\"dragstart\":m.dragStart,\"dragend\":m.dragEnd}},[_vm._v(_vm._s(_vm.title))])}}])},[_c('div',{staticClass:\"modal-body\"},[_c('button',{ref:\"confirm\",on:{\"click\":_vm.confirm}},[_vm._v(_vm._s(_vm.yes))]),(!!_vm.no)?_c('button',{on:{\"click\":_vm.deny}},[_vm._v(_vm._s(_vm.no))]):_vm._e()])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","export * from \"-!cache-loader?{\\\"cacheDirectory\\\":\\\"node_modules/.cache/vue-loader\\\",\\\"cacheIdentifier\\\":\\\"74f43d04-vue-loader-template\\\"}!../../../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./confirm.vue?vue&type=template&id=1883e207&scoped=true&\"","\n\n\n\n\n\n\n\nimport Vue from \"vue\";\n\nimport Component from \"vue-class-component\";\n\nimport ContextMenu from \"@/core/components/contextmenu.vue\";\nimport ConfirmDialog from \"@/core/components/modals/confirm.vue\";\nimport Prompt from \"@/core/components/modals/prompt.vue\";\n\nimport { socket } from \"@/assetManager/socket\";\nimport { assetStore } from \"@/assetManager/store\";\nimport { getComponent, getRef } from \"@/core/utils\";\n\n@Component({\n components: {\n ContextMenu,\n },\n})\nexport default class AssetContextMenu extends Vue {\n visible = false;\n left = 0;\n top = 0;\n open(event: MouseEvent, inode: number) {\n if (!assetStore.selected.includes(inode)) getComponent().select(event, inode);\n\n this.visible = true;\n this.left = event.pageX;\n this.top = event.pageY;\n this.$nextTick(() => {\n this.$children[0].$el.focus();\n });\n }\n close() {\n this.visible = false;\n }\n rename() {\n if (assetStore.selected.length !== 1) return;\n const asset = assetStore.idMap.get(assetStore.selected[0])!;\n\n getRef(\"prompt\")\n .prompt(\"New name:\", `Renaming ${asset.name}`)\n .then(\n (name: string) => {\n socket.emit(\"Asset.Rename\", {\n asset: asset.id,\n name,\n });\n asset.name = name;\n getComponent().$forceUpdate();\n },\n () => {},\n );\n this.close();\n }\n remove() {\n if (assetStore.selected.length === 0) return;\n getRef(\"confirm\")\n .open(\"Are you sure you wish to remove this?\")\n .then(\n (result: boolean) => {\n if (result) {\n for (const sel of assetStore.selected) {\n socket.emit(\"Asset.Remove\", sel);\n if (assetStore.files.includes(sel))\n assetStore.files.splice(assetStore.files.indexOf(sel), 1);\n else assetStore.folders.splice(assetStore.folders.indexOf(sel), 1);\n }\n assetStore.clearSelected();\n }\n },\n () => {},\n );\n this.close();\n }\n}\n","import mod from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/ts-loader/index.js??ref--12-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./select.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/ts-loader/index.js??ref--12-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./select.vue?vue&type=script&lang=ts&\"","import mod from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./filter.vue?vue&type=style&index=0&lang=css&\"; export default mod; export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./filter.vue?vue&type=style&index=0&lang=css&\"","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nimport Vue from \"vue\";\nimport Component from \"vue-class-component\";\n\nimport Modal from \"@/core/components/modals/modal.vue\";\n\nimport { uuidv4 } from \"@/core/utils\";\nimport { socket } from \"@/game/api/socket\";\nimport { EventBus } from \"@/game/event-bus\";\nimport { gameStore } from \"@/game/store\";\n\n@Component({\n components: {\n Modal,\n },\n})\nexport default class LabelManager extends Vue {\n visible = false;\n newCategory = \"\";\n newName = \"\";\n search = \"\";\n\n mounted() {\n EventBus.$on(\"LabelManager.Open\", () => {\n this.visible = true;\n this.newCategory = \"\";\n this.newName = \"\";\n this.$nextTick(() => (this.$refs.search).focus());\n });\n }\n\n beforeDestroy() {\n EventBus.$off(\"LabelManager.Open\");\n }\n\n get labels() {\n const cat: {[category: string]: Label[]} = {};\n for (const uuid of Object.keys(gameStore.labels)) {\n const label = gameStore.labels[uuid];\n if (this.search.length && `${label.category.toLowerCase()}${label.name.toLowerCase()}`.search(this.search.toLowerCase()) < 0) continue;\n if (label.user !== gameStore.username) continue;\n if (!label.category) cat[''].push(label);\n else {\n if (!(label.category in cat)) cat[label.category] = [];\n cat[label.category].push(label);\n cat[label.category].sort((a, b) => a.name.localeCompare(b.name));\n }\n }\n return cat;\n }\n\n get categories() {\n return Object.keys(this.labels).sort();\n }\n\n selectLabel(label: string) {\n EventBus.$emit(\"EditDialog.AddLabel\", label);\n this.visible = false;\n }\n\n toggleVisibility(label: Label) {\n label.visible = !label.visible;\n socket.emit(\"Label.Visibility.Set\", { uuid: label.uuid, visible: label.visible });\n }\n\n addLabel() {\n if (this.newName === \"\") return;\n const label = {\n uuid: uuidv4(),\n category: this.newCategory,\n name: this.newName,\n visible: false,\n user: gameStore.username,\n };\n gameStore.addLabel(label);\n socket.emit(\"Label.Add\", label);\n this.newCategory = \"\";\n this.newName = \"\";\n }\n\n deleteLabel(uuid: string) {\n gameStore.deleteLabel({ uuid, user: gameStore.username });\n socket.emit(\"Label.Delete\", uuid);\n }\n}\n","import { ServerPolygon } from \"../comm/types/shapes\";\nimport { GlobalPoint, LocalPoint } from \"../geom\";\nimport { g2lx, g2ly, g2lz, l2g } from \"../units\";\nimport { getFogColour } from \"../utils\";\nimport { BoundingRect } from \"./boundingrect\";\nimport { Shape } from \"./shape\";\n\nexport class Polygon extends Shape {\n type = \"polygon\";\n _vertices: GlobalPoint[] = [];\n\n constructor(\n startPoint: GlobalPoint,\n vertices: GlobalPoint[] = [],\n fillColour?: string,\n strokeColour?: string,\n uuid?: string,\n ) {\n super(startPoint, fillColour, strokeColour, uuid);\n this._vertices = vertices;\n }\n\n get refPoint() {\n return this._refPoint;\n }\n set refPoint(point: GlobalPoint) {\n const delta = point.subtract(this._refPoint);\n this._refPoint = point;\n for (let i = 0; i < this._vertices.length; i++) this._vertices[i] = this._vertices[i].add(delta);\n }\n\n get vertices() {\n return [this._refPoint, ...this._vertices];\n }\n\n asDict() {\n return Object.assign(this.getBaseDict(), {\n vertices: this._vertices.map(p => ({ x: p.x, y: p.y })),\n });\n }\n\n fromDict(data: ServerPolygon) {\n super.fromDict(data);\n this._vertices = data.vertices.map(v => new GlobalPoint(v.x, v.y));\n }\n\n get points() {\n return this.vertices.map(point => [point.x, point.y]);\n }\n\n draw(ctx: CanvasRenderingContext2D) {\n super.draw(ctx);\n ctx.lineCap = \"round\";\n ctx.lineJoin = \"round\";\n\n if (this.strokeColour === \"fog\") ctx.strokeStyle = getFogColour();\n else if (this.vertices.length === 2) ctx.strokeStyle = this.fillColour;\n else ctx.strokeStyle = this.strokeColour;\n if (this.fillColour === \"fog\") ctx.fillStyle = getFogColour();\n else ctx.fillStyle = this.fillColour;\n ctx.lineWidth = g2lz(2);\n\n ctx.beginPath();\n ctx.moveTo(g2lx(this.vertices[0].x), g2ly(this.vertices[0].y));\n for (let i = 1; i <= this.vertices.length; i++) {\n const vertex = this.vertices[i % this.vertices.length];\n ctx.lineTo(g2lx(vertex.x), g2ly(vertex.y));\n }\n ctx.fill();\n ctx.stroke();\n }\n\n contains(point: GlobalPoint): boolean {\n return this.getBoundingBox().contains(point);\n }\n\n center(): GlobalPoint;\n center(centerPoint: GlobalPoint): void;\n center(centerPoint?: GlobalPoint): GlobalPoint | void {\n return this.getBoundingBox().center();\n }\n visibleInCanvas(canvas: HTMLCanvasElement): boolean {\n return this.getBoundingBox().visibleInCanvas(canvas);\n } // TODO\n snapToGrid(): void {}\n resizeToGrid(): void {}\n resize(resizePoint: number, point: LocalPoint): void {\n if (resizePoint === 0) this._refPoint = l2g(point);\n else this._vertices[resizePoint - 1] = l2g(point);\n }\n getBoundingBox(): BoundingRect {\n let minx: number = this.refPoint.x;\n let maxx: number = this.refPoint.x;\n let miny: number = this.refPoint.y;\n let maxy: number = this.refPoint.y;\n for (const p of this._vertices) {\n if (p.x < minx) minx = p.x;\n if (p.x > maxx) maxx = p.x;\n if (p.y < miny) miny = p.y;\n if (p.y > maxy) maxy = p.y;\n }\n return new BoundingRect(new GlobalPoint(minx, miny), maxx - minx, maxy - miny);\n }\n}\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return (_vm.selected)?_c('div',{staticClass:\"tool-detail\",style:({'--detailRight': _vm.detailRight, '--detailArrow': _vm.detailArrow})},[_c('div',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.IS_DM),expression:\"IS_DM\"}]},[_vm._v(\"Mode\")]),_c('div',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.IS_DM),expression:\"IS_DM\"}],staticClass:\"selectgroup\"},_vm._l((_vm.modes),function(mode){return _c('div',{key:mode,staticClass:\"option\",class:{'option-selected': _vm.modeSelect === mode},on:{\"click\":function($event){_vm.modeSelect = mode}}},[_vm._v(_vm._s(mode))])})),_c('div',[_vm._v(\"Shape\")]),_c('div',{staticClass:\"selectgroup\"},_vm._l((_vm.shapes),function(shape){return _c('div',{key:shape,staticClass:\"option\",class:{'option-selected': _vm.shapeSelect === shape},on:{\"click\":function($event){_vm.shapeSelect = shape}}},[_c('i',{staticClass:\"fas\",class:'fa-' + shape})])})),_c('div',[_vm._v(\"Colours\")]),_c('div',{staticClass:\"selectgroup\"},[_c('color-picker',{staticClass:\"option\",attrs:{\"color\":_vm.fillColour},on:{\"update:color\":function($event){_vm.fillColour=$event}}}),_c('color-picker',{staticClass:\"option\",attrs:{\"color\":_vm.borderColour},on:{\"update:color\":function($event){_vm.borderColour=$event}}})],1),_c('div',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.shapeSelect === 'paint-brush'),expression:\"shapeSelect === 'paint-brush'\"}]},[_vm._v(\"Brush size\")]),_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.brushSize),expression:\"brushSize\"},{name:\"show\",rawName:\"v-show\",value:(_vm.shapeSelect === 'paint-brush'),expression:\"shapeSelect === 'paint-brush'\"}],staticStyle:{\"max-width\":\"100px\"},attrs:{\"type\":\"text\"},domProps:{\"value\":(_vm.brushSize)},on:{\"input\":function($event){if($event.target.composing){ return; }_vm.brushSize=$event.target.value}}})]):_vm._e()}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","export * from \"-!cache-loader?{\\\"cacheDirectory\\\":\\\"node_modules/.cache/vue-loader\\\",\\\"cacheIdentifier\\\":\\\"74f43d04-vue-loader-template\\\"}!../../../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./draw.vue?vue&type=template&id=639cd890&scoped=true&\"","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"outer\",on:{\"click\":function($event){if($event.target !== $event.currentTarget){ return null; }return _vm.open($event)}}},[_c('div',{staticClass:\"current-color\",style:(_vm.transparent ? 'background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAMCAIAAADZF8uwAAAAGUlEQVQYV2M4gwH+YwCGIasIUwhT25BVBADtzYNYrHvv4gAAAABJRU5ErkJggg==)' : 'background-color:' + _vm.color),on:{\"click\":function($event){if($event.target !== $event.currentTarget){ return null; }return _vm.open($event)}}}),_c('div',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.display),expression:\"display\"}],staticClass:\"mask\",on:{\"click\":function($event){if($event.target !== $event.currentTarget){ return null; }return _vm.closePicker($event)}}}),_c('chrome-picker',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.display),expression:\"display\"}],ref:\"chromePicker\",style:({position: 'fixed', left:_vm.left + 'px', top:_vm.top + 'px', 'z-index': 9999}),attrs:{\"value\":_vm.color,\"tabindex\":\"-1\"},on:{\"input\":_vm.updateColor}})],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","export * from \"-!cache-loader?{\\\"cacheDirectory\\\":\\\"node_modules/.cache/vue-loader\\\",\\\"cacheIdentifier\\\":\\\"74f43d04-vue-loader-template\\\"}!../../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./colorpicker.vue?vue&type=template&id=d32461a4&scoped=true&\"","import { render, staticRenderFns } from \"./manager.vue?vue&type=template&id=5b0def98&\"\nimport script from \"./manager.vue?vue&type=script&lang=ts&\"\nexport * from \"./manager.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./manager.vue?vue&type=style&index=0&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\ncomponent.options.__file = \"manager.vue\"\nexport default component.exports","import mod from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/ts-loader/index.js??ref--12-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./tools.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/ts-loader/index.js??ref--12-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./tools.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./tool.vue?vue&type=template&id=1e034b42&\"\nimport script from \"./tool.vue?vue&type=script&lang=ts&\"\nexport * from \"./tool.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./tool.vue?vue&type=style&index=0&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\ncomponent.options.__file = \"tool.vue\"\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('Modal',{attrs:{\"visible\":_vm.visible},on:{\"close\":_vm.close},scopedSlots:_vm._u([{key:\"header\",fn:function(m){return _c('div',{staticClass:\"modal-header\",attrs:{\"draggable\":\"true\"},on:{\"dragstart\":m.dragStart,\"dragend\":m.dragEnd}},[_vm._v(_vm._s(_vm.title))])}}])},[_c('div',{staticClass:\"modal-body\"},[_vm._v(\"\\n \"+_vm._s(_vm.question)+\"\\n \"),_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.answer),expression:\"answer\"}],ref:\"answer\",attrs:{\"type\":\"text\"},domProps:{\"value\":(_vm.answer)},on:{\"keyup\":function($event){if(!('button' in $event)&&_vm._k($event.keyCode,\"enter\",13,$event.key,\"Enter\")){ return null; }return _vm.submit($event)},\"input\":function($event){if($event.target.composing){ return; }_vm.answer=$event.target.value}}})]),_c('div',{staticClass:\"modal-footer\"},[_c('button',{on:{\"click\":_vm.submit}},[_vm._v(\"Submit\")])])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","export * from \"-!cache-loader?{\\\"cacheDirectory\\\":\\\"node_modules/.cache/vue-loader\\\",\\\"cacheIdentifier\\\":\\\"74f43d04-vue-loader-template\\\"}!../../../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./prompt.vue?vue&type=template&id=0602c2e6&scoped=true&\"","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nimport Vue from \"vue\";\nimport Component from \"vue-class-component\";\nimport draggable from \"vuedraggable\";\nVue.component(\"draggable\", draggable);\n\nimport Modal from \"@/core/components/modals/modal.vue\";\n\nimport { uuidv4 } from \"@/core/utils\";\nimport { socket } from \"@/game/api/socket\";\nimport { InitiativeData, InitiativeEffect } from \"@/game/comm/types/general\";\nimport { EventBus } from \"@/game/event-bus\";\nimport { layerManager } from \"@/game/layers/manager\";\nimport { gameStore } from \"@/game/store\";\n\n@Component({\n components: {\n Modal,\n draggable,\n },\n})\nexport default class Initiative extends Vue {\n visible = false;\n data: InitiativeData[] = [];\n currentActor: string | null = null;\n roundCounter = 0;\n\n mounted() {\n EventBus.$on(\"Initiative.Clear\", this.clear);\n EventBus.$on(\"Initiative.Remove\", (data: string) => this.removeInitiative(data));\n EventBus.$on(\"Initiative.Show\", () => (this.visible = true));\n\n socket.on(\"Initiative.Set\", (data: InitiativeData[]) => {\n this.data = data;\n });\n socket.on(\"Initiative.Turn.Set\", (data: string) => this.setTurn(data));\n socket.on(\"Initiative.Turn.Update\", (data: string) => this.updateTurn(data, false));\n socket.on(\"Initiative.Round.Update\", (data: number) => this.setRound(data, false));\n socket.on(\"Initiative.Effect.New\", (data: { actor: string; effect: InitiativeEffect }) => {\n const actor = this.getActor(data.actor);\n if (actor === undefined) return;\n this.createEffect(actor, data.effect, false);\n });\n socket.on(\"Initiative.Effect.Update\", (data: { actor: string; effect: InitiativeEffect }) =>\n this.updateEffect(data.actor, data.effect, false),\n );\n }\n\n beforeDestroy() {\n EventBus.$off(\"Initiative.Clear\");\n EventBus.$off(\"Initiative.Remove\");\n EventBus.$off(\"Initiative.Show\");\n }\n\n // Utilities\n clear() {\n this.data = [];\n this.currentActor = null;\n }\n getActor(actorId: string) {\n return this.data.find(a => a.uuid === actorId);\n }\n contains(uuid: string) {\n return this.data.some(d => d.uuid === uuid);\n }\n owns(actor: InitiativeData): boolean {\n if (gameStore.IS_DM) return true;\n const shape = layerManager.UUIDMap.get(actor.uuid);\n // Shapes that are unknown to this client are hidden from this client but owned by other clients\n if (shape === undefined) return false;\n return shape.owners.includes(gameStore.username);\n }\n getDefaultEffect() {\n return { uuid: uuidv4(), name: \"New Effect\", turns: 10 };\n }\n fakeSetData(dataTransfer: DataTransfer) {\n dataTransfer.setData(\"Hack\", \"\");\n }\n syncInitiative(data: InitiativeData | { uuid: string }) {\n socket.emit(\"Initiative.Update\", data);\n }\n // Events\n addInitiative(data: InitiativeData) {\n const d = this.data.findIndex(a => a.uuid === data.uuid);\n if (d >= 0) return;\n if (data.initiative === undefined) data.initiative = 0;\n this.syncInitiative(data);\n }\n removeInitiative(uuid: string) {\n const d = this.data.findIndex(a => a.uuid === uuid);\n if (d < 0 || this.data[d].group) return;\n this.syncInitiative({ uuid });\n // Remove highlight\n const shape = layerManager.UUIDMap.get(uuid);\n if (shape === undefined) return;\n if (shape.showHighlight) {\n shape.showHighlight = false;\n layerManager.getLayer(shape.layer)!.invalidate(true);\n }\n }\n updateOrder() {\n if (!gameStore.IS_DM) return;\n socket.emit(\"Initiative.Set\", this.data.map(d => d.uuid));\n }\n updateTurn(actorId: string | null, sync: boolean) {\n if (!gameStore.IS_DM && sync) return;\n this.currentActor = actorId;\n const actor = this.data.find(a => a.uuid === actorId);\n if (actor === undefined) return;\n if (actor.effects) {\n for (let e = actor.effects.length - 1; e >= 0; e--) {\n if (actor.effects[e].turns <= 0) actor.effects.splice(e, 1);\n else actor.effects[e].turns--;\n }\n }\n if (sync) socket.emit(\"Initiative.Turn.Update\", actorId);\n }\n setRound(round: number, sync: boolean) {\n if (!gameStore.IS_DM && sync) return;\n this.roundCounter = round;\n if (sync) socket.emit(\"Initiative.Round.Update\", round);\n }\n setTurn(actorId: string | null) {\n this.currentActor = actorId;\n }\n nextTurn() {\n if (!gameStore.IS_DM) return;\n const order = this.data;\n const next = order[(order.findIndex(a => a.uuid === this.currentActor) + 1) % order.length];\n if (this.data[0].uuid === next.uuid) this.setRound(this.roundCounter + 1, true);\n this.updateTurn(next.uuid, true);\n }\n toggleHighlight(actor: InitiativeData, show: boolean) {\n const shape = layerManager.UUIDMap.get(actor.uuid);\n if (shape === undefined) return;\n shape.showHighlight = show;\n layerManager.getLayer(shape.layer)!.invalidate(true);\n }\n toggleOption(actor: InitiativeData, option: \"visible\" | \"group\") {\n if (!this.owns(actor)) return;\n actor[option] = !actor[option];\n this.syncInitiative(actor);\n }\n createEffect(actor: InitiativeData, effect: InitiativeEffect, sync: boolean) {\n if (!this.owns(actor)) return;\n actor.effects.push(effect);\n if (sync) socket.emit(\"Initiative.Effect.New\", { actor: actor.uuid, effect });\n }\n syncEffect(actor: InitiativeData, effect: InitiativeEffect) {\n if (!this.owns(actor)) return;\n socket.emit(\"Initiative.Effect.Update\", { actor: actor.uuid, effect });\n }\n updateEffect(actorId: string, effect: InitiativeEffect, sync: boolean) {\n const actor = this.data.find(a => a.uuid === actorId);\n if (actor === undefined) return;\n const effectIndex = actor.effects.findIndex(e => e.uuid === effect.uuid);\n if (effectIndex === undefined) return;\n actor.effects[effectIndex] = effect;\n if (sync) this.syncEffect(actor, effect);\n else this.$forceUpdate();\n }\n}\n","import { render, staticRenderFns } from \"./selection_info.vue?vue&type=template&id=674cf937&scoped=true&\"\nimport script from \"./selection_info.vue?vue&type=script&lang=ts&\"\nexport * from \"./selection_info.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./selection_info.vue?vue&type=style&index=0&id=674cf937&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"674cf937\",\n null\n \n)\n\ncomponent.options.__file = \"selection_info.vue\"\nexport default component.exports","import Vue from 'vue';\n\nimport { Action, getModule, Module, Mutation, VuexModule } from \"vuex-module-decorators\";\n\nimport { AssetList } from \"@/core/comm/types\";\nimport { socket } from \"@/game/api/socket\";\nimport { sendClientOptions } from \"@/game/api/utils\";\nimport { Note } from \"@/game/comm/types/general\";\nimport { ServerShape } from \"@/game/comm/types/shapes\";\nimport { GlobalPoint } from \"@/game/geom\";\nimport { layerManager } from \"@/game/layers/manager\";\nimport { g2l, l2g } from \"@/game/units\";\nimport { zoomValue } from \"@/game/utils\";\nimport { BoundingVolume } from \"@/game/visibility/bvh/bvh\";\nimport { triangulate } from \"@/game/visibility/te/pa\";\nimport { rootStore } from \"@/store\";\n\nexport interface GameState {\n boardInitialized: boolean;\n}\n\n@Module({ dynamic: true, store: rootStore, name: \"game\", namespaced: true })\nclass GameStore extends VuexModule implements GameState {\n // This is a limited view of selectable layers that is used to generate the layer selection UI and ability to switch layers\n // See the layerManager for proper layer management tools\n layers: string[] = [];\n selectedLayerIndex = -1;\n boardInitialized = false;\n\n locations: string[] = [];\n\n assets: AssetList = {};\n\n notes: Note[] = [];\n\n IS_DM = false;\n gridSize = 50;\n username = \"\";\n roomName = \"\";\n roomCreator = \"\";\n invitationCode = \"\";\n\n gridColour = \"rgba(0, 0, 0, 1)\";\n fowColour = \"rgba(0, 0, 0, 1)\";\n rulerColour = \"rgba(255, 0, 0, 1)\";\n panX = 0;\n panY = 0;\n\n zoomDisplay = 0.5;\n // zoomFactor = 1;\n\n unitSize = 5;\n useGrid = true;\n fullFOW = false;\n fowOpacity = 0.3;\n fowLOS = false;\n locationName = \"\";\n\n visionSources: { shape: string; aura: string }[] = [];\n visionBlockers: string[] = [];\n annotations: string[] = [];\n movementblockers: string[] = [];\n ownedtokens: string[] = [];\n\n BV = Object.freeze(new BoundingVolume([]));\n\n visionMode: \"bvh\" | \"triangle\" = \"bvh\";\n drawTEContour = false;\n visionRangeMin = 1640;\n visionRangeMax = 3281;\n\n clipboard: ServerShape[] = [];\n\n // Maps are not yet supported in Vue untill 3.X, so for now we're using a plain old object\n labels: {[uuid: string]: Label} = {};\n\n filterNoLabel = false;\n labelFilters: string[] = [];\n\n showUI = true;\n\n get selectedLayer() {\n return this.layers[this.selectedLayerIndex];\n }\n\n get zoomFactor() {\n return zoomValue(this.zoomDisplay);\n }\n\n @Mutation\n setZoomDisplay(zoom: number) {\n if (zoom === this.zoomDisplay) return;\n if (zoom < 0) zoom = 0;\n if (zoom > 1) zoom = 1;\n this.zoomDisplay = zoom;\n layerManager.invalidate();\n }\n\n @Mutation\n setVisionMode(data: { mode: \"bvh\" | \"triangle\"; sync: boolean }) {\n this.visionMode = data.mode;\n if (data.sync) socket.emit(\"Location.Options.Set\", { vision_mode: data.mode });\n }\n\n @Mutation\n setBoardInitialized(boardInitialized: boolean) {\n this.boardInitialized = boardInitialized;\n }\n\n @Mutation\n toggleUnlabeledFilter() {\n this.filterNoLabel = !this.filterNoLabel;\n }\n\n @Mutation\n addLabel(label: Label) {\n Vue.set(this.labels, label.uuid, label);\n }\n\n @Mutation\n setLabelFilters(filters: string[]) {\n this.labelFilters = filters;\n }\n\n @Mutation\n setLabelVisibility(data: { user: string; uuid: string; visible: boolean }) {\n if (!(data.uuid in this.labels)) return;\n this.labels[data.uuid].visible = data.visible;\n }\n\n @Mutation\n deleteLabel(data: { uuid: string; user: string }) {\n if (!(data.uuid in this.labels)) return;\n const label = this.labels[data.uuid];\n const updatedLayers: Set = new Set();\n for (const shape of layerManager.UUIDMap.values()) {\n const i = shape.labels.indexOf(label);\n if (i >= 0) {\n shape.labels.splice(i, 1);\n updatedLayers.add(shape.layer);\n }\n }\n for (const layer of updatedLayers)\n layerManager.getLayer(layer)!.invalidate(false);\n Vue.delete(this.labels, data.uuid);\n }\n\n @Mutation\n setDM(isDM: boolean) {\n this.IS_DM = isDM;\n }\n\n @Mutation\n setUsername(username: string) {\n this.username = username;\n }\n\n @Mutation\n setRoomName(name: string) {\n this.roomName = name;\n }\n\n @Mutation\n setRoomCreator(name: string) {\n this.roomCreator = name;\n }\n\n @Mutation\n setInvitationCode(code: string) {\n this.invitationCode = code;\n }\n\n @Mutation\n addLayer(name: string) {\n this.layers.push(name);\n if (this.selectedLayerIndex === -1) this.selectedLayerIndex = this.layers.indexOf(name);\n }\n\n @Mutation\n selectLayer(data: { name: string; sync: boolean }) {\n const index = this.layers.indexOf(data.name);\n if (index >= 0) this.selectedLayerIndex = index;\n if (data.sync) socket.emit(\"Client.ActiveLayer.Set\", data.name);\n }\n\n @Mutation\n newNote(data: { note: Note; sync: boolean }) {\n this.notes.push(data.note);\n if (data.sync) socket.emit(\"Note.New\", data.note);\n }\n\n @Mutation\n setAssets(assets: AssetList) {\n this.assets = assets;\n }\n\n @Mutation\n setLocations(locations: string[]) {\n this.locations = locations;\n }\n\n @Mutation\n resetLayerInfo() {\n this.layers = [];\n this.selectedLayerIndex = -1;\n }\n\n @Mutation\n recalculateVision(partial = false) {\n if (this.boardInitialized) {\n if (this.visionMode === \"triangle\") triangulate(\"vision\", partial);\n else this.BV = Object.freeze(new BoundingVolume(this.visionBlockers));\n }\n }\n\n @Mutation\n recalculateMovement(partial = false) {\n if (this.boardInitialized && this.visionMode === \"triangle\") triangulate(\"movement\", partial);\n }\n\n @Mutation\n updateZoom(data: { newZoomDisplay: number; zoomLocation: GlobalPoint }) {\n if (data.newZoomDisplay === this.zoomDisplay) return;\n if (data.newZoomDisplay < 0) data.newZoomDisplay = 0;\n if (data.newZoomDisplay > 1) data.newZoomDisplay = 1;\n const oldLoc = g2l(data.zoomLocation);\n this.zoomDisplay = data.newZoomDisplay;\n const newLoc = l2g(oldLoc);\n // Change the pan settings to keep the zoomLocation in the same exact location before and after the zoom.\n const diff = newLoc.subtract(data.zoomLocation);\n this.panX += diff.x;\n this.panY += diff.y;\n layerManager.invalidate();\n sendClientOptions();\n }\n\n @Mutation\n setGridColour(data: { colour: string; sync: boolean }) {\n this.gridColour = data.colour;\n layerManager.getGridLayer()!.drawGrid();\n if (data.sync) socket.emit(\"Client.Options.Set\", { gridColour: data.colour });\n }\n\n @Mutation\n setFOWColour(data: { colour: string; sync: boolean }) {\n this.fowColour = data.colour;\n layerManager.invalidate();\n if (data.sync) socket.emit(\"Client.Options.Set\", { fowColour: data.colour });\n }\n\n @Mutation\n setRulerColour(data: { colour: string; sync: boolean }) {\n this.rulerColour = data.colour;\n if (data.sync) socket.emit(\"Client.Options.Set\", { rulerColour: data.colour });\n }\n\n @Mutation\n setPanX(x: number) {\n this.panX = x;\n }\n\n @Mutation\n setPanY(y: number) {\n this.panY = y;\n }\n\n @Mutation\n increasePanX(increase: number) {\n this.panX += increase;\n }\n\n @Mutation\n increasePanY(increase: number) {\n this.panY += increase;\n }\n\n @Mutation\n setUnitSize(data: { unitSize: number; sync: boolean }) {\n if (this.unitSize !== data.unitSize && data.unitSize > 0 && data.unitSize < Infinity) {\n this.unitSize = data.unitSize;\n layerManager.invalidate();\n if (data.sync) socket.emit(\"Location.Options.Set\", { unit_size: data.unitSize });\n }\n }\n\n @Mutation\n setUseGrid(data: { useGrid: boolean; sync: boolean }) {\n if (this.useGrid !== data.useGrid) {\n this.useGrid = data.useGrid;\n const gridLayer = layerManager.getGridLayer()!;\n if (data.useGrid) gridLayer.canvas.style.display = \"block\";\n else gridLayer.canvas.style.display = \"none\";\n if (data.sync) socket.emit(\"Location.Options.Set\", { use_grid: data.useGrid });\n }\n }\n\n @Mutation\n setGridSize(data: { gridSize: number; sync: boolean }): void {\n if (this.gridSize !== data.gridSize && data.gridSize > 0) {\n this.gridSize = data.gridSize;\n const gridLayer = layerManager.getGridLayer();\n if (gridLayer !== undefined) gridLayer.drawGrid();\n if (data.sync) socket.emit(\"Gridsize.Set\", data.gridSize);\n }\n }\n\n @Mutation\n setVisionRangeMin(data: { value: number; sync: boolean }): void {\n this.visionRangeMin = data.value;\n layerManager.invalidateLight();\n if (data.sync) socket.emit(\"Location.Options.Set\", { vision_min_range: data.value });\n }\n\n @Mutation\n setVisionRangeMax(data: { value: number; sync: boolean }): void {\n this.visionRangeMax = Math.max(data.value, this.visionRangeMin);\n layerManager.invalidateLight();\n if (data.sync) socket.emit(\"Location.Options.Set\", { vision_max_range: this.visionRangeMax });\n }\n\n @Mutation\n setFullFOW(data: { fullFOW: boolean; sync: boolean }) {\n if (this.fullFOW !== data.fullFOW) {\n this.fullFOW = data.fullFOW;\n layerManager.invalidateLight();\n if (data.sync) socket.emit(\"Location.Options.Set\", { full_fow: data.fullFOW });\n }\n }\n\n @Mutation\n setFOWOpacity(data: { fowOpacity: number; sync: boolean }) {\n this.fowOpacity = data.fowOpacity;\n layerManager.invalidateLight();\n if (data.sync) socket.emit(\"Location.Options.Set\", { fow_opacity: data.fowOpacity });\n }\n\n @Mutation\n setLineOfSight(data: { fowLOS: boolean; sync: boolean }) {\n if (this.fowLOS !== data.fowLOS) {\n this.fowLOS = data.fowLOS;\n layerManager.invalidate();\n if (data.sync) socket.emit(\"Location.Options.Set\", { fow_los: data.fowLOS });\n }\n }\n\n @Mutation\n setLocationName(name: string) {\n this.locationName = name;\n }\n\n @Mutation\n updateNote(data: { note: Note; sync: boolean }) {\n const actualNote = this.notes.find(n => n.uuid === data.note.uuid);\n if (actualNote === undefined) return;\n actualNote.title = data.note.title;\n actualNote.text = data.note.text;\n if (data.sync) socket.emit(\"Note.Update\", actualNote);\n }\n\n @Mutation\n removeNote(data: { note: Note; sync: boolean }) {\n this.notes = this.notes.filter(n => n.uuid !== data.note.uuid);\n if (data.sync) socket.emit(\"Note.Remove\", data.note.uuid);\n }\n\n @Mutation\n toggleUI() {\n this.showUI = !this.showUI;\n }\n\n @Mutation\n setClipboard(clipboard: ServerShape[]) {\n this.clipboard = clipboard;\n }\n\n @Action\n clear() {\n (this.context.state).visionSources = [];\n (this.context.state).visionBlockers = [];\n (this.context.state).ownedtokens = [];\n (this.context.state).annotations = [];\n (this.context.state).movementblockers = [];\n (this.context.state).notes = [];\n this.context.commit(\"recalculateVision\");\n this.context.commit(\"recalculateMovement\");\n }\n}\n\nexport const gameStore = getModule(GameStore);\n","import mod from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./colorpicker.vue?vue&type=style&index=0&id=d32461a4&scoped=true&lang=css&\"; export default mod; export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./colorpicker.vue?vue&type=style&index=0&id=d32461a4&scoped=true&lang=css&\"","import mod from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/ts-loader/index.js??ref--12-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./confirm.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/ts-loader/index.js??ref--12-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./confirm.vue?vue&type=script&lang=ts&\"","import { ServerAura } from \"@/game/comm/types/shapes\";\n\nexport const aurasFromServer = (auras: ServerAura[]): Aura[] => {\n const result = [];\n for (const aura of auras) {\n result.push({\n uuid: aura.uuid,\n visionSource: aura.vision_source,\n visible: aura.visible,\n name: aura.name,\n value: aura.value,\n dim: aura.dim,\n colour: aura.colour,\n });\n }\n return result;\n};\n\nexport const aurasToServer = (auras: Aura[]): ServerAura[] => {\n const result = [];\n for (const aura of auras) {\n result.push({\n uuid: aura.uuid,\n vision_source: aura.visionSource,\n visible: aura.visible,\n name: aura.name,\n value: aura.value,\n dim: aura.dim,\n colour: aura.colour,\n });\n }\n return result;\n};\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('div',{attrs:{\"id\":\"toolselect\"}},[_c('ul',_vm._l((_vm.visibleTools),function(tool){return _c('li',{key:tool,ref:tool + '-selector',refInFor:true,class:{'tool-selected': _vm.currentTool === tool},on:{\"mousedown\":function($event){_vm.currentTool = tool}}},[_c('a',{attrs:{\"href\":\"#\"}},[_vm._v(_vm._s(tool))])])}))]),_c('div',[[_c('select-tool',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.currentTool === 'Select'),expression:\"currentTool === 'Select'\"}],ref:\"selectTool\"}),_c('pan-tool',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.currentTool === 'Pan'),expression:\"currentTool === 'Pan'\"}]}),_c('keep-alive',[_c('draw-tool',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.currentTool === 'Draw'),expression:\"currentTool === 'Draw'\"}]})],1),_c('ruler-tool',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.currentTool === 'Ruler'),expression:\"currentTool === 'Ruler'\"}]}),_c('map-tool',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.currentTool === 'Map'),expression:\"currentTool === 'Map'\"}]}),_c('filter-tool',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.currentTool === 'Filter'),expression:\"currentTool === 'Filter'\"}]}),_c('shape-menu',{ref:\"shapecontext\"}),_c('createtoken-dialog',{ref:\"createtokendialog\"})]],2)])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","export * from \"-!cache-loader?{\\\"cacheDirectory\\\":\\\"node_modules/.cache/vue-loader\\\",\\\"cacheIdentifier\\\":\\\"74f43d04-vue-loader-template\\\"}!../../../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./tools.vue?vue&type=template&id=cf33581e&scoped=true&\"","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/ts-loader/index.js??ref--12-2!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./contextMenu.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/ts-loader/index.js??ref--12-2!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./contextMenu.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./note.vue?vue&type=template&id=7a3669fd&scoped=true&\"\nimport script from \"./note.vue?vue&type=script&lang=ts&\"\nexport * from \"./note.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./note.vue?vue&type=style&index=0&id=7a3669fd&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"7a3669fd\",\n null\n \n)\n\ncomponent.options.__file = \"note.vue\"\nexport default component.exports","import { render, staticRenderFns } from \"./initiative.vue?vue&type=template&id=af4dc61a&scoped=true&\"\nimport script from \"./initiative.vue?vue&type=script&lang=ts&\"\nexport * from \"./initiative.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./initiative.vue?vue&type=style&index=0&id=af4dc61a&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"af4dc61a\",\n null\n \n)\n\ncomponent.options.__file = \"initiative.vue\"\nexport default component.exports","import { ServerLayer } from \"@/game/comm/types/general\";\nimport { FOWLayer } from \"@/game/layers/fow\";\nimport { FOWPlayersLayer } from \"@/game/layers/fowplayers\";\nimport { GridLayer } from \"@/game/layers/grid\";\nimport { Layer } from \"@/game/layers/layer\";\nimport { layerManager } from \"@/game/layers/manager\";\nimport { gameStore } from \"@/game/store\";\n\nexport function createLayer(layerInfo: ServerLayer) {\n // Create canvas element\n const canvas = document.createElement(\"canvas\");\n canvas.style.zIndex = layerManager.layers.length.toString();\n canvas.width = window.innerWidth;\n canvas.height = window.innerHeight;\n\n // Create the Layer instance\n let layer: Layer;\n if (layerInfo.type_ === \"grid\") layer = new GridLayer(canvas, layerInfo.name);\n else if (layerInfo.type_ === \"fow\") layer = new FOWLayer(canvas, layerInfo.name);\n else if (layerInfo.type_ === \"fow-players\") layer = new FOWPlayersLayer(canvas, layerInfo.name);\n else layer = new Layer(canvas, layerInfo.name);\n layer.selectable = layerInfo.selectable;\n layer.playerEditable = layerInfo.player_editable;\n layerManager.addLayer(layer);\n\n // Add the element to the DOM\n const layers = document.getElementById(\"layers\");\n if (layers === null) {\n console.warn(\"Layers div is missing, this will prevent the main game board from loading!\");\n return;\n }\n if (layerInfo.name !== \"fow-players\") layers.appendChild(canvas);\n\n if (layerInfo.type_ === \"grid\" && layerInfo.size) gameStore.setGridSize({ gridSize: layerInfo.size, sync: false });\n // Load layer shapes\n layer.setShapes(layerInfo.shapes);\n}\n","import { render, staticRenderFns } from \"./labels.vue?vue&type=template&id=4697341e&scoped=true&\"\nimport script from \"./labels.vue?vue&type=script&lang=ts&\"\nexport * from \"./labels.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./labels.vue?vue&type=style&index=0&id=4697341e&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"4697341e\",\n null\n \n)\n\ncomponent.options.__file = \"labels.vue\"\nexport default component.exports","import mod from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/ts-loader/index.js??ref--12-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./edit_dialog.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/ts-loader/index.js??ref--12-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./edit_dialog.vue?vue&type=script&lang=ts&\"","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('form',{on:{\"focusin\":_vm.focusin,\"focusout\":_vm.focusout,\"submit\":function($event){$event.preventDefault();return _vm.login($event)}}},[_c('fieldset',[_c('legend',{staticClass:\"legend\"},[_vm._v(\"PlanarAlly\")]),_c('div',{staticClass:\"input\"},[_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.username),expression:\"username\"}],attrs:{\"type\":\"text\",\"name\":\"username\",\"placeholder\":\"Username\",\"autocomplete\":\"username\",\"required\":\"\"},domProps:{\"value\":(_vm.username)},on:{\"input\":function($event){if($event.target.composing){ return; }_vm.username=$event.target.value}}}),_vm._m(0)]),_c('div',{staticClass:\"input\"},[_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.password),expression:\"password\"}],attrs:{\"type\":\"password\",\"name\":\"password\",\"placeholder\":\"Password\",\"autocomplete\":\"current-password\",\"required\":\"\"},domProps:{\"value\":(_vm.password)},on:{\"input\":function($event){if($event.target.composing){ return; }_vm.password=$event.target.value}}}),_vm._m(1)]),_c('div',{staticStyle:{\"display\":\"flex\"}},[_c('button',{staticStyle:{\"visibility\":\"hidden\",\"display\":\"none\"},attrs:{\"type\":\"submit\",\"name\":\"login\"}}),_c('button',{staticClass:\"submit\",attrs:{\"type\":\"button\",\"name\":\"register\",\"title\":\"Register\"},on:{\"click\":_vm.register}},[_c('i',{staticClass:\"fas fa-plus\"})]),_vm._m(2)])]),(_vm.error)?_c('div',{staticClass:\"feedback\"},[_c('p',{staticClass:\"error\"},[_c('strong',[_vm._v(\"Error:\")]),_vm._v(\"\\n \"+_vm._s(_vm.error)+\"\\n \")])]):_vm._e()])}\nvar staticRenderFns = [function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('span',[_c('i',{staticClass:\"fas fa-user-circle\"})])},function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('span',[_c('i',{staticClass:\"fas fa-lock\"})])},function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('button',{staticClass:\"submit\",attrs:{\"type\":\"submit\",\"name\":\"login\",\"title\":\"Login\"}},[_c('i',{staticClass:\"fas fa-arrow-right\"})])}]\n\nexport { render, staticRenderFns }","export * from \"-!cache-loader?{\\\"cacheDirectory\\\":\\\"node_modules/.cache/vue-loader\\\",\\\"cacheIdentifier\\\":\\\"74f43d04-vue-loader-template\\\"}!../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./login.vue?vue&type=template&id=bc30fc14&scoped=true&\"","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nimport Vue from \"vue\";\nimport Component from \"vue-class-component\";\n\nimport Prompt from \"@/core/components/modals/prompt.vue\";\nimport EditDialog from \"@/game/ui/selection/edit_dialog.vue\";\n\nimport { getRef } from \"@/core/utils\";\nimport { socket } from \"@/game/api/socket\";\nimport { EventBus } from \"@/game/event-bus\";\nimport { layerManager } from \"@/game/layers/manager\";\nimport { Shape } from \"@/game/shapes/shape\";\n\n@Component({\n components: {\n \"edit-dialog\": EditDialog,\n },\n})\nexport default class SelectionInfo extends Vue {\n shape: Shape | null = null;\n\n mounted() {\n EventBus.$on(\"SelectionInfo.Shape.Set\", (shape: Shape | null) => {\n this.shape = shape;\n });\n }\n\n beforeDestroy() {\n EventBus.$off(\"SelectionInfo.Shape.Set\");\n }\n\n openEditDialog() {\n (this.$refs.editDialog).visible = true;\n }\n changeValue(object: Tracker | Aura, redraw: boolean) {\n if (this.shape === null) return;\n getRef(\"prompt\")\n .prompt(`New ${object.name} value:`, `Updating ${object.name}`)\n .then(\n (value: string) => {\n if (this.shape === null) return;\n const ogValue = object.value;\n if (value[0] === \"+\" || value[0] === \"-\") object.value += parseInt(value, 10);\n else object.value = parseInt(value, 10);\n if (isNaN(object.value)) object.value = ogValue;\n socket.emit(\"Shape.Update\", { shape: this.shape.asDict(), redraw, temporary: false });\n if (redraw) layerManager.invalidate();\n },\n () => {},\n );\n }\n}\n","import { AssetList } from \"@/core/comm/types\";\nimport { socket } from \"@/game/api/socket\";\nimport { BoardInfo, Note, ServerClient, ServerLocation } from \"@/game/comm/types/general\";\nimport { ServerShape } from \"@/game/comm/types/shapes\";\nimport { EventBus } from \"@/game/event-bus\";\nimport { GlobalPoint } from \"@/game/geom\";\nimport { layerManager } from \"@/game/layers/manager\";\nimport { createLayer } from \"@/game/layers/utils\";\nimport { gameManager } from \"@/game/manager\";\nimport { gameStore } from \"@/game/store\";\nimport { router } from \"@/router\";\nimport { zoomDisplay } from \"../utils\";\n\nsocket.on(\"connect\", () => {\n console.log(\"Connected\");\n});\nsocket.on(\"disconnect\", () => {\n console.log(\"Disconnected\");\n});\nsocket.on(\"connect_error\", (error: any) => {\n console.error(\"Could not connect to game session.\");\n router.push(\"/dashboard\");\n});\nsocket.on(\"error\", (error: any) => {\n console.error(\"Game session does not exist.\");\n router.push(\"/dashboard\");\n});\nsocket.on(\"redirect\", (destination: string) => {\n console.log(\"redirecting\");\n router.push(destination);\n});\nsocket.on(\"Room.Info.Set\", (data: { name: string; creator: string; invitationCode: string }) => {\n gameStore.setRoomName(data.name);\n gameStore.setRoomCreator(data.creator);\n gameStore.setInvitationCode(data.invitationCode);\n});\nsocket.on(\"Username.Set\", (username: string) => {\n gameStore.setUsername(username);\n gameStore.setDM(username === window.location.pathname.split(\"/\")[2]);\n});\nsocket.on(\"Client.Options.Set\", (options: ServerClient) => {\n gameStore.setGridColour({ colour: options.grid_colour, sync: false });\n gameStore.setFOWColour({ colour: options.fow_colour, sync: false });\n gameStore.setRulerColour({ colour: options.ruler_colour, sync: false });\n gameStore.setPanX(options.pan_x);\n gameStore.setPanY(options.pan_y);\n gameStore.setZoomDisplay(zoomDisplay(options.zoom_factor));\n // gameStore.setZoomDisplay(0.5);\n if (options.active_layer) layerManager.selectLayer(options.active_layer, false);\n if (layerManager.getGridLayer() !== undefined) layerManager.getGridLayer()!.invalidate();\n});\nsocket.on(\"Location.Set\", (data: Partial) => {\n if (data.name !== undefined) gameStore.setLocationName(data.name);\n if (data.unit_size !== undefined) gameStore.setUnitSize({ unitSize: data.unit_size, sync: false });\n if (data.use_grid !== undefined) gameStore.setUseGrid({ useGrid: data.use_grid, sync: false });\n if (data.full_fow !== undefined) gameStore.setFullFOW({ fullFOW: data.full_fow, sync: false });\n if (data.fow_opacity !== undefined) gameStore.setFOWOpacity({ fowOpacity: data.fow_opacity, sync: false });\n if (data.fow_los !== undefined) gameStore.setLineOfSight({ fowLOS: data.fow_los, sync: false });\n if (data.vision_min_range !== undefined) gameStore.setVisionRangeMin({ value: data.vision_min_range, sync: false });\n if (data.vision_max_range !== undefined) gameStore.setVisionRangeMax({ value: data.vision_max_range, sync: false });\n if (data.vision_mode !== undefined) {\n gameStore.setVisionMode({ mode: data.vision_mode, sync: false });\n gameStore.recalculateVision();\n gameStore.recalculateMovement();\n }\n});\nsocket.on(\"Position.Set\", (data: { x: number; y: number }) => {\n gameManager.setCenterPosition(new GlobalPoint(data.x, data.y));\n});\nsocket.on(\"Notes.Set\", (notes: Note[]) => {\n for (const note of notes) gameStore.newNote({ note, sync: false });\n});\nsocket.on(\"Asset.List.Set\", (assets: AssetList) => {\n gameStore.setAssets(assets);\n});\nsocket.on(\"Board.Set\", (locationInfo: BoardInfo) => {\n gameStore.clear();\n gameStore.setLocations(locationInfo.locations);\n document.getElementById(\"layers\")!.innerHTML = \"\";\n gameStore.resetLayerInfo();\n layerManager.reset();\n for (const layer of locationInfo.layers) createLayer(layer);\n // Force the correct opacity render on other layers.\n layerManager.selectLayer(layerManager.getLayer()!.name, false);\n EventBus.$emit(\"Initiative.Clear\");\n gameStore.recalculateVision();\n gameStore.recalculateMovement();\n gameStore.setBoardInitialized(true);\n});\nsocket.on(\"Gridsize.Set\", (gridSize: number) => {\n gameStore.setGridSize({ gridSize, sync: false });\n});\nsocket.on(\"Shape.Add\", (shape: ServerShape) => {\n gameManager.addShape(shape);\n});\nsocket.on(\"Shape.Remove\", (shape: ServerShape) => {\n if (!layerManager.UUIDMap.has(shape.uuid)) {\n console.log(`Attempted to remove an unknown shape`);\n return;\n }\n if (!layerManager.hasLayer(shape.layer)) {\n console.log(`Attempted to remove shape from an unknown layer ${shape.layer}`);\n return;\n }\n const layer = layerManager.getLayer(shape.layer)!;\n layer.removeShape(layerManager.UUIDMap.get(shape.uuid)!, false);\n layer.invalidate(false);\n});\nsocket.on(\"Shape.Order.Set\", (data: { shape: ServerShape; index: number }) => {\n if (!layerManager.UUIDMap.has(data.shape.uuid)) {\n console.log(`Attempted to move the shape order of an unknown shape`);\n return;\n }\n if (!layerManager.hasLayer(data.shape.layer)) {\n console.log(`Attempted to remove shape from an unknown layer ${data.shape.layer}`);\n return;\n }\n const shape = layerManager.UUIDMap.get(data.shape.uuid)!;\n const layer = layerManager.getLayer(shape.layer)!;\n layer.moveShapeOrder(shape, data.index, false);\n});\nsocket.on(\"Shape.Layer.Change\", (data: { uuid: string; layer: string }) => {\n const shape = layerManager.UUIDMap.get(data.uuid);\n if (shape === undefined) return;\n shape.moveLayer(data.layer, false);\n});\nsocket.on(\"Shape.Update\", (data: { shape: ServerShape; redraw: boolean; move: boolean, temporary: boolean }) => {\n gameManager.updateShape(data);\n});\nsocket.on(\"Temp.Clear\", (shapes: ServerShape[]) => {\n shapes.forEach(shape => {\n if (!layerManager.UUIDMap.has(shape.uuid)) {\n console.log(\"Attempted to remove an unknown temporary shape\");\n return;\n }\n if (!layerManager.hasLayer(shape.layer)) {\n console.log(`Attempted to remove shape from an unknown layer ${shape.layer}`);\n return;\n }\n const realShape = layerManager.UUIDMap.get(shape.uuid)!;\n layerManager.getLayer(shape.layer)!.removeShape(realShape, false);\n });\n});\nsocket.on(\"Labels.Set\", (labels: Label[]) => {\n for (const label of labels) gameStore.addLabel(label);\n});\nsocket.on(\"Label.Visibility.Set\", (data: { user: string; uuid: string; visible: boolean }) => {\n gameStore.setLabelVisibility(data);\n});\nsocket.on(\"Label.Add\", (data: Label) => {\n gameStore.addLabel(data);\n});\nsocket.on(\"Label.Delete\", (data: { user: string; uuid: string }) => {\n gameStore.deleteLabel(data);\n});\nsocket.on(\"Labels.Filter.Add\", (uuid: string) => {\n gameStore.labelFilters.push(uuid);\n layerManager.invalidate();\n})\nsocket.on(\"Labels.Filter.Remove\", (uuid: string) => {\n const idx = gameStore.labelFilters.indexOf(uuid);\n if (idx >= 0) {\n gameStore.labelFilters.splice(idx, 1);\n layerManager.invalidate();\n }\n})\nsocket.on(\"Labels.Filters.Set\", (filters: string[]) => {\n gameStore.setLabelFilters(filters);\n})\n"],"sourceRoot":""} \ No newline at end of file diff --git a/server/static/js/app.b2080500.js b/server/static/js/app.b2080500.js new file mode 100644 index 000000000..abb3baafb --- /dev/null +++ b/server/static/js/app.b2080500.js @@ -0,0 +1,2 @@ +(function(e){function t(t){for(var s,r,a=t[0],l=t[1],c=t[2],d=0,h=[];de.fillText(t.text,t.x,t.y)),e.restore()}contains(e){return!1}center(e){}visibleInCanvas(e){return this.getBoundingBox().visibleInCanvas(e)}snapToGrid(){}resizeToGrid(){}resize(e,t){}getMaxHeight(e){const t=this.getLines(e),i=30;return i*t.length}getMaxWidth(e){const t=this.getLines(e),i=t.map(t=>e.measureText(t.text).width);return Math.max(...i)}getLines(e){const t=this.text.split("\n"),i=[],s=e.canvas.width,n=30,o=0;let r=0;for(const a of t){let t="";const l=a.split(" ");for(const a of l){const l=t+a+" ",c=e.measureText(l),u=c.width;u>s?(e.fillText(t,o,r),i.push({text:t,x:o,y:r}),t=a+" ",r+=n):t=l}i.push({text:t,x:o,y:r}),r+=n}return i}}t.Text=r},"01be":function(e,t,i){"use strict";var s=i("919a"),n=i.n(s);n.a},"033f":function(e,t,i){"use strict";i.r(t);var s=i("a1f4"),n=i("a68b");for(var o in n)"default"!==o&&function(e){i.d(t,e,function(){return n[e]})}(o);i("7997");var r=i("2877"),a=Object(r["a"])(n["default"],s["a"],s["b"],!1,null,"759e5a8a",null);a.options.__file="shapecontext.vue",t["default"]=a.exports},"034f":function(e,t,i){"use strict";var s=i("64a9"),n=i.n(s);n.a},"052c":function(e,t,i){"use strict";var s=i("54ac"),n=i.n(s);n.a},"0584":function(e,t,i){"use strict";var s=i("de21"),n=i.n(s);n.a},"0634":function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0});const s=i("9ab4"),n=s.__importDefault(i("66cb")),o=s.__importDefault(i("a026")),r=s.__importDefault(i("65d9")),a=i("c345a"),l=i("60a3");let c=class extends o.default{constructor(){super(...arguments),this.display=!1,this.left=0,this.top=0,this.transparent=!1}mounted(){this.transparent=0===this.$refs.chromePicker.val.rgba.a,this.setPosition()}open(){this.display||this.disabled||(this.setPosition(),this.display=!0,this.$nextTick(()=>this.$children[0].$el.focus()))}updateColor(e){this.transparent=0===e.rgba.a;const t=n.default(e.rgba).toRgbString();this.$emit("update:color",t),this.$emit("input",t)}closePicker(){this.display=!1,this.$emit("change",this.color)}setPosition(){const e=this.$el.getBoundingClientRect();e.right+224>window.innerWidth?this.left=e.left-224:this.left=e.right,e.bottom+242>window.innerHeight?this.top=e.top-242:this.top=e.bottom}};s.__decorate([l.Prop(String)],c.prototype,"color",void 0),s.__decorate([l.Prop(Boolean)],c.prototype,"disabled",void 0),c=s.__decorate([r.default({components:{"chrome-picker":a.Chrome}})],c),t.default=c},"07f5":function(e,t,i){"use strict";i.r(t);var s=i("412c"),n=i("d588");for(var o in n)"default"!==o&&function(e){i.d(t,e,function(){return n[e]})}(o);i("561b"),i("b62e");var r=i("2877"),a=Object(r["a"])(n["default"],s["a"],s["b"],!1,null,"05b88da7",null);a.options.__file="game.vue",t["default"]=a.exports},"0a75":function(e,t,i){},"0bc6":function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0});const s=i("9ab4"),n=s.__importDefault(i("8055"));function o(e){t.socket.io.opts.query=`user=${e.params.creator}&room=${e.params.room}`,t.socket.connect()}t.socket=n.default(location.protocol+"//"+location.host+"/planarally",{autoConnect:!1}),t.createConnection=o},"0cf7":function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0});const s=i("9ab4"),n=s.__importDefault(i("a026")),o=s.__importDefault(i("65d9")),r=s.__importDefault(i("4aec")),a=s.__importDefault(i("a535")),l=s.__importDefault(i("cec2")),c=i("5338"),u=i("2d5b"),d=i("4a5b");let h=class extends n.default{constructor(){super(...arguments),this.path=[],this.draggingSelection=!1}get folders(){return u.assetStore.folders}get files(){return u.assetStore.files}get selected(){return u.assetStore.selected}get idMap(){return u.assetStore.idMap}get currentFolder(){return this.path.length?this.path[this.path.length-1]:u.assetStore.root}get parentFolder(){let e=this.path[this.path.length-2];return void 0===e&&(e=u.assetStore.root),e}get firstSelectedFile(){for(const e of u.assetStore.selected)if(u.assetStore.idMap.get(e).file_hash)return u.assetStore.idMap.get(e);return null}changeDirectory(e){e<0?this.path.pop():this.path.push(e),u.assetStore.clearSelected(),c.socket.emit("Folder.Get",this.currentFolder)}createDirectory(){const e=window.prompt("New folder name");null!==e&&c.socket.emit("Folder.Create",{name:e,parent:this.currentFolder})}moveInode(e,t){u.assetStore.files.includes(e)?u.assetStore.files.splice(u.assetStore.files.indexOf(e),1):u.assetStore.folders.splice(u.assetStore.folders.indexOf(e),1),u.assetStore.idMap.delete(e),c.socket.emit("Inode.Move",{inode:e,target:t})}select(e,t){if(e.shiftKey&&u.assetStore.selected.length>0){const e=[...u.assetStore.files,...u.assetStore.folders],i=e.indexOf(u.assetStore.selected[u.assetStore.selected.length-1]),s=e.indexOf(t);for(let t=i;t!==s;i0&&this.upload(e.dataTransfer.files,t);this.draggingSelection=!1}prepareUpload(){document.getElementById("files").click()}upload(e,t){const i=document.getElementById("files").files;if(void 0===e){if(!i)return;e=i}void 0===t&&(t=this.currentFolder);const s=1e5;for(const n of e){const e=d.uuidv4(),i=Math.ceil(n.size/s);for(let o=0;o{c.socket.emit("Asset.Upload",{name:n.name,directory:t,data:r.result,slice:o,totalSlices:i,uuid:e})})}}}};h=s.__decorate([o.default({components:{Prompt:l.default,ConfirmDialog:a.default,AssetContextMenu:r.default},beforeRouteEnter(e,t,i){c.socket.connect(),i()},beforeRouteLeave(e,t,i){c.socket.disconnect(),i()}})],h),t.default=h},"0ddd":function(e,t,i){"use strict";i.r(t);var s=i("8f54"),n=i("4bc3");for(var o in n)"default"!==o&&function(e){i.d(t,e,function(){return n[e]})}(o);i("9dd4");var r=i("2877"),a=Object(r["a"])(n["default"],s["a"],s["b"],!1,null,"6d718094",null);a.options.__file="asset_node.vue",t["default"]=a.exports},1:function(e,t){},"104d":function(e,t,i){"use strict";var s=i("5722"),n=i.n(s);n.a},1077:function(e,t,i){"use strict";i.r(t);var s=i("f994"),n=i("1eee");for(var o in n)"default"!==o&&function(e){i.d(t,e,function(){return n[e]})}(o);i("3cd3");var r=i("2877"),a=Object(r["a"])(n["default"],s["a"],s["b"],!1,null,"bc30fc14",null);a.options.__file="login.vue",t["default"]=a.exports},1216:function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0});const s=i("6f92"),n=i("92b1"),o=i("98ef"),r=i("4aee");function a(e,t){const i=s.layerManager.getLayer("draw");if(void 0===i)return;const o=i.ctx;o.lineJoin="round",o.lineJoin="round",o.beginPath(),o.strokeStyle=void 0===t?`rgb(${255*Math.random()}, ${255*Math.random()}, ${255*Math.random()})`:t,o.moveTo(n.g2lx(e[0][0]),n.g2ly(e[0][1]));for(const s of e)o.lineTo(n.g2lx(s[0]),n.g2ly(s[1]));o.closePath(),o.stroke()}function l(e,t){const i=s.layerManager.getLayer("draw");if(void 0===i)return;const n=i.ctx;n.lineJoin="round",n.lineJoin="round",n.beginPath(),n.strokeStyle=void 0===t?`rgb(${255*Math.random()}, ${255*Math.random()}, ${255*Math.random()})`:t,n.moveTo(e[0][0],e[0][1]);for(const s of e)n.lineTo(s[0],s[1]);n.closePath(),n.stroke()}function c(e,t){return t?e:n.g2lx(e)}function u(e,t){return t?e:n.g2ly(e)}t.drawPolygon=a,t.drawPolygonL=l;let d=0,h=0;function f(e,t,i,s,n){e.beginPath(),e.strokeStyle=s?"rgba(255, 0, 0, 0.30)":"rgba(0, 0, 0, 0.30)",e.moveTo(c(t[0],n),u(t[1],n)),e.lineTo(c(i[0],n),u(i[1],n)),e.closePath(),e.stroke()}function p(e,t=!0,i=!0,n=0){d=0,h=0;let a=0;const l=s.layerManager.getLayer("draw");if(void 0===l)return;const p=l.ctx;i&&p.clearRect(0,0,2e3,1e3),p.lineJoin="round",p.lineJoin="round";const g=new o.EdgeIterator(e);while(g.valid)g.next(),g.collect();g.collect();do{const e=g.edge.first.vertices[r.ccw(g.edge.second)].point,t=g.edge.first.vertices[r.cw(g.edge.second)].point;if(n>0){if(e[0]===-1/0||t[0]===-1/0){g.next();continue}h++,g.edge.first.constraints[g.edge.second]?(d++,2===n&&console.log(`Edge: (*) ${e} > ${t}`)):2===n&&console.log(`Edge: ${e} > ${t}`)}do{g.next(),g.collect()}while(g.valid)}while(null!==g.pos);for(const s of e.triangles){if(s.isInfinite())continue;a++;const e=[];p.fillStyle="red",void 0!==s.vertices[0]&&(e.push(s.vertices[0].point),p.beginPath(),p.arc(c(s.vertices[0].point[0],t),u(s.vertices[0].point[1],t),5,0,2*Math.PI),p.closePath(),p.fill()),void 0!==s.vertices[1]&&(e.push(s.vertices[1].point),p.arc(c(s.vertices[1].point[0],t),u(s.vertices[1].point[1],t),5,0,2*Math.PI),p.closePath(),p.fill()),void 0!==s.vertices[2]&&(e.push(s.vertices[2].point),p.arc(c(s.vertices[2].point[0],t),u(s.vertices[2].point[1],t),5,0,2*Math.PI),p.closePath(),p.fill()),2===n&&console.log("[T] ",...e,s.constraints),p.moveTo(c(s.vertices[0].point[0],t),u(s.vertices[0].point[1],t)),void 0!==s.vertices[0]&&void 0!==s.vertices[1]&&f(p,s.vertices[0].point,s.vertices[1].point,s.constraints[2],t),void 0!==s.vertices[1]&&void 0!==s.vertices[2]&&f(p,s.vertices[1].point,s.vertices[2].point,s.constraints[0],t),void 0!==s.vertices[2]&&void 0!==s.vertices[0]&&f(p,s.vertices[2].point,s.vertices[0].point,s.constraints[1],t)}n>0&&(console.log(`Edges: ${d}/${h}`),console.log(`Faces: ${a}`))}window.DP=a,window.DPL=l,window.DPT=p},1289:function(e,t,i){"use strict";i.r(t);var s=i("df64"),n=i("d677");for(var o in n)"default"!==o&&function(e){i.d(t,e,function(){return n[e]})}(o);i("8790");var r=i("2877"),a=Object(r["a"])(n["default"],s["a"],s["b"],!1,null,"0bf2b7ba",null);a.options.__file="accordion.vue",t["default"]=a.exports},"12d3":function(e,t,i){"use strict";var s=i("a260"),n=i.n(s);n.a},1327:function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0});const s=i("9ab4"),n=s.__importStar(i("66cb")),o=i("4a5b"),r=i("4709"),a=i("f10f"),l=i("92b1");class c extends r.Circle{constructor(e,t,i,s,n,o,r){super(e,t,n,o,r),this.type="circulartoken",this.text=i,this.font=s}asDict(){return Object.assign(this.getBaseDict(),{radius:this.r,text:this.text,font:this.font})}fromDict(e){super.fromDict(e),this.r=e.radius,this.text=e.text,this.font=e.font}draw(e){super.draw(e),e.font=this.font,e.save();const t=l.g2l(this.center());e.textAlign="center",e.textBaseline="middle";const i=o.calcFontScale(e,this.text,l.g2lz(this.r),l.g2lz(this.r)),s=0;e.transform(i,s,-s,i,t.x,t.y),e.fillStyle=n.mostReadable(this.fillColour,["#000","#fff"]).toHexString(),e.fillText(this.text,0,0),e.restore()}getInitiativeRepr(){return{uuid:this.uuid,visible:!a.gameStore.IS_DM,group:!1,source:""===this.name||"Unknown shape"===this.name?this.text:this.name,has_img:!1,effects:[],index:1/0}}}t.CircularToken=c},1625:function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0});const s=i("8f0a"),n=i("6f92"),o=i("b2ed"),r=i("0180"),a=i("f10f"),l=i("92b1");class c{constructor(){this.shown=!1;const e=new s.GlobalPoint(0,0);this.annotationText=new r.Text(e,"","bold 20px serif",0,"rgba(230, 230, 230, 1)"),this.annotationRect=new o.Rect(e,0,0,"rgba(0, 0, 0, 0.6)")}setActiveText(e){if(void 0===this.layer){if(!n.layerManager.hasLayer("draw"))return void console.warn("There is no draw layer to draw annotations on!");this.layer=n.layerManager.getLayer("draw"),this.layer.addShape(this.annotationRect,!1),this.layer.addShape(this.annotationText,!1)}this.shown=""!==e,this.annotationText.refPoint=l.l2g(new s.LocalPoint(this.layer.canvas.width/2,50)),this.annotationText.text=e;const t=this.shown?this.annotationText.getMaxWidth(this.layer.ctx)+10:0,i=this.shown?this.annotationText.getMaxHeight(this.layer.ctx)+10:0;this.annotationRect.refPoint=l.l2g(new s.LocalPoint(this.layer.canvas.width/2-t/2,30)),this.annotationRect.w=t/a.gameStore.zoomFactor,this.annotationRect.h=i/a.gameStore.zoomFactor,this.layer.invalidate(!0)}}t.AnnotationManager=c},"19f9":function(e,t,i){"use strict";i.r(t);var s=i("844e"),n=i("8cd4");for(var o in n)"default"!==o&&function(e){i.d(t,e,function(){return n[e]})}(o);i("052c");var r=i("2877"),a=Object(r["a"])(n["default"],s["a"],s["b"],!1,null,"13f3fb33",null);a.options.__file="menu.vue",t["default"]=a.exports},"1c76":function(e,t,i){"use strict";i.r(t);var s=i("2c88"),n=i("300e");for(var o in n)"default"!==o&&function(e){i.d(t,e,function(){return n[e]})}(o);i("7f1e");var r=i("2877"),a=Object(r["a"])(n["default"],s["a"],s["b"],!1,null,null,null);a.options.__file="contextmenu.vue",t["default"]=a.exports},"1dd6":function(e,t,i){"use strict";i.r(t);var s=i("5ae5"),n=i.n(s);for(var o in s)"default"!==o&&function(e){i.d(t,e,function(){return s[e]})}(o);t["default"]=n.a},"1eee":function(e,t,i){"use strict";i.r(t);var s=i("d30b"),n=i.n(s);for(var o in s)"default"!==o&&function(e){i.d(t,e,function(){return s[e]})}(o);t["default"]=n.a},"1fd5":function(e,t,i){"use strict";var s=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("Modal",{attrs:{visible:e.visible,mask:!1},on:{close:function(t){e.visible=!1}},scopedSlots:e._u([{key:"header",fn:function(t){return i("div",{staticClass:"modal-header",attrs:{draggable:"true"},on:{dragstart:t.dragStart,dragend:t.dragEnd}},[i("div",[e._v("Label manager")]),i("div",{staticClass:"header-close",on:{click:function(t){e.visible=!1}}},[i("i",{staticClass:"far fa-window-close"})])])}}])},[i("div",{staticClass:"modal-body"},[i("div",{staticClass:"grid"},[i("div",{staticClass:"header"},[i("abbr",{attrs:{title:"Category"}},[e._v("Cat.")])]),i("div",{staticClass:"header name"},[e._v("Name")]),i("div",{staticClass:"header"},[i("abbr",{attrs:{title:"Visible"}},[e._v("Vis.")])]),i("div",{staticClass:"header"},[i("abbr",{attrs:{title:"Delete"}},[e._v("Del.")])]),i("div",{staticClass:"separator spanrow",staticStyle:{margin:"0 0 7px"}}),i("input",{directives:[{name:"model",rawName:"v-model",value:e.search,expression:"search"}],ref:"search",staticClass:"spanrow",attrs:{type:"text",placeholder:"search"},domProps:{value:e.search},on:{input:function(t){t.target.composing||(e.search=t.target.value)}}})]),i("div",{staticClass:"grid scroll"},[e._l(e.categories,function(t){return[e._l(e.labels[t],function(t){return[i("div",{key:"row-"+t.uuid,staticClass:"row",on:{click:function(i){e.selectLabel(t.uuid)}}},[t.category?[i("div",{key:"cat-"+t.uuid},[e._v(e._s(t.category))]),i("div",{key:"name-"+t.uuid,staticClass:"name"},[e._v(e._s(t.name))])]:e._e(),t.category?e._e():[i("div",{key:"cat-"+t.uuid}),i("div",{key:"name-"+t.uuid,staticClass:"name"},[e._v(e._s(t.name))])],i("div",{key:"visible-"+t.uuid,class:{"lower-opacity":!t.visible},style:{textAlign:"center"},on:{click:function(i){i.stopPropagation(),e.toggleVisibility(t)}}},[i("i",{staticClass:"fas fa-eye"})]),i("div",{key:"delete-"+t.uuid,on:{click:function(i){i.stopPropagation(),e.deleteLabel(t.uuid)}}},[i("i",{staticClass:"fas fa-trash-alt"})])],2)]})]}),0===e.labels.length?[i("div",{attrs:{id:"no-labels"}},[e._v("No labels exist yet")])]:e._e()],2),i("div",{staticClass:"grid"},[i("div",{staticClass:"separator spanrow"}),i("input",{directives:[{name:"model",rawName:"v-model.trim",value:e.newCategory,expression:"newCategory",modifiers:{trim:!0}}],attrs:{type:"text"},domProps:{value:e.newCategory},on:{input:function(t){t.target.composing||(e.newCategory=t.target.value.trim())},blur:function(t){e.$forceUpdate()}}}),i("input",{directives:[{name:"model",rawName:"v-model.trim",value:e.newName,expression:"newName",modifiers:{trim:!0}}],attrs:{type:"text"},domProps:{value:e.newName},on:{input:function(t){t.target.composing||(e.newName=t.target.value.trim())},blur:function(t){e.$forceUpdate()}}}),i("button",{attrs:{id:"addLabelButton"},on:{click:function(t){return t.stopPropagation(),e.addLabel(t)}}},[e._v("Add")])])])])},n=[];i.d(t,"a",function(){return s}),i.d(t,"b",function(){return n})},"206a":function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0});const s=i("8f0a"),n=i("6f92"),o=i("6c30"),r=i("4709"),a=i("1327"),l=i("5e7c"),c=i("574e"),u=i("b2ed"),d=i("0180"),h=i("e4ea");function f(e){let t;const i=new s.GlobalPoint(e.x,e.y);if("rect"===e.type_){const s=e;t=new u.Rect(i,s.width,s.height,s.fill_colour,s.stroke_colour,s.uuid)}else if("circle"===e.type_){const s=e;t=new r.Circle(i,s.radius,s.fill_colour,s.stroke_colour,s.uuid)}else if("circulartoken"===e.type_){const s=e;t=new a.CircularToken(i,s.radius,s.text,s.font,s.fill_colour,s.stroke_colour,s.uuid)}else if("line"===e.type_){const n=e;t=new l.Line(i,new s.GlobalPoint(n.x2,n.y2),n.line_width,n.stroke_colour,n.uuid)}else if("multiline"===e.type_){const n=e;t=new c.MultiLine(i,n.points.map(e=>new s.GlobalPoint(e.x,e.y)),n.line_width,n.stroke_colour,n.uuid)}else if("polygon"===e.type_){const n=e;t=new h.Polygon(i,n.vertices.map(e=>new s.GlobalPoint(e.x,e.y)),n.fill_colour,n.stroke_colour,n.uuid)}else if("text"===e.type_){const s=e;t=new d.Text(i,s.text,s.font,s.angle,s.fill_colour,s.stroke_colour,s.uuid)}else{if("assetrect"!==e.type_)return;{const s=e,r=new Image(s.width,s.height);s.src.startsWith("http")?r.src=new URL(s.src).pathname:r.src=s.src,t=new o.Asset(r,i,s.width,s.height,s.uuid),r.onload=(()=>{n.layerManager.getLayer(e.layer).invalidate(!1)})}}return t.fromDict(e),t}t.createShapeFromDict=f},"223d":function(e,t,i){"use strict";var s=i("e756"),n=i.n(s);n.a},"22bd":function(e,t,i){"use strict";var s=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("SelectContext",{ref:"selectcontext"})},n=[];i.d(t,"a",function(){return s}),i.d(t,"b",function(){return n})},2469:function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0});const s=i("9ab4"),n=s.__importDefault(i("66cb")),o=i("4a5b"),r=i("0bc6"),a=i("f312"),l=i("8f0a"),c=i("6f92"),u=i("f10f"),d=i("92b1");class h{constructor(e,t,i,s){this.fillColour="#000",this.strokeColour="rgba(0,0,0,0)",this.name="Unknown shape",this.nameVisible=!0,this.trackers=[],this.auras=[],this.labels=[],this._owners=[],this.visionObstruction=!1,this.movementObstruction=!1,this.isToken=!1,this.showHighlight=!1,this.annotation="",this.globalCompositeOperation="source-over",this.options=new Map,this._refPoint=e,this.uuid=s||o.uuidv4(),void 0!==t&&(this.fillColour=t),void 0!==i&&(this.strokeColour=i)}get refPoint(){return this._refPoint}set refPoint(e){this._refPoint=e}visibleInCanvas(e){return!1}getPointIndex(e,t=0){for(const[i,s]of this.points.entries())if(Math.abs(e.x-s[0])<=t&&Math.abs(e.y-s[1])<=t)return i;return-1}getPointOrientation(e){const t=l.GlobalPoint.fromArray(this.points[(this.points.length+e-1)%this.points.length]),i=l.GlobalPoint.fromArray(this.points[e]),s=l.GlobalPoint.fromArray(this.points[(e+1)%this.points.length]),n=s.subtract(t),o=t.add(n.multiply(.5));return i.subtract(o).normalize()}invalidate(e){const t=c.layerManager.getLayer(this.layer);t&&t.invalidate(e)}checkVisionSources(e=!0){const t=this,i=u.gameStore.visionBlockers.indexOf(this.uuid);let s=!1;this.visionObstruction&&-1===i?(u.gameStore.visionBlockers.push(this.uuid),s=!0):!this.visionObstruction&&i>=0&&(u.gameStore.visionBlockers.splice(i,1),s=!0),s&&e&&u.gameStore.recalculateVision(),this.auras.forEach(e=>{const i=u.gameStore.visionSources,s=i.findIndex(t=>t.aura===e.uuid);e.visionSource&&-1===s?i.push({shape:t.uuid,aura:e.uuid}):!e.visionSource&&s>=0&&i.splice(s,1)});for(let n=u.gameStore.visionSources.length-1;n>=0;n--){const e=u.gameStore.visionSources[n];e.shape===t.uuid&&(t.auras.some(t=>t.uuid===e.aura&&t.visionSource)||u.gameStore.visionSources.splice(n,1))}}setMovementBlock(e,t=!0){this.movementObstruction=e||!1;const i=u.gameStore.movementblockers.indexOf(this.uuid);let s=!1;this.movementObstruction&&-1===i?(u.gameStore.movementblockers.push(this.uuid),s=!0):!this.movementObstruction&&i>=0&&(u.gameStore.movementblockers.splice(i,1),s=!0),s&&t&&u.gameStore.recalculateMovement()}setIsToken(e){if(this.isToken=e,this.ownedBy()){const e=u.gameStore.ownedtokens.indexOf(this.uuid);this.isToken&&-1===e?u.gameStore.ownedtokens.push(this.uuid):!this.isToken&&e>=0&&u.gameStore.ownedtokens.splice(e,1)}}getBaseDict(){return{type_:this.type,uuid:this.uuid,x:this.refPoint.x,y:this.refPoint.y,layer:this.layer,draw_operator:this.globalCompositeOperation,movement_obstruction:this.movementObstruction,vision_obstruction:this.visionObstruction,auras:a.aurasToServer(this.auras),trackers:this.trackers,labels:this.labels,owners:this._owners,fill_colour:this.fillColour,stroke_colour:this.strokeColour,name:this.name,name_visible:this.nameVisible,annotation:this.annotation,is_token:this.isToken,options:JSON.stringify([...this.options])}}fromDict(e){this.layer=e.layer,this.globalCompositeOperation=e.draw_operator,this.movementObstruction=e.movement_obstruction,this.visionObstruction=e.vision_obstruction,this.auras=a.aurasFromServer(e.auras),this.trackers=e.trackers,this.labels=e.labels,this._owners=e.owners,this.isToken=e.is_token,this.nameVisible=e.name_visible,e.annotation&&(this.annotation=e.annotation),e.name&&(this.name=e.name),e.options&&(this.options=new Map(JSON.parse(e.options)))}draw(e){if(void 0!==this.globalCompositeOperation?e.globalCompositeOperation=this.globalCompositeOperation:e.globalCompositeOperation="source-over",this.showHighlight){const t=this.getBoundingBox();e.strokeStyle="red",e.strokeRect(d.g2lx(t.topLeft.x)-5,d.g2ly(t.topLeft.y)-5,d.g2lz(t.w)+10,d.g2lz(t.h)+10)}}drawAuras(e){for(const i of this.auras){if(0===i.value&&0===i.dim)return;e.beginPath();const s=d.g2l(this.center()),o=d.g2lr(i.value+i.dim);if(0===i.dim)e.fillStyle=i.colour;else{const t=e.createRadialGradient(s.x,s.y,d.g2lr(i.value),s.x,s.y,d.g2lr(i.value+i.dim)),o=n.default(i.colour);e.fillStyle=t,t.addColorStop(0,i.colour),t.addColorStop(1,o.setAlpha(0).toRgbString())}if(i.visionSource&&void 0!==i.lastPath)try{e.fill(i.lastPath)}catch(t){e.arc(s.x,s.y,o,0,2*Math.PI),e.fill(),console.warn(t)}else e.arc(s.x,s.y,o,0,2*Math.PI),e.fill()}}getInitiativeRepr(){return{uuid:this.uuid,visible:!u.gameStore.IS_DM,group:!1,source:this.name,has_img:!1,effects:[],index:1/0}}moveLayer(e,t){const i=c.layerManager.getLayer(this.layer),s=c.layerManager.getLayer(e);void 0!==i&&void 0!==s&&(this.layer=e,i.shapes.splice(i.shapes.indexOf(this),1),s.shapes.push(this),i.invalidate(!0),s.invalidate(!1),t&&r.socket.emit("Shape.Layer.Change",{uuid:this.uuid,layer:e}))}get owners(){return Object.freeze(this._owners.slice())}ownedBy(e){return void 0===e&&(e=u.gameStore.username),u.gameStore.IS_DM||this._owners.includes(e)||u.gameStore.FAKE_PLAYER&&u.gameStore.activeTokens.includes(this.uuid)}addOwner(e){this._owners.includes(e)||this._owners.push(e)}updateOwner(e,t){const i=this._owners.findIndex(t=>t===e);i>=0?this._owners.splice(i,1,t):this.addOwner(t)}removeOwner(e){const t=this._owners.findIndex(t=>t===e);this._owners.splice(t,1)}}t.Shape=h},"255e":function(e,t,i){"use strict";i.r(t);var s=i("851c"),n=i.n(s);for(var o in s)"default"!==o&&function(e){i.d(t,e,function(){return s[e]})}(o);t["default"]=n.a},2686:function(e,t,i){"use strict";var s=function(){var e=this,t=e.$createElement,i=e._self._c||t;return null!==e.note?i("modal",{attrs:{visible:e.visible,mask:!1},on:{close:function(t){e.visible=!1}},scopedSlots:e._u([{key:"header",fn:function(t){return i("div",{staticClass:"modal-header",attrs:{draggable:"true"},on:{dragstart:t.dragStart,dragend:t.dragEnd}},[i("span",{on:{click:function(t){e.$refs.title.select()}}},[i("i",{staticClass:"fas fa-pencil-alt",staticStyle:{"font-size":"15px"}})]),i("input",{directives:[{name:"model",rawName:"v-model",value:e.note.title,expression:"note.title"}],ref:"title",domProps:{value:e.note.title},on:{change:e.updateNote,input:function(t){t.target.composing||e.$set(e.note,"title",t.target.value)}}}),i("div",{staticClass:"header-close",on:{click:function(t){e.visible=!1}}},[i("i",{staticClass:"far fa-window-close"})])])}}])},[i("div",{staticClass:"modal-body"},[i("textarea",{directives:[{name:"model",rawName:"v-model",value:e.note.text,expression:"note.text"}],ref:"textarea",style:{height:e.calcHeight()},domProps:{value:e.note.text},on:{change:e.updateNote,input:function(t){t.target.composing||e.$set(e.note,"text",t.target.value)}}})]),i("div",{staticClass:"modal-footer"},[i("button",{on:{click:e.removeNote}},[i("i",{staticClass:"far fa-trash-alt"}),e._v(" Remove\n ")])])]):e._e()},n=[];i.d(t,"a",function(){return s}),i.d(t,"b",function(){return n})},"26a5":function(e,t,i){"use strict";var s=i("f2d0"),n=i.n(s);n.a},2756:function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0});const s=i("9ab4"),n=s.__importDefault(i("65d9")),o=s.__importDefault(i("496c")),r=s.__importDefault(i("ea6a")),a=i("4a5b"),l=i("0bc6"),c=i("8f0a"),u=i("6f92"),d=i("b2ed"),h=i("f10f"),f=i("2838"),p=i("92b1"),g=i("5a5c");var v;(function(e){e[e["Noop"]=0]="Noop",e[e["Resize"]=1]="Resize",e[e["Drag"]=2]="Drag",e[e["GroupSelect"]=3]="GroupSelect"})(v=t.SelectOperations||(t.SelectOperations={}));const m=new c.GlobalPoint(-1e3,-1e3);let y=class extends r.default{constructor(){super(...arguments),this.name="Select",this.showContextMenu=!1,this.active=!1,this.mode=v.Noop,this.resizePoint=0,this.deltaChanged=!1,this.dragRay=new c.Ray(new c.LocalPoint(0,0),new c.Vector(0,0)),this.selectionStartPoint=m,this.selectionHelper=new d.Rect(m,0,0)}created(){this.selectionHelper.globalCompositeOperation="source-over"}onMouseDown(e){const t=u.layerManager.getLayer();if(void 0===t)return void console.log("No active layer!");this.selectionHelper.owners.includes(h.gameStore.username)||this.selectionHelper.addOwner(h.gameStore.username);const i=g.getMouse(e),s=p.l2g(i);let n,o=!1;n=t.selection.length?t.shapes.concat(t.selection):t.shapes;for(let r=n.length-1;r>=0;r--){const e=n[r];if(this.resizePoint=e.getPointIndex(s,p.l2gz(3)),this.resizePoint>=0){t.selection=[e],a.getRef("selectionInfo").shape=e,this.mode=v.Resize,t.invalidate(!0),o=!0;break}if(e.contains(s)){const s=e;-1===t.selection.indexOf(s)&&(t.selection=[s],a.getRef("selectionInfo").shape=s),this.mode=v.Drag;const n=p.g2l(s.refPoint);this.dragRay=new c.Ray(n,i.subtract(n)),t.invalidate(!0),o=!0;break}}if(!o){this.mode=v.GroupSelect;for(const e of t.selection)a.getRef("selectionInfo").shape=e;this.selectionStartPoint=s,this.selectionHelper.refPoint=this.selectionStartPoint,this.selectionHelper.w=0,this.selectionHelper.h=0,t.selection=[this.selectionHelper],t.invalidate(!0)}this.active=!0}onMouseMove(e){const t=u.layerManager.getLayer();if(void 0===t)return void console.log("No active layer!");const i=g.getMouse(e),s=p.l2g(i);if(this.deltaChanged=!1,this.mode===v.GroupSelect){const e=s;this.selectionHelper.w=Math.abs(e.x-this.selectionStartPoint.x),this.selectionHelper.h=Math.abs(e.y-this.selectionStartPoint.y),this.selectionHelper.refPoint=new c.GlobalPoint(Math.min(this.selectionStartPoint.x,e.x),Math.min(this.selectionStartPoint.y,e.y)),t.invalidate(!0)}else if(t.selection.length){const n=p.g2l(t.selection[t.selection.length-1].refPoint),o=n.add(this.dragRay.direction);let r=i.subtract(o).multiply(1/h.gameStore.zoomFactor);const a=r;if(this.mode===v.Drag){if("tokens"===t.name&&(!e.shiftKey||!h.gameStore.IS_DM))for(const e of t.selection)e.ownedBy()&&e.uuid!==this.selectionHelper.uuid&&(r=f.calculateDelta(r,e),r!==a&&(this.deltaChanged=!0));for(const e of t.selection)e.ownedBy()&&(e.refPoint=e.refPoint.add(r),e!==this.selectionHelper&&(e.visionObstruction&&h.gameStore.recalculateVision(!0),l.socket.emit("Shape.Update",{shape:e.asDict(),redraw:!0,temporary:!0})));t.invalidate(!1)}else if(this.mode===v.Resize)for(const e of t.selection)e.ownedBy()&&(e.resize(this.resizePoint,i),e!==this.selectionHelper&&(e.visionObstruction&&h.gameStore.recalculateVision(!0),l.socket.emit("Shape.Update",{shape:e.asDict(),redraw:!0,temporary:!0})),t.invalidate(!1),this.updateCursor(t,s));else this.updateCursor(t,s)}else document.body.style.cursor="default"}onMouseUp(e){if(!this.active)return;if(void 0===u.layerManager.getLayer())return void console.log("No active layer!");const t=u.layerManager.getLayer();this.mode===v.GroupSelect?(t.clearSelection(),t.shapes.forEach(e=>{if(!e.ownedBy())return;if(e===this.selectionHelper)return;const i=e.getBoundingBox();e.ownedBy()&&this.selectionHelper.refPoint.x<=i.topRight.x&&this.selectionHelper.refPoint.x+this.selectionHelper.w>=i.topLeft.x&&this.selectionHelper.refPoint.y<=i.botLeft.y&&this.selectionHelper.refPoint.y+this.selectionHelper.h>=i.topLeft.y&&t.selection.push(e)}),t.selection.length>0&&t.selection.push(this.selectionHelper),t.invalidate(!0)):t.selection.length&&t.selection.forEach(i=>{if(i.ownedBy()){if(this.mode===v.Drag){if(this.dragRay.origin.x===p.g2lx(i.refPoint.x)&&this.dragRay.origin.y===p.g2ly(i.refPoint.y))return;!h.gameStore.useGrid||e.altKey||this.deltaChanged||i.snapToGrid(),i!==this.selectionHelper&&(i.visionObstruction&&h.gameStore.recalculateVision(),i.movementObstruction&&h.gameStore.recalculateMovement(),l.socket.emit("Shape.Update",{shape:i.asDict(),redraw:!0,temporary:!1})),t.invalidate(!1)}this.mode===v.Resize&&(h.gameStore.useGrid&&!e.altKey&&i.resizeToGrid(),i!==this.selectionHelper&&(i.visionObstruction&&h.gameStore.recalculateVision(),i.movementObstruction&&h.gameStore.recalculateMovement(),l.socket.emit("Shape.Update",{shape:i.asDict(),redraw:!0,temporary:!1})),t.invalidate(!1))}}),this.mode=v.Noop,this.active=!1}onContextMenu(e){if(void 0===u.layerManager.getLayer())return void console.log("No active layer!");const t=u.layerManager.getLayer(),i=g.getMouse(e),s=p.l2g(i);for(const n of t.selection)if(n.contains(s)&&n!==this.selectionHelper)return t.selection=[n],a.getRef("selectionInfo").shape=n,t.invalidate(!0),void this.$parent.$refs.shapecontext.open(e,n);this.$refs.selectcontext.open(e)}updateCursor(e,t){for(const i of e.selection){const e=i.getPointIndex(t,p.l2gz(3));if(e<0)document.body.style.cursor="default";else{let t=i.getPointOrientation(e).angle();t<0&&(t+=360);const s=22.5;(t>=315+s||t=135+s&&t<225-s)&&(document.body.style.cursor="ew-resize"),(t>=45+s&&t<135-s||t>=225+s&&t<315-s)&&(document.body.style.cursor="ns-resize"),(t>=s&&t<90-s||t>=180+s&&t<270-s)&&(document.body.style.cursor="nwse-resize"),(t>=90+s&&t<180-s||t>=270+s&&t<360-s)&&(document.body.style.cursor="nesw-resize")}}}};y=s.__decorate([n.default({components:{SelectContext:o.default}})],y),t.default=y},2838:function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0});const s=i("8f0a"),n=i("6f92"),o=i("f10f"),r=i("d6be"),a=i("98ef"),l=i("4aee");function c(e,t,i){if(0===e.x&&0===e.y)return e;if("bvh"===o.gameStore.visionMode){void 0===i&&(i=[]);const r=t.getBoundingBox(),a=r.offset(e);let l=!1;for(const t of o.gameStore.movementblockers){if(i.includes(t))continue;const o=n.layerManager.UUIDMap.get(t),c=o.getBoundingBox();let u=c.intersectsWithInner(a);if(!u){const t=s.Ray.fromPoints(r.topLeft.add(e.normalize()),a.topLeft),i=t.direction.inverse(),n=[i.x<0,i.y<0];u=c.intersectP(t,i,n).hit}if(u){const n=c.center(),o=r.center(),a=o.subtract(n),u=new s.Vector(1,0),d=new s.Vector(0,1);let h=a.dot(u),f=a.dot(d);h>c.w/2&&(h=c.w/2),h<-c.w/2&&(h=-c.w/2),f>c.h/2&&(f=c.h/2),f<-c.h/2&&(f=-c.h/2);const p=n.add(u.multiply(h)).add(d.multiply(f));p.x===r.topLeft.x||p.x===r.topRight.x?e=new s.Vector(0,e.y):p.y===r.topLeft.y||p.y===r.botLeft.y?e=new s.Vector(e.x,0):p.xr.topRight.x?e=new s.Vector(p.x-r.topRight.x,e.y):p.yr.botLeft.y&&(e=new s.Vector(e.x,p.y-r.botLeft.y)),l=!0,i.push(t);break}}return l&&(e=c(e,t,i)),e}{const i=r.PA_CDT.movement.locate(t.center().asArray(),null).loc;for(const s of t.points){const t=r.PA_CDT.movement.locate(s,i),n=t.loc;null!==n&&(e=u(s,n,e))}return e}}function u(e,t,i,n=[]){const o=new s.GlobalPoint(e[0],e[1]),r=o.add(i).asArray();if(t.contains(r))return i;n.push(t);for(let c=0;c<3;c++){if(n.includes(t.neighbours[c]))continue;const d=t.vertices[l.cw(c)].point,h=t.vertices[l.ccw(c)].point,f=l.intersection(e,r,d,h);if(null===f)continue;if(!t.isConstrained(c))return u(e,t.neighbours[c],i,n);if(f[0]===o.x&&f[1]===o.y){l.orientation;const t=l.orientation(e,r,h);if(t===a.Sign.LEFT_TURN)continue;if(t===a.Sign.ZERO)continue}let p=new s.GlobalPoint(f[0],f[1]).subtract(o).multiply(.8);p.length()<1&&(p=new s.Vector(0,0)),p.length()!["__files"].includes(e)).sort(a.alphSort)}get files(){return this.asset.__files?this.asset.__files.concat().sort((e,t)=>e.name.toLowerCase()>t.name.toLowerCase()?1:-1):[]}toggle(e){for(let t=0;tthis.$children[0].$el.focus())}close(){this.visible=!1,this.shape=null}getLayers(){return c.layerManager.layers.filter(e=>e.selectable&&(u.gameStore.IS_DM||e.playerEditable))}getActiveLayer(){return c.layerManager.getLayer()}getInitiativeWord(){return null===this.shape?"":a.getRef("initiative").contains(this.shape.uuid)?"Show":"Add"}setLayer(e){null!==this.shape&&(this.shape.moveLayer(e,!0),this.close())}moveToBack(){if(null===this.shape)return;const e=this.getActiveLayer();e.moveShapeOrder(this.shape,0,!0),this.close()}moveToFront(){if(null===this.shape)return;const e=this.getActiveLayer();e.moveShapeOrder(this.shape,e.shapes.length-1,!0),this.close()}addInitiative(){if(null===this.shape)return;const e=a.getRef("initiative");e.contains(this.shape.uuid)||e.addInitiative(this.shape.getInitiativeRepr()),e.visible=!0,this.close()}openEditDialog(){l.EventBus.$emit("EditDialog.Open",this.shape),this.close()}};d=s.__decorate([o.default({components:{ContextMenu:r.default}})],d),t.default=d},3481:function(e,t,i){"use strict";i.r(t);var s=i("47e6"),n=i.n(s);for(var o in s)"default"!==o&&function(e){i.d(t,e,function(){return s[e]})}(o);t["default"]=n.a},"38c9":function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0});const s=i("bab4"),n=i("f10f");class o extends s.Layer{invalidate(){this.valid=!1}draw(e){this.valid||this.drawGrid()}drawGrid(){const e=this.ctx;this.clear(),e.beginPath();const t=n.gameStore.gridSize;for(let i=0;ir.layerManager.UUIDMap.get(e))}toggle(e){this.selection.includes(e)?a.gameStore.removeActiveToken(e):a.gameStore.addActiveToken(e)}};l=s.__decorate([n.default],l),t.default=l},"3cd3":function(e,t,i){"use strict";var s=i("b0c0"),n=i.n(s);n.a},"3dfd":function(e,t,i){"use strict";i.r(t);var s=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{attrs:{id:"app"}},[i("router-view",{ref:"activeComponent"})],1)},n=[],o=(i("034f"),i("2877")),r={},a=Object(o["a"])(r,s,n,!1,null,null,null);a.options.__file="App.vue";t["default"]=a.exports},"3eaf":function(e,t,i){},"412c":function(e,t,i){"use strict";var s=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{attrs:{id:"main"},on:{mouseleave:e.mouseleave,wheel:e.zoom}},[e.showUI?i("menu-bar"):e._e(),i("div",{attrs:{id:"board"}},[e.ready.manager?[i("tool-bar",{directives:[{name:"show",rawName:"v-show",value:e.showUI,expression:"showUI"}],ref:"tools"})]:e._e(),i("div",{attrs:{id:"layers"},on:{mousedown:e.mousedown,mouseup:e.mouseup,mousemove:e.mousemove,contextmenu:function(t){return t.preventDefault(),t.stopPropagation(),e.contextmenu(t)},dragover:function(e){e.preventDefault()},drop:function(t){return t.preventDefault(),t.stopPropagation(),e.drop(t)}}}),i("div",{directives:[{name:"show",rawName:"v-show",value:e.showUI&&e.layers.length>1,expression:"showUI && layers.length>1"}],attrs:{id:"layerselect"}},[i("ul",e._l(e.layers,function(t){return i("li",{key:t.name,class:{"layer-selected":t===e.selectedLayer},on:{mousedown:function(i){e.selectLayer(t)}}},[i("a",{attrs:{href:"#"}},[e._v(e._s(t))])])}))])],2),i("selection-info",{directives:[{name:"show",rawName:"v-show",value:e.showUI,expression:"showUI"}],ref:"selectionInfo"}),i("initiative-dialog",{ref:"initiative",attrs:{id:"initiativedialog"}}),i("note-dialog",{ref:"note"}),i("label-dialog",{ref:"labels"}),i("zoom-slider",{directives:[{name:"show",rawName:"v-show",value:e.showUI,expression:"showUI"}],attrs:{id:"zoomer",height:6,width:200,min:0,max:1,interval:.1,"dot-width":8,"dot-height":20,"tooltip-dir":"bottom",tooltip:"hover",formatter:e.zoomDisplay.toFixed(1),"slider-style":{"border-radius":"15%"},"bg-style":{"background-color":"#fff","box-shadow":"0.5px 0.5px 3px 1px rgba(0, 0, 0, .36)"},"process-style":{"background-color":"#fff"}},model:{value:e.zoomDisplay,callback:function(t){e.zoomDisplay=t},expression:"zoomDisplay"}}),i("prompt-dialog",{ref:"prompt"}),i("confirm-dialog",{ref:"confirm"})],1)},n=[];i.d(t,"a",function(){return s}),i.d(t,"b",function(){return n})},4185:function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0});const s=i("8f0a"),n=i("bab4"),o=i("6f92"),r=i("d1ec"),a=i("4709"),l=i("f10f"),c=i("92b1"),u=i("5a5c"),d=i("cee3");class h extends n.Layer{constructor(e,t){super(e,t),this.isVisionLayer=!0,this.preFogShapes=[],this.virtualCanvas=document.createElement("canvas"),this.virtualCanvas.width=window.innerWidth,this.virtualCanvas.height=window.innerHeight,this.vCtx=this.virtualCanvas.getContext("2d")}addShape(e,t,i,s=!0){super.addShape(e,t,i,s),e.options.has("preFogShape")&&e.options.get("preFogShape")&&this.preFogShapes.push(e)}removeShape(e,t,i){if(e.options.has("preFogShape")&&e.options.get("preFogShape")){const t=this.preFogShapes.findIndex(t=>t.uuid===e.uuid);this.preFogShapes.splice(t,1)}super.removeShape(e,t,i)}draw(){if(!this.valid){const e=this.ctx;if(r.Settings.skipLightFOW)return e.clearRect(0,0,this.canvas.width,this.canvas.height),void(this.valid=!0);const t=e.globalCompositeOperation;e.clearRect(0,0,this.canvas.width,this.canvas.height),e.fillStyle="rgba(0, 0, 0, 1)";const i=o.layerManager.getLayer("draw").ctx;(r.Settings.drawAngleLines||r.Settings.drawFirstLightHit)&&i.clearRect(0,0,i.canvas.width,i.canvas.height),l.gameStore.fullFOW&&o.layerManager.hasLayer("tokens")&&o.layerManager.getLayer("tokens").shapes.forEach(t=>{if(!t.ownedBy()||!t.isToken)return;const i=t.getBoundingBox(),s=c.g2l(t.center()),n=.8*c.g2lz(i.w);e.beginPath(),e.arc(s.x,s.y,n,0,2*Math.PI);const o=e.createRadialGradient(s.x,s.y,n/2,s.x,s.y,n);o.addColorStop(0,"rgba(0, 0, 0, 1)"),o.addColorStop(1,"rgba(0, 0, 0, 0)"),e.fillStyle=o,e.fill()}),this.vCtx.clearRect(0,0,window.innerWidth,window.innerHeight);for(const n of l.gameStore.visionSources){const t=o.layerManager.UUIDMap.get(n.shape);if(void 0===t)continue;const u=t.auras.find(e=>e.uuid===n.aura);if(void 0===u)continue;const h=c.getUnitDistance(u.value+u.dim),f=t.center(),p=c.g2l(f),g=new a.Circle(f,h);if(g.visibleInCanvas(e.canvas))if("bvh"===l.gameStore.visionMode){let t=-1;const n=new Path2D;let o;n.moveTo(p.x,p.y);for(let a=0;a<2*Math.PI;a+=r.Settings.angleSteps/180*Math.PI){const d=new s.GlobalPoint(f.x+h*Math.cos(a),f.y+h*Math.sin(a));r.Settings.drawAngleLines&&(i.beginPath(),i.moveTo(c.g2lx(f.x),c.g2ly(f.y)),i.lineTo(c.g2lx(d.x),c.g2ly(d.y)),i.stroke());const g=s.Ray.fromPoints(f,d),v=l.gameStore.BV.intersect(g);if(0===a&&(o=v.hit?v.intersect:d),v.hit)-1!==t&&(n.arc(p.x,p.y,c.g2lr(u.value+u.dim),t,a),t=-1),n.lineTo(c.g2lx(v.intersect.x),c.g2ly(v.intersect.y));else if(-1===t){t=a;const i=c.g2l(d);e.lineTo(i.x,i.y)}}if(-1===t?n.lineTo(c.g2lx(o.x),c.g2ly(o.y)):n.arc(p.x,p.y,c.g2lr(u.value+u.dim),t,2*Math.PI),l.gameStore.fullFOW){if(u.dim>0){const t=e.createRadialGradient(p.x,p.y,c.g2lr(u.value),p.x,p.y,c.g2lr(u.value+u.dim));t.addColorStop(0,"rgba(0, 0, 0, 1)"),t.addColorStop(1,"rgba(0, 0, 0, 0)"),e.fillStyle=t}else e.fillStyle="rgba(0, 0, 0, 1)";e.fill(n)}u.lastPath=n}else{this.vCtx.globalCompositeOperation="source-over",this.vCtx.fillStyle="rgba(0, 0, 0, 1)";const t=d.computeVisibility(f,"vision");this.vCtx.beginPath(),this.vCtx.moveTo(c.g2lx(t[0][0]),c.g2ly(t[0][1]));for(const e of t)this.vCtx.lineTo(c.g2lx(e[0]),c.g2ly(e[1]));if(this.vCtx.closePath(),this.vCtx.fill(),u.dim>0){const e=this.vCtx.createRadialGradient(p.x,p.y,c.g2lr(u.value),p.x,p.y,c.g2lr(u.value+u.dim));e.addColorStop(0,"rgba(0, 0, 0, 1)"),e.addColorStop(1,"rgba(0, 0, 0, 0)"),this.vCtx.fillStyle=e}else this.vCtx.fillStyle="rgba(0, 0, 0, 1)";this.vCtx.globalCompositeOperation="source-in",this.vCtx.beginPath(),this.vCtx.arc(p.x,p.y,c.g2lr(u.value+u.dim),0,2*Math.PI),this.vCtx.fill(),e.drawImage(this.virtualCanvas,0,0)}}l.gameStore.fowLOS&&(e.globalCompositeOperation="source-in",e.drawImage(o.layerManager.getLayer("fow-players").canvas,0,0));for(const s of this.preFogShapes){if(!s.visibleInCanvas(this.canvas))continue;const t=s.globalCompositeOperation;l.gameStore.fullFOW||("source-over"===s.globalCompositeOperation?s.globalCompositeOperation="destination-out":"destination-out"===s.globalCompositeOperation&&(s.globalCompositeOperation="source-over")),s.draw(e),s.globalCompositeOperation=t}l.gameStore.fullFOW&&(e.globalCompositeOperation="source-out",e.fillStyle=u.getFogColour(),e.fillRect(0,0,e.canvas.width,e.canvas.height)),super.draw(!1),e.globalCompositeOperation=t}}}t.FOWLayer=h},4486:function(e,t,i){"use strict";i.r(t);var s=i("a097"),n=i.n(s);for(var o in s)"default"!==o&&function(e){i.d(t,e,function(){return s[e]})}(o);t["default"]=n.a},"45fb":function(e,t,i){"use strict";var s=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("Modal",{attrs:{visible:e.visible,mask:!1},on:{close:function(t){e.visible=!1}},scopedSlots:e._u([{key:"header",fn:function(t){return i("div",{staticClass:"modal-header",attrs:{draggable:"true"},on:{dragstart:t.dragStart,dragend:t.dragEnd}},[i("div",[e._v("Edit asset")]),i("div",{staticClass:"header-close",on:{click:function(t){e.visible=!1}}},[i("i",{staticClass:"far fa-window-close"})])])}}])},[i("div",{staticClass:"modal-body"},[i("div",{staticClass:"grid"},[i("label",{attrs:{for:"shapeselectiondialog-name"}},[e._v("Name")]),i("input",{directives:[{name:"model",rawName:"v-model",value:e.shape.name,expression:"shape.name"}],staticStyle:{"grid-column":"numerator / remove"},attrs:{type:"text",id:"shapeselectiondialog-name",disabled:!e.owned},domProps:{value:e.shape.name},on:{change:function(t){e.updateShape(!1)},input:function(t){t.target.composing||e.$set(e.shape,"name",t.target.value)}}}),i("div",{style:{opacity:e.shape.nameVisible?1:.3,textAlign:"center"},attrs:{disabled:!e.owned},on:{click:function(t){e.shape.nameVisible=!e.shape.nameVisible,e.updateShape(!1)}}},[i("i",{staticClass:"fas fa-eye"})]),i("label",{attrs:{for:"shapeselectiondialog-istoken"}},[e._v("Is a token")]),i("input",{staticClass:"styled-checkbox",staticStyle:{"grid-column-start":"remove"},attrs:{type:"checkbox",id:"shapeselectiondialog-istoken",disabled:!e.owned},domProps:{checked:e.shape.isToken},on:{click:e.setToken}}),i("label",{attrs:{for:"shapeselectiondialog-visionblocker"}},[e._v("Blocks vision/light")]),i("input",{directives:[{name:"model",rawName:"v-model",value:e.shape.visionObstruction,expression:"shape.visionObstruction"}],staticStyle:{"grid-column-start":"remove"},attrs:{type:"checkbox",id:"shapeselectiondialog-visionblocker",disabled:!e.owned},domProps:{checked:Array.isArray(e.shape.visionObstruction)?e._i(e.shape.visionObstruction,null)>-1:e.shape.visionObstruction},on:{change:[function(t){var i=e.shape.visionObstruction,s=t.target,n=!!s.checked;if(Array.isArray(i)){var o=null,r=e._i(i,o);s.checked?r<0&&e.$set(e.shape,"visionObstruction",i.concat([o])):r>-1&&e.$set(e.shape,"visionObstruction",i.slice(0,r).concat(i.slice(r+1)))}else e.$set(e.shape,"visionObstruction",n)},e.setVisionBlocker]}}),i("label",{attrs:{for:"shapeselectiondialog-moveblocker"}},[e._v("Blocks movement")]),i("input",{staticStyle:{"grid-column-start":"remove"},attrs:{type:"checkbox",id:"shapeselectiondialog-moveblocker",disabled:!e.owned},domProps:{checked:e.shape.movementObstruction},on:{click:e.setMovementBlocker}}),i("label",{attrs:{for:"shapeselectiondialog-strokecolour"}},[e._v("Border colour")]),i("color-picker",{staticStyle:{"grid-column-start":"remove"},attrs:{color:e.shape.strokeColour,disabled:!e.owned},on:{"update:color":function(t){e.$set(e.shape,"strokeColour",t)},input:function(t){e.updateShape(!0,!0)},change:function(t){e.updateShape(!0)}}}),i("label",{attrs:{for:"shapeselectiondialog-fillcolour"}},[e._v("Fill colour")]),i("color-picker",{staticStyle:{"grid-column-start":"remove"},attrs:{color:e.shape.fillColour,disabled:!e.owned},on:{"update:color":function(t){e.$set(e.shape,"fillColour",t)},input:function(t){e.updateShape(!0,!0)},change:function(t){e.updateShape(!0)}}}),i("div",{staticClass:"spanrow header"},[e._v("Access")]),e._l(e.shape.owners,function(t){return[i("input",{key:t,staticStyle:{"grid-column-start":"name"},attrs:{type:"text",placeholder:"name",disabled:!e.owned},domProps:{value:t},on:{change:function(i){e.updateOwner(i,t)}}}),""!==t?i("div",{key:"remove-"+t,style:{opacity:e.owned?1:.3,textAlign:"center",gridColumnStart:"remove"},attrs:{disabled:!e.owned},on:{click:function(i){e.removeOwner(t)}}},[i("i",{staticClass:"fas fa-trash-alt"})]):e._e()]}),i("div",{staticClass:"spanrow header"},[e._v("Trackers")]),e._l(e.shape.trackers,function(t){return[i("input",{directives:[{name:"model",rawName:"v-model",value:t.name,expression:"tracker.name"}],key:"name-"+t.uuid,staticStyle:{"grid-column-start":"name"},attrs:{type:"text",placeholder:"name",disabled:!e.owned},domProps:{value:t.name},on:{change:function(t){e.updateShape(!1)},input:function(i){i.target.composing||e.$set(t,"name",i.target.value)}}}),i("input",{directives:[{name:"model",rawName:"v-model.number",value:t.value,expression:"tracker.value",modifiers:{number:!0}}],key:"value-"+t.uuid,attrs:{type:"text",title:"Current value",disabled:!e.owned},domProps:{value:t.value},on:{change:function(t){e.updateShape(!1)},input:function(i){i.target.composing||e.$set(t,"value",e._n(i.target.value))},blur:function(t){e.$forceUpdate()}}}),i("span",{key:"fspan-"+t.uuid},[e._v("/")]),i("input",{directives:[{name:"model",rawName:"v-model.number",value:t.maxvalue,expression:"tracker.maxvalue",modifiers:{number:!0}}],key:"maxvalue-"+t.uuid,attrs:{type:"text",title:"Current value",disabled:!e.owned},domProps:{value:t.maxvalue},on:{change:function(t){e.updateShape(!1)},input:function(i){i.target.composing||e.$set(t,"maxvalue",e._n(i.target.value))},blur:function(t){e.$forceUpdate()}}}),i("span",{key:"sspan-"+t.uuid}),i("div",{key:"visibility-"+t.uuid,style:{opacity:t.visible?1:.3,textAlign:"center"},attrs:{disabled:!e.owned},on:{click:function(i){t.visible=!t.visible,e.updateShape(!1)}}},[i("i",{staticClass:"fas fa-eye"})]),i("span",{key:"tspan-"+t.uuid}),""!==t.name||0!==t.value?i("div",{key:"remove-"+t.uuid,style:{opacity:e.owned?1:.3,textAlign:"center"},attrs:{disabled:!e.owned},on:{click:function(i){e.removeTracker(t.uuid)}}},[i("i",{staticClass:"fas fa-trash-alt"})]):e._e()]}),i("div",{staticClass:"spanrow header"},[e._v("Auras")]),e._l(e.shape.auras,function(t){return[i("input",{directives:[{name:"model",rawName:"v-model",value:t.name,expression:"aura.name"}],key:"name-"+t.uuid,staticStyle:{"grid-column-start":"name"},attrs:{type:"text",placeholder:"name",disabled:!e.owned},domProps:{value:t.name},on:{change:function(t){e.updateShape(!1)},input:function(i){i.target.composing||e.$set(t,"name",i.target.value)}}}),i("input",{directives:[{name:"model",rawName:"v-model.number",value:t.value,expression:"aura.value",modifiers:{number:!0}}],key:"value-"+t.uuid,attrs:{type:"text",title:"Current value",disabled:!e.owned},domProps:{value:t.value},on:{change:function(t){e.updateShape(!0)},input:function(i){i.target.composing||e.$set(t,"value",e._n(i.target.value))},blur:function(t){e.$forceUpdate()}}}),i("span",{key:"fspan-"+t.uuid},[e._v("/")]),i("input",{directives:[{name:"model",rawName:"v-model.number",value:t.dim,expression:"aura.dim",modifiers:{number:!0}}],key:"dimvalue-"+t.uuid,attrs:{type:"text",title:"Dim value",disabled:!e.owned},domProps:{value:t.dim},on:{change:function(t){e.updateShape(!0)},input:function(i){i.target.composing||e.$set(t,"dim",e._n(i.target.value))},blur:function(t){e.$forceUpdate()}}}),i("color-picker",{key:"colour-"+t.uuid,attrs:{color:t.colour,disabled:!e.owned},on:{"update:color":function(i){e.$set(t,"colour",i)},input:function(i){e.updateAuraColour(t,i)},change:function(t){e.updateShape(!0)}}}),i("div",{key:"visibility-"+t.uuid,style:{opacity:t.visible?1:.3,textAlign:"center"},attrs:{disabled:!e.owned},on:{click:function(i){t.visible=!t.visible,e.updateShape(!0)}}},[i("i",{staticClass:"fas fa-eye"})]),i("div",{key:"visionsource-"+t.uuid,style:{opacity:t.visionSource?1:.3,textAlign:"center"},attrs:{disabled:!e.owned},on:{click:function(i){e.updateAuraVisionSource(t)}}},[i("i",{staticClass:"fas fa-lightbulb"})]),""!==t.name||0!==t.value?i("div",{key:"remove-"+t.uuid,style:{opacity:e.owned?1:.3,textAlign:"center"},attrs:{disabled:!e.owned},on:{click:function(i){e.removeAura(t.uuid)}}},[i("i",{staticClass:"fas fa-trash-alt"})]):e._e()]}),i("div",{staticClass:"spanrow header"},[e._v("Labels")]),i("div",{staticClass:"spanrow",attrs:{id:"labels"}},[e._l(e.shape.labels,function(t){return i("div",{key:t.uuid,staticClass:"label"},[t.category?[i("div",{staticClass:"label-user"},[e._v(e._s(t.category))]),i("div",{staticClass:"label-main",on:{click:function(i){e.removeLabel(t.uuid)}}},[e._v(e._s(t.name))])]:e._e(),t.category?e._e():[i("div",{staticClass:"label-main",on:{click:function(i){e.removeLabel(t.uuid)}}},[e._v(e._s(t.name))])]],2)}),e.owned?i("div",{staticClass:"label",attrs:{id:"label-add"}},[i("div",{staticClass:"label-main",on:{click:e.openLabelManager}},[e._v("+")])]):e._e()],2),i("div",{staticClass:"spanrow header"},[e._v("Annotation")]),i("textarea",{staticClass:"spanrow",attrs:{disabled:!e.owned},domProps:{value:e.shape.annotation},on:{change:e.updateAnnotation}})],2)])])},n=[];i.d(t,"a",function(){return s}),i.d(t,"b",function(){return n})},4709:function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0});const s=i("8f0a"),n=i("8db6"),o=i("2469"),r=i("f10f"),a=i("2838"),l=i("92b1"),c=i("5a5c");class u extends o.Shape{constructor(e,t,i,s,n){super(e,i,s,n),this.type="circle",this.r=t||1}asDict(){return Object.assign(this.getBaseDict(),{radius:this.r})}fromDict(e){super.fromDict(e),this.r=e.radius}getBoundingBox(){return new n.BoundingRect(new s.GlobalPoint(this.refPoint.x-this.r,this.refPoint.y-this.r),2*this.r,2*this.r)}get points(){return this.getBoundingBox().points}draw(e){super.draw(e),e.beginPath(),"fog"===this.fillColour?e.fillStyle=c.getFogColour():e.fillStyle=this.fillColour;const t=l.g2l(this.refPoint);e.arc(t.x,t.y,l.g2lz(this.r),0,2*Math.PI),e.fill(),"rgba(0, 0, 0, 0)"!==this.strokeColour&&(e.beginPath(),e.lineWidth=l.g2lz(5),e.strokeStyle=this.strokeColour,e.arc(t.x,t.y,l.g2lz(this.r),0,2*Math.PI),e.stroke())}contains(e){return Math.pow(e.x-this.refPoint.x,2)+Math.pow(e.y-this.refPoint.y,2){const t=16*Math.random()|0,i="x"===e?t:3&t|8;return i.toString(16)})}function o(e){return e.charAt(0).toUpperCase()+e.slice(1)}function r(e,t){return e.toLowerCase()t(e)?i[1].push(e):i[0].push(e)),i}function u(e,t,i,s){const n=.2*Number(e.font.split("px")[0]),o=e.measureText(t).width;return Math.min(i/o,s/n)}function d(e){return encodeURIComponent(e).replace(/[!'()*]/g,e=>{return"%"+e.charCodeAt(0).toString(16)})}t.uuidv4=n,t.capitalize=o,t.alphSort=r,t.getHTMLFont=a,t.getHTMLTextWidth=l,t.partition=c,t.calcFontScale=u,t.fixedEncodeURIComponent=d;class h{constructor(){this.keys=[],this.values=[]}get length(){return this.keys.length}get(e){return this.values[this.keys.indexOf(e)]}getIndexValue(e){return this.values[e]}getIndexKey(e){return this.keys[e]}set(e,t){this.keys.push(e),this.values.push(t)}has(e){return this.indexOf(e)>=0}indexOf(e){return this.keys.indexOf(e)}remove(e){const t=this.indexOf(e);this.keys.splice(t,1),this.values.splice(t,1)}}function f(){return s.app.$children[0].$refs.activeComponent}function p(e){const t=s.app.$children[0].$refs.activeComponent;return t.$refs[e]}t.OrderedMap=h,t.getComponent=f,t.getRef=p},"4aec":function(e,t,i){"use strict";i.r(t);var s=i("a755"),n=i("f51a");for(var o in n)"default"!==o&&function(e){i.d(t,e,function(){return n[e]})}(o);var r=i("2877"),a=Object(r["a"])(n["default"],s["a"],s["b"],!1,null,null,null);a.options.__file="contextMenu.vue",t["default"]=a.exports},"4aee":function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0});const s=i("98ef");function n(e){return(e+2)%3}function o(e){return(e+1)%3}function r(e,t){const i=new s.EdgeCirculator(e,null);if(i.valid)do{const n=3-i.t.indexV(e)-i.ri,o=i.t.vertices[n];if(!o.infinite){if(o===t)return{includes:!0,vi:t,fr:i.t,i:i.ri};{const n=c(e.point,t.point,o.point);if(n===s.Sign.COLLINEAR&&a(e.point,o.point,t.point))return{includes:!0,vi:o,fr:i.t,i:i.ri}}}}while(i.next());return{includes:!1}}function a(e,t,i){let n,o;return l(0,e,i)===s.Sign.EQUAL?(n=l(1,e,t),o=l(1,t,i)):(n=l(0,e,t),o=l(0,t,i)),n===s.Sign.SMALLER&&o===s.Sign.SMALLER||n===s.Sign.LARGER&&o===s.Sign.LARGER}function l(e,t,i){return t[e]i[e]?s.Sign.LARGER:s.Sign.EQUAL}function c(e,t,i){const n=e[0],o=e[1],r=t[0],a=t[1],l=i[0],c=i[1],d=r-n,h=a-o,f=l-n,p=c-o,g=u(d,h,f,p);let v=Math.abs(d),m=Math.abs(h);const y=Math.abs(f),b=Math.abs(p);if(vm&&([v,m]=[m,v]),v<2e-162&&0===v)return s.Sign.ZERO;if(m<1e153){const e=Number.EPSILON*v*m;if(g>e)return s.Sign.POSITIVE;if(g<-e)return s.Sign.NEGATIVE}return s.Sign.ZERO}function u(e,t,i,s){return e*s-t*i}function d(e,t,i){return u(t[0]-e[0],t[1]-e[1],i[0]-e[0],i[1]-e[1])<0}function h(e,t,i){if(!e.isInfinite())return f(e.vertices[0].point,e.vertices[1].point,e.vertices[2].point,t,i);throw new Error("SSS")}function f(e,t,i,n,o){const r=m(e,t,i,n);if(r!==s.Sign.ON_ORIENTED_BOUNDARY||!o)return r;const a=[e,t,i,n];a.sort((e,t)=>e[0]-t[0]||e[1]-t[1]);for(const l of a.reverse()){if(l===n)return s.Sign.ON_NEGATIVE_SIDE;let o=c(e,t,n);if(l===i&&o!==s.Sign.COLLINEAR)return o;if(o=c(e,n,i),l===t&&o!==s.Sign.COLLINEAR)return o;if(o=c(n,t,i),l===e&&o!==s.Sign.COLLINEAR)return o}return s.Sign.ON_NEGATIVE_SIDE}function p(e,t){return e[0]===t[0]&&e[1]===t[1]}function g(e,t){return e[0]y&&([m,y]=[y,m]),m<1e-73&&0===m)return s.Sign.ON_ORIENTED_BOUNDARY;if(y<1e76){const e=Number.EPSILON*m*y*(y*y);if(v>e)return s.Sign.ON_POSITIVE_SIDE;if(v<-e)return s.Sign.ON_NEGATIVE_SIDE}return s.Sign.ZERO}function y(e,t,i,n){switch(c(e,t,i)){case s.Sign.LEFT_TURN:return c(i,n,t)!==s.Sign.RIGHT_TURN;case s.Sign.RIGHT_TURN:return c(i,n,t)!==s.Sign.LEFT_TURN;case s.Sign.COLLINEAR:return!0}}function b(e,t,i,n){switch(c(e,t,i)){case s.Sign.LEFT_TURN:return c(e,t,n)!==s.Sign.LEFT_TURN;case s.Sign.RIGHT_TURN:return c(e,t,n)!==s.Sign.RIGHT_TURN;case s.Sign.COLLINEAR:return!0}}function _(e,t,i,s){const n=x(e,t,i,s);switch(n.intersectionType){case w.POINT:return n.point;case w.NO_INTERSECTION:return null}throw new Error("sdfgighowen")}var w;function S(e,t){if(e[0]===t[0])return[1,0,-e[0]];if(e[1]===t[1])return[0,1,-e[1]];const i=t[0]-e[0],s=t[1]-e[1];return[-s,i,-i*e[1]+s*e[0]]}function x(e,t,i,s){if(!C(e,t,i,s))return{intersectionType:w.NO_INTERSECTION,point:null};const n=S(e,t),o=S(i,s),r=M(n,o);switch(r.intersectionType){case w.POINT:return r}throw new Error("gzseuihgpib")}function M(e,t){const i=e[0]*t[1]-t[0]*e[1],s=e[1]*t[2]-t[1]*e[2],n=t[0]*e[2]-e[0]*t[2];return{intersectionType:w.POINT,point:[s/i,n/i]}}function C(e,t,i,n){if(g(e,t)){if(g(i,n)){if(g(t,i)||g(n,e))return!1}else if(g(t,n)||g(i,e))return!1}else if(g(i,n)){if(g(e,i)||g(n,t))return!1}else if(g(e,n)||g(i,t))return!1;if(g(e,t))if(g(i,n))switch(v(e,i)){case s.Sign.SMALLER:switch(v(t,i)){case s.Sign.SMALLER:return!1;case s.Sign.EQUAL:return!0;default:switch(v(t,n)){case s.Sign.SMALLER:return y(e,t,i,n);case s.Sign.EQUAL:return!0;default:return b(e,t,i,n)}}case s.Sign.EQUAL:return!0;default:switch(v(n,e)){case s.Sign.SMALLER:return!1;case s.Sign.EQUAL:return!0;default:switch(v(n,t)){case s.Sign.SMALLER:return y(i,n,e,t);case s.Sign.EQUAL:return!0;default:return b(i,n,e,t)}}}else switch(v(e,n)){case s.Sign.SMALLER:switch(v(t,n)){case s.Sign.SMALLER:return!1;case s.Sign.EQUAL:return!0;default:switch(v(t,i)){case s.Sign.SMALLER:return y(e,t,n,i);case s.Sign.EQUAL:return!0;default:return b(e,t,n,i)}}case s.Sign.EQUAL:return!0;default:switch(v(i,e)){case s.Sign.SMALLER:return!1;case s.Sign.EQUAL:return!0;default:switch(v(i,t)){case s.Sign.SMALLER:return y(n,i,e,t);case s.Sign.EQUAL:return!0;default:return b(n,i,e,t)}}}else if(g(i,n))switch(v(t,i)){case s.Sign.SMALLER:switch(v(e,i)){case s.Sign.SMALLER:return!1;case s.Sign.EQUAL:return!0;default:switch(v(e,n)){case s.Sign.SMALLER:return y(t,e,i,n);case s.Sign.EQUAL:return!0;default:return b(t,e,i,n)}}case s.Sign.EQUAL:return!0;default:switch(v(n,t)){case s.Sign.SMALLER:return!1;case s.Sign.EQUAL:return!0;default:switch(v(n,e)){case s.Sign.SMALLER:return y(i,n,t,e);case s.Sign.EQUAL:return!0;default:return b(i,n,t,e)}}}else switch(v(t,n)){case s.Sign.SMALLER:switch(v(e,n)){case s.Sign.SMALLER:return!1;case s.Sign.EQUAL:return!0;default:switch(v(e,i)){case s.Sign.SMALLER:return y(t,e,n,i);case s.Sign.EQUAL:return!0;default:return b(t,e,n,i)}}case s.Sign.EQUAL:return!0;default:switch(v(i,t)){case s.Sign.SMALLER:return!1;case s.Sign.EQUAL:return!0;default:switch(v(i,e)){case s.Sign.SMALLER:return y(n,i,t,e);case s.Sign.EQUAL:return!0;default:return b(n,i,t,e)}}}}function k(e){if(e!==e)return e;if(e===-1/0)return-Number.MAX_VALUE;if(e===1/0)return 1/0;if(e===+Number.MAX_VALUE)return 1/0;let t=e*(e<0?1-Number.EPSILON/2:1+Number.EPSILON);t===e&&(t=Number.MIN_VALUE*Number.EPSILON>0?e+Number.MIN_VALUE*Number.EPSILON:e+Number.MIN_VALUE),t===1/0&&(t=+Number.MAX_VALUE);const i=e+(t-e)/2;ewindow.innerWidth-100&&(t=window.innerWidth-100),i<0&&(i=0),i>window.innerHeight-100&&(i=window.innerHeight-100),this.$refs.container.style.left=t+"px",this.$refs.container.style.top=i+"px",this.$refs.container.style.display="block"}dragOver(e){this.dragging&&(this.$refs.container.style.display="none")}};s.__decorate([r.Prop(Boolean)],a.prototype,"visible",void 0),s.__decorate([r.Prop({type:Boolean,default:!0})],a.prototype,"mask",void 0),a=s.__decorate([o.default],a),t.default=a},5338:function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0});const s=i("9ab4"),n=s.__importDefault(i("8055")),o=i("2d5b");t.socket=n.default(location.protocol+"//"+location.host+"/pa_assetmgmt",{autoConnect:!1}),t.socket.on("connect",()=>{console.log("Connected")}),t.socket.on("disconnect",()=>{console.log("Disconnected")}),t.socket.on("redirect",e=>{console.log("redirecting"),window.location.href=e}),t.socket.on("Folder.Root.Set",e=>{o.assetStore.setRoot(e)}),t.socket.on("Folder.Set",e=>{if(o.assetStore.clear(),e.children)for(const t of e.children)o.assetStore.idMap.set(t.id,t),t.file_hash?o.assetStore.files.push(t.id):o.assetStore.folders.push(t.id)}),t.socket.on("Folder.Create",e=>{o.assetStore.folders.push(e.id),o.assetStore.idMap.set(e.id,e)}),t.socket.on("Asset.Upload.Finish",e=>{o.assetStore.idMap.set(e.id,e),o.assetStore.files.push(e.id)})},5394:function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0});const s=i("9ab4"),n=s.__importDefault(i("65d9")),o=s.__importDefault(i("1289")),r=s.__importDefault(i("ea6a")),a=i("0bc6"),l=i("6f92"),c=i("f10f");let u=class extends r.default{constructor(){super(...arguments),this.name="Filter",this.active=!1}get labels(){const e={"":[]};for(const t of Object.keys(c.gameStore.labels)){const i=c.gameStore.labels[t];i.category?(i.category in e||(e[i.category]=[]),e[i.category].push([i.uuid,i.name]),e[i.category].sort((e,t)=>e[1].localeCompare(t[1]))):e[""].push([i.uuid,i.name])}return e}get initalValues(){const e={};for(const t of Object.keys(this.labels))e[t]=c.gameStore.labelFilters.filter(e=>this.labels[t].map(e=>e[0]).includes(e));return e}get categories(){return Object.keys(this.labels).sort()}isFilter(e){return c.gameStore.labelFilters.includes(e)}toggleFilter(e){const t=c.gameStore.labelFilters.indexOf(e);t>=0?c.gameStore.labelFilters.splice(t,1):c.gameStore.labelFilters.push(e),l.layerManager.invalidate()}toggleUnlabeled(){c.gameStore.toggleUnlabeledFilter(),l.layerManager.invalidate()}updateSelection(e){if(e.title in this.labels){for(const[t,i]of this.labels[e.title]){const i=c.gameStore.labelFilters.indexOf(t),s=e.selection.includes(t);i>=0&&!s?(c.gameStore.labelFilters.splice(i,1),a.socket.emit("Labels.Filter.Remove",t)):i<0&&s&&(c.gameStore.labelFilters.push(t),a.socket.emit("Labels.Filter.Add",t))}l.layerManager.invalidate()}}};u=s.__decorate([n.default({components:{accordion:o.default}})],u),t.default=u},"53ec":function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0});const s=i("9ab4"),n=s.__importDefault(i("a026")),o=s.__importDefault(i("65d9")),r=i("60a3");let a=class extends n.default{constructor(){super(...arguments),this.selected=[],this.active=!1}mounted(){this.selected=this.initialValues,this.updateCategory()}toggleDisplay(e){this.active=!this.active}toggleCategory(){const e=this.$refs.overall;e.checked?this.selected=this.items.map(e=>e[0]):this.selected=[],this.$emit("selectionupdate",{title:this.title,selection:this.selected})}updateCategory(){const e=this.$refs.overall;0===this.selected.length?(e.checked=!1,e.indeterminate=!1):this.selected.length===this.items.length?(e.checked=!0,e.indeterminate=!1):(e.checked=!1,e.indeterminate=!0)}toggleSelection(e){const t=this.selected.indexOf(e);-1===t?this.selected.push(e):this.selected.splice(t,1),this.updateCategory(),this.$emit("selectionupdate",{title:this.title,selection:this.selected})}};s.__decorate([r.Prop(String)],a.prototype,"title",void 0),s.__decorate([r.Prop({default:!0,type:Boolean})],a.prototype,"showArrow",void 0),s.__decorate([r.Prop({default:()=>[]})],a.prototype,"items",void 0),s.__decorate([r.Prop({default:()=>[]})],a.prototype,"initialValues",void 0),a=s.__decorate([o.default],a),t.default=a},5459:function(e,t,i){"use strict";var s=function(){var e=this,t=e.$createElement,i=e._self._c||t;return e.selected?i("div",{staticClass:"tool-detail",style:{"--detailRight":e.detailRight,"--detailArrow":e.detailArrow}},e._l(e.tokens,function(t){return i("div",{key:t.uuid,staticClass:"token",class:{selected:e.selection.includes(t.uuid)},on:{click:function(i){e.toggle(t.uuid)}}},[t.src?i("img",{attrs:{src:t.src,width:"30px",height:"30px"}}):e._e(),i("div",[e._v(e._s(t.name))])])})):e._e()},n=[];i.d(t,"a",function(){return s}),i.d(t,"b",function(){return n})},"54ac":function(e,t,i){},"561b":function(e,t,i){"use strict";var s=i("a450"),n=i.n(s);n.a},5722:function(e,t,i){},"574e":function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0});const s=i("8f0a"),n=i("8db6"),o=i("2469"),r=i("92b1"),a=i("5a5c");class l extends o.Shape{constructor(e,t,i,s,n){super(e,"rgba(0, 0, 0, 0)",s||"#000",n),this.type="multiline",this._points=[],this._points=t||[],this.lineWidth=i||3}get refPoint(){return this._refPoint}set refPoint(e){const t=e.subtract(this._refPoint);this._refPoint=e;for(let i=0;i({x:e.x,y:e.y}))})}fromDict(e){super.fromDict(e),this._points=e.points.map(e=>new s.GlobalPoint(e.x,e.y))}get points(){return this._points.map(e=>[e.x,e.y])}getBoundingBox(){let e=this.refPoint.x,t=this.refPoint.x,i=this.refPoint.y,o=this.refPoint.y;for(const s of this._points)s.xt&&(t=s.x),s.yo&&(o=s.y);return new n.BoundingRect(new s.GlobalPoint(e,i),t-e,o-i)}draw(e){super.draw(e),e.beginPath(),e.lineCap="round",e.lineJoin="round",e.moveTo(r.g2lx(this.refPoint.x),r.g2ly(this.refPoint.y));for(const t of this._points)e.lineTo(r.g2lx(t.x),r.g2ly(t.y));"fog"===this.strokeColour?e.strokeStyle=a.getFogColour():e.strokeStyle=this.strokeColour,e.lineWidth=r.g2lz(this.lineWidth),e.stroke()}contains(e){return this.getBoundingBox().contains(e)}center(e){return this.getBoundingBox().center()}visibleInCanvas(e){return this.getBoundingBox().visibleInCanvas(e)}snapToGrid(){}resizeToGrid(){}resize(e,t){0===e?this._refPoint=r.l2g(t):this._points[e-1]=r.l2g(t)}}t.MultiLine=l},"59d8":function(e,t,i){"use strict";i.r(t);var s=i("e5ca"),n=i("6f8d");for(var o in n)"default"!==o&&function(e){i.d(t,e,function(){return n[e]})}(o);i("a7b3");var r=i("2877"),a=Object(r["a"])(n["default"],s["a"],s["b"],!1,null,"639cd890",null);a.options.__file="draw.vue",t["default"]=a.exports},"5a5c":function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0});const s=i("9ab4"),n=s.__importDefault(i("66cb")),o=i("8f0a"),r=i("f10f");function a(e){return new o.LocalPoint(e.pageX,e.pageY)}function l(e=!1){const t=n.default(r.gameStore.fowColour);return r.gameStore.IS_DM?t.setAlpha(e?1:r.gameStore.fowOpacity):t.setAlpha(1),t.toRgbString()}function c(e){return 1/(-5/3+28/15*Math.exp(1.83*e))}function u(e){return Math.log(15/28*(1/e+5/3))/1.83}t.getMouse=a,t.getFogColour=l,t.zoomValue=c,t.zoomDisplay=u},"5a81":function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0});const s=i("9ab4"),n=s.__importStar(i("66cb")),o=s.__importDefault(i("a026")),r=s.__importDefault(i("65d9")),a=i("2f62"),l=s.__importDefault(i("3b36")),c=s.__importDefault(i("d65f")),u=i("4a5b"),d=i("8f0a"),h=i("6f92"),f=i("1327"),p=i("f10f"),g=i("92b1"),v=i("60a3");let m=class extends o.default{constructor(){super(...arguments),this.x=0,this.y=0,this.visible=!1,this.text="X",this.fillColour="rgba(255, 255, 255, 1)",this.borderColour="rgba(0, 0, 0, 1)"}mounted(){this.updatePreview()}onTextChange(e,t){this.updatePreview()}onFillChange(e,t){this.updatePreview()}onBorderChange(e,t){this.updatePreview()}open(e,t){this.visible=!0,this.x=e,this.y=t}submit(){const e=h.layerManager.getLayer();if(void 0===e)return;const t=new f.CircularToken(g.l2g(new d.LocalPoint(this.x,this.y)),g.getUnitDistance(p.gameStore.unitSize/2),this.text,"10px serif",this.fillColour,this.borderColour);t.addOwner(p.gameStore.username),e.addShape(t,!0),e.invalidate(!1),this.visible=!1}updatePreview(){const e=this.$refs.canvas.getContext("2d");e.clearRect(0,0,e.canvas.width,e.canvas.height),e.beginPath();const t={x:e.canvas.width/2,y:e.canvas.height/2},i=.9*Math.min(t.x,t.y);e.fillStyle=this.fillColour,e.arc(t.x,t.y,i,0,2*Math.PI),e.fill(),"rgba(0, 0, 0, 0)"!==this.borderColour&&(e.beginPath(),e.lineWidth=5,e.strokeStyle=this.borderColour,e.arc(t.x,t.y,i,0,2*Math.PI),e.stroke()),e.save(),e.textAlign="center",e.textBaseline="middle";const s=u.calcFontScale(e,this.text,i,i),o=0;e.transform(s,o,-o,s,t.x,t.y),e.fillStyle=n.mostReadable(this.fillColour,["#000","#fff"]).toHexString(),e.fillText(this.text,0,0),e.restore()}};s.__decorate([v.Watch("text")],m.prototype,"onTextChange",null),s.__decorate([v.Watch("fillColour")],m.prototype,"onFillChange",null),s.__decorate([v.Watch("borderColour")],m.prototype,"onBorderChange",null),m=s.__decorate([r.default({components:{Modal:c.default,"color-picker":l.default},computed:Object.assign({},a.mapState("game",["unitSize"]))})],m),t.default=m},"5ae5":function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0});const s=i("9ab4"),n=s.__importDefault(i("a026")),o=s.__importDefault(i("65d9")),r=s.__importDefault(i("d65f")),a=i("4a5b"),l=i("f10f");let c=class extends n.default{constructor(){super(...arguments),this.visible=!1,this.note=null}open(e){this.visible=!0,this.note=e}calcHeight(){if(this.$refs.textarea){const e=this.$refs.textarea;return e.style.height="auto",e.style.height=e.scrollHeight+"px",e.scrollHeight+"px"}return"100px"}updateNote(){this.note&&l.gameStore.updateNote({note:this.note,sync:!0})}removeNote(){a.getRef("confirm").open("Are you sure you wish to remove this?").then(e=>{e&&this.note&&(l.gameStore.removeNote({note:this.note,sync:!0}),this.visible=!1)},()=>{})}};c=s.__decorate([o.default({components:{Modal:r.default}})],c),t.default=c},"5b69":function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0});const s=i("9ab4"),n=s.__importDefault(i("65d9")),o=i("60a3"),r=s.__importDefault(i("3b36")),a=s.__importDefault(i("ea6a")),l=i("0bc6"),c=i("8f0a"),u=i("6f92"),d=i("4709"),h=i("5e7c"),f=i("574e"),p=i("e4ea"),g=i("b2ed"),v=i("f10f"),m=i("92b1"),y=i("5a5c");let b=class extends a.default{constructor(){super(...arguments),this.name="Draw",this.active=!1,this.startPoint=null,this.shape=null,this.brushHelper=null,this.ruler=null,this.fillColour="rgba(0, 0, 0, 1)",this.borderColour="rgba(255, 255, 255, 0)",this.shapeSelect="square",this.shapes=["square","circle","draw-polygon","paint-brush"],this.modeSelect="normal",this.modes=["normal","reveal","hide"],this.brushSize=m.getUnitDistance(v.gameStore.unitSize)}get helperSize(){return"paint-brush"===this.shapeSelect?this.brushSize/2:m.getUnitDistance(this.unitSize)/8}get IS_DM(){return v.gameStore.IS_DM}get unitSize(){return v.gameStore.unitSize}get useGrid(){return v.gameStore.useGrid}onFillChange(){this.brushHelper&&(this.brushHelper.fillColour=this.fillColour)}onModeUpdate(e,t){this.onModeChange(e,t)}setupBrush(){null!==this.brushHelper&&("reveal"===this.modeSelect||"hide"===this.modeSelect?(this.brushHelper.options.set("preFogShape",!0),this.brushHelper.options.set("skipDraw",!0),this.brushHelper.fillColour="rgba(0, 0, 0, 1)","reveal"===this.modeSelect?this.brushHelper.globalCompositeOperation="source-over":"hide"===this.modeSelect&&(this.brushHelper.globalCompositeOperation="destination-out")):(this.brushHelper.options.delete("preFogShape"),this.brushHelper.options.delete("skipDraw"),this.brushHelper.globalCompositeOperation="source-over",this.brushHelper.fillColour=this.fillColour))}onModeChange(e,t){if(null===this.brushHelper)return;const i=u.layerManager.getLayer("fow"),s=u.layerManager.getLayer();void 0!==i&&void 0!==s&&(this.setupBrush(),"normal"!==e&&"normal"===t?(s.removeShape(this.brushHelper,!1),i.addShape(this.brushHelper,!1)):"normal"===e&&"normal"!==t&&(s.addShape(this.brushHelper,!1),i.removeShape(this.brushHelper,!1)))}getLayer(){return"normal"===this.modeSelect?u.layerManager.getLayer():u.layerManager.getLayer("fow")}onMouseDown(e){const t=this.getLayer();if(void 0!==t){if(this.active)null!==this.shape&&this.shape instanceof p.Polygon&&this.shape._vertices.push(m.l2g(y.getMouse(e)));else{switch(this.startPoint=m.l2g(y.getMouse(e)),this.active=!0,this.shapeSelect){case"square":this.shape=new g.Rect(this.startPoint.clone(),0,0,this.fillColour,this.borderColour);break;case"circle":this.shape=new d.Circle(this.startPoint.clone(),this.helperSize,this.fillColour,this.borderColour);break;case"paint-brush":this.shape=new f.MultiLine(this.startPoint.clone(),[],this.brushSize),this.shape.fillColour=this.fillColour;break;case"draw-polygon":this.shape=new p.Polygon(this.startPoint.clone(),[],this.fillColour,this.borderColour);break;default:return}"normal"!==this.modeSelect&&(this.shape.options.set("preFogShape",!0),this.shape.options.set("skipDraw",!0),this.shape.fillColour="rgba(0, 0, 0, 1)"),"reveal"===this.modeSelect?this.shape.globalCompositeOperation="source-over":"hide"===this.modeSelect&&(this.shape.globalCompositeOperation="destination-out"),this.shape.addOwner(v.gameStore.username),"fow"===t.name&&"normal"===this.modeSelect&&(this.shape.visionObstruction=!0,this.shape.movementObstruction=!0),t.addShape(this.shape,!0,!1,!1),this.pushBrushBack()}if(null!==this.shape&&this.shape instanceof p.Polygon){const i=m.l2g(y.getMouse(e));null===this.ruler?(this.ruler=new h.Line(i,i,3,"black"),t.addShape(this.ruler,!1)):(this.ruler.refPoint=i,this.ruler.endPoint=i),this.shape.visionObstruction&&v.gameStore.recalculateVision(!0),t.invalidate(!1),l.socket.emit("Shape.Update",{shape:this.shape.asDict(),redraw:!0,temporary:!0})}}else console.log("No active layer!")}onMouseMove(e){const t=m.l2g(y.getMouse(e)),i=this.getLayer();if(void 0!==i){if(null!==this.brushHelper&&(this.brushHelper.r=this.helperSize,this.brushHelper.refPoint=t,this.active||i.invalidate(!1)),this.active&&null!==this.startPoint&&null!==this.shape){switch(this.shapeSelect){case"square":this.shape.w=Math.abs(t.x-this.startPoint.x),this.shape.h=Math.abs(t.y-this.startPoint.y),this.shape.refPoint=new c.GlobalPoint(Math.min(this.startPoint.x,t.x),Math.min(this.startPoint.y,t.y));break;case"circle":this.shape.r=t.subtract(this.startPoint).length();break;case"paint-brush":this.shape._points.push(t);break;case"draw-polygon":this.ruler.endPoint=t;break}this.shape instanceof p.Polygon||(l.socket.emit("Shape.Update",{shape:this.shape.asDict(),redraw:!0,temporary:!0}),this.shape.visionObstruction&&v.gameStore.recalculateVision(!0)),i.invalidate(!1)}}else console.log("No active layer!")}onMouseUp(e){!this.active||null===this.shape||this.shape instanceof p.Polygon||(!e.altKey&&this.useGrid&&this.shape.resizeToGrid(),this.finaliseShape())}onContextMenu(e){if(!this.active||null===this.shape||!(this.shape instanceof p.Polygon))return;const t=this.getLayer();void 0!==t?(t.removeShape(this.ruler,!1),this.ruler=null,this.finaliseShape()):console.log("No active layer!")}finaliseShape(){null!==this.shape&&(this.shape.visionObstruction&&v.gameStore.recalculateVision(),this.shape.movementObstruction&&v.gameStore.recalculateMovement(),l.socket.emit("Shape.Update",{shape:this.shape.asDict(),redraw:!0,temporary:!1}),this.active=!1)}onSelect(){const e=this.getLayer();void 0!==e&&(this.brushHelper=new d.Circle(new c.GlobalPoint(-1e3,-1e3),this.brushSize/2,this.fillColour),this.setupBrush(),e.addShape(this.brushHelper,!1))}onDeselect(){const e=this.getLayer();null!==this.brushHelper&&void 0!==e&&e.removeShape(this.brushHelper,!1),this.active&&void 0!==e&&null!==this.shape&&(e.removeShape(this.shape,!0,!1),this.shape=null,this.active=!1,e.invalidate(!1))}pushBrushBack(){const e=this.getLayer();void 0!==e?(null!==this.brushHelper&&e.removeShape(this.brushHelper,!1),this.brushHelper=new d.Circle(new c.GlobalPoint(-1e3,-1e3),this.brushSize/2,this.fillColour),this.setupBrush(),e.addShape(this.brushHelper,!1)):console.log("No active layer!")}};s.__decorate([o.Watch("fillColour")],b.prototype,"onFillChange",null),s.__decorate([o.Watch("modeSelect")],b.prototype,"onModeUpdate",null),b=s.__decorate([n.default({components:{"color-picker":r.default}})],b),t.default=b},"5e7c":function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0});const s=i("8f0a"),n=i("8db6"),o=i("2469"),r=i("92b1");class a extends o.Shape{constructor(e,t,i,s,n){super(e,"rgba(0, 0, 0, 0)",s||"#000",n),this.type="line",this.endPoint=t,this.lineWidth=void 0===i?1:i}asDict(){return Object.assign(this.getBaseDict(),{x2:this.endPoint.x,y2:this.endPoint.y,line_width:this.lineWidth})}get points(){return[[this.refPoint.x,this.refPoint.y],[this.endPoint.x,this.endPoint.y]]}getBoundingBox(){return new n.BoundingRect(new s.GlobalPoint(Math.min(this.refPoint.x,this.endPoint.x),Math.min(this.refPoint.y,this.endPoint.y)),Math.abs(this.refPoint.x-this.endPoint.x),Math.abs(this.refPoint.y-this.endPoint.y))}draw(e){super.draw(e),e.strokeStyle=this.strokeColour,e.beginPath(),e.moveTo(r.g2lx(this.refPoint.x),r.g2ly(this.refPoint.y)),e.lineTo(r.g2lx(this.endPoint.x),r.g2ly(this.endPoint.y)),e.lineWidth=this.lineWidth,e.stroke()}contains(e){return!1}center(e){}visibleInCanvas(e){return this.getBoundingBox().visibleInCanvas(e)}snapToGrid(){}resizeToGrid(){}resize(e,t){0===e?this.refPoint=r.l2g(t):this.endPoint=r.l2g(t)}}t.Line=a},"5f86":function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0});const s=i("9ab4"),n=s.__importDefault(i("bc3a")),o=s.__importDefault(i("a026")),r=s.__importDefault(i("8c4f"));o.default.use(r.default);const a=s.__importDefault(i("e914")),l=s.__importDefault(i("1077")),c=s.__importDefault(i("cad7")),u=s.__importDefault(i("47f7")),d=s.__importDefault(i("c6b4")),h=s.__importDefault(i("07f5")),f=s.__importDefault(i("ce87")),p=i("cc67");t.router=new r.default({mode:"history",base:"/",routes:[{path:"/",redirect:"/dashboard"},{path:"/_load",name:"load",component:u.default},{path:"/assets",component:a.default,meta:{auth:!0}},{path:"/auth",component:{template:""},children:[{path:"login",component:l.default},{path:"logout",component:c.default}]},{path:"/invite/:code",component:f.default,meta:{auth:!0}},{path:"/dashboard",component:d.default,meta:{auth:!0}},{path:"/game/:creator/:room",component:h.default,meta:{auth:!0}}]}),t.router.beforeEach((e,i,s)=>{p.coreStore.initialized||"/_load"===e.path?e.matched.some(e=>e.meta.auth)&&!p.coreStore.authenticated?s({path:"/auth/login",query:{redirect:e.path}}):s():(s({path:"/_load"}),n.default.get("/api/auth").then(i=>{i.data.auth&&(p.coreStore.setAuthenticated(!0),p.coreStore.setUsername(i.data.username)),p.coreStore.setInitialized(!0),t.router.push(e.path)}).catch(()=>{console.error("Authentication check could not be fulfilled.")}))})},"5fa9":function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0});const s=i("9ab4"),n=s.__importDefault(i("a026")),o=s.__importDefault(i("65d9"));let r=class extends n.default{constructor(){super(...arguments),this.name="",this.selected=!1,this.active=!1}get detailRight(){const e=this.$parent.$refs[this.name+"-selector"][0].getBoundingClientRect(),t=e.left+e.width/2;return`${window.innerWidth-Math.min(window.innerWidth-25,t+75)}px`}get detailArrow(){const e=this.$parent.$refs[this.name+"-selector"][0].getBoundingClientRect(),t=e.left+e.width/2,i=Math.min(window.innerWidth-25,t+75);return`${i-t-14}px`}created(){this.$parent.$on("mousedown",(e,t)=>{t===this.name&&this.onMouseDown(e)}),this.$parent.$on("mouseup",(e,t)=>{t===this.name&&this.onMouseUp(e)}),this.$parent.$on("mousemove",(e,t)=>{t===this.name&&this.onMouseMove(e)}),this.$parent.$on("contextmenu",(e,t)=>{t===this.name&&this.onContextMenu(e)}),this.$parent.$on("tools-select-change",(e,t)=>{t===this.name?(this.selected=!1,this.onDeselect()):e===this.name&&(this.selected=!0,this.onSelect())})}onSelect(){}onDeselect(){}onMouseDown(e){}onMouseUp(e){}onMouseMove(e){}onContextMenu(e){}};r=s.__decorate([o.default],r),t.default=r},"602f":function(e,t,i){},6100:function(e,t,i){"use strict";i.r(t);var s=i("f974"),n=i("e94f");for(var o in n)"default"!==o&&function(e){i.d(t,e,function(){return n[e]})}(o);i("d75e");var r=i("2877"),a=Object(r["a"])(n["default"],s["a"],s["b"],!1,null,"b6e1f51c",null);a.options.__file="tools.vue",t["default"]=a.exports},6465:function(e,t,i){"use strict";i.r(t);var s=i("5fa9"),n=i.n(s);for(var o in s)"default"!==o&&function(e){i.d(t,e,function(){return s[e]})}(o);t["default"]=n.a},"64a9":function(e,t,i){},6542:function(e,t,i){},"6c30":function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0});const s=i("c266"),n=i("f10f"),o=i("92b1");class r extends s.BaseRect{constructor(e,t,i,s,n){super(t,i,s,void 0,void 0,n),this.type="assetrect",this.src="",this.img=e}asDict(){return Object.assign(this.getBaseDict(),{src:this.src})}fromDict(e){super.fromDict(e),this.src=e.src}draw(e){super.draw(e);try{e.drawImage(this.img,o.g2lx(this.refPoint.x),o.g2ly(this.refPoint.y),o.g2lz(this.w),o.g2lz(this.h))}catch(t){console.warn(`Shape ${this.uuid} could not load the image ${this.src}`)}}getInitiativeRepr(){return{uuid:this.uuid,visible:!n.gameStore.IS_DM,group:!1,source:this.src,has_img:!0,effects:[],index:1/0}}}t.Asset=r},"6e4a":function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0});const s=i("98ef"),n=i("4aee");class o{constructor(){this.tds=new s.TDS}insertConstraint(e,t){const i=this.insert(e),s=this.insert(t);i!==s&&this.insertConstraintV(i,s)}insertConstraintV(e,t){const i=[[e,t]];while(i.length>0){const e=i.pop(),t=n.edgeInfo(e[0],e[1]);if(t.includes){this.markConstraint(t.fr,t.i),t.vi!==e[1]&&i.push([t.vi,e[1]]);continue}const s=this.findIntersectedFaces(e[0],e[1]);s.found?s.vi!==e[0]&&s.vi!==e[1]?(i.push([e[0],s.vi]),i.push([s.vi,e[1]])):i.push(e):(this.triangulateHole(s.intersectedFaces,s.listAB,s.listBA),s.vi!==e[1]&&i.push([s.vi,e[1]]))}}triangulateHole(e,t,i){const s=[];this.triangulateHole2(e,t,i,s),this.propagatingFlipE(s)}triangulateHole2(e,t,i,s){if(t.length>0){this.triangulateHalfHole(t,s),this.triangulateHalfHole(i,s);const n=t[0][0],o=i[0][0];n.neighbours[2]=o,o.neighbours[2]=n,n.constraints[2]=!0,o.constraints[2]=!0;while(e.length>0)this.tds.deleteTriangle(e.shift())}}triangulateHalfHole(e,t){let i,o,r=0;const a=()=>e[r],l=()=>e[i],c=a()[0].vertices[n.ccw(a()[1])];let u,d,h,f,p,g;i=r,++i;do{d=a()[0],p=a()[1],null!==d.neighbours[p]&&(u=d.neighbours[p],f=n.cw(u.indexV(d.vertices[n.cw(p)])),d=u.neighbours[f],p=this.tds.mirrorIndex(u,f)),h=l()[0],g=l()[1],null!==h.neighbours[g]&&(u=h.neighbours[g],f=n.cw(u.indexV(h.vertices[n.cw(g)])),h=u.neighbours[f],g=this.tds.mirrorIndex(u,f));const v=d.vertices[n.ccw(p)],m=d.vertices[n.cw(p)],y=h.vertices[n.cw(g)],b=n.orientation(v.point,m.point,y.point);switch(b){case s.Sign.RIGHT_TURN:{const s=this.tds.createTriangle(v,y,m,null,null,null);t.push([s,2]),s.neighbours[1]=d,s.neighbours[0]=h,d.neighbours[p]=s,h.neighbours[g]=s,d.isConstrained(p)&&(s.constraints[1]=!0),h.isConstrained(g)&&(s.constraints[0]=!0),v.triangle=s,m.triangle=s,y.triangle=s,o=r+1,e.splice(r,0,[s,2]),e.splice(Math.max(o,i),1),e.splice(Math.min(o,i),1),i=r,v!==c?--r:++i;break}case s.Sign.LEFT_TURN:case s.Sign.COLLINEAR:++r,++i;break}}while(i0){t=r[0][0],a=r[0][1],l=t.neighbours[a],c=this.tds.mirrorIndex(t,a),u=[t,a],r.splice(r.findIndex(e=>e[0]===u[0]&&e[1]===u[1]),1),d[0]=[t,n.cw(a)],d[1]=[t,n.ccw(a)],d[2]=[l,n.cw(c)],d[3]=[l,n.ccw(c)];for(const e of d){const t=e[0],i=e[1];s=[t.neighbours[i],this.tds.mirrorIndex(t,i)],this.lessEdge(e,s)?r.splice(r.findIndex(t=>t[0]===e[0]&&t[1]===e[1]),1):r.splice(r.findIndex(e=>e[0]===s[0]&&e[1]===s[1]),1)}this.flip(t,a);for(const e of d){const t=e[0],i=e[1];this.isFlipable(t,i)&&(s=[t.neighbours[i],this.tds.mirrorIndex(t,i)],this.lessEdge(e,s)?r.push(e):r.push(s))}}}flip(e,t){const i=e.neighbours[t],s=this.tds.mirrorIndex(e,t),o=e.neighbours[n.cw(t)],r=this.tds.mirrorIndex(e,n.cw(t)),a=e.neighbours[n.ccw(t)],l=this.tds.mirrorIndex(e,n.ccw(t)),c=i.neighbours[n.cw(s)],u=this.tds.mirrorIndex(i,n.cw(s)),d=i.neighbours[n.ccw(s)],h=this.tds.mirrorIndex(i,n.ccw(s));this.tds.flip(e,t),e.constraints[e.indexT(i)]=!1,i.constraints[i.indexT(e)]=!1,o.neighbours[r].constraints[this.tds.mirrorIndex(o,r)]=o.constraints[r],a.neighbours[l].constraints[this.tds.mirrorIndex(a,l)]=a.constraints[l],c.neighbours[u].constraints[this.tds.mirrorIndex(c,u)]=c.constraints[u],d.neighbours[h].constraints[this.tds.mirrorIndex(d,h)]=d.constraints[h]}isFlipable(e,t,i=!0){const o=e.neighbours[t];return!e.isInfinite()&&!o.isInfinite()&&(!e.constraints[t]&&n.sideOfOrientedCircle(o,e.vertices[t].point,i)===s.Sign.ON_POSITIVE_SIDE)}insertb(e,t,i,o){let r,a,l=!1;i===s.LocateType.EDGE&&t.isConstrained(o)&&(l=!0,r=t.vertices[n.ccw(o)],a=t.vertices[n.cw(o)]);const c=this.insertc(e,t,i,o);return l?this.updateConstraintsIncident(c,r,a):i!==s.LocateType.VERTEX&&this.clearConstraintsIncident(c),2===this.tds.dimension&&this.updateConstraintsOpposite(c),c}updateConstraintsIncident(e,t,i){if(0!==this.tds.dimension)if(1===this.tds.dimension){const t=new s.EdgeCirculator(e,null);do{t.t.constraints[2]=!0}while(t.next())}else{const o=new s.FaceCirculator(e,null);do{const s=o.t.indexV(e),r=n.cw(s),a=n.ccw(s);o.t.vertices[r]===t||o.t.vertices[r]===i?(o.t.constraints[a]=!0,o.t.constraints[r]=!1):(o.t.constraints[a]=!1,o.t.constraints[r]=!0)}while(o.next())}}clearConstraintsIncident(e){const t=new s.EdgeCirculator(e,null);if(t.valid)do{const e=t.t,i=t.ri;e.constraints[i]=!1,2===this.tds.dimension&&(e.neighbours[i].constraints[this.tds.mirrorIndex(e,i)]=!1)}while(t.next())}insertc(e,t,i,n){if(1===this.tds.vertices.length)return this.insertFirst(e);if(2===this.tds.vertices.length)return i===s.LocateType.VERTEX?this.tds.finiteVertex:this.insertSecond(e);switch(i){case s.LocateType.VERTEX:return t.vertices[n];case s.LocateType.OUTSIDE_AFFINE_HULL:return this.insertOutsideAffineHull(e);case s.LocateType.OUTSIDE_CONVEX_HULL:return this.insertOutsideConvexHull(e,t);case s.LocateType.EDGE:return this.insertInEdge(e,t,n);case s.LocateType.FACE:return this.insertInFace(e,t)}throw new Error("qwe")}insertInEdge(e,t,i){const s=this.tds.insertInEdge(t,i);return s.point=e,s}insertInFace(e,t){const i=this.tds.insertInFace(t);return i.point=e,i}insertFirst(e){const t=this.tds.insertDimUp();return t.point=e,t}insertSecond(e){const t=this.tds.insertDimUp(this.tds._infinite,!0);return t.point=e,t}insertOutsideAffineHull(e){let t=!1;if(1===this.tds.dimension){const i=this.tds.finiteEdge.first,o=n.orientation(i.vertices[0].point,i.vertices[1].point,e);t=o===s.Sign.COUNTERCLOCKWISE}const i=this.tds.insertDimUp(this.tds._infinite,t);return i.point=e,i}insertOutsideConvexHull(e,t){let i;if(1===this.tds.dimension)throw new Error("sdfasdasd");return i=this.insertOutsideConvexHull2(e,t),i.point=e,i}insertOutsideConvexHull2(e,t){let i=t.indexV(this.tds._infinite);const o=[],r=[];let a=new s.FaceCirculator(this.tds._infinite,t),l=!1;while(!l){a.prev(),i=a.t.indexV(this.tds._infinite);const t=a.t.vertices[n.ccw(i)].point,r=a.t.vertices[n.cw(i)].point;n.orientation(e,t,r)===s.Sign.LEFT_TURN?o.push(a.t):l=!0}a=new s.FaceCirculator(this.tds._infinite,t),l=!1;while(!l){a.next(),i=a.t.indexV(this.tds._infinite);const t=a.t.vertices[n.ccw(i)].point,o=a.t.vertices[n.cw(i)].point;n.orientation(e,t,o)===s.Sign.LEFT_TURN?r.push(a.t):l=!0}const c=this.tds.insertInFace(t);let u;c.point=e;while(o.length>0)u=o[0],i=n.ccw(u.indexV(this.tds._infinite)),this.tds.flip(u,i),o.shift();while(r.length>0)u=r[0],i=n.cw(u.indexV(this.tds._infinite)),this.tds.flip(u,i),r.shift();a=new s.FaceCirculator(c,null);while(!a.t.isInfinite())a.next();return this.tds._infinite.triangle=a.t,c}locate(e,t){let i=0,o=0;if(this.tds.dimension<0)return i=s.LocateType.OUTSIDE_AFFINE_HULL,o=4,{loc:null,lt:i,li:o};if(0===this.tds.dimension)return i=n.xyEqual(e,this.tds.finiteVertex.triangle.vertices[0].point)?s.LocateType.VERTEX:s.LocateType.OUTSIDE_AFFINE_HULL,o=4,{loc:null,lt:i,li:o};if(1===this.tds.dimension)return this.marchLocate1D(e);if(null===t){const e=this.tds._infinite.triangle;t=e.neighbours[e.indexV(this.tds._infinite)]}else t.isInfinite()&&(t=t.neighbours[t.indexV(this.tds._infinite)]);return this.marchLocate2D(t,e)}marchLocate1D(e){const t=this.tds._infinite.triangle,i=t.indexV(this.tds._infinite),o=t.neighbours[i],r=n.orientation(o.vertices[0].point,o.vertices[1].point,e);if(r===s.Sign.RIGHT_TURN||r===s.Sign.LEFT_TURN)return{loc:new s.Triangle,lt:s.LocateType.OUTSIDE_AFFINE_HULL,li:4};const a=o.indexT(t);if(n.collinearBetween(e,o.vertices[1-a].point,o.vertices[a].point))return{loc:t,lt:s.LocateType.OUTSIDE_CONVEX_HULL,li:i};if(n.xyEqual(e,o.vertices[1-a].point))return{loc:o,lt:s.LocateType.VERTEX,li:1-a};throw new Error("sdfsdf")}marchLocate2D(e,t){let i,o,r=null,a=!0;while(1){if(e.isInfinite())return{loc:e,lt:s.LocateType.OUTSIDE_CONVEX_HULL,li:e.indexV(this.tds._infinite)};const l=0,c=e.vertices[0].point,u=e.vertices[1].point,d=e.vertices[2].point;let h,f,p;if(a){if(r=e,a=!1,h=n.orientation(c,u,t),h===s.Sign.NEGATIVE){e=e.neighbours[2];continue}if(f=n.orientation(u,d,t),f===s.Sign.NEGATIVE){e=e.neighbours[0];continue}if(p=n.orientation(d,c,t),p===s.Sign.NEGATIVE){e=e.neighbours[1];continue}}else if(l)if(e.neighbours[0]===r){if(r=e,h=n.orientation(c,u,t),h===s.Sign.NEGATIVE){e=e.neighbours[2];continue}if(p=n.orientation(d,c,t),p===s.Sign.NEGATIVE){e=e.neighbours[1];continue}f=s.Sign.POSITIVE}else if(e.neighbours[1]===r){if(r=e,f=n.orientation(u,d,t),f===s.Sign.NEGATIVE){e=e.neighbours[0];continue}if(h=n.orientation(c,u,t),h===s.Sign.NEGATIVE){e=e.neighbours[2];continue}p=s.Sign.POSITIVE}else{if(r=e,p=n.orientation(d,c,t),p===s.Sign.NEGATIVE){e=e.neighbours[1];continue}if(f=n.orientation(u,d,t),f===s.Sign.NEGATIVE){e=e.neighbours[0];continue}h=s.Sign.POSITIVE}else if(e.neighbours[0]===r){if(r=e,p=n.orientation(d,c,t),p===s.Sign.NEGATIVE){e=e.neighbours[1];continue}if(h=n.orientation(c,u,t),h===s.Sign.NEGATIVE){e=e.neighbours[2];continue}f=s.Sign.POSITIVE}else if(e.neighbours[1]===r){if(r=e,h=n.orientation(c,u,t),h===s.Sign.NEGATIVE){e=e.neighbours[2];continue}if(f=n.orientation(u,d,t),f===s.Sign.NEGATIVE){e=e.neighbours[0];continue}p=s.Sign.POSITIVE}else{if(r=e,f=n.orientation(u,d,t),f===s.Sign.NEGATIVE){e=e.neighbours[0];continue}if(p=n.orientation(d,c,t),p===s.Sign.NEGATIVE){e=e.neighbours[1];continue}h=s.Sign.POSITIVE}const g=(h===s.Sign.COLLINEAR?1:0)+(f===s.Sign.COLLINEAR?1:0)+(p===s.Sign.COLLINEAR?1:0);switch(g){case 0:i=s.LocateType.FACE,o=4;break;case 1:i=s.LocateType.EDGE,o=h===s.Sign.COLLINEAR?2:f===s.Sign.COLLINEAR?0:1;break;case 2:i=s.LocateType.VERTEX,o=h!==s.Sign.COLLINEAR?2:f!==s.Sign.COLLINEAR?0:1;break}if(void 0===i||void 0===o)throw new Error("ert");return{loc:e,lt:i,li:o}}}iLocate(e,t){if(this.tds.dimension<2)return t;if(null===t){const e=this.tds._infinite.triangle;t=e.neighbours[e.indexV(this.tds._infinite)]}else t.isInfinite()&&(t=t.neighbours[t.indexV(this.tds._infinite)]);let i=null,s=t,o=!0,r=2500;while(1){if(!r--)return s;if(s.isInfinite())return s;const t=s.vertices[0].point,a=s.vertices[1].point,l=s.vertices[2].point;if(o){if(i=s,o=!1,n.hasInexactNegativeOrientation(t,a,e)){s=s.neighbours[2];continue}if(n.hasInexactNegativeOrientation(a,l,e)){s=s.neighbours[0];continue}if(n.hasInexactNegativeOrientation(l,t,e)){s=s.neighbours[1];continue}}else if(s.neighbours[0]===i){if(i=s,n.hasInexactNegativeOrientation(t,a,e)){s=s.neighbours[2];continue}if(n.hasInexactNegativeOrientation(l,t,e)){s=s.neighbours[1];continue}}else if(s.neighbours[1]===i){if(i=s,n.hasInexactNegativeOrientation(t,a,e)){s=s.neighbours[2];continue}if(n.hasInexactNegativeOrientation(a,l,e)){s=s.neighbours[0];continue}}else{if(i=s,n.hasInexactNegativeOrientation(l,t,e)){s=s.neighbours[1];continue}if(n.hasInexactNegativeOrientation(a,l,e)){s=s.neighbours[0];continue}}break}return s}}t.CDT=o},"6f8d":function(e,t,i){"use strict";i.r(t);var s=i("5b69"),n=i.n(s);for(var o in s)"default"!==o&&function(e){i.d(t,e,function(){return s[e]})}(o);t["default"]=n.a},"6f92":function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0});const s=i("8f0a"),n=i("6c30"),o=i("f10f"),r=i("92b1");class a{constructor(){this.layers=[],this.width=window.innerWidth,this.height=window.innerHeight,this.UUIDMap=new Map,this.interval=30,this.drawLoop=(()=>{for(let e=this.layers.length-1;e>=0;e--)this.layers[e].draw();requestAnimationFrame(this.drawLoop)}),requestAnimationFrame(this.drawLoop)}reset(){this.layers=[],this.UUIDMap=new Map}setWidth(e){this.width=e;for(const t of this.layers)t.canvas.width=e,t.width=e}setHeight(e){this.height=e;for(const t of this.layers)t.canvas.height=e,t.height=e}addLayer(e){this.layers.push(e),(o.gameStore.IS_DM||e.playerEditable)&&e.selectable&&o.gameStore.addLayer(e.name)}hasLayer(e){return this.layers.some(t=>t.name===e)}getLayer(e){e=void 0===e?o.gameStore.selectedLayer:e;for(const t of this.layers)if(t.name===e)return t}selectLayer(e,t=!0){let i=!1;for(const s of this.layers)s.selectable&&(i&&"fow"!==s.name?s.ctx.globalAlpha=.3:s.ctx.globalAlpha=1,e===s.name&&(o.gameStore.selectLayer({name:e,sync:t}),i=!0),s.clearSelection(),s.invalidate(!0))}getGridLayer(){return this.getLayer("grid")}hasSelection(){const e=this.getSelection();return void 0!==e&&e.length>0}getSelection(){const e=this.getLayer();if(void 0!==e)return e.selection}invalidate(){for(let e=this.layers.length-1;e>=0;e--)this.layers[e].invalidate(!0)}invalidateLight(){for(let e=this.layers.length-1;e>=0;e--)this.layers[e].isVisionLayer&&this.layers[e].invalidate(!0)}dropAsset(e){const t=this.getLayer();if(void 0===t||null===e||null===e.dataTransfer)return;const i=document.createElement("img");i.src=e.dataTransfer.getData("text/plain");const a=new n.Asset(i,new s.GlobalPoint(r.l2gx(e.clientX),r.l2gy(e.clientY)),r.l2gz(i.width),r.l2gz(i.height));if(a.src=new URL(i.src).pathname,o.gameStore.useGrid){const e=o.gameStore.gridSize;a.refPoint=new s.GlobalPoint(Math.round(a.refPoint.x/e)*e,Math.round(a.refPoint.y/e)*e),a.w=Math.max(Math.round(a.w/e)*e,e),a.h=Math.max(Math.round(a.h/e)*e,e)}t.addShape(a,!0)}}t.layerManager=new a,window.lm=t.layerManager},7018:function(e,t,i){"use strict";i.r(t);var s=i("ebb9"),n=i.n(s);for(var o in s)"default"!==o&&function(e){i.d(t,e,function(){return s[e]})}(o);t["default"]=n.a},7420:function(e,t,i){"use strict";i.r(t);var s=i("d320"),n=i("778b");for(var o in n)"default"!==o&&function(e){i.d(t,e,function(){return n[e]})}(o);i("c969");var r=i("2877"),a=Object(r["a"])(n["default"],s["a"],s["b"],!1,null,"73816298",null);a.options.__file="createtoken_modal.vue",t["default"]=a.exports},"76b3":function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0});class s{constructor(e,t){this.children=[],this.nPrimitives=e,this.bbox=t}}t.BoundingNode=s;class n extends s{constructor(e,t,i){super(t,i),this.firstPrimOffset=e}}t.LeafNode=n;class o extends s{constructor(e,t,i){super(0,t.bbox.union(i.bbox)),this.dimension=e,this.children.push(t),this.children.push(i)}}t.InteriorNode=o},"778b":function(e,t,i){"use strict";i.r(t);var s=i("5a81"),n=i.n(s);for(var o in s)"default"!==o&&function(e){i.d(t,e,function(){return s[e]})}(o);t["default"]=n.a},"77a6":function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0});const s=i("4a5b"),n=i("0bc6"),o=i("2b48"),r=i("af17"),a=i("8f0a"),l=i("6f92"),c=i("206a"),u=i("f10f"),d=i("2838");function h(e){if(e.target instanceof HTMLInputElement||e.target instanceof HTMLTextAreaElement);else if("Delete"===e.key||"Del"===e.key||"Backspace"===e.key){if(void 0===l.layerManager.getLayer)return void console.log("No active layer selected for delete operation");const e=l.layerManager.getLayer();for(let t=e.selection.length-1;t>=0;t--){const i=e.selection[t];s.getRef("tools").$refs.selectTool.selectionHelper.uuid!==i.uuid?(e.removeShape(i,!0,!1),r.EventBus.$emit("SelectionInfo.Shape.Set",null),r.EventBus.$emit("Initiative.Remove",i.uuid)):e.selection.splice(t,1)}}}function f(e){if(e.target instanceof HTMLInputElement||e.target instanceof HTMLTextAreaElement)65===e.keyCode&&e.ctrlKey&&e.target.select();else if(e.keyCode>=37&&e.keyCode<=40){const t=Math.round(u.gameStore.gridSize);let i=t*(e.keyCode%2),r=t*(e.keyCode%2?0:1);if(l.layerManager.hasSelection()){const t=l.layerManager.getSelection();i*=e.keyCode<=38?-1:1,r*=e.keyCode<=38?-1:1;let o=new a.Vector(i,r);if(!e.shiftKey||!u.gameStore.IS_DM)for(const e of t)s.getRef("tools").$refs.selectTool.selectionHelper.uuid!==e.uuid&&(o=d.calculateDelta(o,e));for(const e of t)s.getRef("tools").$refs.selectTool.selectionHelper.uuid!==e.uuid&&(e.refPoint=e.refPoint.add(o),n.socket.emit("Shape.Position.Update",{shape:e.asDict(),redraw:!0,temporary:!1}));u.gameStore.recalculateVision(),l.layerManager.getLayer().invalidate(!1)}else u.gameStore.increasePanX(i*(e.keyCode<=38?1:-1)),u.gameStore.increasePanY(r*(e.keyCode<=38?1:-1)),l.layerManager.invalidate(),o.sendClientOptions()}else if(68===e.keyCode){const e=l.layerManager.getLayer();e&&(e.clearSelection(),e.invalidate(!0))}else if("u"===e.key&&e.ctrlKey)e.preventDefault(),e.stopPropagation(),u.gameStore.toggleUI();else if("c"===e.key&&e.ctrlKey){const e=l.layerManager.getLayer();if(!e)return;if(!e.selection)return;const t=[];for(const i of e.selection)s.getRef("tools").$refs.selectTool.selectionHelper.uuid!==i.uuid&&t.push(i.asDict());u.gameStore.setClipboard(t)}else if("v"===e.key&&e.ctrlKey){const e=l.layerManager.getLayer();if(!e)return;if(!u.gameStore.clipboard)return;e.selection=[];for(const t of u.gameStore.clipboard){t.x+=10,t.y+=10,t.uuid=s.uuidv4();const i=t.trackers;t.trackers=[];for(const e of i){const i=Object.assign({},e,{uuid:s.uuidv4()});t.trackers.push(i)}const n=t.auras;t.auras=[];for(const e of n){const i=Object.assign({},e,{uuid:s.uuidv4()});t.auras.push(i)}const o=c.createShapeFromDict(t);void 0!==o&&(e.addShape(o,!0),e.selection.push(o))}1===e.selection.length?r.EventBus.$emit("SelectionInfo.Shape.Set",e.selection[0]):r.EventBus.$emit("SelectionInfo.Shape.Set",null),e.invalidate(!1)}}t.onKeyUp=h,t.onKeyDown=f},"78c7":function(e,t,i){"use strict";var s=i("9227"),n=i.n(s);n.a},7997:function(e,t,i){"use strict";var s=i("39a7"),n=i.n(s);n.a},"7aaa":function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0});const s=i("9ab4"),n=s.__importDefault(i("a026")),o=s.__importDefault(i("033f")),r=s.__importDefault(i("7420")),a=s.__importDefault(i("59d8")),l=s.__importDefault(i("bea6")),c=s.__importDefault(i("dec1")),u=s.__importDefault(i("4899")),d=s.__importDefault(i("c277")),h=s.__importDefault(i("9f58")),f=i("6f92"),p=i("9cb7"),g=i("f10f"),v=i("d5df"),m=i("92b1"),y=i("5a5c"),b=s.__importDefault(i("65d9"));let _=class extends n.default{constructor(){super(...arguments),this.currentTool="Select",this.tools=["Select","Pan","Draw","Ruler","Map","Filter","Vision"],this.dmTools=["Map"]}get IS_DM(){return g.gameStore.IS_DM}get currentToolComponent(){return`${this.currentTool.toLowerCase()}-tool`}get visibleTools(){return this.tools.filter(e=>!this.dmTools.includes(e)||this.IS_DM)}toolVisible(e){return"Filter"===e?Object.keys(g.gameStore.labels).length>0:"Vision"!==e||g.gameStore.ownedtokens.length>1}mousedown(e){if("CANVAS"!==e.target.tagName)return;let t=this.currentTool;if(1===e.button)t="Pan";else if(0!==e.button)return;this.$emit("mousedown",e,t)}mouseup(e){if("CANVAS"!==e.target.tagName)return;let t=this.currentTool;if(1===e.button)t="Pan";else if(0!==e.button)return;this.$emit("mouseup",e,t)}mousemove(e){if("CANVAS"!==e.target.tagName)return;let t=this.currentTool;if(0!==(4&e.buttons))t="Pan";else if((1&e.button)>1)return;this.$emit("mousemove",e,t);let i=!1;for(const s of g.gameStore.annotations)if(f.layerManager.UUIDMap.has(s)&&f.layerManager.hasLayer("draw")){const t=f.layerManager.UUIDMap.get(s);t.contains(m.l2g(y.getMouse(e)))&&(i=!0,p.gameManager.annotationManager.setActiveText(t.annotation))}!i&&p.gameManager.annotationManager.shown&&p.gameManager.annotationManager.setActiveText("")}mouseleave(e){0!==(1&e.buttons)&&this.$emit("mouseup",e,this.currentTool)}contextmenu(e){"CANVAS"===e.target.tagName&&2===e.button&&"CANVAS"===e.target.tagName&&this.$emit("contextmenu",e,this.currentTool)}};_=s.__decorate([b.default({components:{"select-tool":d.default,"pan-tool":u.default,"draw-tool":a.default,"ruler-tool":v.RulerTool,"map-tool":c.default,"filter-tool":l.default,"vision-tool":h.default,"shape-menu":o.default,"createtoken-dialog":r.default},watch:{currentTool(e,t){this.$emit("tools-select-change",e,t)}}})],_),t.default=_},"7ba5":function(e,t,i){"use strict";i.r(t);var s=i("fbdd"),n=i.n(s);for(var o in s)"default"!==o&&function(e){i.d(t,e,function(){return s[e]})}(o);t["default"]=n.a},"7e15":function(e,t,i){"use strict";i.r(t);var s=i("52a8"),n=i.n(s);for(var o in s)"default"!==o&&function(e){i.d(t,e,function(){return s[e]})}(o);t["default"]=n.a},"7eb7":function(e,t,i){"use strict";var s=i("cd76"),n=i.n(s);n.a},"7f1e":function(e,t,i){"use strict";var s=i("fe11"),n=i.n(s);n.a},"844e":function(e,t,i){"use strict";var s=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{attrs:{id:"menuContainer"}},[i("div",{ref:"rm",style:{left:e.visible.settings?"200px":"0",top:e.visible.locations?"100px":"0"},attrs:{id:"radialmenu"}},[i("div",{staticClass:"rm-wrapper"},[i("div",{staticClass:"rm-toggler"},[i("ul",{staticClass:"rm-list",class:{"rm-list-dm":e.IS_DM}},[e.IS_DM?i("li",{staticClass:"rm-item",attrs:{id:"rm-locations"},on:{click:function(t){e.visible.locations=!e.visible.locations}}},[e._m(0)]):e._e(),i("li",{staticClass:"rm-item",attrs:{id:"rm-settings"},on:{click:function(t){e.visible.settings=!e.visible.settings}}},[e._m(1)])])]),e._m(2)])]),i("transition",{attrs:{name:"settings"},on:{enter:function(t){e.$refs.rm.style.transition="left 500ms"}}},[e.visible.settings?i("div",{ref:"settings",attrs:{id:"menu"},on:{click:e.settingsClick}},[i("div",{staticStyle:{width:"200px",height:"90%","overflow-y":"auto","overflow-x":"hidden"}},[e.IS_DM?[i("button",{staticClass:"menu-accordion"},[e._v("Assets")]),i("div",{staticClass:"menu-accordion-panel"},[i("a",{staticClass:"actionButton",attrs:{href:"/assets",target:"blank",title:"Open asset manager"}},[i("i",{staticClass:"fas fa-external-link-alt"})]),i("div",{staticClass:"directory",attrs:{id:"menu-tokens"}},[i("asset-node",{attrs:{asset:e.assets}}),e.assets?e._e():i("div",[e._v("No assets")])],1)]),i("button",{staticClass:"menu-accordion"},[e._v("Notes")]),i("div",{staticClass:"menu-accordion-panel"},[i("div",{staticClass:"menu-accordion-subpanel",attrs:{id:"menu-notes"}},[i("a",{staticClass:"actionButton",on:{click:e.createNote}},[i("i",{staticClass:"far fa-plus-square"})]),e._l(e.notes,function(t){return i("div",{key:t.uuid,staticStyle:{cursor:"pointer"},on:{click:function(i){e.openNote(t)}}},[e._v(e._s(t.title||"[?]"))])}),e.notes.length?e._e():i("div",[e._v("No notes")])],2)]),i("button",{staticClass:"menu-accordion"},[e._v("DM Options")]),i("div",{staticClass:"menu-accordion-panel"},[i("div",{staticClass:"menu-accordion-subpanel"},[i("label",{attrs:{for:"fakePlayerInput"}},[e._v("Fake player:")]),i("input",{directives:[{name:"model",rawName:"v-model",value:e.fakePlayer,expression:"fakePlayer"}],attrs:{id:"fakePlayerInput",type:"checkbox",checked:"checked"},domProps:{checked:Array.isArray(e.fakePlayer)?e._i(e.fakePlayer,null)>-1:e.fakePlayer},on:{change:function(t){var i=e.fakePlayer,s=t.target,n=!!s.checked;if(Array.isArray(i)){var o=null,r=e._i(i,o);s.checked?r<0&&(e.fakePlayer=i.concat([o])):r>-1&&(e.fakePlayer=i.slice(0,r).concat(i.slice(r+1)))}else e.fakePlayer=n}}}),i("label",{attrs:{for:"useGridInput"}},[e._v("Use grid:")]),i("input",{directives:[{name:"model",rawName:"v-model",value:e.useGrid,expression:"useGrid"}],attrs:{id:"useGridInput",type:"checkbox",checked:"checked"},domProps:{checked:Array.isArray(e.useGrid)?e._i(e.useGrid,null)>-1:e.useGrid},on:{change:function(t){var i=e.useGrid,s=t.target,n=!!s.checked;if(Array.isArray(i)){var o=null,r=e._i(i,o);s.checked?r<0&&(e.useGrid=i.concat([o])):r>-1&&(e.useGrid=i.slice(0,r).concat(i.slice(r+1)))}else e.useGrid=n}}}),i("label",{attrs:{for:"useFOWInput"}},[e._v("Fill entire canvas with FOW:")]),i("input",{directives:[{name:"model",rawName:"v-model",value:e.fullFOW,expression:"fullFOW"}],attrs:{id:"useFOWInput",type:"checkbox"},domProps:{checked:Array.isArray(e.fullFOW)?e._i(e.fullFOW,null)>-1:e.fullFOW},on:{change:function(t){var i=e.fullFOW,s=t.target,n=!!s.checked;if(Array.isArray(i)){var o=null,r=e._i(i,o);s.checked?r<0&&(e.fullFOW=i.concat([o])):r>-1&&(e.fullFOW=i.slice(0,r).concat(i.slice(r+1)))}else e.fullFOW=n}}}),i("label",{attrs:{for:"fowOpacity"}},[e._v("FOW opacity:")]),i("input",{directives:[{name:"model",rawName:"v-model.number",value:e.fowOpacity,expression:"fowOpacity",modifiers:{number:!0}}],attrs:{id:"fowOpacity",type:"number",min:"0",max:"1",step:"0.1"},domProps:{value:e.fowOpacity},on:{input:function(t){t.target.composing||(e.fowOpacity=e._n(t.target.value))},blur:function(t){e.$forceUpdate()}}}),i("label",{attrs:{for:"fowLOS"}},[e._v("Only show lights in LoS:")]),i("input",{directives:[{name:"model",rawName:"v-model",value:e.fowLOS,expression:"fowLOS"}],attrs:{id:"fowLOS",type:"checkbox"},domProps:{checked:Array.isArray(e.fowLOS)?e._i(e.fowLOS,null)>-1:e.fowLOS},on:{change:function(t){var i=e.fowLOS,s=t.target,n=!!s.checked;if(Array.isArray(i)){var o=null,r=e._i(i,o);s.checked?r<0&&(e.fowLOS=i.concat([o])):r>-1&&(e.fowLOS=i.slice(0,r).concat(i.slice(r+1)))}else e.fowLOS=n}}}),i("label",{attrs:{for:"unitSizeInput"}},[e._v("Unit Size (in ft.):")]),i("input",{directives:[{name:"model",rawName:"v-model.number",value:e.unitSize,expression:"unitSize",modifiers:{number:!0}}],attrs:{id:"unitSizeInput",type:"number"},domProps:{value:e.unitSize},on:{input:function(t){t.target.composing||(e.unitSize=e._n(t.target.value))},blur:function(t){e.$forceUpdate()}}}),i("label",{attrs:{for:"gridSizeInput"}},[e._v("Grid Size (in pixels):")]),i("input",{directives:[{name:"model",rawName:"v-model.number",value:e.gridSize,expression:"gridSize",modifiers:{number:!0}}],attrs:{id:"gridSizeInput",type:"number",min:"0"},domProps:{value:e.gridSize},on:{input:function(t){t.target.composing||(e.gridSize=e._n(t.target.value))},blur:function(t){e.$forceUpdate()}}}),i("label",{attrs:{for:"visionMode"}},[e._v("Vision Mode:")]),i("select",{attrs:{id:"visionMode"},on:{change:e.changeVisionMode}},[i("option",{domProps:{selected:"bvh"===e.$store.state.game.visionMode}},[e._v("BVH")]),i("option",{domProps:{selected:"triangle"===e.$store.state.game.visionMode}},[e._v("Triangle")])]),i("label",{attrs:{for:"vmininp"}},[e._v("Minimal full vision (ft):")]),i("input",{directives:[{name:"model",rawName:"v-model.lazy.number",value:e.visionRangeMin,expression:"visionRangeMin",modifiers:{lazy:!0,number:!0}}],attrs:{id:"vmininp",type:"number",min:"0"},domProps:{value:e.visionRangeMin},on:{change:function(t){e.visionRangeMin=e._n(t.target.value)},blur:function(t){e.$forceUpdate()}}}),i("label",{attrs:{for:"vmaxinp"}},[e._v("Maximal vision (ft):")]),i("input",{directives:[{name:"model",rawName:"v-model.lazy.number",value:e.visionRangeMax,expression:"visionRangeMax",modifiers:{lazy:!0,number:!0}}],attrs:{id:"vmaxinp",type:"number",min:"0"},domProps:{value:e.visionRangeMax},on:{change:function(t){e.visionRangeMax=e._n(t.target.value)},blur:function(t){e.$forceUpdate()}}}),i("label",{attrs:{for:"invitation"}},[e._v("Invitation Code:")]),i("input",{attrs:{id:"invitation",type:"text",readonly:"readonly"},domProps:{value:e.invitationCode}})])])]:e._e(),i("button",{staticClass:"menu-accordion"},[e._v("Client Options")]),i("div",{staticClass:"menu-accordion-panel"},[i("div",{staticClass:"menu-accordion-subpanel"},[i("label",{attrs:{for:"gridColour"}},[e._v("Grid Colour:")]),i("color-picker",{attrs:{id:"gridColour",color:e.gridColour},on:{"update:color":function(t){e.gridColour=t}}}),i("label",{attrs:{for:"fowColour"}},[e._v("FOW Colour:")]),i("color-picker",{attrs:{id:"fowColour",color:e.fowColour},on:{"update:color":function(t){e.fowColour=t}}}),i("label",{attrs:{for:"rulerColour"}},[e._v("Ruler Colour:")]),i("color-picker",{attrs:{id:"rulerColour",color:e.rulerColour},on:{"update:color":function(t){e.rulerColour=t}}})],1)])],2),i("router-link",{staticClass:"menu-accordion",staticStyle:{"text-decoration":"none",display:"inline-block",position:"absolute",bottom:"0"},attrs:{to:"/dashboard"}},[e._v("Exit")])],1):e._e()]),i("transition",{attrs:{name:"locations"},on:{enter:function(t){e.$refs.rm.style.transition="top 500ms"}}},[e.IS_DM&&e.visible.locations?i("div",{attrs:{id:"locations-menu"}},[i("div",[e._l(e.locations,function(t){return i("div",{key:t,on:{click:function(i){e.changeLocation(t)}}},[e._v(e._s(t))])}),i("div",{on:{click:e.createLocation}},[i("i",{staticClass:"fas fa-plus"})])],2)]):e._e()]),i("img",{attrs:{id:"dragImage"}})],1)},n=[function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("a",{attrs:{href:"#"}},[i("i",{staticClass:"far fa-compass"})])},function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("a",{attrs:{href:"#"}},[i("i",{staticClass:"fas fa-cog"})])},function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("span",{staticClass:"rm-topper"},[i("i",{staticClass:"icon-share-alt"})])}];i.d(t,"a",function(){return s}),i.d(t,"b",function(){return n})},"851c":function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0});const s=i("9ab4"),n=s.__importDefault(i("a026")),o=s.__importDefault(i("65d9")),r=s.__importDefault(i("d65f"));let a=class extends n.default{constructor(){super(...arguments),this.visible=!1,this.question="",this.answer="",this.title="",this.resolve=(e=>{}),this.reject=(()=>{})}submit(){this.resolve(this.answer),this.close()}close(){this.reject(),this.visible=!1,this.question="",this.answer="",this.title=""}prompt(e,t){return this.question=e,this.title=t,this.visible=!0,this.$nextTick(()=>{this.$refs.answer.focus()}),new Promise((e,t)=>{this.resolve=e,this.reject=t})}};a=s.__decorate([o.default({components:{Modal:r.default}})],a),t.default=a},8790:function(e,t,i){"use strict";var s=i("a912"),n=i.n(s);n.a},"88af":function(e,t,i){"use strict";var s=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",[e._v(e._s(e.message))])},n=[];i.d(t,"a",function(){return s}),i.d(t,"b",function(){return n})},"8cd4":function(e,t,i){"use strict";i.r(t);var s=i("9587"),n=i.n(s);for(var o in s)"default"!==o&&function(e){i.d(t,e,function(){return s[e]})}(o);t["default"]=n.a},"8db6":function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0});const s=i("8f0a"),n=i("92b1");class o{constructor(e,t,i){this.w=t,this.h=i,this.topLeft=e,this.topRight=new s.GlobalPoint(e.x+t,e.y),this.botRight=new s.GlobalPoint(e.x+t,e.y+i),this.botLeft=new s.GlobalPoint(e.x,e.y+i)}contains(e){return this.topLeft.x<=e.x&&this.topRight.x>=e.x&&this.topLeft.y<=e.y&&this.botLeft.y>=e.y}get points(){return 0===this.w||0===this.h?[[this.topLeft.x,this.topLeft.y]]:[[this.topLeft.x,this.topLeft.y],[this.botLeft.x,this.botLeft.y],[this.botRight.x,this.botRight.y],[this.topRight.x,this.topRight.y]]}offset(e){return new o(this.topLeft.add(e),this.w,this.h)}union(e){const t=Math.min(this.topLeft.x,e.topLeft.x),i=Math.max(this.topRight.x,e.topRight.x),n=Math.min(this.topLeft.y,e.topLeft.y),r=Math.max(this.botLeft.y,e.botLeft.y);return new o(new s.GlobalPoint(t,n),i-t,r-n)}getDiagCorner(e){return e?this.botRight:this.topLeft}intersectsWith(e){return!(e.topLeft.x>this.topRight.x||e.topRight.xthis.botLeft.y||e.botLeft.y=this.topRight.x||e.topRight.x<=this.topLeft.x||e.topLeft.y>=this.botLeft.y||e.botLeft.y<=this.topLeft.y)}intersectP(e,t,i){let s=t.x*(this.getDiagCorner(i[0]).x-e.origin.x),n=t.x*(this.getDiagCorner(!i[0]).x-e.origin.x);const o=t.y*(this.getDiagCorner(i[1]).y-e.origin.y),r=t.y*(this.getDiagCorner(!i[1]).y-e.origin.y);return s>r||o>n?{hit:!1,min:s,max:n}:(o>s&&(s=o),r0,min:s,max:n})}center(){return this.topLeft.add(new s.Vector(this.w/2,this.h/2))}getMaxExtent(){return this.w>this.h?0:1}visibleInCanvas(e){const t=!(n.g2lx(this.topLeft.x)>e.width||n.g2ly(this.topLeft.y)>e.height||n.g2lx(this.topRight.x)<0||n.g2ly(this.botRight.y)<0);return!!t}}t.BoundingRect=o},"8e60":function(e,t,i){"use strict";var s=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{attrs:{id:"formcontainer"}},[e.owned||e.joined?i("form",[i("fieldset",[i("legend",{staticClass:"legend"},[e._v("Your sessions")]),i("div",{staticClass:"input"},[e._l(e.owned,function(t,s){return i("router-link",{key:"o-"+s,attrs:{to:"/game/"+t[1]+"/"+t[0]}},[e._v(e._s(t[0]))])}),e._l(e.joined,function(t,s){return i("router-link",{key:"j-"+s,attrs:{to:"/game/"+t[1]+"/"+t[0]}},[e._v(e._s(t[1])+"/"+e._s(t[0]))])})],2),0===e.owned.length?i("div",{staticClass:"input"},[e._v("No active sessions")]):e._e()])]):e._e(),e._m(0),i("form",{on:{submit:function(t){return t.preventDefault(),e.createRoom(t)}}},[i("fieldset",[e.owned||e.joined?i("div",{staticClass:"input"},[e._v("Create a new session")]):i("legend",{staticClass:"legend"},[e._v("Create a session")]),i("div",{staticClass:"input"},[i("input",{directives:[{name:"model",rawName:"v-model",value:e.newSessionName,expression:"newSessionName"}],attrs:{type:"text",name:"room_name",placeholder:"Session Name"},domProps:{value:e.newSessionName},on:{input:function(t){t.target.composing||(e.newSessionName=t.target.value)}}}),e._m(1)]),e._m(2)])]),i("div",{attrs:{id:"account-options"}},[i("form",{on:{submit:function(e){e.preventDefault()}}},[i("router-link",{staticClass:"submit",attrs:{tag:"button",title:"Account Settings",to:"/account"}},[i("i",{staticClass:"fas fa-cog"})])],1),i("form",{on:{submit:function(e){e.preventDefault()}}},[i("router-link",{staticClass:"submit",attrs:{tag:"button",title:"Logout",to:"/auth/logout"}},[i("i",{staticClass:"fas fa-sign-out-alt"})])],1)])])},n=[function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("h4",[i("span",[e._v("OR")])])},function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("span",[i("i",{staticClass:"fab fa-d-and-d"})])},function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("button",{staticClass:"submit",attrs:{type:"submit",title:"Create"}},[i("i",{staticClass:"fas fa-arrow-right"})])}];i.d(t,"a",function(){return s}),i.d(t,"b",function(){return n})},"8f0a":function(e,t,i){"use strict";function s(e,t){const i=e.x-t.x,s=e.y-t.y;return Math.sqrt(i*i+s*s)}Object.defineProperty(t,"__esModule",{value:!0}),t.getPointDistance=s;class n{constructor(e,t){this.x=e,this.y=t}static fromArray(e){return new n(e[0],e[1])}add(e){return new n(this.x+e.x,this.y+e.y)}subtract(e){return new a(this.x-e.x,this.y-e.y)}clone(){return new n(this.x,this.y)}get(e){return 0===e?this.x:this.y}asArray(){return[this.x,this.y]}}t.Point=n;class o extends n{add(e){return super.add(e)}subtract(e){return super.subtract(e)}clone(){return super.clone()}static fromArray(e){return new o(e[0],e[1])}}t.GlobalPoint=o;class r extends n{add(e){return super.add(e)}subtract(e){return super.subtract(e)}clone(){return super.clone()}}t.LocalPoint=r;class a{constructor(e,t){this.x=e,this.y=t}dot(e){return this.x*e.x+this.y*e.y}inverse(){return new a(0===this.x?0:1/this.x,0===this.y?0:1/this.y)}length(){return Math.sqrt(Math.pow(this.x,2)+Math.pow(this.y,2))}normalize(){const e=this.length();return new a(this.x/e,this.y/e)}reverse(){return new a(-this.x,-this.y)}multiply(e){return new a(this.x*e,this.y*e)}angle(){return 180*Math.atan2(this.y,this.x)/Math.PI}}t.Vector=a;class l{constructor(e,t,i){this.direction=t,this.origin=e,void 0===i&&(i=1/0),this.tMax=i}static fromPoints(e,t){const i=new a(t.x-e.x,t.y-e.y);let s;return s=Math.abs(i.x)>.01?(t.x-e.x)/i.x:(t.y-e.y)/i.y,new l(e,i,s)}get(e){return new n(this.origin.x+e*this.direction.x,this.origin.y+e*this.direction.y)}getDistance(e,t){return Math.sqrt(Math.pow(t-e,2)*(Math.pow(this.direction.x,2)+Math.pow(this.direction.y,2)))}getT(e,t){return e+Math.sqrt(Math.pow(t,2)/(Math.pow(this.direction.x,2)+Math.pow(this.direction.y,2)))}}t.Ray=l},"8f54":function(e,t,i){"use strict";var s=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("ul",[e._l(e.folders,function(t){return i("li",{key:t,staticClass:"folder",on:{click:function(t){return t.stopPropagation(),e.toggle(t)}}},[e._v("\n "+e._s(t)+"\n "),i("asset-node",{attrs:{asset:e.asset[t]}})],1)}),e._l(e.files,function(t){return i("li",{key:t.name,staticClass:"file draggable token",attrs:{draggable:"true"},on:{mouseover:function(i){e.showImage=t.hash},mouseout:function(t){e.showImage=null},dragstart:function(i){e.dragStart(i,"/static/assets/"+t.hash)}}},[e._v("\n "+e._s(t.name)+"\n "),e.showImage==t.hash?i("div",{staticClass:"preview"},[i("img",{staticClass:"asset-preview-image",attrs:{src:"/static/assets/"+t.hash}})]):e._e()])})],2)},n=[];i.d(t,"a",function(){return s}),i.d(t,"b",function(){return n})},"919a":function(e,t,i){},"91df":function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0});const s=i("9ab4"),n=s.__importDefault(i("a026")),o=s.__importDefault(i("65d9")),r=s.__importDefault(i("6f79"));i("fe80");const a=i("2ef0"),l=s.__importDefault(i("a535")),c=s.__importDefault(i("cec2")),u=s.__importDefault(i("f5fe")),d=s.__importDefault(i("f74c")),h=s.__importDefault(i("19f9")),f=s.__importDefault(i("f551")),p=s.__importDefault(i("f086")),g=s.__importDefault(i("6100")),v=i("0bc6"),m=i("77a6"),y=i("bb17"),b=i("6f92"),_=i("f10f"),w=i("92b1"),S=i("8f0a");let x=class extends n.default{constructor(){super(...arguments),this.ready={manager:!1,tools:!1}}get showUI(){return _.gameStore.showUI}get IS_DM(){return _.gameStore.IS_DM}get layers(){return _.gameStore.layers}get selectedLayer(){return _.gameStore.selectedLayer}get zoomDisplay(){return _.gameStore.zoomDisplay}set zoomDisplay(e){_.gameStore.updateZoom({newZoomDisplay:e,zoomLocation:w.l2g(new S.LocalPoint(window.innerWidth/2,window.innerHeight/2))})}mounted(){window.addEventListener("resize",this.resizeWindow),window.addEventListener("keyup",m.onKeyUp),window.addEventListener("keydown",m.onKeyDown),this.ready.manager=!0}destroyed(){window.removeEventListener("resize",this.resizeWindow),window.removeEventListener("keyup",m.onKeyUp),window.removeEventListener("keydown",m.onKeyDown),this.ready.manager=!1}zoom(e){a.throttle(y.scrollZoom)(e)}resizeWindow(){b.layerManager.setWidth(window.innerWidth),b.layerManager.setHeight(window.innerHeight),b.layerManager.invalidate()}mousedown(e){this.$refs.tools.mousedown(e)}mouseup(e){this.$refs.tools.mouseup(e)}mousemove(e){this.$refs.tools.mousemove(e)}mouseleave(e){this.$refs.tools.mouseleave(e)}contextmenu(e){this.$refs.tools.contextmenu(e)}selectLayer(e){b.layerManager.selectLayer(e)}drop(e){if(null!==e&&null!==e.dataTransfer)if(e.dataTransfer.files.length>0)this.$refs.confirm.open("Uploading files should be done through the asset manager.","Ok","").then(()=>{},()=>{});else{if(""===e.dataTransfer.getData("text/plain"))return;b.layerManager.dropAsset(e)}}};x=s.__decorate([o.default({components:{"tool-bar":g.default,"selection-info":p.default,"prompt-dialog":c.default,"confirm-dialog":l.default,"menu-bar":h.default,"initiative-dialog":u.default,"zoom-slider":r.default,"note-dialog":f.default,"label-dialog":d.default},beforeRouteEnter(e,t,i){v.createConnection(e),i()},beforeRouteLeave(e,t,i){v.socket.disconnect(),i()}})],x),t.default=x},9227:function(e,t,i){},"92b1":function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0});const s=i("8f0a"),n=i("f10f");function o(e){const t=n.gameStore.zoomFactor,i=n.gameStore.panX,o=n.gameStore.panY;return new s.LocalPoint((e.x+i)*t,(e.y+o)*t)}function r(e){return o(new s.GlobalPoint(e,0)).x}function a(e){return o(new s.GlobalPoint(0,e)).y}function l(e){return e*n.gameStore.zoomFactor}function c(e){return e/n.gameStore.unitSize*n.gameStore.gridSize}function u(e){return l(c(e))}function d(e){const t=n.gameStore.zoomFactor,i=n.gameStore.panX,o=n.gameStore.panY;return e instanceof s.LocalPoint?new s.GlobalPoint(e.x/t-i,e.y/t-o):new s.Ray(d(e.origin),e.direction.multiply(1/t),e.tMax)}function h(e){return d(new s.LocalPoint(e,0)).x}function f(e){return d(new s.LocalPoint(0,e)).y}function p(e){return e/n.gameStore.zoomFactor}function g(e){return p(c(e))}t.g2l=o,t.g2lx=r,t.g2ly=a,t.g2lz=l,t.getUnitDistance=c,t.g2lr=u,t.l2g=d,t.l2gx=h,t.l2gy=f,t.l2gz=p,t.l2gr=g,window.g2lx=r,window.g2ly=a},9587:function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0});const s=i("9ab4"),n=s.__importDefault(i("a026")),o=s.__importDefault(i("65d9")),r=i("2f62"),a=s.__importDefault(i("3b36")),l=s.__importDefault(i("0ddd")),c=i("4a5b"),u=i("0bc6"),d=i("6f92"),h=i("f10f");let f=class extends n.default{constructor(){super(...arguments),this.visible={settings:!1,locations:!1}}get IS_DM(){return h.gameStore.IS_DM||h.gameStore.FAKE_PLAYER}get fakePlayer(){return h.gameStore.FAKE_PLAYER}set fakePlayer(e){h.gameStore.setFakePlayer(e)}get useGrid(){return h.gameStore.useGrid}set useGrid(e){h.gameStore.setUseGrid({useGrid:e,sync:!0})}get fullFOW(){return h.gameStore.fullFOW}set fullFOW(e){h.gameStore.setFullFOW({fullFOW:e,sync:!0})}get fowOpacity(){return h.gameStore.fowOpacity}set fowOpacity(e){"number"===typeof e&&h.gameStore.setFOWOpacity({fowOpacity:e,sync:!0})}get fowLOS(){return h.gameStore.fowLOS}set fowLOS(e){h.gameStore.setLineOfSight({fowLOS:e,sync:!0})}get unitSize(){return h.gameStore.unitSize}set unitSize(e){"number"===typeof e&&h.gameStore.setUnitSize({unitSize:e,sync:!0})}get gridSize(){return h.gameStore.gridSize}set gridSize(e){"number"===typeof e&&h.gameStore.setGridSize({gridSize:e,sync:!0})}get gridColour(){return h.gameStore.gridColour}set gridColour(e){h.gameStore.setGridColour({colour:e,sync:!0})}get fowColour(){return h.gameStore.fowColour}set fowColour(e){h.gameStore.setFOWColour({colour:e,sync:!0})}get rulerColour(){return h.gameStore.rulerColour}set rulerColour(e){h.gameStore.setRulerColour({colour:e,sync:!0})}get visionRangeMin(){return h.gameStore.visionRangeMin}set visionRangeMin(e){"number"===typeof e&&h.gameStore.setVisionRangeMin({value:e,sync:!0})}get visionRangeMax(){return h.gameStore.visionRangeMax}set visionRangeMax(e){"number"===typeof e&&h.gameStore.setVisionRangeMax({value:e,sync:!0})}settingsClick(e){if(e.target.classList.contains("menu-accordion")){e.target.classList.toggle("menu-accordion-active");const t=e.target.nextElementSibling;null!==t&&(t.style.display=""===t.style.display?"block":"")}}changeLocation(e){u.socket.emit("Location.Change",e)}createLocation(){c.getRef("prompt").prompt("New location name:","Create new location").then(e=>{u.socket.emit("Location.New",e)},()=>{})}createNote(){const e={title:"New note",text:"",uuid:c.uuidv4()};h.gameStore.newNote({note:e,sync:!0}),this.openNote(e)}openNote(e){c.getRef("note").open(e)}changeVisionMode(e){const t=e.target.value.toLowerCase();"bvh"!==t&&"triangle"!==t||(h.gameStore.setVisionMode({mode:t,sync:!0}),h.gameStore.recalculateVision(),h.gameStore.recalculateMovement(),d.layerManager.invalidate())}};f=s.__decorate([o.default({components:{"color-picker":a.default,"asset-node":l.default},computed:Object.assign({},r.mapState("game",["invitationCode","locations","assets","notes"]))})],f),t.default=f},"979e":function(e,t,i){"use strict";i.r(t);var s=i("0634"),n=i.n(s);for(var o in s)"default"!==o&&function(e){i.d(t,e,function(){return s[e]})}(o);t["default"]=n.a},9845:function(e,t,i){"use strict";var s=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("ContextMenu",{attrs:{visible:e.visible,left:e.x+"px",top:e.y+"px"},on:{close:e.close}},[e.IS_DM?i("li",{on:{click:e.bringPlayers}},[e._v("Bring players")]):e._e(),i("li",{on:{click:e.createToken}},[e._v("Create basic token")]),i("li",{on:{click:e.showInitiative}},[e._v("Show initiative")])])},n=[];i.d(t,"a",function(){return s}),i.d(t,"b",function(){return n})},"98ef":function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0});const s=i("4aee");let n;var o,r;function a(){return[t.INFINITE,t.INFINITE]}t.INFINITE=-Infinity,function(e){e[e["NEGATIVE"]=-1]="NEGATIVE",e[e["ZERO"]=0]="ZERO",e[e["POSITIVE"]=1]="POSITIVE",e[e["RIGHT_TURN"]=-1]="RIGHT_TURN",e[e["LEFT_TURN"]=1]="LEFT_TURN",e[e["SMALLER"]=-1]="SMALLER",e[e["EQUAL"]=0]="EQUAL",e[e["LARGER"]=1]="LARGER",e[e["CLOCKWISE"]=-1]="CLOCKWISE",e[e["COUNTERCLOCKWISE"]=1]="COUNTERCLOCKWISE",e[e["COLLINEAR"]=0]="COLLINEAR",e[e["COPLANAR"]=0]="COPLANAR",e[e["DEGENERATE"]=0]="DEGENERATE",e[e["ON_NEGATIVE_SIDE"]=-1]="ON_NEGATIVE_SIDE",e[e["ON_ORIENTED_BOUNDARY"]=0]="ON_ORIENTED_BOUNDARY",e[e["ON_POSITIVE_SIDE"]=1]="ON_POSITIVE_SIDE"}(o=t.Sign||(t.Sign={})),function(e){e[e["UNDEFINED"]=-1]="UNDEFINED",e[e["VERTEX_VERTEX"]=0]="VERTEX_VERTEX",e[e["VERTEX_EDGE"]=1]="VERTEX_EDGE",e[e["EDGE_VERTEX"]=2]="EDGE_VERTEX",e[e["EDGE_EDGE"]=3]="EDGE_EDGE"}(r||(r={}));class l{constructor(...e){this.vertices=[],this.neighbours=[null,null,null],this.constraints=[!1,!1,!1],this.uid=l._counter++,this.vertices=e}from(e){return this.vertices=e.vertices.slice(0,e.vertices.length),this.neighbours=e.neighbours.slice(0,e.neighbours.length),this.constraints=e.constraints.slice(0,e.constraints.length),this}get dimension(){return this.vertices.length-1}addVertex(e){void 0===e&&console.log("UNDEFINED HIERE"),this.vertices.push(e),e.triangle=this}isConstrained(e){return this.constraints[e]}reorient(){this.vertices=[this.vertices[1],this.vertices[0],this.vertices[2]].slice(0,this.vertices.length),this.neighbours=[this.neighbours[1],this.neighbours[0],this.neighbours[2]],this.constraints=[this.constraints[1],this.constraints[0],this.constraints[2]]}indexV(e){return this.vertices.indexOf(e)}indexT(e){return this.neighbours.indexOf(e)}isInfinite(e){return void 0===e?this.vertices.includes(n):this.vertices[s.ccw(e)].infinite||this.vertices[s.cw(e)].infinite}contains(e){const t=-this.vertices[1].point[1]*this.vertices[2].point[0]+this.vertices[0].point[1]*(-this.vertices[1].point[0]+this.vertices[2].point[0])+this.vertices[0].point[0]*(this.vertices[1].point[1]-this.vertices[2].point[1])+this.vertices[1].point[0]*this.vertices[2].point[1],i=t<0?-1:1,s=(this.vertices[0].point[1]*this.vertices[2].point[0]-this.vertices[0].point[0]*this.vertices[2].point[1]+(this.vertices[2].point[1]-this.vertices[0].point[1])*e[0]+(this.vertices[0].point[0]-this.vertices[2].point[0])*e[1])*i;if(s<0)return!1;const n=(this.vertices[0].point[0]*this.vertices[1].point[1]-this.vertices[0].point[1]*this.vertices[1].point[0]+(this.vertices[0].point[1]-this.vertices[1].point[1])*e[0]+(this.vertices[1].point[0]-this.vertices[0].point[0])*e[1])*i;return n>0&&s+nt!==e)}setAdjacency(e,t,i,s){e.neighbours[t]=i,i.neighbours[s]=e}get finiteVertex(){return this.vertices[1]}get infiniteVertex(){const e=new c(a());return e.infinite=!0,e}get finiteEdge(){if(this.dimension<1)throw new Error("aspo");const e=new d(this);while(e.valid)e.next();return e.collect()}insertDimUp(e=new c,t=!0){const i=this.createVertex();let s,n;switch(this.dimension++,this.dimension){case 0:s=this.triangles[0],n=new l(i),this.triangles.push(n),this.setAdjacency(s,0,n,0),i.triangle=n;break;case 1:case 2:{const o=[],r=this.triangles.slice(0,this.triangles.length);for(const t of r){const s=(new l).from(t);this.triangles.push(s),t.vertices[this.dimension]=i,s.vertices[this.dimension]=e,this.setAdjacency(t,this.dimension,s,this.dimension),t.vertices.includes(e)&&o.push(s)}for(const e of r){const t=e.neighbours[this.dimension];for(let i=0;ie.center.center().get(r)0){if(i=!0,s=e.tMax=d.min,n=d.max,0===o||t)break;r=a[--o]}else c[u.dimension]?(a[o++]=r+1,r=u.secondChildOffset):(a[o++]=u.secondChildOffset,r++);else{if(0===o)break;r=a[--o]}}return{hit:i,intersect:e.get(s),tMin:s,tMax:n}}compact(){this.offset=0,null!==this.root&&this.flatten(this.root)}flatten(e){const t=this.offset,i=this.offset++;if(0===e.nPrimitives){this.flatten(e.children[0]);const i=this.flatten(e.children[1]);this.nodes[t]={bbox:e.bbox,dimension:e.dimension,nPrimitives:0,secondChildOffset:i}}else this.nodes[t]={bbox:e.bbox,primitivesOffset:e.firstPrimOffset,nPrimitives:e.nPrimitives};return i}createLeaf(e,t,i,s){const n=this.orderedPrims.length;for(let o=e;o1?i("li",[e._v("Layer\n "),i("ul",e._l(e.getLayers(),function(t){return i("li",{key:t.name,style:[e.getActiveLayer().name===t.name?{"background-color":"#82c8a0"}:{}],on:{click:function(i){e.setLayer(t.name)}}},[e._v(e._s(t.name))])}))]):e._e(),i("li",{on:{click:e.moveToBack}},[e._v("Move to back")]),i("li",{on:{click:e.moveToFront}},[e._v("Move to front")]),i("li",{on:{click:e.addInitiative}},[e._v(e._s(e.getInitiativeWord())+" initiative")]),i("li",{on:{click:e.openEditDialog}},[e._v("Show properties")])]):e._e()},n=[];i.d(t,"a",function(){return s}),i.d(t,"b",function(){return n})},a260:function(e,t,i){},a37b:function(e,t,i){},a450:function(e,t,i){},a474:function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0});const s=i("9ab4"),n=s.__importDefault(i("bc3a")),o=s.__importDefault(i("a026")),r=s.__importDefault(i("65d9")),a=i("cc67");r.default.registerHooks(["beforeRouteEnter"]);let l=class extends o.default{constructor(){super(...arguments),this.owned=[],this.joined=[],this.error="",this.newSessionName=""}beforeRouteEnter(e,t,i){n.default.get("/api/rooms").then(e=>{i(t=>{t.owned=e.data.owned,t.joined=e.data.joined})}).catch(e=>{i(t=>{t.error=e.message})})}createRoom(e){n.default.post("/api/rooms",{name:this.newSessionName}).then(e=>{this.$router.push(`/game/${a.coreStore.username}/${this.newSessionName}`)}).catch(e=>{this.error=e.message})}};l=s.__decorate([r.default],l),t.default=l},a535:function(e,t,i){"use strict";i.r(t);var s=i("e06e"),n=i("f30c");for(var o in n)"default"!==o&&function(e){i.d(t,e,function(){return n[e]})}(o);i("223d");var r=i("2877"),a=Object(r["a"])(n["default"],s["a"],s["b"],!1,null,"1883e207",null);a.options.__file="confirm.vue",t["default"]=a.exports},a68b:function(e,t,i){"use strict";i.r(t);var s=i("308b"),n=i.n(s);for(var o in s)"default"!==o&&function(e){i.d(t,e,function(){return s[e]})}(o);t["default"]=n.a},a755:function(e,t,i){"use strict";var s=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("ContextMenu",{attrs:{visible:e.visible,left:e.left+"px",top:e.top+"px"},on:{close:e.close}},[i("li",{on:{click:e.rename}},[e._v("Rename")]),i("li",{on:{click:e.remove}},[e._v("Remove")])])},n=[];i.d(t,"a",function(){return s}),i.d(t,"b",function(){return n})},a7b3:function(e,t,i){"use strict";var s=i("6542"),n=i.n(s);n.a},a912:function(e,t,i){},aa69:function(e,t,i){"use strict";i.r(t);var s=i("0cf7"),n=i.n(s);for(var o in s)"default"!==o&&function(e){i.d(t,e,function(){return s[e]})}(o);t["default"]=n.a},af17:function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0});const s=i("9ab4"),n=s.__importDefault(i("a026"));t.EventBus=new n.default},b0ac:function(e,t,i){"use strict";i.r(t);var s=i("a474"),n=i.n(s);for(var o in s)"default"!==o&&function(e){i.d(t,e,function(){return s[e]})}(o);t["default"]=n.a},b0c0:function(e,t,i){},b2ed:function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0});const s=i("c266"),n=i("f10f"),o=i("92b1"),r=i("5a5c");class a extends s.BaseRect{constructor(e,t,i,s,n,o){super(e,t,i,s,n,o),this.type="rect"}asDict(){return super.getBaseDict()}draw(e){super.draw(e),"fog"===this.fillColour?e.fillStyle=r.getFogColour():e.fillStyle=this.fillColour;const t=n.gameStore.zoomFactor,i=o.g2l(this.refPoint);e.fillRect(i.x,i.y,this.w*t,this.h*t),"rgba(0, 0, 0, 0)"!==this.strokeColour&&(e.strokeStyle=this.strokeColour,e.lineWidth=5,e.strokeRect(i.x,i.y,this.w*t,this.h*t))}}t.Rect=a},b599:function(e,t,i){},b62e:function(e,t,i){"use strict";var s=i("3eaf"),n=i.n(s);n.a},b6bc:function(e,t,i){"use strict";i.r(t);var s=i("5394"),n=i.n(s);for(var o in s)"default"!==o&&function(e){i.d(t,e,function(){return s[e]})}(o);t["default"]=n.a},b809:function(e,t,i){"use strict";i.r(t);var s=i("ca56"),n=i.n(s);for(var o in s)"default"!==o&&function(e){i.d(t,e,function(){return s[e]})}(o);t["default"]=n.a},b906:function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0});const s=i("8f0a"),n=i("bab4"),o=i("6f92"),r=i("d1ec"),a=i("f10f"),l=i("92b1"),c=i("cee3");class u extends n.Layer{constructor(){super(...arguments),this.isVisionLayer=!0}draw(){if(!this.valid){const t=this.ctx;if(!a.gameStore.fowLOS||r.Settings.skipPlayerFOW)return t.clearRect(0,0,this.canvas.width,this.canvas.height),void(this.valid=!0);t.clearRect(0,0,this.canvas.width,this.canvas.height);const i=t.globalCompositeOperation;t.fillStyle="rgba(0, 0, 0, 1)",a.gameStore.IS_DM||super.draw(!a.gameStore.fullFOW);const n=t.canvas.width+t.canvas.height;for(const u of a.gameStore.activeTokens){const i=o.layerManager.UUIDMap.get(u);if(void 0===i)continue;const d=i.center(),h=l.g2l(d);if("bvh"===a.gameStore.visionMode){t.beginPath();let e=-1;for(let i=0;i<2*Math.PI;i+=r.Settings.angleSteps/2/180*Math.PI){const o=Math.cos(i),r=Math.sin(i),c=new s.Ray(d,new s.Vector(o,r)),u=a.gameStore.BV.intersect(c);u.hit?(-1!==e&&(t.arc(h.x,h.y,n,e,i),e=-1),t.lineTo(l.g2lx(u.intersect.x),l.g2ly(u.intersect.y))):-1===e&&(t.lineTo(h.x+n*o,h.y+n*r),e=i)}-1!==e?t.arc(h.x,h.y,n,e,2*Math.PI):t.closePath(),t.fill()}else{{const e=t.createRadialGradient(h.x,h.y,l.g2lr(a.gameStore.visionRangeMin),h.x,h.y,l.g2lr(a.gameStore.visionRangeMax));e.addColorStop(0,"rgba(0, 0, 0, 1)"),e.addColorStop(1,"rgba(0, 0, 0, 0)"),t.fillStyle=e}try{const s=c.computeVisibility(i.center(),"vision");t.beginPath(),t.moveTo(l.g2lx(s[0][0]),l.g2ly(s[0][1]));for(const e of s)t.lineTo(l.g2lx(e[0]),l.g2ly(e[1]));t.closePath(),t.fill()}catch(e){}}}a.gameStore.IS_DM&&super.draw(!a.gameStore.fullFOW),t.globalCompositeOperation=i}}}t.FOWPlayersLayer=u},bab4:function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0});const s=i("0bc6"),n=i("af17"),o=i("6f92"),r=i("206a"),a=i("f10f"),l=i("92b1");class c{constructor(e,t){this.selectable=!1,this.playerEditable=!1,this.isVisionLayer=!1,this.valid=!1,this.shapes=[],this.selection=[],this.selectionColor="#CC0000",this.selectionWidth=2,this.canvas=e,this.name=t,this.width=e.width,this.height=e.height,this.ctx=e.getContext("2d")}invalidate(e){this.valid=!1,e||o.layerManager.invalidateLight()}addShape(e,t,i,n=!0){void 0===i&&(i=!1),e.layer=this.name,this.shapes.push(e),o.layerManager.UUIDMap.set(e.uuid,e),e.checkVisionSources(n),e.setMovementBlock(e.movementObstruction,n),e.ownedBy(a.gameStore.username)&&e.isToken&&a.gameStore.ownedtokens.push(e.uuid),e.annotation.length&&a.gameStore.annotations.push(e.uuid),t&&s.socket.emit("Shape.Add",{shape:e.asDict(),temporary:i}),n&&this.invalidate(!t)}setShapes(e){for(const t of e){const e=r.createShapeFromDict(t);if(void 0===e)return void console.log(`Shape with unknown type ${t.type_} could not be added`);this.addShape(e,!1,!1,!1)}this.clearSelection(),this.invalidate(!1)}removeShape(e,t,i){void 0===i&&(i=!1),this.shapes.splice(this.shapes.indexOf(e),1),t&&s.socket.emit("Shape.Remove",{shape:e.asDict(),temporary:i});const n=a.gameStore.visionSources.findIndex(t=>t.shape===e.uuid),r=a.gameStore.visionBlockers.findIndex(t=>t===e.uuid),l=a.gameStore.movementblockers.findIndex(t=>t===e.uuid),c=a.gameStore.annotations.findIndex(t=>t===e.uuid);n>=0&&a.gameStore.visionSources.splice(n,1),r>=0&&a.gameStore.visionBlockers.splice(r,1),l>=0&&a.gameStore.movementblockers.splice(l,1),c>=0&&a.gameStore.annotations.splice(c,1);const u=a.gameStore.annotations.indexOf(e.uuid);u>=0&&a.gameStore.annotations.splice(u,1);const d=a.gameStore.ownedtokens.indexOf(e.uuid);d>=0&&a.gameStore.ownedtokens.splice(d,1),o.layerManager.UUIDMap.delete(e.uuid);const h=this.selection.indexOf(e);h>=0&&this.selection.splice(h,1),r>=0&&a.gameStore.recalculateVision(),l>=0&&a.gameStore.recalculateMovement(),this.invalidate(!t)}clear(){this.ctx.clearRect(0,0,this.width,this.height)}clearSelection(){this.selection=[],n.EventBus.$emit("SelectionInfo.Shape.Set",null)}draw(e){if(!this.valid){const t=this.ctx,i=t.globalCompositeOperation;e=void 0===e||e,e&&this.clear();const s=this;if(this.shapes.forEach(e=>{e.options.has("skipDraw")&&e.options.get("skipDraw")||void 0!==o.layerManager.getLayer()&&e.visibleInCanvas(s.canvas)&&("fow"===s.name&&e.visionObstruction&&o.layerManager.getLayer().name!==s.name||e.drawAuras(t))}),this.shapes.forEach(e=>{e.options.has("skipDraw")&&e.options.get("skipDraw")||0===e.labels.length&&a.gameStore.filterNoLabel||e.labels.length&&a.gameStore.labelFilters.length&&!e.labels.some(e=>a.gameStore.labelFilters.includes(e.uuid))||void 0!==o.layerManager.getLayer()&&e.visibleInCanvas(s.canvas)&&("fow"===s.name&&e.visionObstruction&&o.layerManager.getLayer().name!==s.name||e.draw(t))}),null!=this.selection){t.fillStyle=this.selectionColor,t.strokeStyle=this.selectionColor,t.lineWidth=this.selectionWidth;const e=a.gameStore.zoomFactor;this.selection.forEach(i=>{t.globalCompositeOperation=i.globalCompositeOperation;const s=i.getBoundingBox();t.strokeRect(l.g2lx(s.topLeft.x),l.g2ly(s.topLeft.y),s.w*e,s.h*e);for(const e of i.points)t.beginPath(),t.arc(l.g2lx(e[0]),l.g2ly(e[1]),3,0,2*Math.PI),t.fill();t.beginPath(),t.moveTo(l.g2lx(i.points[0][0]),l.g2ly(i.points[0][1]));for(let e=1;e<=i.points.length;e++){const s=i.points[e%i.points.length];t.lineTo(l.g2lx(s[0]),l.g2ly(s[1]))}t.stroke()})}t.globalCompositeOperation=i,this.valid=!0}}moveShapeOrder(e,t,i){const n=this.shapes.indexOf(e);n!==t&&(this.shapes.splice(n,1),this.shapes.splice(t,0,e),i&&s.socket.emit("Shape.Order.Set",{shape:e.asDict(),index:t}),this.invalidate(!0))}}t.Layer=c},bb17:function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0});const s=i("f10f"),n=i("92b1"),o=i("5a5c");function r(e){if(!e.target||!e.target.tagName||"CANVAS"!==e.target.tagName)return;let t;t=-1*Math.sign(e.deltaY),s.gameStore.updateZoom({newZoomDisplay:s.gameStore.zoomDisplay-.1*t,zoomLocation:n.l2g(o.getMouse(e))})}t.scrollZoom=r},bea6:function(e,t,i){"use strict";i.r(t);var s=i("e8bb"),n=i("b6bc");for(var o in n)"default"!==o&&function(e){i.d(t,e,function(){return n[e]})}(o);i("e3f5"),i("99ea");var r=i("2877"),a=Object(r["a"])(n["default"],s["a"],s["b"],!1,null,"dca395d6",null);a.options.__file="filter.vue",t["default"]=a.exports},c266:function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0});const s=i("8f0a"),n=i("8db6"),o=i("2469"),r=i("f10f"),a=i("2838"),l=i("92b1");class c extends o.Shape{constructor(e,t,i,s,n,o){super(e,s,n,o),this.w=t,this.h=i}getBaseDict(){return Object.assign(super.getBaseDict(),{width:this.w,height:this.h})}getBoundingBox(){return new n.BoundingRect(this.refPoint,this.w,this.h)}get points(){if(0===this.w||0===this.h)return[[this.refPoint.x,this.refPoint.y]];const e=this.refPoint.add(new s.Vector(0,this.h)),t=this.refPoint.add(new s.Vector(this.w,this.h)),i=this.refPoint.add(new s.Vector(this.w,0));return[[this.refPoint.x,this.refPoint.y],[e.x,e.y],[t.x,t.y],[i.x,i.y]]}contains(e){return this.refPoint.x<=e.x&&this.refPoint.x+this.w>=e.x&&this.refPoint.y<=e.y&&this.refPoint.y+this.h>=e.y}center(e){if(void 0===e)return this.refPoint.add(new s.Vector(this.w/2,this.h/2));this.refPoint=new s.GlobalPoint(e.x-this.w/2,e.y-this.h/2)}visibleInCanvas(e){if(super.visibleInCanvas(e))return!0;const t=!(l.g2lx(this.refPoint.x)>e.width||l.g2ly(this.refPoint.y)>e.height||l.g2lx(this.refPoint.x+this.w)<0||l.g2ly(this.refPoint.y+this.h)<0);return!!t}snapToGrid(){const e=r.gameStore.gridSize,t=this.center(),i=t.x,n=t.y;let o,l;o=this.w/e%2===0?Math.round(i/e)*e-this.w/2:(Math.round((i+e/2)/e)-.5)*e-this.w/2,l=this.h/e%2===0?Math.round(n/e)*e-this.h/2:(Math.round((n+e/2)/e)-.5)*e-this.h/2;const c=a.calculateDelta(new s.Vector(o-this.refPoint.x,l-this.refPoint.y),this);this.refPoint=this.refPoint.add(c),this.invalidate(!1)}resizeToGrid(){const e=r.gameStore.gridSize;this.refPoint=new s.GlobalPoint(Math.round(this.refPoint.x/e)*e,Math.round(this.refPoint.y/e)*e),this.w=Math.max(Math.round(this.w/e)*e,e),this.h=Math.max(Math.round(this.h/e)*e,e),this.invalidate(!1)}resize(e,t){const i=r.gameStore.zoomFactor;switch(e){case 0:this.w=l.g2lx(this.refPoint.x)+this.w*i-t.x,this.h=l.g2ly(this.refPoint.y)+this.h*i-t.y,this.refPoint=l.l2g(t);break;case 1:this.w=l.g2lx(this.refPoint.x)+this.w*i-t.x,this.h=t.y-l.g2ly(this.refPoint.y),this.refPoint=new s.GlobalPoint(l.l2gx(t.x),this.refPoint.y);break;case 2:this.w=t.x-l.g2lx(this.refPoint.x),this.h=t.y-l.g2ly(this.refPoint.y);break;case 3:this.w=t.x-l.g2lx(this.refPoint.x),this.h=l.g2ly(this.refPoint.y)+this.h*i-t.y,this.refPoint=new s.GlobalPoint(this.refPoint.x,l.l2gy(t.y));break}this.w/=i,this.h/=i,this.w<0&&(this.refPoint=this.refPoint.add(new s.Vector(this.w,0)),this.w=Math.abs(this.w)),this.h<0&&(this.refPoint=this.refPoint.add(new s.Vector(0,this.h)),this.h=Math.abs(this.h))}}t.BaseRect=c},c277:function(e,t,i){"use strict";i.r(t);var s=i("22bd"),n=i("e27a");for(var o in n)"default"!==o&&function(e){i.d(t,e,function(){return n[e]})}(o);var r=i("2877"),a=Object(r["a"])(n["default"],s["a"],s["b"],!1,null,null,null);a.options.__file="select.vue",t["default"]=a.exports},c31c:function(e,t,i){},c5ff:function(e,t,i){},c6b4:function(e,t,i){"use strict";i.r(t);var s=i("8e60"),n=i("b0ac");for(var o in n)"default"!==o&&function(e){i.d(t,e,function(){return n[e]})}(o);i("d767");var r=i("2877"),a=Object(r["a"])(n["default"],s["a"],s["b"],!1,null,"61eb1455",null);a.options.__file="main.vue",t["default"]=a.exports},c969:function(e,t,i){"use strict";var s=i("3a20"),n=i.n(s);n.a},c9a2:function(e,t,i){"use strict";var s=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{attrs:{id:"AssetManager"}},[i("div",{attrs:{id:"titlebar"}},[e._v("Asset Manager")]),i("div",{attrs:{id:"main"}},[i("div",{attrs:{id:"assets"},on:{dragover:function(t){return t.preventDefault(),e.moveDrag(t)},drop:function(t){t.preventDefault(),t.stopPropagation(),e.stopDrag(t,e.currentFolder)}}},[i("div",{attrs:{id:"breadcrumbs"}},[i("div",[e._v("/")]),e._l(e.path,function(t){return i("div",{key:t},[e._v(e._s(e.idMap.get(t).name))])})],2),i("div",{attrs:{id:"actionbar"}},[i("input",{attrs:{id:"files",type:"file",multiple:"",hidden:""},on:{change:function(t){e.upload()}}}),i("div",{attrs:{title:"Create folder"},on:{click:e.createDirectory}},[i("i",{staticClass:"fas fa-plus-square"})]),i("div",{attrs:{title:"Upload files"},on:{click:e.prepareUpload}},[i("i",{staticClass:"fas fa-upload"})])]),i("div",{attrs:{id:"explorer"}},[e.path.length?i("div",{staticClass:"inode folder",on:{dblclick:function(t){e.changeDirectory(-1)},dragover:function(t){return t.preventDefault(),e.moveDrag(t)},dragleave:function(t){return t.preventDefault(),e.leaveDrag(t)},drop:function(t){t.preventDefault(),t.stopPropagation(),e.stopDrag(t,e.parentFolder)}}},[i("i",{staticClass:"fas fa-folder",staticStyle:{"font-size":"50px"}}),i("div",{staticClass:"title"},[e._v("..")])]):e._e(),e._l(e.folders,function(t){return i("div",{key:t,staticClass:"inode folder",class:{"inode-selected":e.selected.includes(t)},attrs:{draggable:"true"},on:{click:function(i){e.select(i,t)},dblclick:function(i){e.changeDirectory(t)},contextmenu:function(i){i.preventDefault(),e.$refs.cm.open(i,t)},dragstart:function(i){e.startDrag(i,t)},dragover:function(t){return t.preventDefault(),e.moveDrag(t)},dragleave:function(t){return t.preventDefault(),e.leaveDrag(t)},drop:function(i){i.preventDefault(),i.stopPropagation(),e.stopDrag(i,t)}}},[i("i",{staticClass:"fas fa-folder",staticStyle:{"font-size":"50px"}}),i("div",{staticClass:"title"},[e._v(e._s(e.idMap.get(t).name))])])}),e._l(e.files,function(t){return i("div",{key:t,staticClass:"inode file",class:{"inode-selected":e.selected.includes(t)},attrs:{draggable:"true"},on:{click:function(i){e.select(i,t)},contextmenu:function(i){i.preventDefault(),e.$refs.cm.open(i,t)},dragstart:function(i){e.startDrag(i,t)}}},[i("img",{attrs:{src:"/static/assets/"+e.idMap.get(t).file_hash,width:"50"}}),i("div",{staticClass:"title"},[e._v(e._s(e.idMap.get(t).name))])])})],2)]),e.firstSelectedFile?i("div",{attrs:{id:"asset-details"}},[i("div",{attrs:{id:"asset-detail-title"}},[e._v(e._s(e.firstSelectedFile.name))]),i("img",{attrs:{src:"/static/assets/"+e.firstSelectedFile.file_hash}})]):e._e()]),i("AssetContextMenu",{ref:"cm"}),i("Prompt",{ref:"prompt"}),i("ConfirmDialog",{ref:"confirm"})],1)},n=[];i.d(t,"a",function(){return s}),i.d(t,"b",function(){return n})},ca56:function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0});const s=i("9ab4"),n=s.__importDefault(i("a026")),o=s.__importDefault(i("65d9")),r=s.__importDefault(i("1c76")),a=i("0bc6"),l=i("af17"),c=i("f10f"),u=i("92b1");let d=class extends n.default{constructor(){super(...arguments),this.visible=!1,this.x=0,this.y=0}get IS_DM(){return c.gameStore.IS_DM}open(e){this.visible=!0,this.x=e.pageX,this.y=e.pageY,this.$nextTick(()=>this.$children[0].$el.focus())}close(){this.visible=!1}bringPlayers(){c.gameStore.IS_DM&&(a.socket.emit("Players.Bring",{x:u.l2gx(this.x),y:u.l2gy(this.y)}),this.close())}createToken(){this.$parent.$parent.$refs.createtokendialog.open(this.x,this.y),this.close()}showInitiative(){l.EventBus.$emit("Initiative.Show"),this.close()}};d=s.__decorate([o.default({components:{ContextMenu:r.default}})],d),t.default=d},cad7:function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0});const s=i("9ab4"),n=s.__importDefault(i("bc3a")),o=s.__importDefault(i("a026")),r=s.__importDefault(i("65d9")),a=i("cc67");r.default.registerHooks(["beforeRouteEnter"]);let l=class extends o.default{beforeRouteEnter(e,t,i){n.default.post("/api/logout").then(()=>{a.coreStore.setAuthenticated(!1),a.coreStore.setUsername(""),i({path:"/auth/login"})})}};l=s.__decorate([r.default({})],l),t.default=l},cc67:function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0});const s=i("9ab4"),n=i("6fc5"),o=i("3a0b");let r=class extends n.VuexModule{constructor(){super(...arguments),this.authenticated=!1,this.initialized=!1,this.username=""}setAuthenticated(e){this.authenticated=e}setInitialized(e){this.initialized=e}setUsername(e){this.username=e}};s.__decorate([n.Mutation],r.prototype,"setAuthenticated",null),s.__decorate([n.Mutation],r.prototype,"setInitialized",null),s.__decorate([n.Mutation],r.prototype,"setUsername",null),r=s.__decorate([n.Module({dynamic:!0,store:o.rootStore,name:"core"})],r),t.coreStore=n.getModule(r)},cd49:function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0});const s=i("9ab4"),n=s.__importDefault(i("a026")),o=s.__importDefault(i("3dfd")),r=i("5f86"),a=i("3a0b");n.default.config.productionTip=!1,n.default.config.devtools=!0,n.default.config.performance=!0,t.app=new n.default({router:r.router,store:a.rootStore,render:e=>e(o.default)}).$mount("#app"),window.app=t.app},cd76:function(e,t,i){},cde6:function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0});const s=i("9ab4"),n=s.__importDefault(i("a026")),o=s.__importDefault(i("65d9"));let r=class extends n.default{};r=s.__decorate([o.default({props:["visible","left","top"]})],r),t.default=r},ce87:function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0});const s=i("9ab4"),n=s.__importDefault(i("bc3a")),o=s.__importDefault(i("a026")),r=s.__importDefault(i("65d9"));let a=class extends o.default{beforeRouteEnter(e,t,i){n.default.post("/api/invite",{code:e.params.code}).then(e=>{i({path:e.data.sessionUrl})}).catch(e=>{console.error("Invitation code could not be redeemed"),i({path:"/dashboard"})})}};a=s.__decorate([r.default({template:""})],a),t.default=a},cec2:function(e,t,i){"use strict";i.r(t);var s=i("eb57"),n=i("255e");for(var o in n)"default"!==o&&function(e){i.d(t,e,function(){return n[e]})}(o);i("0584");var r=i("2877"),a=Object(r["a"])(n["default"],s["a"],s["b"],!1,null,"0602c2e6",null);a.options.__file="prompt.vue",t["default"]=a.exports},cee3:function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0});const s=i("f10f"),n=i("1216"),o=i("d6be"),r=i("98ef"),a=i("4aee");function l(e,t,i){void 0===i&&(i=s.gameStore.drawTEContour);const r=[e.x,e.y],a=[],l=o.PA_CDT[t].locate(r,null).loc;return null===l?(console.error("Triangle not found"),[]):(a.push(l.vertices[1].point),l.isConstrained(0)||c(r,l.vertices[2].point,l.vertices[1].point,l,0,a),a.push(l.vertices[2].point),l.isConstrained(1)||c(r,l.vertices[0].point,l.vertices[2].point,l,1,a),a.push(l.vertices[0].point),l.isConstrained(2)||c(r,l.vertices[1].point,l.vertices[0].point,l,2,a),i&&n.drawPolygon(a,"red"),a)}function c(e,t,i,s,n,o){const l=s.neighbours[n],d=l.indexT(s),h=a.ccw(d),f=a.cw(d),p=l.vertices[d],g=l.vertices[f],v=l.vertices[h],m=[l,h],y=[l,f],b=a.orientation(e,i,p.point),_=a.orientation(e,t,p.point);if(b===r.Sign.COUNTERCLOCKWISE)if(m[0].isConstrained(m[1]))i!==g.point&&o.push(u(e,i,p.point,g.point)),_===r.Sign.COUNTERCLOCKWISE&&o.push(u(e,t,p.point,g.point));else{if(_===r.Sign.COUNTERCLOCKWISE)return c(e,t,i,l,h,o);c(e,p.point,i,l,h,o)}if(b!==r.Sign.CLOCKWISE&&_!==r.Sign.COUNTERCLOCKWISE&&o.push(p.point),_===r.Sign.CLOCKWISE)return y[0].isConstrained(y[1])?(b===r.Sign.CLOCKWISE&&o.push(u(e,i,p.point,v.point)),void(t!==v.point&&o.push(u(e,t,p.point,v.point)))):b===r.Sign.CLOCKWISE?c(e,t,i,l,f,o):c(e,t,p.point,l,f,o)}function u(e,t,i,s){const n=(s[1]-i[1])*(t[0]-e[0])-(s[0]-i[0])*(t[1]-e[1]),o=((s[0]-i[0])*(e[1]-i[1])-(s[1]-i[1])*(e[0]-i[0]))/n,r=e[0]+o*(t[0]-e[0]),a=e[1]+o*(t[1]-e[1]);return[r,a]}t.computeVisibility=l},cf8f:function(e,t,i){"use strict";var s=function(){var e=this,t=e.$createElement,i=e._self._c||t;return e.selected?i("div",{staticClass:"tool-detail",style:{"--detailRight":e.detailRight,"--detailArrow":e.detailArrow}},[i("div",[e._v("#X")]),i("input",{directives:[{name:"model",rawName:"v-model",value:e.xCount,expression:"xCount"}],attrs:{type:"text"},domProps:{value:e.xCount},on:{input:function(t){t.target.composing||(e.xCount=t.target.value)}}}),i("div",[e._v("#Y")]),i("input",{directives:[{name:"model",rawName:"v-model",value:e.yCount,expression:"yCount"}],attrs:{type:"text"},domProps:{value:e.yCount},on:{input:function(t){t.target.composing||(e.yCount=t.target.value)}}})]):e._e()},n=[];i.d(t,"a",function(){return s}),i.d(t,"b",function(){return n})},d065:function(e,t,i){"use strict";i.r(t);var s=i("45fb"),n=i("f8b3");for(var o in n)"default"!==o&&function(e){i.d(t,e,function(){return n[e]})}(o);i("514b");var r=i("2877"),a=Object(r["a"])(n["default"],s["a"],s["b"],!1,null,"23de098e",null);a.options.__file="edit_dialog.vue",t["default"]=a.exports},d1ec:function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0});class s{}s.angleSteps=4,s.drawAngleLines=!1,s.drawFirstLightHit=!1,s.skipPlayerFOW=!1,s.skipLightFOW=!1,s.tempFill="fog",t.Settings=s},d30b:function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0});const s=i("9ab4"),n=s.__importDefault(i("bc3a")),o=s.__importDefault(i("a026")),r=s.__importDefault(i("65d9")),a=i("cc67");let l=class extends o.default{constructor(){super(...arguments),this.username="",this.password="",this.error=""}login(){n.default.post("/api/login",{username:this.username,password:this.password}).then(e=>{a.coreStore.setUsername(this.username),a.coreStore.setAuthenticated(!0),this.$router.push(this.$route.query.redirect||"/")}).catch(e=>{e.response?this.error=e.response.statusText:this.error="Unknown error occured"})}register(){n.default.post("/api/register",{username:this.username,password:this.password}).then(e=>{a.coreStore.setUsername(this.username),a.coreStore.setAuthenticated(!0),this.$router.push(this.$route.query.redirect||"/")}).catch(e=>{e.response?this.error=e.response.statusText:this.error="Unknown error occured"})}focusin(e){if(e.target&&e.target.nextElementSibling){const t=e.target.nextElementSibling;t.style.opacity="0"}}focusout(e){if(e.target&&e.target.nextElementSibling){const t=e.target.nextElementSibling;t.style.opacity="1"}}};l=s.__decorate([r.default],l),t.default=l},d320:function(e,t,i){"use strict";var s=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("modal",{attrs:{visible:e.visible},on:{close:function(t){e.visible=!1}},scopedSlots:e._u([{key:"header",fn:function(t){return i("div",{staticClass:"modal-header",attrs:{draggable:"true"},on:{dragstart:t.dragStart,dragend:t.dragEnd}},[e._v("Create basic token")])}}])},[i("div",{staticClass:"modal-body"},[i("label",{attrs:{for:"createtokendialog-text"}},[e._v("Text")]),i("input",{directives:[{name:"model",rawName:"v-model",value:e.text,expression:"text"}],attrs:{type:"text",id:"createtokendialog-name"},domProps:{value:e.text},on:{input:function(t){t.target.composing||(e.text=t.target.value)}}}),i("label",[e._v("Colours")]),i("div",{staticClass:"colours"},[i("span",[e._v("Fill:")]),i("color-picker",{attrs:{color:e.fillColour},on:{"update:color":function(t){e.fillColour=t}}}),i("span",[e._v("Border:")]),i("color-picker",{attrs:{color:e.borderColour},on:{"update:color":function(t){e.borderColour=t}}})],1),i("canvas",{ref:"canvas",attrs:{width:"100px",height:"100px"}})]),i("div",{staticClass:"modal-footer"},[i("button",{on:{click:e.submit}},[e._v("Submit")])])])},n=[];i.d(t,"a",function(){return s}),i.d(t,"b",function(){return n})},d323:function(e,t,i){"use strict";var s=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div")},n=[];i.d(t,"a",function(){return s}),i.d(t,"b",function(){return n})},d445:function(e,t,i){"use strict";var s=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("transition",{attrs:{name:"modal"}},[i("div",{directives:[{name:"show",rawName:"v-show",value:e.visible,expression:"visible"}],staticClass:"mask",class:{"modal-mask":e.mask,"dialog-mask":!e.mask},on:{click:e.close,dragover:function(t){return t.preventDefault(),e.dragOver(t)}}},[i("div",{ref:"container",staticClass:"modal-container",on:{click:function(e){e.stopPropagation()}}},[e._t("header",null,{dragStart:e.dragStart,dragEnd:e.dragEnd}),e._t("default")],2)])])},n=[];i.d(t,"a",function(){return s}),i.d(t,"b",function(){return n})},d588:function(e,t,i){"use strict";i.r(t);var s=i("91df"),n=i.n(s);for(var o in s)"default"!==o&&function(e){i.d(t,e,function(){return s[e]})}(o);t["default"]=n.a},d5df:function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0});const s=i("9ab4"),n=s.__importDefault(i("65d9")),o=s.__importDefault(i("ea6a")),r=i("0bc6"),a=i("8f0a"),l=i("6f92"),c=i("5e7c"),u=i("0180"),d=i("f10f"),h=i("92b1"),f=i("5a5c");let p=class extends o.default{constructor(){super(...arguments),this.name="Ruler",this.active=!1,this.startPoint=null,this.ruler=null,this.text=null}onMouseDown(e){const t=l.layerManager.getLayer("draw");void 0!==t?(this.active=!0,this.startPoint=h.l2g(f.getMouse(e)),this.ruler=new c.Line(this.startPoint,this.startPoint,3,d.gameStore.rulerColour),this.text=new u.Text(this.startPoint.clone(),"","bold 20px serif"),this.ruler.addOwner(d.gameStore.username),this.text.addOwner(d.gameStore.username),t.addShape(this.ruler,!0,!0),t.addShape(this.text,!0,!0)):console.log("No draw layer!")}onMouseMove(e){if(!this.active||null===this.ruler||null===this.startPoint||null===this.text)return;const t=l.layerManager.getLayer("draw");if(void 0===t)return void console.log("No draw layer!");const i=h.l2g(f.getMouse(e));this.ruler.endPoint=i,r.socket.emit("Shape.Update",{shape:this.ruler.asDict(),redraw:!0,temporary:!0});const s=Math.sign(i.x-this.startPoint.x)*Math.sign(i.y-this.startPoint.y),n=Math.abs(i.x-this.startPoint.x),o=Math.abs(i.y-this.startPoint.y),c=Math.round(Math.sqrt(Math.pow(n,2)+Math.pow(o,2))*d.gameStore.unitSize/d.gameStore.gridSize)+" ft",u=Math.atan2(s*o,n),p=Math.min(this.startPoint.x,i.x)+n/2,g=Math.min(this.startPoint.y,i.y)+o/2;this.text.refPoint=new a.GlobalPoint(p,g),this.text.text=c,this.text.angle=u,r.socket.emit("Shape.Update",{shape:this.text.asDict(),redraw:!0,temporary:!0}),t.invalidate(!0)}onMouseUp(e){if(!this.active||null===this.ruler||null===this.startPoint||null===this.text)return;const t=l.layerManager.getLayer("draw");void 0!==t?(this.active=!1,t.removeShape(this.ruler,!0,!0),t.removeShape(this.text,!0,!0),t.invalidate(!0),this.ruler=this.startPoint=this.text=null):console.log("No active layer!")}};p=s.__decorate([n.default],p),t.RulerTool=p},d65f:function(e,t,i){"use strict";i.r(t);var s=i("d445"),n=i("7e15");for(var o in n)"default"!==o&&function(e){i.d(t,e,function(){return n[e]})}(o);i("26a5");var r=i("2877"),a=Object(r["a"])(n["default"],s["a"],s["b"],!1,null,"12ed61ba",null);a.options.__file="modal.vue",t["default"]=a.exports},d677:function(e,t,i){"use strict";i.r(t);var s=i("53ec"),n=i.n(s);for(var o in s)"default"!==o&&function(e){i.d(t,e,function(){return s[e]})}(o);t["default"]=n.a},d6be:function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0});const s=i("6f92"),n=i("f10f"),o=i("6e4a");function r(e,i=!1){const r=new o.CDT;let a;a="vision"===e?n.gameStore.visionBlockers:n.gameStore.movementblockers;for(const t of a){const e=s.layerManager.UUIDMap.get(t);if(!i||e.visibleInCanvas(s.layerManager.getLayer().canvas))for(let t=0;t{this.shape=e,this.visible=!0}),d.EventBus.$on("EditDialog.AddLabel",e=>{this.visible&&(this.shape.labels.push(f.gameStore.labels[e]),this.updateShape(!0))})}beforeDestroy(){d.EventBus.$off("EditDialog.Open"),d.EventBus.$off("EditDialog.AddLabel")}updated(){this.addEmpty()}addEmpty(){""!==this.shape.owners[this.shape.owners.length-1]&&this.shape.addOwner(""),this.shape.trackers.length&&""===this.shape.trackers[this.shape.trackers.length-1].name&&0===this.shape.trackers[this.shape.trackers.length-1].value||this.shape.trackers.push({uuid:c.uuidv4(),name:"",value:0,maxvalue:0,visible:!1}),this.shape.auras.length&&""===this.shape.auras[this.shape.auras.length-1].name&&0===this.shape.auras[this.shape.auras.length-1].value||this.shape.auras.push({uuid:c.uuidv4(),name:"",value:0,dim:0,visionSource:!1,colour:"rgba(0,0,0,0)",visible:!1})}updateShape(e,t=!1){this.owned&&(u.socket.emit("Shape.Update",{shape:this.shape.asDict(),redraw:e,temporary:t}),e&&h.layerManager.invalidate(),this.addEmpty())}setToken(e){this.owned&&(this.shape.setIsToken(e.target.checked),this.updateShape(!0))}setVisionBlocker(e){this.owned&&(this.shape.checkVisionSources(),this.updateShape(!0))}setMovementBlocker(e){this.owned&&(this.shape.setMovementBlock(e.target.checked),this.updateShape(!1))}updateAnnotation(e){if(!this.owned)return;const t=""!==this.shape.annotation;this.shape.annotation=e.target.value,""===this.shape.annotation||t?""===this.shape.annotation&&t&&(f.gameStore.annotations.splice(f.gameStore.annotations.findIndex(e=>e===this.shape.uuid)),h.layerManager.hasLayer("draw")&&h.layerManager.getLayer("draw").invalidate(!0)):(f.gameStore.annotations.push(this.shape.uuid),h.layerManager.hasLayer("draw")&&h.layerManager.getLayer("draw").invalidate(!0)),this.updateShape(!1)}updateOwner(e,t){this.owned&&(this.shape.updateOwner(t,e.target.value),this.updateShape(f.gameStore.fowLOS))}removeOwner(e){this.owned&&(this.shape.removeOwner(e),this.updateShape(f.gameStore.fowLOS))}removeTracker(e){this.owned&&(this.shape.trackers=this.shape.trackers.filter(t=>t.uuid!==e),this.updateShape(!1))}removeAura(e){this.owned&&(this.shape.auras=this.shape.auras.filter(t=>t.uuid!==e),this.shape.checkVisionSources(),this.updateShape(!0))}updateAuraVisionSource(e){if(!this.owned)return;e.visionSource=!e.visionSource;const t=f.gameStore.visionSources.findIndex(t=>t.aura===e.uuid);e.visionSource&&-1===t?f.gameStore.visionSources.push({shape:this.shape.uuid,aura:e.uuid}):!e.visionSource&&t>=0&&f.gameStore.visionSources.splice(t,1),this.updateShape(!0)}updateAuraColour(e,t){if(!this.owned)return;const i=h.layerManager.getLayer(this.shape.layer);void 0!==i&&i.invalidate(!e.visionSource)}openLabelManager(){d.EventBus.$emit("LabelManager.Open")}removeLabel(e){this.owned&&(this.shape.labels=this.shape.labels.filter(t=>t.uuid!==e),this.updateShape(!0))}};s.__decorate([r.Prop()],p.prototype,"shape",void 0),p=s.__decorate([o.default({components:{Modal:l.default,"color-picker":a.default}})],p),t.default=p},dc37:function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0});const s=i("9ab4"),n=s.__importDefault(i("a026")),o=s.__importDefault(i("65d9")),r=s.__importDefault(i("d65f"));let a=class extends n.default{constructor(){super(...arguments),this.visible=!1,this.yes="Yes",this.no="No",this.title="",this.resolve=(e=>{}),this.reject=(()=>{})}confirm(){this.resolve(!0),this.close()}deny(){this.resolve(!1),this.close()}close(){this.reject(),this.visible=!1,this.title=""}open(e,t="yes",i="no"){return this.yes=t,this.no=i,this.title=e,this.visible=!0,this.$nextTick(()=>{this.$refs.confirm.focus()}),new Promise((e,t)=>{this.resolve=e,this.reject=t})}};a=s.__decorate([o.default({components:{Modal:r.default}})],a),t.default=a},de21:function(e,t,i){},dec1:function(e,t,i){"use strict";i.r(t);var s=i("cf8f"),n=i("3481");for(var o in n)"default"!==o&&function(e){i.d(t,e,function(){return n[e]})}(o);var r=i("2877"),a=Object(r["a"])(n["default"],s["a"],s["b"],!1,null,null,null);a.options.__file="map.vue",t["default"]=a.exports},df64:function(e,t,i){"use strict";var s=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{staticClass:"accordion"},[i("div",{attrs:{id:"header"},on:{click:function(t){return t.preventDefault(),e.toggleDisplay(t)}}},[i("input",{ref:"overall",attrs:{type:"checkbox"},on:{click:function(t){return t.stopPropagation(),e.toggleCategory(t)}}}),i("strong",[e._v(e._s(e.title))]),e.showArrow?[i("span",{directives:[{name:"show",rawName:"v-show",value:e.showArrow&&!e.active,expression:"showArrow && !active"}],staticClass:"down-Arrow"},[e._v("▼")]),i("span",{directives:[{name:"show",rawName:"v-show",value:e.showArrow&&e.active,expression:"showArrow && active"}],staticClass:"up-Arrow"},[e._v("▲")])]:e._e()],2),i("div",{directives:[{name:"show",rawName:"v-show",value:e.active,expression:"active"}],attrs:{id:"body"}},e._l(e.items,function(t){return i("div",{key:t[0],staticClass:"item",on:{click:function(i){e.toggleSelection(t[0])}}},[i("input",{attrs:{type:"checkbox"},domProps:{checked:e.selected.includes(t[0])},on:{click:function(e){e.preventDefault()}}}),e._v(" "+e._s(t[1])+"\n ")])}))])},n=[];i.d(t,"a",function(){return s}),i.d(t,"b",function(){return n})},e06e:function(e,t,i){"use strict";var s=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("modal",{attrs:{visible:e.visible},on:{close:e.close},scopedSlots:e._u([{key:"header",fn:function(t){return i("div",{staticClass:"modal-header",attrs:{draggable:"true"},on:{dragstart:t.dragStart,dragend:t.dragEnd}},[e._v(e._s(e.title))])}}])},[i("div",{staticClass:"modal-body"},[i("button",{ref:"confirm",on:{click:e.confirm}},[e._v(e._s(e.yes))]),e.no?i("button",{on:{click:e.deny}},[e._v(e._s(e.no))]):e._e()])])},n=[];i.d(t,"a",function(){return s}),i.d(t,"b",function(){return n})},e0e9:function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0});const s=i("9ab4"),n=s.__importDefault(i("a026")),o=s.__importDefault(i("65d9")),r=s.__importDefault(i("1c76")),a=i("5338"),l=i("2d5b"),c=i("4a5b");let u=class extends n.default{constructor(){super(...arguments),this.visible=!1,this.left=0,this.top=0}open(e,t){l.assetStore.selected.includes(t)||c.getComponent().select(e,t),this.visible=!0,this.left=e.pageX,this.top=e.pageY,this.$nextTick(()=>{this.$children[0].$el.focus()})}close(){this.visible=!1}rename(){if(1!==l.assetStore.selected.length)return;const e=l.assetStore.idMap.get(l.assetStore.selected[0]);c.getRef("prompt").prompt("New name:",`Renaming ${e.name}`).then(t=>{a.socket.emit("Asset.Rename",{asset:e.id,name:t}),e.name=t,c.getComponent().$forceUpdate()},()=>{}),this.close()}remove(){0!==l.assetStore.selected.length&&(c.getRef("confirm").open("Are you sure you wish to remove this?").then(e=>{if(e){for(const e of l.assetStore.selected)a.socket.emit("Asset.Remove",e),l.assetStore.files.includes(e)?l.assetStore.files.splice(l.assetStore.files.indexOf(e),1):l.assetStore.folders.splice(l.assetStore.folders.indexOf(e),1);l.assetStore.clearSelected()}},()=>{}),this.close())}};u=s.__decorate([o.default({components:{ContextMenu:r.default}})],u),t.default=u},e27a:function(e,t,i){"use strict";i.r(t);var s=i("2756"),n=i.n(s);for(var o in s)"default"!==o&&function(e){i.d(t,e,function(){return s[e]})}(o);t["default"]=n.a},e3f5:function(e,t,i){"use strict";var s=i("a126"),n=i.n(s);n.a},e4b0:function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0});const s=i("9ab4"),n=s.__importDefault(i("a026")),o=s.__importDefault(i("65d9")),r=s.__importDefault(i("d65f")),a=i("4a5b"),l=i("0bc6"),c=i("af17"),u=i("f10f");let d=class extends n.default{constructor(){super(...arguments),this.visible=!1,this.newCategory="",this.newName="",this.search=""}mounted(){c.EventBus.$on("LabelManager.Open",()=>{this.visible=!0,this.newCategory="",this.newName="",this.$nextTick(()=>this.$refs.search.focus())})}beforeDestroy(){c.EventBus.$off("LabelManager.Open")}get labels(){const e={"":[]};for(const t of Object.keys(u.gameStore.labels)){const i=u.gameStore.labels[t];this.search.length&&`${i.category.toLowerCase()}${i.name.toLowerCase()}`.search(this.search.toLowerCase())<0||i.user===u.gameStore.username&&(i.category?(i.category in e||(e[i.category]=[]),e[i.category].push(i),e[i.category].sort((e,t)=>e.name.localeCompare(t.name))):e[""].push(i))}return e}get categories(){return Object.keys(this.labels).sort()}selectLabel(e){c.EventBus.$emit("EditDialog.AddLabel",e),this.visible=!1}toggleVisibility(e){e.visible=!e.visible,l.socket.emit("Label.Visibility.Set",{uuid:e.uuid,visible:e.visible})}addLabel(){if(""===this.newName)return;const e={uuid:a.uuidv4(),category:this.newCategory,name:this.newName,visible:!1,user:u.gameStore.username};u.gameStore.addLabel(e),l.socket.emit("Label.Add",e),this.newCategory="",this.newName=""}deleteLabel(e){u.gameStore.deleteLabel({uuid:e,user:u.gameStore.username}),l.socket.emit("Label.Delete",e)}};d=s.__decorate([o.default({components:{Modal:r.default}})],d),t.default=d},e4ea:function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0});const s=i("8f0a"),n=i("92b1"),o=i("5a5c"),r=i("8db6"),a=i("2469");class l extends a.Shape{constructor(e,t=[],i,s,n){super(e,i,s,n),this.type="polygon",this._vertices=[],this._vertices=t}get refPoint(){return this._refPoint}set refPoint(e){const t=e.subtract(this._refPoint);this._refPoint=e;for(let i=0;i({x:e.x,y:e.y}))})}fromDict(e){super.fromDict(e),this._vertices=e.vertices.map(e=>new s.GlobalPoint(e.x,e.y))}get points(){return this.vertices.map(e=>[e.x,e.y])}draw(e){super.draw(e),e.lineCap="round",e.lineJoin="round","fog"===this.strokeColour?e.strokeStyle=o.getFogColour():2===this.vertices.length?e.strokeStyle=this.fillColour:e.strokeStyle=this.strokeColour,"fog"===this.fillColour?e.fillStyle=o.getFogColour():e.fillStyle=this.fillColour,e.lineWidth=n.g2lz(2),e.beginPath(),e.moveTo(n.g2lx(this.vertices[0].x),n.g2ly(this.vertices[0].y));for(let t=1;t<=this.vertices.length;t++){const i=this.vertices[t%this.vertices.length];e.lineTo(n.g2lx(i.x),n.g2ly(i.y))}e.fill(),e.stroke()}contains(e){return this.getBoundingBox().contains(e)}center(e){return this.getBoundingBox().center()}visibleInCanvas(e){return this.getBoundingBox().visibleInCanvas(e)}snapToGrid(){}resizeToGrid(){}resize(e,t){0===e?this._refPoint=n.l2g(t):this._vertices[e-1]=n.l2g(t)}getBoundingBox(){let e=this.refPoint.x,t=this.refPoint.x,i=this.refPoint.y,n=this.refPoint.y;for(const s of this._vertices)s.xt&&(t=s.x),s.yn&&(n=s.y);return new r.BoundingRect(new s.GlobalPoint(e,i),t-e,n-i)}}t.Polygon=l},e5ca:function(e,t,i){"use strict";var s=function(){var e=this,t=e.$createElement,i=e._self._c||t;return e.selected?i("div",{staticClass:"tool-detail",style:{"--detailRight":e.detailRight,"--detailArrow":e.detailArrow}},[i("div",{directives:[{name:"show",rawName:"v-show",value:e.IS_DM,expression:"IS_DM"}]},[e._v("Mode")]),i("div",{directives:[{name:"show",rawName:"v-show",value:e.IS_DM,expression:"IS_DM"}],staticClass:"selectgroup"},e._l(e.modes,function(t){return i("div",{key:t,staticClass:"option",class:{"option-selected":e.modeSelect===t},on:{click:function(i){e.modeSelect=t}}},[e._v(e._s(t))])})),i("div",[e._v("Shape")]),i("div",{staticClass:"selectgroup"},e._l(e.shapes,function(t){return i("div",{key:t,staticClass:"option",class:{"option-selected":e.shapeSelect===t},on:{click:function(i){e.shapeSelect=t}}},[i("i",{staticClass:"fas",class:"fa-"+t})])})),i("div",[e._v("Colours")]),i("div",{staticClass:"selectgroup"},[i("color-picker",{staticClass:"option",attrs:{color:e.fillColour},on:{"update:color":function(t){e.fillColour=t}}}),i("color-picker",{staticClass:"option",attrs:{color:e.borderColour},on:{"update:color":function(t){e.borderColour=t}}})],1),i("div",{directives:[{name:"show",rawName:"v-show",value:"paint-brush"===e.shapeSelect,expression:"shapeSelect === 'paint-brush'"}]},[e._v("Brush size")]),i("input",{directives:[{name:"model",rawName:"v-model",value:e.brushSize,expression:"brushSize"},{name:"show",rawName:"v-show",value:"paint-brush"===e.shapeSelect,expression:"shapeSelect === 'paint-brush'"}],staticStyle:{"max-width":"100px"},attrs:{type:"text"},domProps:{value:e.brushSize},on:{input:function(t){t.target.composing||(e.brushSize=t.target.value)}}})]):e._e()},n=[];i.d(t,"a",function(){return s}),i.d(t,"b",function(){return n})},e756:function(e,t,i){},e7db:function(e,t,i){"use strict";var s=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{staticClass:"outer",on:{click:function(t){return t.target!==t.currentTarget?null:e.open(t)}}},[i("div",{staticClass:"current-color",style:e.transparent?"background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAMCAIAAADZF8uwAAAAGUlEQVQYV2M4gwH+YwCGIasIUwhT25BVBADtzYNYrHvv4gAAAABJRU5ErkJggg==)":"background-color:"+e.color,on:{click:function(t){return t.target!==t.currentTarget?null:e.open(t)}}}),i("div",{directives:[{name:"show",rawName:"v-show",value:e.display,expression:"display"}],staticClass:"mask",on:{click:function(t){return t.target!==t.currentTarget?null:e.closePicker(t)}}}),i("chrome-picker",{directives:[{name:"show",rawName:"v-show",value:e.display,expression:"display"}],ref:"chromePicker",style:{position:"fixed",left:e.left+"px",top:e.top+"px","z-index":9999},attrs:{value:e.color,tabindex:"-1"},on:{input:e.updateColor}})],1)},n=[];i.d(t,"a",function(){return s}),i.d(t,"b",function(){return n})},e8bb:function(e,t,i){"use strict";var s=function(){var e=this,t=e.$createElement,i=e._self._c||t;return e.selected?i("div",{staticClass:"tool-detail",style:{"--detailRight":e.detailRight,"--detailArrow":e.detailArrow}},[i("div",{attrs:{id:"accordion-container"}},e._l(e.categories,function(t){return i("accordion",{key:t,attrs:{title:""===t?"no category":t,showArrow:!1,items:e.labels[t],initialValues:e.initalValues[t]},on:{selectionupdate:e.updateSelection}})}))]):e._e()},n=[];i.d(t,"a",function(){return s}),i.d(t,"b",function(){return n})},e914:function(e,t,i){"use strict";i.r(t);var s=i("c9a2"),n=i("aa69");for(var o in n)"default"!==o&&function(e){i.d(t,e,function(){return n[e]})}(o);i("78c7");var r=i("2877"),a=Object(r["a"])(n["default"],s["a"],s["b"],!1,null,null,null);a.options.__file="manager.vue",t["default"]=a.exports},e94f:function(e,t,i){"use strict";i.r(t);var s=i("7aaa"),n=i.n(s);for(var o in s)"default"!==o&&function(e){i.d(t,e,function(){return s[e]})}(o);t["default"]=n.a},ea6a:function(e,t,i){"use strict";i.r(t);var s=i("d323"),n=i("6465");for(var o in n)"default"!==o&&function(e){i.d(t,e,function(){return n[e]})}(o);i("12d3");var r=i("2877"),a=Object(r["a"])(n["default"],s["a"],s["b"],!1,null,null,null);a.options.__file="tool.vue",t["default"]=a.exports},ea7c:function(e,t,i){"use strict";var s=i("2dad"),n=i.n(s);n.a},eb57:function(e,t,i){"use strict";var s=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("Modal",{attrs:{visible:e.visible},on:{close:e.close},scopedSlots:e._u([{key:"header",fn:function(t){return i("div",{staticClass:"modal-header",attrs:{draggable:"true"},on:{dragstart:t.dragStart,dragend:t.dragEnd}},[e._v(e._s(e.title))])}}])},[i("div",{staticClass:"modal-body"},[e._v("\n "+e._s(e.question)+"\n "),i("input",{directives:[{name:"model",rawName:"v-model",value:e.answer,expression:"answer"}],ref:"answer",attrs:{type:"text"},domProps:{value:e.answer},on:{keyup:function(t){return"button"in t||!e._k(t.keyCode,"enter",13,t.key,"Enter")?e.submit(t):null},input:function(t){t.target.composing||(e.answer=t.target.value)}}})]),i("div",{staticClass:"modal-footer"},[i("button",{on:{click:e.submit}},[e._v("Submit")])])])},n=[];i.d(t,"a",function(){return s}),i.d(t,"b",function(){return n})},ebb9:function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0});const s=i("9ab4"),n=s.__importDefault(i("a026")),o=s.__importDefault(i("65d9")),r=s.__importDefault(i("1516"));n.default.component("draggable",r.default);const a=s.__importDefault(i("d65f")),l=i("4a5b"),c=i("0bc6"),u=i("af17"),d=i("6f92"),h=i("f10f"),f=i("9cb7");let p=class extends n.default{constructor(){super(...arguments),this.visible=!1,this.data=[],this.currentActor=null,this.roundCounter=0,this.visionLock=!1,this.cameraLock=!1,this._activeTokens=[]}mounted(){u.EventBus.$on("Initiative.Clear",this.clear),u.EventBus.$on("Initiative.Remove",e=>this.removeInitiative(e)),u.EventBus.$on("Initiative.Show",()=>this.visible=!0),c.socket.on("Initiative.Set",e=>{this.data=e}),c.socket.on("Initiative.Turn.Set",e=>this.setTurn(e)),c.socket.on("Initiative.Turn.Update",e=>this.updateTurn(e,!1)),c.socket.on("Initiative.Round.Update",e=>this.setRound(e,!1)),c.socket.on("Initiative.Effect.New",e=>{const t=this.getActor(e.actor);void 0!==t&&this.createEffect(t,e.effect,!1)}),c.socket.on("Initiative.Effect.Update",e=>this.updateEffect(e.actor,e.effect,!1))}beforeDestroy(){u.EventBus.$off("Initiative.Clear"),u.EventBus.$off("Initiative.Remove"),u.EventBus.$off("Initiative.Show")}clear(){this.data=[],this.currentActor=null}getActor(e){return this.data.find(t=>t.uuid===e)}contains(e){return this.data.some(t=>t.uuid===e)}owns(e){if(h.gameStore.IS_DM)return!0;const t=d.layerManager.UUIDMap.get(e.uuid);return void 0!==t&&t.owners.includes(h.gameStore.username)}getDefaultEffect(){return{uuid:l.uuidv4(),name:"New Effect",turns:10}}fakeSetData(e){e.setData("Hack","")}syncInitiative(e){c.socket.emit("Initiative.Update",e)}addInitiative(e){const t=this.data.findIndex(t=>t.uuid===e.uuid);t>=0||(void 0===e.initiative&&(e.initiative=0),this.syncInitiative(e))}removeInitiative(e){const t=this.data.findIndex(t=>t.uuid===e);if(t<0||this.data[t].group)return;this.syncInitiative({uuid:e});const i=d.layerManager.UUIDMap.get(e);void 0!==i&&i.showHighlight&&(i.showHighlight=!1,d.layerManager.getLayer(i.layer).invalidate(!0))}updateOrder(){h.gameStore.IS_DM&&c.socket.emit("Initiative.Set",this.data.map(e=>e.uuid))}updateTurn(e,t){if(!h.gameStore.IS_DM&&t)return;this.currentActor=e;const i=this.data.find(t=>t.uuid===e);if(void 0!==i){if(i.effects)for(let e=i.effects.length-1;e>=0;e--)i.effects[e].turns<=0?i.effects.splice(e,1):i.effects[e].turns--;if(this.visionLock&&(null!==e&&h.gameStore.ownedtokens.includes(e)?h.gameStore.setActiveTokens([e]):h.gameStore.setActiveTokens([])),this.cameraLock&&null!==e){const t=d.layerManager.UUIDMap.get(e);void 0!==t&&t.ownedBy()&&f.gameManager.setCenterPosition(t.center())}t&&c.socket.emit("Initiative.Turn.Update",e)}}setRound(e,t){!h.gameStore.IS_DM&&t||(this.roundCounter=e,t&&c.socket.emit("Initiative.Round.Update",e))}setTurn(e){this.currentActor=e}nextTurn(){if(!h.gameStore.IS_DM)return;const e=this.data,t=e[(e.findIndex(e=>e.uuid===this.currentActor)+1)%e.length];this.data[0].uuid===t.uuid&&this.setRound(this.roundCounter+1,!0),this.updateTurn(t.uuid,!0)}toggleHighlight(e,t){const i=d.layerManager.UUIDMap.get(e.uuid);void 0!==i&&(i.showHighlight=t,d.layerManager.getLayer(i.layer).invalidate(!0))}toggleOption(e,t){this.owns(e)&&(e[t]=!e[t],this.syncInitiative(e))}createEffect(e,t,i){this.owns(e)&&(e.effects.push(t),i&&c.socket.emit("Initiative.Effect.New",{actor:e.uuid,effect:t}))}syncEffect(e,t){this.owns(e)&&c.socket.emit("Initiative.Effect.Update",{actor:e.uuid,effect:t})}updateEffect(e,t,i){const s=this.data.find(t=>t.uuid===e);if(void 0===s)return;const n=s.effects.findIndex(e=>e.uuid===t.uuid);void 0!==n&&(s.effects[n]=t,i?this.syncEffect(s,t):this.$forceUpdate())}toggleVisionLock(){this.visionLock=!this.visionLock,this.visionLock?(this._activeTokens=[...h.gameStore._activeTokens],null!==this.currentActor&&h.gameStore.ownedtokens.includes(this.currentActor)&&h.gameStore.setActiveTokens([this.currentActor])):h.gameStore.setActiveTokens(this._activeTokens)}};p=s.__decorate([o.default({components:{Modal:a.default,draggable:r.default}})],p),t.default=p},ee96:function(e,t,i){},f086:function(e,t,i){"use strict";i.r(t);var s=i("a112"),n=i("7ba5");for(var o in n)"default"!==o&&function(e){i.d(t,e,function(){return n[e]})}(o);i("01be");var r=i("2877"),a=Object(r["a"])(n["default"],s["a"],s["b"],!1,null,"674cf937",null);a.options.__file="selection_info.vue",t["default"]=a.exports},f10f:function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0});const s=i("9ab4"),n=s.__importDefault(i("a026")),o=i("6fc5"),r=i("0bc6"),a=i("2b48"),l=i("6f92"),c=i("92b1"),u=i("5a5c"),d=i("99e3"),h=i("d6be"),f=i("3a0b");let p=class extends o.VuexModule{constructor(){super(...arguments),this.layers=[],this.selectedLayerIndex=-1,this.boardInitialized=!1,this.locations=[],this.assets={},this.notes=[],this.IS_DM=!1,this.FAKE_PLAYER=!1,this.gridSize=50,this.username="",this.roomName="",this.roomCreator="",this.invitationCode="",this.gridColour="rgba(0, 0, 0, 1)",this.fowColour="rgba(0, 0, 0, 1)",this.rulerColour="rgba(255, 0, 0, 1)",this.panX=0,this.panY=0,this.zoomDisplay=.5,this.unitSize=5,this.useGrid=!0,this.fullFOW=!1,this.fowOpacity=.3,this.fowLOS=!1,this.locationName="",this.visionSources=[],this.visionBlockers=[],this.annotations=[],this.movementblockers=[],this.ownedtokens=[],this._activeTokens=[],this.BV=Object.freeze(new d.BoundingVolume([])),this.visionMode="bvh",this.drawTEContour=!1,this.visionRangeMin=1640,this.visionRangeMax=3281,this.clipboard=[],this.labels={},this.filterNoLabel=!1,this.labelFilters=[],this.showUI=!0}get selectedLayer(){return this.layers[this.selectedLayerIndex]}get zoomFactor(){return u.zoomValue(this.zoomDisplay)}get activeTokens(){return 0===this._activeTokens.length?this.ownedtokens:this._activeTokens}setFakePlayer(e){this.FAKE_PLAYER=e,this.IS_DM=!e,l.layerManager.invalidate()}setZoomDisplay(e){e!==this.zoomDisplay&&(e<0&&(e=0),e>1&&(e=1),this.zoomDisplay=e,l.layerManager.invalidate())}setVisionMode(e){this.visionMode=e.mode,e.sync&&r.socket.emit("Location.Options.Set",{vision_mode:e.mode})}setBoardInitialized(e){this.boardInitialized=e}toggleUnlabeledFilter(){this.filterNoLabel=!this.filterNoLabel}addLabel(e){n.default.set(this.labels,e.uuid,e)}setLabelFilters(e){this.labelFilters=e}setLabelVisibility(e){e.uuid in this.labels&&(this.labels[e.uuid].visible=e.visible)}deleteLabel(e){if(!(e.uuid in this.labels))return;const t=this.labels[e.uuid],i=new Set;for(const s of l.layerManager.UUIDMap.values()){const e=s.labels.indexOf(t);e>=0&&(s.labels.splice(e,1),i.add(s.layer))}for(const s of i)l.layerManager.getLayer(s).invalidate(!1);n.default.delete(this.labels,e.uuid)}setDM(e){this.IS_DM=e}setUsername(e){this.username=e}setRoomName(e){this.roomName=e}setRoomCreator(e){this.roomCreator=e}setInvitationCode(e){this.invitationCode=e}addLayer(e){this.layers.push(e),-1===this.selectedLayerIndex&&(this.selectedLayerIndex=this.layers.indexOf(e))}selectLayer(e){const t=this.layers.indexOf(e.name);t>=0&&(this.selectedLayerIndex=t),e.sync&&r.socket.emit("Client.ActiveLayer.Set",e.name)}newNote(e){this.notes.push(e.note),e.sync&&r.socket.emit("Note.New",e.note)}setAssets(e){this.assets=e}setLocations(e){this.locations=e}resetLayerInfo(){this.layers=[],this.selectedLayerIndex=-1}recalculateVision(e=!1){this.boardInitialized&&("triangle"===this.visionMode?h.triangulate("vision",e):this.BV=Object.freeze(new d.BoundingVolume(this.visionBlockers)))}recalculateMovement(e=!1){this.boardInitialized&&"triangle"===this.visionMode&&h.triangulate("movement",e)}updateZoom(e){if(e.newZoomDisplay===this.zoomDisplay)return;e.newZoomDisplay<0&&(e.newZoomDisplay=0),e.newZoomDisplay>1&&(e.newZoomDisplay=1);const t=c.g2l(e.zoomLocation);this.zoomDisplay=e.newZoomDisplay;const i=c.l2g(t),s=i.subtract(e.zoomLocation);this.panX+=s.x,this.panY+=s.y,l.layerManager.invalidate(),a.sendClientOptions()}setGridColour(e){this.gridColour=e.colour,l.layerManager.getGridLayer().drawGrid(),e.sync&&r.socket.emit("Client.Options.Set",{gridColour:e.colour})}setFOWColour(e){this.fowColour=e.colour,l.layerManager.invalidate(),e.sync&&r.socket.emit("Client.Options.Set",{fowColour:e.colour})}setRulerColour(e){this.rulerColour=e.colour,e.sync&&r.socket.emit("Client.Options.Set",{rulerColour:e.colour})}setPanX(e){this.panX=e}setPanY(e){this.panY=e}increasePanX(e){this.panX+=e}increasePanY(e){this.panY+=e}setUnitSize(e){this.unitSize!==e.unitSize&&e.unitSize>0&&e.unitSize<1/0&&(this.unitSize=e.unitSize,l.layerManager.invalidate(),e.sync&&r.socket.emit("Location.Options.Set",{unit_size:e.unitSize}))}setUseGrid(e){if(this.useGrid!==e.useGrid){this.useGrid=e.useGrid;const t=l.layerManager.getGridLayer();e.useGrid?t.canvas.style.display="block":t.canvas.style.display="none",e.sync&&r.socket.emit("Location.Options.Set",{use_grid:e.useGrid})}}setGridSize(e){if(this.gridSize!==e.gridSize&&e.gridSize>0){this.gridSize=e.gridSize;const t=l.layerManager.getGridLayer();void 0!==t&&t.drawGrid(),e.sync&&r.socket.emit("Gridsize.Set",e.gridSize)}}setVisionRangeMin(e){this.visionRangeMin=e.value,l.layerManager.invalidateLight(),e.sync&&r.socket.emit("Location.Options.Set",{vision_min_range:e.value})}setVisionRangeMax(e){this.visionRangeMax=Math.max(e.value,this.visionRangeMin),l.layerManager.invalidateLight(),e.sync&&r.socket.emit("Location.Options.Set",{vision_max_range:this.visionRangeMax})}setFullFOW(e){this.fullFOW!==e.fullFOW&&(this.fullFOW=e.fullFOW,l.layerManager.invalidateLight(),e.sync&&r.socket.emit("Location.Options.Set",{full_fow:e.fullFOW}))}setFOWOpacity(e){this.fowOpacity=e.fowOpacity,l.layerManager.invalidateLight(),e.sync&&r.socket.emit("Location.Options.Set",{fow_opacity:e.fowOpacity})}setLineOfSight(e){this.fowLOS!==e.fowLOS&&(this.fowLOS=e.fowLOS,l.layerManager.invalidate(),e.sync&&r.socket.emit("Location.Options.Set",{fow_los:e.fowLOS}))}setLocationName(e){this.locationName=e}updateNote(e){const t=this.notes.find(t=>t.uuid===e.note.uuid);void 0!==t&&(t.title=e.note.title,t.text=e.note.text,e.sync&&r.socket.emit("Note.Update",t))}removeNote(e){this.notes=this.notes.filter(t=>t.uuid!==e.note.uuid),e.sync&&r.socket.emit("Note.Remove",e.note.uuid)}toggleUI(){this.showUI=!this.showUI}setClipboard(e){this.clipboard=e}setActiveTokens(e){this._activeTokens=e,l.layerManager.invalidateLight()}addActiveToken(e){this._activeTokens.push(e),l.layerManager.invalidateLight()}removeActiveToken(e){0===this._activeTokens.length&&(this._activeTokens=[...this.ownedtokens]),this._activeTokens.splice(this._activeTokens.indexOf(e),1),l.layerManager.invalidateLight()}clear(){this.context.state.visionSources=[],this.context.state.visionBlockers=[],this.context.state.ownedtokens=[],this.context.state.annotations=[],this.context.state.movementblockers=[],this.context.state.notes=[],this.context.commit("recalculateVision"),this.context.commit("recalculateMovement")}};s.__decorate([o.Mutation],p.prototype,"setFakePlayer",null),s.__decorate([o.Mutation],p.prototype,"setZoomDisplay",null),s.__decorate([o.Mutation],p.prototype,"setVisionMode",null),s.__decorate([o.Mutation],p.prototype,"setBoardInitialized",null),s.__decorate([o.Mutation],p.prototype,"toggleUnlabeledFilter",null),s.__decorate([o.Mutation],p.prototype,"addLabel",null),s.__decorate([o.Mutation],p.prototype,"setLabelFilters",null),s.__decorate([o.Mutation],p.prototype,"setLabelVisibility",null),s.__decorate([o.Mutation],p.prototype,"deleteLabel",null),s.__decorate([o.Mutation],p.prototype,"setDM",null),s.__decorate([o.Mutation],p.prototype,"setUsername",null),s.__decorate([o.Mutation],p.prototype,"setRoomName",null),s.__decorate([o.Mutation],p.prototype,"setRoomCreator",null),s.__decorate([o.Mutation],p.prototype,"setInvitationCode",null),s.__decorate([o.Mutation],p.prototype,"addLayer",null),s.__decorate([o.Mutation],p.prototype,"selectLayer",null),s.__decorate([o.Mutation],p.prototype,"newNote",null),s.__decorate([o.Mutation],p.prototype,"setAssets",null),s.__decorate([o.Mutation],p.prototype,"setLocations",null),s.__decorate([o.Mutation],p.prototype,"resetLayerInfo",null),s.__decorate([o.Mutation],p.prototype,"recalculateVision",null),s.__decorate([o.Mutation],p.prototype,"recalculateMovement",null),s.__decorate([o.Mutation],p.prototype,"updateZoom",null),s.__decorate([o.Mutation],p.prototype,"setGridColour",null),s.__decorate([o.Mutation],p.prototype,"setFOWColour",null),s.__decorate([o.Mutation],p.prototype,"setRulerColour",null),s.__decorate([o.Mutation],p.prototype,"setPanX",null),s.__decorate([o.Mutation],p.prototype,"setPanY",null),s.__decorate([o.Mutation],p.prototype,"increasePanX",null),s.__decorate([o.Mutation],p.prototype,"increasePanY",null),s.__decorate([o.Mutation],p.prototype,"setUnitSize",null),s.__decorate([o.Mutation],p.prototype,"setUseGrid",null),s.__decorate([o.Mutation],p.prototype,"setGridSize",null),s.__decorate([o.Mutation],p.prototype,"setVisionRangeMin",null),s.__decorate([o.Mutation],p.prototype,"setVisionRangeMax",null),s.__decorate([o.Mutation],p.prototype,"setFullFOW",null),s.__decorate([o.Mutation],p.prototype,"setFOWOpacity",null),s.__decorate([o.Mutation],p.prototype,"setLineOfSight",null),s.__decorate([o.Mutation],p.prototype,"setLocationName",null),s.__decorate([o.Mutation],p.prototype,"updateNote",null),s.__decorate([o.Mutation],p.prototype,"removeNote",null),s.__decorate([o.Mutation],p.prototype,"toggleUI",null),s.__decorate([o.Mutation],p.prototype,"setClipboard",null),s.__decorate([o.Mutation],p.prototype,"setActiveTokens",null),s.__decorate([o.Mutation],p.prototype,"addActiveToken",null),s.__decorate([o.Mutation],p.prototype,"removeActiveToken",null),s.__decorate([o.Action],p.prototype,"clear",null),p=s.__decorate([o.Module({dynamic:!0,store:f.rootStore,name:"game",namespaced:!0})],p),t.gameStore=o.getModule(p)},f19c:function(e,t,i){"use strict";var s=i("602f"),n=i.n(s);n.a},f2d0:function(e,t,i){},f30c:function(e,t,i){"use strict";i.r(t);var s=i("dc37"),n=i.n(s);for(var o in s)"default"!==o&&function(e){i.d(t,e,function(){return s[e]})}(o);t["default"]=n.a},f312:function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.aurasFromServer=(e=>{const t=[];for(const i of e)t.push({uuid:i.uuid,visionSource:i.vision_source,visible:i.visible,name:i.name,value:i.value,dim:i.dim,colour:i.colour});return t}),t.aurasToServer=(e=>{const t=[];for(const i of e)t.push({uuid:i.uuid,vision_source:i.visionSource,visible:i.visible,name:i.name,value:i.value,dim:i.dim,colour:i.colour});return t})},f51a:function(e,t,i){"use strict";i.r(t);var s=i("e0e9"),n=i.n(s);for(var o in s)"default"!==o&&function(e){i.d(t,e,function(){return s[e]})}(o);t["default"]=n.a},f551:function(e,t,i){"use strict";i.r(t);var s=i("2686"),n=i("1dd6");for(var o in n)"default"!==o&&function(e){i.d(t,e,function(){return n[e]})}(o);i("28b6");var r=i("2877"),a=Object(r["a"])(n["default"],s["a"],s["b"],!1,null,"7a3669fd",null);a.options.__file="note.vue",t["default"]=a.exports},f5fe:function(e,t,i){"use strict";i.r(t);var s=i("a014"),n=i("7018");for(var o in n)"default"!==o&&function(e){i.d(t,e,function(){return n[e]})}(o);i("ea7c");var r=i("2877"),a=Object(r["a"])(n["default"],s["a"],s["b"],!1,null,"07fc8ff2",null);a.options.__file="initiative.vue",t["default"]=a.exports},f692:function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0});const s=i("4185"),n=i("b906"),o=i("38c9"),r=i("bab4"),a=i("6f92"),l=i("f10f");function c(e){const t=document.createElement("canvas");let i;t.style.zIndex=a.layerManager.layers.length.toString(),t.width=window.innerWidth,t.height=window.innerHeight,i="grid"===e.type_?new o.GridLayer(t,e.name):"fow"===e.type_?new s.FOWLayer(t,e.name):"fow-players"===e.type_?new n.FOWPlayersLayer(t,e.name):new r.Layer(t,e.name),i.selectable=e.selectable,i.playerEditable=e.player_editable,a.layerManager.addLayer(i);const c=document.getElementById("layers");null!==c?("fow-players"!==e.name&&c.appendChild(t),"grid"===e.type_&&e.size&&l.gameStore.setGridSize({gridSize:e.size,sync:!1}),i.setShapes(e.shapes)):console.warn("Layers div is missing, this will prevent the main game board from loading!")}t.createLayer=c},f74c:function(e,t,i){"use strict";i.r(t);var s=i("1fd5"),n=i("29a2");for(var o in n)"default"!==o&&function(e){i.d(t,e,function(){return n[e]})}(o);i("7eb7");var r=i("2877"),a=Object(r["a"])(n["default"],s["a"],s["b"],!1,null,"e477c214",null);a.options.__file="labels.vue",t["default"]=a.exports},f8b3:function(e,t,i){"use strict";i.r(t);var s=i("d8ee"),n=i.n(s);for(var o in s)"default"!==o&&function(e){i.d(t,e,function(){return s[e]})}(o);t["default"]=n.a},f974:function(e,t,i){"use strict";var s=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",[i("div",{attrs:{id:"toolselect"}},[i("ul",e._l(e.visibleTools,function(t){return i("li",{directives:[{name:"show",rawName:"v-show",value:e.toolVisible(t),expression:"toolVisible(tool)"}],key:t,ref:t+"-selector",refInFor:!0,class:{"tool-selected":e.currentTool===t},on:{mousedown:function(i){e.currentTool=t}}},[i("a",{attrs:{href:"#"}},[e._v(e._s(t))])])}))]),i("div",[[i("select-tool",{directives:[{name:"show",rawName:"v-show",value:"Select"===e.currentTool,expression:"currentTool === 'Select'"}],ref:"selectTool"}),i("pan-tool",{directives:[{name:"show",rawName:"v-show",value:"Pan"===e.currentTool,expression:"currentTool === 'Pan'"}]}),i("keep-alive",[i("draw-tool",{directives:[{name:"show",rawName:"v-show",value:"Draw"===e.currentTool,expression:"currentTool === 'Draw'"}]})],1),i("ruler-tool",{directives:[{name:"show",rawName:"v-show",value:"Ruler"===e.currentTool,expression:"currentTool === 'Ruler'"}]}),i("map-tool",{directives:[{name:"show",rawName:"v-show",value:"Map"===e.currentTool,expression:"currentTool === 'Map'"}]}),i("filter-tool",{directives:[{name:"show",rawName:"v-show",value:"Filter"===e.currentTool,expression:"currentTool === 'Filter'"}]}),i("vision-tool",{directives:[{name:"show",rawName:"v-show",value:"Vision"===e.currentTool,expression:"currentTool === 'Vision'"}]}),i("shape-menu",{ref:"shapecontext"}),i("createtoken-dialog",{ref:"createtokendialog"})]],2)])},n=[];i.d(t,"a",function(){return s}),i.d(t,"b",function(){return n})},f994:function(e,t,i){"use strict";var s=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("form",{on:{focusin:e.focusin,focusout:e.focusout,submit:function(t){return t.preventDefault(),e.login(t)}}},[i("fieldset",[i("legend",{staticClass:"legend"},[e._v("PlanarAlly")]),i("div",{staticClass:"input"},[i("input",{directives:[{name:"model",rawName:"v-model",value:e.username,expression:"username"}],attrs:{type:"text",name:"username",placeholder:"Username",autocomplete:"username",required:""},domProps:{value:e.username},on:{input:function(t){t.target.composing||(e.username=t.target.value)}}}),e._m(0)]),i("div",{staticClass:"input"},[i("input",{directives:[{name:"model",rawName:"v-model",value:e.password,expression:"password"}],attrs:{type:"password",name:"password",placeholder:"Password",autocomplete:"current-password",required:""},domProps:{value:e.password},on:{input:function(t){t.target.composing||(e.password=t.target.value)}}}),e._m(1)]),i("div",{staticStyle:{display:"flex"}},[i("button",{staticStyle:{visibility:"hidden",display:"none"},attrs:{type:"submit",name:"login"}}),i("button",{staticClass:"submit",attrs:{type:"button",name:"register",title:"Register"},on:{click:e.register}},[i("i",{staticClass:"fas fa-plus"})]),e._m(2)])]),e.error?i("div",{staticClass:"feedback"},[i("p",{staticClass:"error"},[i("strong",[e._v("Error:")]),e._v("\n "+e._s(e.error)+"\n ")])]):e._e()])},n=[function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("span",[i("i",{staticClass:"fas fa-user-circle"})])},function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("span",[i("i",{staticClass:"fas fa-lock"})])},function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("button",{staticClass:"submit",attrs:{type:"submit",name:"login",title:"Login"}},[i("i",{staticClass:"fas fa-arrow-right"})])}];i.d(t,"a",function(){return s}),i.d(t,"b",function(){return n})},fbdd:function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0});const s=i("9ab4"),n=s.__importDefault(i("a026")),o=s.__importDefault(i("65d9")),r=s.__importDefault(i("d065")),a=i("4a5b"),l=i("0bc6"),c=i("af17"),u=i("6f92");let d=class extends n.default{constructor(){super(...arguments),this.shape=null}mounted(){c.EventBus.$on("SelectionInfo.Shape.Set",e=>{this.shape=e})}beforeDestroy(){c.EventBus.$off("SelectionInfo.Shape.Set")}openEditDialog(){this.$refs.editDialog.visible=!0}changeValue(e,t){null!==this.shape&&a.getRef("prompt").prompt(`New ${e.name} value:`,`Updating ${e.name}`).then(i=>{if(null===this.shape)return;const s=e.value;"+"===i[0]||"-"===i[0]?e.value+=parseInt(i,10):e.value=parseInt(i,10),isNaN(e.value)&&(e.value=s),l.socket.emit("Shape.Update",{shape:this.shape.asDict(),redraw:t,temporary:!1}),t&&u.layerManager.invalidate()},()=>{})}};d=s.__decorate([o.default({components:{"edit-dialog":r.default}})],d),t.default=d},fcac:function(e,t,i){},fe11:function(e,t,i){},fe80:function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0});const s=i("0bc6"),n=i("af17"),o=i("8f0a"),r=i("6f92"),a=i("f692"),l=i("9cb7"),c=i("f10f"),u=i("5f86"),d=i("5a5c");s.socket.on("connect",()=>{console.log("Connected")}),s.socket.on("disconnect",()=>{console.log("Disconnected")}),s.socket.on("connect_error",e=>{console.error("Could not connect to game session."),u.router.push("/dashboard")}),s.socket.on("error",e=>{console.error("Game session does not exist."),u.router.push("/dashboard")}),s.socket.on("redirect",e=>{console.log("redirecting"),u.router.push(e)}),s.socket.on("Room.Info.Set",e=>{c.gameStore.setRoomName(e.name),c.gameStore.setRoomCreator(e.creator),c.gameStore.setInvitationCode(e.invitationCode)}),s.socket.on("Username.Set",e=>{c.gameStore.setUsername(e),c.gameStore.setDM(e===window.location.pathname.split("/")[2])}),s.socket.on("Client.Options.Set",e=>{c.gameStore.setGridColour({colour:e.grid_colour,sync:!1}),c.gameStore.setFOWColour({colour:e.fow_colour,sync:!1}),c.gameStore.setRulerColour({colour:e.ruler_colour,sync:!1}),c.gameStore.setPanX(e.pan_x),c.gameStore.setPanY(e.pan_y),c.gameStore.setZoomDisplay(d.zoomDisplay(e.zoom_factor)),e.active_layer&&r.layerManager.selectLayer(e.active_layer,!1),void 0!==r.layerManager.getGridLayer()&&r.layerManager.getGridLayer().invalidate()}),s.socket.on("Location.Set",e=>{void 0!==e.name&&c.gameStore.setLocationName(e.name),void 0!==e.unit_size&&c.gameStore.setUnitSize({unitSize:e.unit_size,sync:!1}),void 0!==e.use_grid&&c.gameStore.setUseGrid({useGrid:e.use_grid,sync:!1}),void 0!==e.full_fow&&c.gameStore.setFullFOW({fullFOW:e.full_fow,sync:!1}),void 0!==e.fow_opacity&&c.gameStore.setFOWOpacity({fowOpacity:e.fow_opacity,sync:!1}),void 0!==e.fow_los&&c.gameStore.setLineOfSight({fowLOS:e.fow_los,sync:!1}),void 0!==e.vision_min_range&&c.gameStore.setVisionRangeMin({value:e.vision_min_range,sync:!1}),void 0!==e.vision_max_range&&c.gameStore.setVisionRangeMax({value:e.vision_max_range,sync:!1}),void 0!==e.vision_mode&&(c.gameStore.setVisionMode({mode:e.vision_mode,sync:!1}),c.gameStore.recalculateVision(),c.gameStore.recalculateMovement())}),s.socket.on("Position.Set",e=>{l.gameManager.setCenterPosition(new o.GlobalPoint(e.x,e.y))}),s.socket.on("Notes.Set",e=>{for(const t of e)c.gameStore.newNote({note:t,sync:!1})}),s.socket.on("Asset.List.Set",e=>{c.gameStore.setAssets(e)}),s.socket.on("Board.Set",e=>{c.gameStore.clear(),c.gameStore.setLocations(e.locations),document.getElementById("layers").innerHTML="",c.gameStore.resetLayerInfo(),r.layerManager.reset();for(const t of e.layers)a.createLayer(t);r.layerManager.selectLayer(r.layerManager.getLayer().name,!1),n.EventBus.$emit("Initiative.Clear"),c.gameStore.recalculateVision(),c.gameStore.recalculateMovement(),c.gameStore.setBoardInitialized(!0)}),s.socket.on("Gridsize.Set",e=>{c.gameStore.setGridSize({gridSize:e,sync:!1})}),s.socket.on("Shape.Add",e=>{l.gameManager.addShape(e)}),s.socket.on("Shape.Remove",e=>{if(!r.layerManager.UUIDMap.has(e.uuid))return void console.log("Attempted to remove an unknown shape");if(!r.layerManager.hasLayer(e.layer))return void console.log(`Attempted to remove shape from an unknown layer ${e.layer}`);const t=r.layerManager.getLayer(e.layer);t.removeShape(r.layerManager.UUIDMap.get(e.uuid),!1),t.invalidate(!1)}),s.socket.on("Shape.Order.Set",e=>{if(!r.layerManager.UUIDMap.has(e.shape.uuid))return void console.log("Attempted to move the shape order of an unknown shape");if(!r.layerManager.hasLayer(e.shape.layer))return void console.log(`Attempted to remove shape from an unknown layer ${e.shape.layer}`);const t=r.layerManager.UUIDMap.get(e.shape.uuid),i=r.layerManager.getLayer(t.layer);i.moveShapeOrder(t,e.index,!1)}),s.socket.on("Shape.Layer.Change",e=>{const t=r.layerManager.UUIDMap.get(e.uuid);void 0!==t&&t.moveLayer(e.layer,!1)}),s.socket.on("Shape.Update",e=>{l.gameManager.updateShape(e)}),s.socket.on("Temp.Clear",e=>{e.forEach(e=>{if(!r.layerManager.UUIDMap.has(e.uuid))return void console.log("Attempted to remove an unknown temporary shape");if(!r.layerManager.hasLayer(e.layer))return void console.log(`Attempted to remove shape from an unknown layer ${e.layer}`);const t=r.layerManager.UUIDMap.get(e.uuid);r.layerManager.getLayer(e.layer).removeShape(t,!1)})}),s.socket.on("Labels.Set",e=>{for(const t of e)c.gameStore.addLabel(t)}),s.socket.on("Label.Visibility.Set",e=>{c.gameStore.setLabelVisibility(e)}),s.socket.on("Label.Add",e=>{c.gameStore.addLabel(e)}),s.socket.on("Label.Delete",e=>{c.gameStore.deleteLabel(e)}),s.socket.on("Labels.Filter.Add",e=>{c.gameStore.labelFilters.push(e),r.layerManager.invalidate()}),s.socket.on("Labels.Filter.Remove",e=>{const t=c.gameStore.labelFilters.indexOf(e);t>=0&&(c.gameStore.labelFilters.splice(t,1),r.layerManager.invalidate())}),s.socket.on("Labels.Filters.Set",e=>{c.gameStore.setLabelFilters(e)})}}); +//# sourceMappingURL=app.b2080500.js.map \ No newline at end of file diff --git a/server/static/js/app.b2080500.js.map b/server/static/js/app.b2080500.js.map new file mode 100644 index 000000000..6248983f8 --- /dev/null +++ b/server/static/js/app.b2080500.js.map @@ -0,0 +1 @@ +{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./src/game/shapes/text.ts","webpack:///./src/game/ui/selection/selection_info.vue?cd1b","webpack:///./src/game/ui/selection/shapecontext.vue","webpack:///./src/App.vue?5b85","webpack:///./src/game/ui/menu/menu.vue?1580","webpack:///./src/core/components/modals/prompt.vue?d33d","webpack:///./src/core/components/colorpicker.vue?4d88","webpack:///./src/game/game.vue","webpack:///./src/game/api/socket.ts","webpack:///./src/assetManager/manager.vue?5633","webpack:///./src/game/ui/menu/asset_node.vue","webpack:///./src/game/ui/tools/selectcontext.vue?02dc","webpack:///./src/auth/login.vue","webpack:///./src/game/visibility/te/draw.ts","webpack:///./src/core/components/accordion.vue","webpack:///./src/game/ui/tools/tool.vue?5b17","webpack:///./src/game/shapes/circulartoken.ts","webpack:///./src/game/ui/annotation.ts","webpack:///./src/game/ui/menu/menu.vue","webpack:///./src/core/components/contextmenu.vue","webpack:///./src/game/ui/note.vue?49b7","webpack:///./src/auth/login.vue?c159","webpack:///./src/game/ui/labels.vue?e17e","webpack:///./src/game/ui/labels.vue?1ecb","webpack:///./src/game/shapes/utils.ts","webpack:///./src/core/components/modals/confirm.vue?e6fb","webpack:///./src/game/ui/tools/select.vue?aed4","webpack:///./src/game/ui/tools/select.vue?29b9","webpack:///./src/game/shapes/shape.ts","webpack:///./src/core/components/modals/prompt.vue?d457","webpack:///./src/game/ui/note.vue?a34d","webpack:///./src/game/ui/note.vue?23aa","webpack:///./src/core/components/modals/modal.vue?33b9","webpack:///./src/game/ui/tools/select.vue?49f9","webpack:///./src/game/ui/tools/utils.ts","webpack:///./src/game/ui/note.vue?a508","webpack:///./src/game/ui/labels.vue?15af","webpack:///./src/game/ui/tools/vision.vue?4f0c","webpack:///./src/game/api/utils.ts","webpack:///./src/game/ui/menu/asset_node.vue?f519","webpack:///./src/core/components/contextmenu.vue?f03a","webpack:///./src/core/components/contextmenu.vue?7efa","webpack:///./src/assetManager/store.ts","webpack:///./src/core/components/contextmenu.vue?50e1","webpack:///./src/game/ui/selection/shapecontext.vue?1cf6","webpack:///./src/game/ui/tools/map.vue?284a","webpack:///./src/game/layers/grid.ts","webpack:///./src/store.ts","webpack:///./src/core/components/colorpicker.vue","webpack:///./src/game/ui/tools/vision.vue?48bb","webpack:///./src/auth/login.vue?3521","webpack:///./src/App.vue?2e53","webpack:///./src/App.vue","webpack:///./src/game/game.vue?b3a0","webpack:///./src/game/game.vue?f5c6","webpack:///./src/game/layers/fow.ts","webpack:///./src/core/components/load.vue?18c2","webpack:///./src/game/ui/selection/edit_dialog.vue?db09","webpack:///./src/game/ui/selection/edit_dialog.vue?6334","webpack:///./src/game/shapes/circle.ts","webpack:///./src/game/ui/tools/map.vue?a3ab","webpack:///./src/core/components/load.vue","webpack:///./src/game/ui/tools/pan.ts","webpack:///./src/game/ui/tools/selectcontext.vue","webpack:///./src/core/utils.ts","webpack:///./src/assetManager/contextMenu.vue","webpack:///./src/game/visibility/te/triag.ts","webpack:///./src/game/ui/menu/asset_node.vue?1f27","webpack:///./src/game/ui/tools/vision.vue?d25b","webpack:///./src/game/ui/selection/edit_dialog.vue?1206","webpack:///./src/core/components/modals/modal.vue?44ae","webpack:///./src/assetManager/socket.ts","webpack:///./src/game/ui/tools/filter.vue?ee60","webpack:///./src/core/components/accordion.vue?3e09","webpack:///./src/game/ui/tools/vision.vue?2e9f","webpack:///./src/game/ui/tools/vision.vue?9b57","webpack:///./src/game/game.vue?5550","webpack:///./src/game/shapes/multiline.ts","webpack:///./src/game/ui/tools/draw.vue","webpack:///./src/game/utils.ts","webpack:///./src/game/ui/tools/createtoken_modal.vue?d0df","webpack:///./src/game/ui/note.vue?f9bd","webpack:///./src/game/ui/tools/draw.vue?b96d","webpack:///./src/game/shapes/line.ts","webpack:///./src/router.ts","webpack:///./src/game/ui/tools/tool.vue?d136","webpack:///./src/game/ui/tools/tools.vue","webpack:///./src/game/ui/tools/tool.vue?8ce3","webpack:///./src/game/shapes/asset.ts","webpack:///./src/game/visibility/te/cdt.ts","webpack:///./src/game/ui/tools/draw.vue?1261","webpack:///./src/game/layers/manager.ts","webpack:///./src/game/ui/initiative.vue?c7e1","webpack:///./src/game/ui/tools/createtoken_modal.vue","webpack:///./src/game/visibility/bvh/node.ts","webpack:///./src/game/ui/tools/createtoken_modal.vue?f918","webpack:///./src/game/events/keyboard.ts","webpack:///./src/assetManager/manager.vue?433f","webpack:///./src/game/ui/selection/shapecontext.vue?17f5","webpack:///./src/game/ui/tools/tools.vue?25b2","webpack:///./src/game/ui/selection/selection_info.vue?2310","webpack:///./src/core/components/modals/modal.vue?09d2","webpack:///./src/game/ui/labels.vue?e465","webpack:///./src/core/components/contextmenu.vue?a0a2","webpack:///./src/game/ui/menu/menu.vue?8bfc","webpack:///./src/game/ui/menu/menu.vue?ae2a","webpack:///./src/core/components/modals/prompt.vue?4e1b","webpack:///./src/core/components/accordion.vue?3d26","webpack:///./src/core/components/load.vue?4ab2","webpack:///./src/core/components/load.vue?0f87","webpack:///./src/game/ui/menu/menu.vue?8b23","webpack:///./src/game/shapes/boundingrect.ts","webpack:///./src/dashboard/main.vue?5e14","webpack:///./src/dashboard/main.vue?94d1","webpack:///./src/game/geom.ts","webpack:///./src/game/ui/menu/asset_node.vue?c55a","webpack:///./src/game/ui/menu/asset_node.vue?3fe9","webpack:///./src/game/game.vue?5592","webpack:///./src/game/units.ts","webpack:///./src/game/ui/menu/menu.vue?ae57","webpack:///./src/core/components/colorpicker.vue?1682","webpack:///./src/game/ui/tools/selectcontext.vue?0020","webpack:///./src/game/ui/tools/selectcontext.vue?758c","webpack:///./src/game/visibility/te/tds.ts","webpack:///./src/game/visibility/bvh/bvh.ts","webpack:///./src/game/ui/tools/filter.vue?1da1","webpack:///./src/game/manager.ts","webpack:///./src/game/ui/menu/asset_node.vue?0d0e","webpack:///./src/game/ui/tools/vision.vue","webpack:///./src/game/ui/initiative.vue?0d27","webpack:///./src/game/ui/initiative.vue?3968","webpack:///./src/core/components/load.vue?8cd0","webpack:///./src/game/ui/selection/selection_info.vue?7cd0","webpack:///./src/game/ui/selection/selection_info.vue?4f48","webpack:///./src/game/ui/selection/shapecontext.vue?4b66","webpack:///./src/game/ui/selection/shapecontext.vue?0558","webpack:///./src/dashboard/main.vue?3f72","webpack:///./src/core/components/modals/confirm.vue","webpack:///./src/game/ui/selection/shapecontext.vue?aac0","webpack:///./src/assetManager/contextMenu.vue?c131","webpack:///./src/assetManager/contextMenu.vue?a185","webpack:///./src/game/ui/tools/draw.vue?60f4","webpack:///./src/assetManager/manager.vue?a11e","webpack:///./src/game/event-bus.ts","webpack:///./src/dashboard/main.vue?d5a9","webpack:///./src/game/shapes/rect.ts","webpack:///./src/game/game.vue?b235","webpack:///./src/game/ui/tools/filter.vue?b0f4","webpack:///./src/game/ui/tools/selectcontext.vue?6f66","webpack:///./src/game/layers/fowplayers.ts","webpack:///./src/game/layers/layer.ts","webpack:///./src/game/events/mouse.ts","webpack:///./src/game/ui/tools/filter.vue","webpack:///./src/game/shapes/baserect.ts","webpack:///./src/game/ui/tools/select.vue","webpack:///./src/dashboard/main.vue","webpack:///./src/game/ui/tools/createtoken_modal.vue?6f0b","webpack:///./src/assetManager/manager.vue?765a","webpack:///./src/assetManager/manager.vue?a045","webpack:///./src/game/ui/tools/selectcontext.vue?d61f","webpack:///./src/auth/logout.ts","webpack:///./src/core/store.ts","webpack:///./src/main.ts","webpack:///./src/core/components/contextmenu.vue?f402","webpack:///./src/invitation/invitation.ts","webpack:///./src/core/components/modals/prompt.vue","webpack:///./src/game/visibility/te/te.ts","webpack:///./src/game/ui/tools/map.vue?f96f","webpack:///./src/game/ui/tools/map.vue?7f60","webpack:///./src/game/ui/selection/edit_dialog.vue","webpack:///./src/game/settings.ts","webpack:///./src/auth/login.vue?283c","webpack:///./src/game/ui/tools/createtoken_modal.vue?e7b2","webpack:///./src/game/ui/tools/createtoken_modal.vue?5fcc","webpack:///./src/game/ui/tools/tool.vue?6323","webpack:///./src/game/ui/tools/tool.vue?f5ba","webpack:///./src/core/components/modals/modal.vue?1854","webpack:///./src/core/components/modals/modal.vue?e329","webpack:///./src/game/game.vue?d01c","webpack:///./src/game/ui/tools/ruler.ts","webpack:///./src/core/components/modals/modal.vue","webpack:///./src/core/components/accordion.vue?4b34","webpack:///./src/game/visibility/te/pa.ts","webpack:///./src/game/ui/tools/tools.vue?4580","webpack:///./src/dashboard/main.vue?1359","webpack:///./src/game/ui/selection/edit_dialog.vue?9a84","webpack:///./src/core/components/modals/confirm.vue?f9ee","webpack:///./src/game/ui/tools/map.vue","webpack:///./src/core/components/accordion.vue?c7e6","webpack:///./src/core/components/accordion.vue?6229","webpack:///./src/core/components/modals/confirm.vue?e141","webpack:///./src/core/components/modals/confirm.vue?be48","webpack:///./src/assetManager/contextMenu.vue?1b1b","webpack:///./src/game/ui/tools/select.vue?b7fd","webpack:///./src/game/ui/tools/filter.vue?6447","webpack:///./src/game/ui/labels.vue?8d8f","webpack:///./src/game/shapes/polygon.ts","webpack:///./src/game/ui/tools/draw.vue?1866","webpack:///./src/game/ui/tools/draw.vue?03b4","webpack:///./src/core/components/colorpicker.vue?0fbc","webpack:///./src/core/components/colorpicker.vue?fb27","webpack:///./src/game/ui/tools/filter.vue?a607","webpack:///./src/game/ui/tools/filter.vue?fa63","webpack:///./src/assetManager/manager.vue","webpack:///./src/game/ui/tools/tools.vue?fa4a","webpack:///./src/game/ui/tools/tool.vue","webpack:///./src/game/ui/initiative.vue?4ce1","webpack:///./src/core/components/modals/prompt.vue?0a11","webpack:///./src/core/components/modals/prompt.vue?36e2","webpack:///./src/game/ui/initiative.vue?36c8","webpack:///./src/game/ui/selection/selection_info.vue","webpack:///./src/game/store.ts","webpack:///./src/core/components/colorpicker.vue?4d99","webpack:///./src/core/components/modals/confirm.vue?a22f","webpack:///./src/game/comm/conversion/aura.ts","webpack:///./src/assetManager/contextMenu.vue?1e9a","webpack:///./src/game/ui/note.vue","webpack:///./src/game/ui/initiative.vue","webpack:///./src/game/layers/utils.ts","webpack:///./src/game/ui/labels.vue","webpack:///./src/game/ui/selection/edit_dialog.vue?3800","webpack:///./src/game/ui/tools/tools.vue?0ab0","webpack:///./src/game/ui/tools/tools.vue?c2f7","webpack:///./src/auth/login.vue?e4a1","webpack:///./src/auth/login.vue?8f9e","webpack:///./src/game/ui/selection/selection_info.vue?5d62","webpack:///./src/game/api/events.ts"],"names":["webpackJsonpCallback","data","moduleId","chunkId","chunkIds","moreModules","executeModules","i","resolves","length","installedChunks","push","Object","prototype","hasOwnProperty","call","modules","parentJsonpFunction","shift","deferredModules","apply","checkDeferredModules","result","deferredModule","fulfilled","j","depId","splice","__webpack_require__","s","installedModules","app","exports","module","l","m","c","d","name","getter","o","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","p","jsonpArray","window","oldJsonpFunction","slice","boundingrect_1","shape_1","units_1","Text","Shape","[object Object]","position","text","font","angle","fillColour","strokeColour","uuid","super","this","type","assign","getBaseDict","points","refPoint","x","y","BoundingRect","ctx","draw","fillStyle","save","dest","g2l","translate","rotate","textAlign","getLines","map","line","fillText","restore","point","centerPoint","canvas","getBoundingBox","visibleInCanvas","resizePoint","lines","lineHeight","widths","measureText","width","Math","max","split","allLines","maxWidth","targetLine","words","word","testLine","metrics","testWidth","_node_modules_mini_css_extract_plugin_dist_loader_js_ref_6_oneOf_1_0_node_modules_css_loader_index_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_6_oneOf_1_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_selection_info_vue_vue_type_style_index_0_id_674cf937_scoped_true_lang_css___WEBPACK_IMPORTED_MODULE_0__","_node_modules_mini_css_extract_plugin_dist_loader_js_ref_6_oneOf_1_0_node_modules_css_loader_index_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_6_oneOf_1_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_selection_info_vue_vue_type_style_index_0_id_674cf937_scoped_true_lang_css___WEBPACK_IMPORTED_MODULE_0___default","__webpack_exports__","_shapecontext_vue_vue_type_template_id_759e5a8a_scoped_true___WEBPACK_IMPORTED_MODULE_0__","_shapecontext_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__","__WEBPACK_IMPORT_KEY__","_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_3__","component","options","__file","_node_modules_mini_css_extract_plugin_dist_loader_js_ref_6_oneOf_1_0_node_modules_css_loader_index_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_6_oneOf_1_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_App_vue_vue_type_style_index_0_lang_css___WEBPACK_IMPORTED_MODULE_0__","_node_modules_mini_css_extract_plugin_dist_loader_js_ref_6_oneOf_1_0_node_modules_css_loader_index_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_6_oneOf_1_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_App_vue_vue_type_style_index_0_lang_css___WEBPACK_IMPORTED_MODULE_0___default","_node_modules_mini_css_extract_plugin_dist_loader_js_ref_6_oneOf_1_0_node_modules_css_loader_index_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_6_oneOf_1_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_menu_vue_vue_type_style_index_0_id_13f3fb33_scoped_true_lang_css___WEBPACK_IMPORTED_MODULE_0__","_node_modules_mini_css_extract_plugin_dist_loader_js_ref_6_oneOf_1_0_node_modules_css_loader_index_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_6_oneOf_1_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_menu_vue_vue_type_style_index_0_id_13f3fb33_scoped_true_lang_css___WEBPACK_IMPORTED_MODULE_0___default","_node_modules_mini_css_extract_plugin_dist_loader_js_ref_6_oneOf_1_0_node_modules_css_loader_index_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_6_oneOf_1_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_prompt_vue_vue_type_style_index_0_id_0602c2e6_scoped_true_lang_css___WEBPACK_IMPORTED_MODULE_0__","_node_modules_mini_css_extract_plugin_dist_loader_js_ref_6_oneOf_1_0_node_modules_css_loader_index_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_6_oneOf_1_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_prompt_vue_vue_type_style_index_0_id_0602c2e6_scoped_true_lang_css___WEBPACK_IMPORTED_MODULE_0___default","tinycolor2_1","tslib_1","__importDefault","vue_1","vue_class_component_1","vue_color_1","vue_property_decorator_1","ColorPicker","default","display","left","top","transparent","$refs","chromePicker","val","rgba","a","setPosition","disabled","$nextTick","$children","$el","focus","newColor","toRgbString","$emit","color","rect","getBoundingClientRect","right","innerWidth","bottom","innerHeight","__decorate","Prop","String","Boolean","components","chrome-picker","Chrome","_game_vue_vue_type_template_id_05b88da7_scoped_true___WEBPACK_IMPORTED_MODULE_0__","_game_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__","_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_4__","socket_io_client_1","createConnection","route","socket","io","opts","query","params","creator","room","connect","location","protocol","host","autoConnect","contextMenu_vue_1","confirm_vue_1","prompt_vue_1","socket_1","store_1","utils_1","AssetManager","path","draggingSelection","folders","assetStore","files","selected","idMap","currentFolder","root","parentFolder","parent","undefined","firstSelectedFile","sel","file_hash","nextFolder","pop","clearSelected","emit","prompt","inode","target","includes","indexOf","delete","event","shiftKey","inodes","start","end","ctrlKey","file","dataTransfer","setData","dropEffect","classList","contains","add","remove","moveInode","upload","document","getElementById","click","fls","CHUNK_SIZE","uuidv4","slices","ceil","size","fr","FileReader","readAsArrayBuffer","min","onload","e","directory","totalSlices","Prompt","ConfirmDialog","AssetContextMenu","to","from","next","disconnect","_asset_node_vue_vue_type_template_id_6d718094_scoped_true___WEBPACK_IMPORTED_MODULE_0__","_asset_node_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__","_node_modules_mini_css_extract_plugin_dist_loader_js_ref_6_oneOf_1_0_node_modules_css_loader_index_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_6_oneOf_1_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_selectcontext_vue_vue_type_style_index_0_id_44a31e42_scoped_true_lang_css___WEBPACK_IMPORTED_MODULE_0__","_node_modules_mini_css_extract_plugin_dist_loader_js_ref_6_oneOf_1_0_node_modules_css_loader_index_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_6_oneOf_1_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_selectcontext_vue_vue_type_style_index_0_id_44a31e42_scoped_true_lang_css___WEBPACK_IMPORTED_MODULE_0___default","_login_vue_vue_type_template_id_bc30fc14_scoped_true___WEBPACK_IMPORTED_MODULE_0__","_login_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__","manager_1","tds_1","triag_1","drawPolygon","polygon","colour","dl","layerManager","getLayer","lineJoin","beginPath","strokeStyle","random","moveTo","g2lx","g2ly","lineTo","closePath","stroke","drawPolygonL","xx","local","yy","I","J","drl","constrained","drawPolygonT","tds","clear","logs","T","clearRect","ei","EdgeIterator","valid","collect","fromP","edge","first","vertices","ccw","second","toP","cw","Infinity","constraints","console","log","pos","triangles","isInfinite","po","arc","PI","fill","DP","DPL","DPT","_accordion_vue_vue_type_template_id_0bf2b7ba_scoped_true___WEBPACK_IMPORTED_MODULE_0__","_accordion_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__","_node_modules_mini_css_extract_plugin_dist_loader_js_ref_6_oneOf_1_0_node_modules_css_loader_index_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_6_oneOf_1_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_tool_vue_vue_type_style_index_0_lang_css___WEBPACK_IMPORTED_MODULE_0__","_node_modules_mini_css_extract_plugin_dist_loader_js_ref_6_oneOf_1_0_node_modules_css_loader_index_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_6_oneOf_1_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_tool_vue_vue_type_style_index_0_lang_css___WEBPACK_IMPORTED_MODULE_0___default","tinycolor","__importStar","circle_1","CircularToken","Circle","center","radius","fromDict","textBaseline","xs","calcFontScale","g2lz","ys","transform","mostReadable","toHexString","visible","gameStore","IS_DM","group","source","has_img","effects","index","geom_1","rect_1","text_1","AnnotationManager","shown","origin","GlobalPoint","annotationText","annotationRect","Rect","layer","hasLayer","warn","addShape","l2g","LocalPoint","getMaxWidth","height","getMaxHeight","w","zoomFactor","h","invalidate","_menu_vue_vue_type_template_id_13f3fb33_scoped_true___WEBPACK_IMPORTED_MODULE_0__","_menu_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__","_contextmenu_vue_vue_type_template_id_256dde9c___WEBPACK_IMPORTED_MODULE_0__","_contextmenu_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__","_node_modules_cache_loader_dist_cjs_js_ref_12_0_node_modules_thread_loader_dist_cjs_js_node_modules_ts_loader_index_js_ref_12_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_note_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__","_node_modules_cache_loader_dist_cjs_js_ref_12_0_node_modules_thread_loader_dist_cjs_js_node_modules_ts_loader_index_js_ref_12_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_note_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0___default","_node_modules_cache_loader_dist_cjs_js_ref_12_0_node_modules_thread_loader_dist_cjs_js_node_modules_ts_loader_index_js_ref_12_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_login_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__","_node_modules_cache_loader_dist_cjs_js_ref_12_0_node_modules_thread_loader_dist_cjs_js_node_modules_ts_loader_index_js_ref_12_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_login_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0___default","render","_vm","_h","$createElement","_c","_self","attrs","mask","on","close","$event","scopedSlots","_u","fn","staticClass","draggable","dragstart","dragStart","dragend","dragEnd","_v","title","staticStyle","margin","directives","rawName","expression","ref","placeholder","domProps","input","composing","search","_l","category","labels","label","selectLabel","_s","_e","class","lower-opacity","style","stopPropagation","toggleVisibility","deleteLabel","id","modifiers","trim","newCategory","blur","$forceUpdate","newName","addLabel","staticRenderFns","asset_1","circulartoken_1","line_1","multiline_1","polygon_1","createShapeFromDict","shape","sh","type_","fill_colour","stroke_colour","circ","token","Line","x2","y2","line_width","multiline","MultiLine","Polygon","v","asset","img","Image","src","startsWith","URL","pathname","Asset","_node_modules_mini_css_extract_plugin_dist_loader_js_ref_6_oneOf_1_0_node_modules_css_loader_index_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_6_oneOf_1_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_confirm_vue_vue_type_style_index_0_id_1883e207_scoped_true_lang_css___WEBPACK_IMPORTED_MODULE_0__","_node_modules_mini_css_extract_plugin_dist_loader_js_ref_6_oneOf_1_0_node_modules_css_loader_index_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_6_oneOf_1_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_confirm_vue_vue_type_style_index_0_id_1883e207_scoped_true_lang_css___WEBPACK_IMPORTED_MODULE_0___default","aura_1","nameVisible","trackers","auras","_owners","visionObstruction","movementObstruction","isToken","showHighlight","annotation","globalCompositeOperation","Map","_refPoint","delta","idx","entries","abs","prev","fromArray","vec","subtract","mid","multiply","normalize","skipLightUpdate","recalculate","self","obstructionIndex","visionBlockers","update","recalculateVision","forEach","au","ls","visionSources","findIndex","aura","visionSource","some","blocksMovement","movementblockers","recalculateMovement","ownedBy","ownedtokens","draw_operator","movement_obstruction","vision_obstruction","aurasToServer","owners","name_visible","is_token","JSON","stringify","aurasFromServer","parse","bbox","strokeRect","topLeft","dim","loc","innerRange","g2lr","gradient","createRadialGradient","tc","addColorStop","setAlpha","lastPath","sync","oldLayer","newLayer","shapes","freeze","username","FAKE_PLAYER","activeTokens","owner","oldValue","newValue","ownerIndex","addOwner","_node_modules_cache_loader_dist_cjs_js_ref_12_0_node_modules_thread_loader_dist_cjs_js_node_modules_ts_loader_index_js_ref_12_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_prompt_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__","_node_modules_cache_loader_dist_cjs_js_ref_12_0_node_modules_thread_loader_dist_cjs_js_node_modules_ts_loader_index_js_ref_12_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_prompt_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0___default","note","select","font-size","change","updateNote","$set","calcHeight","removeNote","_node_modules_mini_css_extract_plugin_dist_loader_js_ref_6_oneOf_1_0_node_modules_css_loader_index_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_6_oneOf_1_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_modal_vue_vue_type_style_index_0_id_12ed61ba_scoped_true_lang_css___WEBPACK_IMPORTED_MODULE_0__","_node_modules_mini_css_extract_plugin_dist_loader_js_ref_6_oneOf_1_0_node_modules_css_loader_index_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_6_oneOf_1_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_modal_vue_vue_type_style_index_0_id_12ed61ba_scoped_true_lang_css___WEBPACK_IMPORTED_MODULE_0___default","selectcontext_vue_1","tool_vue_1","utils_2","utils_3","SelectOperations","SelectTool","showContextMenu","active","Noop","deltaChanged","dragRay","Ray","Vector","selectionStartPoint","selectionHelper","mouse","getMouse","globalMouse","selectionStack","hit","selection","concat","getPointIndex","l2gz","getRef","Resize","Drag","localRefPoint","GroupSelect","endPoint","og","direction","ogDelta","calculateDelta","asDict","redraw","temporary","resize","updateCursor","body","cursor","clearSelection","topRight","botLeft","useGrid","altKey","snapToGrid","resizeToGrid","$parent","shapecontext","open","selectcontext","getPointOrientation","SelectContext","pa_1","done","visionMode","ogSelBBox","newSelBBox","offset","refine","movementBlocker","blocker","UUIDMap","blockerBBox","found","intersectsWithInner","ray","fromPoints","invDir","inverse","dirIsNegative","intersectP","bCenter","sCenter","ux","uy","dx","dot","dy","centerTriangle","PA_CDT","movement","locate","asArray","lt","triangle","checkTriangle","skip","endpoint","neighbours","_cw","_ccw","ix","intersection","isConstrained","orientation","Sign","LEFT_TURN","ZERO","newDelta","_node_modules_mini_css_extract_plugin_dist_loader_js_ref_6_oneOf_1_0_node_modules_css_loader_index_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_6_oneOf_1_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_note_vue_vue_type_style_index_0_id_7a3669fd_scoped_true_lang_css___WEBPACK_IMPORTED_MODULE_0__","_node_modules_mini_css_extract_plugin_dist_loader_js_ref_6_oneOf_1_0_node_modules_css_loader_index_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_6_oneOf_1_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_note_vue_vue_type_style_index_0_id_7a3669fd_scoped_true_lang_css___WEBPACK_IMPORTED_MODULE_0___default","_node_modules_cache_loader_dist_cjs_js_ref_12_0_node_modules_thread_loader_dist_cjs_js_node_modules_ts_loader_index_js_ref_12_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_labels_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__","_node_modules_cache_loader_dist_cjs_js_ref_12_0_node_modules_thread_loader_dist_cjs_js_node_modules_ts_loader_index_js_ref_12_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_labels_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0___default","_node_modules_cache_loader_dist_cjs_js_ref_12_0_node_modules_thread_loader_dist_cjs_js_node_modules_ts_loader_index_js_ref_12_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_vision_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__","_node_modules_cache_loader_dist_cjs_js_ref_12_0_node_modules_thread_loader_dist_cjs_js_node_modules_ts_loader_index_js_ref_12_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_vision_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0___default","sendClientOptions","locationOptions","panX","panY","AssetNode","showImage","keys","filter","el","sort","alphSort","__files","b","toLowerCase","children","imageSource","querySelector","setDragImage","tabindex","_t","vuex_module_decorators_1","AssetStore","VuexModule","Mutation","Module","dynamic","store","rootStore","namespaced","getModule","_node_modules_cache_loader_dist_cjs_js_ref_12_0_node_modules_thread_loader_dist_cjs_js_node_modules_ts_loader_index_js_ref_12_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_contextmenu_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__","_node_modules_cache_loader_dist_cjs_js_ref_12_0_node_modules_thread_loader_dist_cjs_js_node_modules_ts_loader_index_js_ref_12_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_contextmenu_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0___default","contextmenu_vue_1","event_bus_1","ShapeContext","activeLayer","pageX","pageY","layers","selectable","playerEditable","moveLayer","getActiveLayer","moveShapeOrder","initiative","addInitiative","getInitiativeRepr","EventBus","ContextMenu","_node_modules_cache_loader_dist_cjs_js_ref_12_0_node_modules_thread_loader_dist_cjs_js_node_modules_ts_loader_index_js_ref_12_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_map_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__","_node_modules_cache_loader_dist_cjs_js_ref_12_0_node_modules_thread_loader_dist_cjs_js_node_modules_ts_loader_index_js_ref_12_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_map_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0___default","layer_1","GridLayer","Layer","doClear","drawGrid","gs","gridSize","gridColour","lineWidth","vuex_1","use","Store","_colorpicker_vue_vue_type_template_id_d32461a4_scoped_true___WEBPACK_IMPORTED_MODULE_0__","_colorpicker_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__","VisionTool","tokens","removeActiveToken","addActiveToken","_node_modules_mini_css_extract_plugin_dist_loader_js_ref_6_oneOf_1_0_node_modules_css_loader_index_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_6_oneOf_1_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_login_vue_vue_type_style_index_0_id_bc30fc14_scoped_true_lang_css___WEBPACK_IMPORTED_MODULE_0__","_node_modules_mini_css_extract_plugin_dist_loader_js_ref_6_oneOf_1_0_node_modules_css_loader_index_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_6_oneOf_1_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_login_vue_vue_type_style_index_0_id_bc30fc14_scoped_true_lang_css___WEBPACK_IMPORTED_MODULE_0___default","script","componentNormalizer","mouseleave","wheel","zoom","ready","mousedown","mouseup","mousemove","contextmenu","preventDefault","dragover","drop","showUI","layer-selected","selectedLayer","selectLayer","href","interval","dot-width","dot-height","tooltip-dir","tooltip","formatter","zoomDisplay","toFixed","slider-style","border-radius","bg-style","background-color","box-shadow","process-style","model","callback","$$v","settings_1","te_1","FOWLayer","isVisionLayer","preFogShapes","virtualCanvas","createElement","vCtx","getContext","has","removeShape","Settings","skipLightFOW","originalOperation","dctx","drawAngleLines","drawFirstLightHit","fullFOW","bb","lcenter","alm","light","find","auraLength","getUnitDistance","auraCircle","lastArcAngle","Path2D","firstPoint","angleSteps","anglePoint","cos","sin","lightRay","hitResult","BV","intersect","computeVisibility","drawImage","fowLOS","preShape","ogComposite","getFogColour","fillRect","_node_modules_cache_loader_dist_cjs_js_ref_12_0_node_modules_thread_loader_dist_cjs_js_node_modules_ts_loader_index_js_ref_12_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_load_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__","_node_modules_cache_loader_dist_cjs_js_ref_12_0_node_modules_thread_loader_dist_cjs_js_node_modules_ts_loader_index_js_ref_12_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_load_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0___default","for","grid-column","owned","updateShape","opacity","grid-column-start","checked","setToken","Array","isArray","_i","$$a","$$el","$$c","$$i","setVisionBlocker","setMovementBlocker","update:color","updateOwner","gridColumnStart","removeOwner","tracker","number","_n","removeTracker","updateAuraColour","updateAuraVisionSource","removeAura","removeLabel","openLabelManager","updateAnnotation","pow","targetX","targetY","round","diff","sqrt","baserect_1","MapTool","xCount","yCount","startPoint","clone","BaseRect","_load_vue_vue_type_template_id_ff095222___WEBPACK_IMPORTED_MODULE_0__","_load_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__","_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__","PanTool","panStart","distance","increasePanX","increasePanY","_selectcontext_vue_vue_type_template_id_44a31e42_scoped_true___WEBPACK_IMPORTED_MODULE_0__","_selectcontext_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__","main_1","replace","toString","capitalize","charAt","toUpperCase","getHTMLFont","element","parentElement","getComputedStyle","getPropertyValue","getHTMLTextWidth","fakeElement","appendChild","partition","arr","predicate","ret","Number","fontWidth","fixedEncodeURIComponent","str","encodeURIComponent","charCodeAt","OrderedMap","values","getComponent","activeComponent","_contextMenu_vue_vue_type_template_id_606797b4___WEBPACK_IMPORTED_MODULE_0__","_contextMenu_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__","edgeInfo","va","vb","ec","EdgeCirculator","indv","indexV","ri","infinite","vi","orient","COLLINEAR","collinearBetween","q","cPQ","cQR","compare","EQUAL","SMALLER","LARGER","px","py","qx","qy","rx","ry","pqx","pqy","prx","pry","det","determinant","maxX","maxY","aprX","aprY","eps","EPSILON","POSITIVE","NEGATIVE","a00","a01","a10","a11","hasInexactNegativeOrientation","sideOfOrientedCircle","perturb","sideOfOrientedCircleP","Error","p0","p1","p2","os","getOrientedSide","ON_ORIENTED_BOUNDARY","reverse","ON_NEGATIVE_SIDE","xyEqual","xySmaller","xyCompare","qpx","qpy","rpx","rpy","tpx","tpy","tqx","tqy","rqx","rqy","maxx","maxy","arpx","arpy","atqx","atqy","atpx","atpy","arqx","arqy","ON_POSITIVE_SIDE","segSegDoIntersectCrossing","p3","p4","RIGHT_TURN","segSegDoIntersectContained","pa","pb","pc","pd","getIntersectionType","intersectionType","IntersectionType","POINT","NO_INTERSECTION","getLine","doIntersect","l1","l2","info","getIntersectionTypeLine","la","lb","denom","nom1","nom2","A1","A2","B1","B2","nextUp","MAX_VALUE","MIN_VALUE","ulp","_node_modules_cache_loader_dist_cjs_js_ref_12_0_node_modules_thread_loader_dist_cjs_js_node_modules_ts_loader_index_js_ref_12_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_asset_node_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__","_node_modules_cache_loader_dist_cjs_js_ref_12_0_node_modules_thread_loader_dist_cjs_js_node_modules_ts_loader_index_js_ref_12_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_asset_node_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0___default","_node_modules_mini_css_extract_plugin_dist_loader_js_ref_6_oneOf_1_0_node_modules_css_loader_index_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_6_oneOf_1_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_vision_vue_vue_type_style_index_0_id_46baf892_scoped_true_lang_css___WEBPACK_IMPORTED_MODULE_0__","_node_modules_mini_css_extract_plugin_dist_loader_js_ref_6_oneOf_1_0_node_modules_css_loader_index_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_6_oneOf_1_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_vision_vue_vue_type_style_index_0_id_46baf892_scoped_true_lang_css___WEBPACK_IMPORTED_MODULE_0___default","_node_modules_mini_css_extract_plugin_dist_loader_js_ref_6_oneOf_1_0_node_modules_css_loader_index_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_6_oneOf_1_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_edit_dialog_vue_vue_type_style_index_0_id_23de098e_scoped_true_lang_css___WEBPACK_IMPORTED_MODULE_0__","_node_modules_mini_css_extract_plugin_dist_loader_js_ref_6_oneOf_1_0_node_modules_css_loader_index_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_6_oneOf_1_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_edit_dialog_vue_vue_type_style_index_0_id_23de098e_scoped_true_lang_css___WEBPACK_IMPORTED_MODULE_0___default","Modal","positioned","offsetX","offsetY","screenX","screenY","dragging","updatePosition","container","offsetWidth","offsetHeight","clientX","clientY","parseInt","destination","setRoot","folder","child","set","accordion_vue_1","FilterTool","cat","","localeCompare","initalValues","labelFilters","f","categories","toggleUnlabeledFilter","_","accordion","Accordion","initialValues","updateCategory","overall","items","indeterminate","item","--detailRight","detailRight","--detailArrow","detailArrow","toggle","_node_modules_mini_css_extract_plugin_dist_loader_js_ref_6_oneOf_1_0_node_modules_css_loader_index_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_6_oneOf_1_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_game_vue_vue_type_style_index_0_lang_css___WEBPACK_IMPORTED_MODULE_0__","_node_modules_mini_css_extract_plugin_dist_loader_js_ref_6_oneOf_1_0_node_modules_css_loader_index_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_6_oneOf_1_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_game_vue_vue_type_style_index_0_lang_css___WEBPACK_IMPORTED_MODULE_0___default","_points","minx","miny","lineCap","_draw_vue_vue_type_template_id_639cd890_scoped_true___WEBPACK_IMPORTED_MODULE_0__","_draw_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__","opposite","fowColour","fowOpacity","zoomValue","exp","colorpicker_vue_1","modal_vue_1","CreateTokenModal","borderColour","updatePreview","unitSize","Watch","color-picker","computed","mapState","NoteDialog","textarea","scrollHeight","then","DrawTool","brushHelper","ruler","shapeSelect","modeSelect","modes","brushSize","helperSize","onModeChange","fowLayer","normalLayer","setupBrush","_vertices","pushBrushBack","lastPoint","finaliseShape","axios_1","vue_router_1","manager_vue_1","login_vue_1","logout_1","load_vue_1","main_vue_1","game_vue_1","invitation_1","router","base","routes","redirect","meta","auth","template","beforeEach","coreStore","initialized","matched","record","authenticated","response","setAuthenticated","setUsername","setInitialized","catch","error","Tool","$on","tool","onMouseDown","onMouseUp","onMouseMove","onContextMenu","onDeselect","onSelect","_tools_vue_vue_type_template_id_b6e1f51c_scoped_true___WEBPACK_IMPORTED_MODULE_0__","_tools_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__","_node_modules_cache_loader_dist_cjs_js_ref_12_0_node_modules_thread_loader_dist_cjs_js_node_modules_ts_loader_index_js_ref_12_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_tool_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__","_node_modules_cache_loader_dist_cjs_js_ref_12_0_node_modules_thread_loader_dist_cjs_js_node_modules_ts_loader_index_js_ref_12_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_tool_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0___default","topleft","CDT","TDS","insert","insertConstraintV","stack","markConstraint","intersectionInfo","findIntersectedFaces","triangulateHole","intersectedFaces","listAB","listBA","edges","triangulateHole2","propagatingFlipE","triangulateHalfHole","fl","deleteTriangle","conflictBoundaries","iN","iT","iC","current","n1","n2","ind","ind1","ind2","mirrorIndex","v0","v1","v2","newlf","createTriangle","vaa","vbb","aa","lfc","LineFaceCirculator","lf","rf","indexT","unshift","previousFace","currentVertex","i1","i2","vcc","vdd","pi","BoundingBox","dilate","overlaps","removeConstrainedEdge","dimension","indf","locateInfo","iLocate","insertb","li","flipAround","propagatingFlip","depth","isFlipable","maxDepth","ni","flip","e1","e2","uid","eni","eI","edgeSet","lessEdge","indn","ed","tt","ii","u","t1","t2","t3","i3","t4","i4","insertInConstrainedEdge","LocateType","EDGE","insertc","updateConstraintsIncident","VERTEX","clearConstraintsIncident","updateConstraintsOpposite","c1","c2","fc","FaceCirculator","cwi","ccwi","insertFirst","finiteVertex","insertSecond","OUTSIDE_AFFINE_HULL","insertOutsideAffineHull","OUTSIDE_CONVEX_HULL","insertOutsideConvexHull","insertInEdge","FACE","insertInFace","insertDimUp","_infinite","conform","finiteEdge","COUNTERCLOCKWISE","insertOutsideConvexHull2","ccwlist","cwlist","th","marchLocate1D","marchLocate2D","ff","iv","pqt","Triangle","leftFirst","o0","o1","o2","sum","nTurns","_node_modules_cache_loader_dist_cjs_js_ref_12_0_node_modules_thread_loader_dist_cjs_js_node_modules_ts_loader_index_js_ref_12_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_draw_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__","_node_modules_cache_loader_dist_cjs_js_ref_12_0_node_modules_thread_loader_dist_cjs_js_node_modules_ts_loader_index_js_ref_12_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_draw_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0___default","LayerManager","drawLoop","requestAnimationFrame","addLayer","globalAlpha","getSelection","image","getData","l2gx","l2gy","lm","_node_modules_cache_loader_dist_cjs_js_ref_12_0_node_modules_thread_loader_dist_cjs_js_node_modules_ts_loader_index_js_ref_12_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_initiative_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__","_node_modules_cache_loader_dist_cjs_js_ref_12_0_node_modules_thread_loader_dist_cjs_js_node_modules_ts_loader_index_js_ref_12_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_initiative_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0___default","_createtoken_modal_vue_vue_type_template_id_73816298_scoped_true___WEBPACK_IMPORTED_MODULE_0__","_createtoken_modal_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__","BoundingNode","nPrimitives","LeafNode","firstPrimOffset","InteriorNode","union","_node_modules_cache_loader_dist_cjs_js_ref_12_0_node_modules_thread_loader_dist_cjs_js_node_modules_ts_loader_index_js_ref_12_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_createtoken_modal_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__","_node_modules_cache_loader_dist_cjs_js_ref_12_0_node_modules_thread_loader_dist_cjs_js_node_modules_ts_loader_index_js_ref_12_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_createtoken_modal_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0___default","utils_4","onKeyUp","HTMLInputElement","HTMLTextAreaElement","selectTool","onKeyDown","keyCode","hasSelection","toggleUI","clipboard","setClipboard","clip","oldTrackers","newTracker","oldAuras","newAura","_node_modules_mini_css_extract_plugin_dist_loader_js_ref_6_oneOf_1_0_node_modules_css_loader_index_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_6_oneOf_1_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_manager_vue_vue_type_style_index_0_lang_css___WEBPACK_IMPORTED_MODULE_0__","_node_modules_mini_css_extract_plugin_dist_loader_js_ref_6_oneOf_1_0_node_modules_css_loader_index_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_6_oneOf_1_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_manager_vue_vue_type_style_index_0_lang_css___WEBPACK_IMPORTED_MODULE_0___default","_node_modules_mini_css_extract_plugin_dist_loader_js_ref_6_oneOf_1_0_node_modules_css_loader_index_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_6_oneOf_1_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_shapecontext_vue_vue_type_style_index_0_id_759e5a8a_scoped_true_lang_css___WEBPACK_IMPORTED_MODULE_0__","_node_modules_mini_css_extract_plugin_dist_loader_js_ref_6_oneOf_1_0_node_modules_css_loader_index_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_6_oneOf_1_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_shapecontext_vue_vue_type_style_index_0_id_759e5a8a_scoped_true_lang_css___WEBPACK_IMPORTED_MODULE_0___default","shapecontext_vue_1","createtoken_modal_vue_1","draw_vue_1","filter_vue_1","map_vue_1","pan_1","select_vue_1","vision_vue_1","manager_2","ruler_1","Tools","currentTool","tools","dmTools","currentToolComponent","visibleTools","tagName","targetTool","button","buttons","annotations","gameManager","annotationManager","setActiveText","select-tool","pan-tool","draw-tool","ruler-tool","RulerTool","map-tool","filter-tool","vision-tool","shape-menu","createtoken-dialog","watch","_node_modules_cache_loader_dist_cjs_js_ref_12_0_node_modules_thread_loader_dist_cjs_js_node_modules_ts_loader_index_js_ref_12_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_selection_info_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__","_node_modules_cache_loader_dist_cjs_js_ref_12_0_node_modules_thread_loader_dist_cjs_js_node_modules_ts_loader_index_js_ref_12_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_selection_info_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0___default","_node_modules_cache_loader_dist_cjs_js_ref_12_0_node_modules_thread_loader_dist_cjs_js_node_modules_ts_loader_index_js_ref_12_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_modal_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__","_node_modules_cache_loader_dist_cjs_js_ref_12_0_node_modules_thread_loader_dist_cjs_js_node_modules_ts_loader_index_js_ref_12_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_modal_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0___default","_node_modules_mini_css_extract_plugin_dist_loader_js_ref_6_oneOf_1_0_node_modules_css_loader_index_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_6_oneOf_1_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_labels_vue_vue_type_style_index_0_id_e477c214_scoped_true_lang_css___WEBPACK_IMPORTED_MODULE_0__","_node_modules_mini_css_extract_plugin_dist_loader_js_ref_6_oneOf_1_0_node_modules_css_loader_index_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_6_oneOf_1_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_labels_vue_vue_type_style_index_0_id_e477c214_scoped_true_lang_css___WEBPACK_IMPORTED_MODULE_0___default","_node_modules_mini_css_extract_plugin_dist_loader_js_ref_6_oneOf_1_0_node_modules_css_loader_index_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_6_oneOf_1_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_contextmenu_vue_vue_type_style_index_0_lang_css___WEBPACK_IMPORTED_MODULE_0__","_node_modules_mini_css_extract_plugin_dist_loader_js_ref_6_oneOf_1_0_node_modules_css_loader_index_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_6_oneOf_1_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_contextmenu_vue_vue_type_style_index_0_lang_css___WEBPACK_IMPORTED_MODULE_0___default","settings","locations","rm-list-dm","_m","enter","rm","transition","settingsClick","overflow-y","overflow-x","assets","createNote","openNote","notes","fakePlayer","step","changeVisionMode","$store","state","game","lazy","visionRangeMin","visionRangeMax","readonly","invitationCode","rulerColour","text-decoration","changeLocation","createLocation","question","answer","resolve","reject","Promise","_node_modules_mini_css_extract_plugin_dist_loader_js_ref_6_oneOf_1_0_node_modules_css_loader_index_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_6_oneOf_1_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_accordion_vue_vue_type_style_index_0_id_0bf2b7ba_scoped_true_lang_css___WEBPACK_IMPORTED_MODULE_0__","_node_modules_mini_css_extract_plugin_dist_loader_js_ref_6_oneOf_1_0_node_modules_css_loader_index_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_6_oneOf_1_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_accordion_vue_vue_type_style_index_0_id_0bf2b7ba_scoped_true_lang_css___WEBPACK_IMPORTED_MODULE_0___default","message","_node_modules_cache_loader_dist_cjs_js_ref_12_0_node_modules_thread_loader_dist_cjs_js_node_modules_ts_loader_index_js_ref_12_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_menu_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__","_node_modules_cache_loader_dist_cjs_js_ref_12_0_node_modules_thread_loader_dist_cjs_js_node_modules_ts_loader_index_js_ref_12_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_menu_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0___default","botRight","vector","other","xmin","xmax","ymin","ymax","botright","dirIsNeg","txmin","getDiagCorner","txmax","tymin","tymax","tMax","coreVisible","joined","submit","createRoom","newSessionName","tag","getPointDistance","Point","scale","atan2","maxT","mouseover","hash","mouseout","vue_slider_component_1","lodash_1","initiative_vue_1","labels_vue_1","menu_vue_1","note_vue_1","selection_info_vue_1","tools_vue_1","keyboard_1","mouse_1","Game","manager","updateZoom","newZoomDisplay","zoomLocation","addEventListener","resizeWindow","removeEventListener","throttle","scrollZoom","setWidth","setHeight","confirm","dropAsset","tool-bar","selection-info","prompt-dialog","confirm-dialog","menu-bar","initiative-dialog","zoom-slider","note-dialog","label-dialog","obj","z","l2gr","asset_node_vue_1","MenuBar","setFakePlayer","setUseGrid","setFullFOW","setFOWOpacity","setLineOfSight","setUnitSize","setGridSize","setGridColour","setFOWColour","setRulerColour","setVisionRangeMin","setVisionRangeMax","nextElementSibling","newNote","setVisionMode","asset-node","_node_modules_cache_loader_dist_cjs_js_ref_12_0_node_modules_thread_loader_dist_cjs_js_node_modules_ts_loader_index_js_ref_12_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_colorpicker_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__","_node_modules_cache_loader_dist_cjs_js_ref_12_0_node_modules_thread_loader_dist_cjs_js_node_modules_ts_loader_index_js_ref_12_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_colorpicker_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0___default","bringPlayers","createToken","showInitiative","_INFINITE_VERTEX","LineFaceState","newPoint","INFINITE","_counter","vertex","A","sign","Vertex","_point","_ri","Edge","_es","associatedEdge","increment","tr","dir","UNDEFINED","_tr","ic","vt","vr","pqr","VERTEX_VERTEX","VERTEX_EDGE","EDGE_VERTEX","EDGE_EDGE","createVertex","addVertex","infiniteVertex","n0","trig","t0","i0","setAdjacency","deleteList","copy","neighbour","lfit","reorient","vCW","vCCW","tri","bl","bli","vv","g","x1","y1","dist","node_1","BoundingVolume","totalNodes","buildData","orderedPrims","nodes","recursiveBuild","compact","node","createLeaf","centroidBbox","getMaxExtent","pMid","partitionedData","flattened","stopOnFirstHit","tMin","todoOffset","nodeNum","todo","secondChildOffset","flatten","myOffset","secondOffset","primitivesOffset","_node_modules_mini_css_extract_plugin_dist_loader_js_ref_6_oneOf_1_0_node_modules_css_loader_index_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_6_oneOf_1_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_filter_vue_vue_type_style_index_1_id_dca395d6_scoped_true_lang_css___WEBPACK_IMPORTED_MODULE_0__","_node_modules_mini_css_extract_plugin_dist_loader_js_ref_6_oneOf_1_0_node_modules_css_loader_index_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_6_oneOf_1_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_filter_vue_vue_type_style_index_1_id_dca395d6_scoped_true_lang_css___WEBPACK_IMPORTED_MODULE_0___default","annotation_1","GameManager","selectedTool","oldShape","redrawInitiative","checkVisionSources","setMovementBlock","setIsToken","localPos","_node_modules_mini_css_extract_plugin_dist_loader_js_ref_6_oneOf_1_0_node_modules_css_loader_index_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_6_oneOf_1_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_asset_node_vue_vue_type_style_index_0_id_6d718094_scoped_true_lang_css___WEBPACK_IMPORTED_MODULE_0__","_node_modules_mini_css_extract_plugin_dist_loader_js_ref_6_oneOf_1_0_node_modules_css_loader_index_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_6_oneOf_1_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_asset_node_vue_vue_type_style_index_0_id_6d718094_scoped_true_lang_css___WEBPACK_IMPORTED_MODULE_0___default","_vision_vue_vue_type_template_id_46baf892_scoped_true___WEBPACK_IMPORTED_MODULE_0__","_vision_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__","fakeSetData","updateOrder","actor","flex-direction","align-items","initiative-selected","currentActor","mouseenter","toggleHighlight","notAllowed","owns","syncInitiative","createEffect","getDefaultEffect","toggleOption","removeInitiative","effect","updateEffect","turns","roundCounter","visionLock","toggleVisionLock","cameraLock","setRound","updateTurn","nextTurn","LoadComponent","openEditDialog","changeValue","maxvalue","getLayers","setLayer","moveToBack","moveToFront","getInitiativeWord","registerHooks","Dashboard","vm","err","post","$router","_confirm_vue_vue_type_template_id_1883e207_scoped_true___WEBPACK_IMPORTED_MODULE_0__","_confirm_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__","_node_modules_cache_loader_dist_cjs_js_ref_12_0_node_modules_thread_loader_dist_cjs_js_node_modules_ts_loader_index_js_ref_12_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_shapecontext_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__","_node_modules_cache_loader_dist_cjs_js_ref_12_0_node_modules_thread_loader_dist_cjs_js_node_modules_ts_loader_index_js_ref_12_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_shapecontext_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0___default","rename","_node_modules_mini_css_extract_plugin_dist_loader_js_ref_6_oneOf_1_0_node_modules_css_loader_index_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_6_oneOf_1_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_draw_vue_vue_type_style_index_0_id_639cd890_scoped_true_lang_css___WEBPACK_IMPORTED_MODULE_0__","_node_modules_mini_css_extract_plugin_dist_loader_js_ref_6_oneOf_1_0_node_modules_css_loader_index_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_6_oneOf_1_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_draw_vue_vue_type_style_index_0_id_639cd890_scoped_true_lang_css___WEBPACK_IMPORTED_MODULE_0___default","_node_modules_cache_loader_dist_cjs_js_ref_12_0_node_modules_thread_loader_dist_cjs_js_node_modules_ts_loader_index_js_ref_12_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_manager_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__","_node_modules_cache_loader_dist_cjs_js_ref_12_0_node_modules_thread_loader_dist_cjs_js_node_modules_ts_loader_index_js_ref_12_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_manager_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0___default","_node_modules_cache_loader_dist_cjs_js_ref_12_0_node_modules_thread_loader_dist_cjs_js_node_modules_ts_loader_index_js_ref_12_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_main_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__","_node_modules_cache_loader_dist_cjs_js_ref_12_0_node_modules_thread_loader_dist_cjs_js_node_modules_ts_loader_index_js_ref_12_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_main_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0___default","_node_modules_mini_css_extract_plugin_dist_loader_js_ref_6_oneOf_1_0_node_modules_css_loader_index_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_6_oneOf_1_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_game_vue_vue_type_style_index_1_id_05b88da7_scoped_true_lang_css___WEBPACK_IMPORTED_MODULE_0__","_node_modules_mini_css_extract_plugin_dist_loader_js_ref_6_oneOf_1_0_node_modules_css_loader_index_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_6_oneOf_1_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_game_vue_vue_type_style_index_1_id_05b88da7_scoped_true_lang_css___WEBPACK_IMPORTED_MODULE_0___default","_node_modules_cache_loader_dist_cjs_js_ref_12_0_node_modules_thread_loader_dist_cjs_js_node_modules_ts_loader_index_js_ref_12_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_filter_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__","_node_modules_cache_loader_dist_cjs_js_ref_12_0_node_modules_thread_loader_dist_cjs_js_node_modules_ts_loader_index_js_ref_12_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_filter_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0___default","_node_modules_cache_loader_dist_cjs_js_ref_12_0_node_modules_thread_loader_dist_cjs_js_node_modules_ts_loader_index_js_ref_12_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_selectcontext_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__","_node_modules_cache_loader_dist_cjs_js_ref_12_0_node_modules_thread_loader_dist_cjs_js_node_modules_ts_loader_index_js_ref_12_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_selectcontext_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0___default","FOWPlayersLayer","skipPlayerFOW","maxLength","tokenId","_a","selectionColor","selectionWidth","invalidateLight","serverShape","lsI","lbI","mbI","anI","annotationIndex","ownedIndex","ogOP","drawAuras","filterNoLabel","destinationIndex","oldIdx","deltaY","_filter_vue_vue_type_template_id_dca395d6_scoped_true___WEBPACK_IMPORTED_MODULE_0__","_filter_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__","topright","botleft","mx","my","_select_vue_vue_type_template_id_048b3482___WEBPACK_IMPORTED_MODULE_0__","_select_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__","_main_vue_vue_type_template_id_61eb1455_scoped_true___WEBPACK_IMPORTED_MODULE_0__","_main_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__","_node_modules_mini_css_extract_plugin_dist_loader_js_ref_6_oneOf_1_0_node_modules_css_loader_index_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_6_oneOf_1_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_createtoken_modal_vue_vue_type_style_index_0_id_73816298_scoped_true_lang_css___WEBPACK_IMPORTED_MODULE_0__","_node_modules_mini_css_extract_plugin_dist_loader_js_ref_6_oneOf_1_0_node_modules_css_loader_index_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_6_oneOf_1_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_createtoken_modal_vue_vue_type_style_index_0_id_73816298_scoped_true_lang_css___WEBPACK_IMPORTED_MODULE_0___default","moveDrag","stopDrag","multiple","hidden","createDirectory","prepareUpload","dblclick","changeDirectory","dragleave","leaveDrag","inode-selected","cm","startDrag","createtokendialog","Logout","CoreStore","init","App_vue_1","router_1","config","productionTip","devtools","performance","$mount","props","Initiative","code","sessionUrl","_prompt_vue_vue_type_template_id_0602c2e6_scoped_true___WEBPACK_IMPORTED_MODULE_0__","_prompt_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__","draw_1","drawt","drawTEContour","Q","rawOutput","expandEdge","fh","nfh","nIndex","rIndex","lIndex","nvh","rvh","lvh","re","le","ro","lo","raySegIntersection","CLOCKWISE","denominator","ua","_edit_dialog_vue_vue_type_template_id_23de098e_scoped_true___WEBPACK_IMPORTED_MODULE_0__","_edit_dialog_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__","tempFill","Login","password","$route","statusText","span","modal-mask","dialog-mask","dragOver","_node_modules_cache_loader_dist_cjs_js_ref_12_0_node_modules_thread_loader_dist_cjs_js_node_modules_ts_loader_index_js_ref_12_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_game_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__","_node_modules_cache_loader_dist_cjs_js_ref_12_0_node_modules_thread_loader_dist_cjs_js_node_modules_ts_loader_index_js_ref_12_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_game_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0___default","diffsign","xdiff","ydiff","xmid","ymid","_modal_vue_vue_type_template_id_12ed61ba_scoped_true___WEBPACK_IMPORTED_MODULE_0__","_modal_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__","_node_modules_cache_loader_dist_cjs_js_ref_12_0_node_modules_thread_loader_dist_cjs_js_node_modules_ts_loader_index_js_ref_12_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_accordion_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__","_node_modules_cache_loader_dist_cjs_js_ref_12_0_node_modules_thread_loader_dist_cjs_js_node_modules_ts_loader_index_js_ref_12_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_accordion_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0___default","cdt_1","triangulate","partial","cdt","insertConstraint","vision","_node_modules_mini_css_extract_plugin_dist_loader_js_ref_6_oneOf_1_0_node_modules_css_loader_index_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_6_oneOf_1_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_tools_vue_vue_type_style_index_0_id_b6e1f51c_scoped_true_lang_css___WEBPACK_IMPORTED_MODULE_0__","_node_modules_mini_css_extract_plugin_dist_loader_js_ref_6_oneOf_1_0_node_modules_css_loader_index_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_6_oneOf_1_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_tools_vue_vue_type_style_index_0_id_b6e1f51c_scoped_true_lang_css___WEBPACK_IMPORTED_MODULE_0___default","_node_modules_mini_css_extract_plugin_dist_loader_js_ref_6_oneOf_1_0_node_modules_css_loader_index_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_6_oneOf_1_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_main_vue_vue_type_style_index_0_id_61eb1455_scoped_true_lang_css___WEBPACK_IMPORTED_MODULE_0__","_node_modules_mini_css_extract_plugin_dist_loader_js_ref_6_oneOf_1_0_node_modules_css_loader_index_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_6_oneOf_1_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_main_vue_vue_type_style_index_0_id_61eb1455_scoped_true_lang_css___WEBPACK_IMPORTED_MODULE_0___default","EditDialog","$off","addEmpty","hadAnnotation","an","yes","no","ok","_map_vue_vue_type_template_id_2104f147___WEBPACK_IMPORTED_MODULE_0__","_map_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__","toggleDisplay","toggleCategory","showArrow","toggleSelection","deny","_node_modules_cache_loader_dist_cjs_js_ref_12_0_node_modules_thread_loader_dist_cjs_js_node_modules_ts_loader_index_js_ref_12_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_select_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__","_node_modules_cache_loader_dist_cjs_js_ref_12_0_node_modules_thread_loader_dist_cjs_js_node_modules_ts_loader_index_js_ref_12_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_select_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0___default","_node_modules_mini_css_extract_plugin_dist_loader_js_ref_6_oneOf_1_0_node_modules_css_loader_index_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_6_oneOf_1_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_filter_vue_vue_type_style_index_0_lang_css___WEBPACK_IMPORTED_MODULE_0__","_node_modules_mini_css_extract_plugin_dist_loader_js_ref_6_oneOf_1_0_node_modules_css_loader_index_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_6_oneOf_1_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_filter_vue_vue_type_style_index_0_lang_css___WEBPACK_IMPORTED_MODULE_0___default","LabelManager","user","option-selected","max-width","currentTarget","closePicker","z-index","updateColor","selectionupdate","updateSelection","_manager_vue_vue_type_template_id_5b0def98___WEBPACK_IMPORTED_MODULE_0__","_manager_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__","_node_modules_cache_loader_dist_cjs_js_ref_12_0_node_modules_thread_loader_dist_cjs_js_node_modules_ts_loader_index_js_ref_12_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_tools_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__","_node_modules_cache_loader_dist_cjs_js_ref_12_0_node_modules_thread_loader_dist_cjs_js_node_modules_ts_loader_index_js_ref_12_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_tools_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0___default","_tool_vue_vue_type_template_id_1e034b42___WEBPACK_IMPORTED_MODULE_0__","_tool_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__","_node_modules_mini_css_extract_plugin_dist_loader_js_ref_6_oneOf_1_0_node_modules_css_loader_index_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_6_oneOf_1_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_initiative_vue_vue_type_style_index_0_id_07fc8ff2_scoped_true_lang_css___WEBPACK_IMPORTED_MODULE_0__","_node_modules_mini_css_extract_plugin_dist_loader_js_ref_6_oneOf_1_0_node_modules_css_loader_index_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_6_oneOf_1_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_initiative_vue_vue_type_style_index_0_id_07fc8ff2_scoped_true_lang_css___WEBPACK_IMPORTED_MODULE_0___default","keyup","_k","vuedraggable_1","_activeTokens","setTurn","getActor","actorId","setActiveTokens","setCenterPosition","order","show","option","effectIndex","syncEffect","_selection_info_vue_vue_type_template_id_674cf937_scoped_true___WEBPACK_IMPORTED_MODULE_0__","_selection_info_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__","bvh_1","GameStore","selectedLayerIndex","boardInitialized","roomName","roomCreator","locationName","vision_mode","filters","updatedLayers","Set","isDM","oldLoc","newLoc","getGridLayer","increase","unit_size","gridLayer","use_grid","vision_min_range","vision_max_range","full_fow","fow_opacity","fow_los","actualNote","context","commit","Action","_node_modules_mini_css_extract_plugin_dist_loader_js_ref_6_oneOf_1_0_node_modules_css_loader_index_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_6_oneOf_1_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_colorpicker_vue_vue_type_style_index_0_id_d32461a4_scoped_true_lang_css___WEBPACK_IMPORTED_MODULE_0__","_node_modules_mini_css_extract_plugin_dist_loader_js_ref_6_oneOf_1_0_node_modules_css_loader_index_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_6_oneOf_1_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_colorpicker_vue_vue_type_style_index_0_id_d32461a4_scoped_true_lang_css___WEBPACK_IMPORTED_MODULE_0___default","_node_modules_cache_loader_dist_cjs_js_ref_12_0_node_modules_thread_loader_dist_cjs_js_node_modules_ts_loader_index_js_ref_12_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_confirm_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__","_node_modules_cache_loader_dist_cjs_js_ref_12_0_node_modules_thread_loader_dist_cjs_js_node_modules_ts_loader_index_js_ref_12_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_confirm_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0___default","vision_source","_node_modules_cache_loader_dist_cjs_js_ref_12_0_node_modules_thread_loader_dist_cjs_js_node_modules_ts_loader_index_js_ref_12_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_contextMenu_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__","_node_modules_cache_loader_dist_cjs_js_ref_12_0_node_modules_thread_loader_dist_cjs_js_node_modules_ts_loader_index_js_ref_12_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_contextMenu_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0___default","_note_vue_vue_type_template_id_7a3669fd_scoped_true___WEBPACK_IMPORTED_MODULE_0__","_note_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__","_initiative_vue_vue_type_template_id_07fc8ff2_scoped_true___WEBPACK_IMPORTED_MODULE_0__","_initiative_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__","fow_1","fowplayers_1","grid_1","createLayer","layerInfo","zIndex","player_editable","setShapes","_labels_vue_vue_type_template_id_e477c214_scoped_true___WEBPACK_IMPORTED_MODULE_0__","_labels_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__","_node_modules_cache_loader_dist_cjs_js_ref_12_0_node_modules_thread_loader_dist_cjs_js_node_modules_ts_loader_index_js_ref_12_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_edit_dialog_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__","_node_modules_cache_loader_dist_cjs_js_ref_12_0_node_modules_thread_loader_dist_cjs_js_node_modules_ts_loader_index_js_ref_12_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_edit_dialog_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0___default","toolVisible","refInFor","tool-selected","focusin","focusout","login","autocomplete","required","visibility","register","edit_dialog_vue_1","SelectionInfo","editDialog","ogValue","isNaN","edit-dialog","setRoomName","setRoomCreator","setInvitationCode","setDM","grid_colour","fow_colour","ruler_colour","setPanX","pan_x","setPanY","pan_y","setZoomDisplay","zoom_factor","active_layer","setLocationName","setAssets","locationInfo","setLocations","innerHTML","resetLayerInfo","reset","setBoardInitialized","realShape","setLabelVisibility","setLabelFilters"],"mappings":"aACA,SAAAA,EAAAC,GAQA,IAPA,IAMAC,EAAAC,EANAC,EAAAH,EAAA,GACAI,EAAAJ,EAAA,GACAK,EAAAL,EAAA,GAIAM,EAAA,EAAAC,EAAA,GACQD,EAAAH,EAAAK,OAAoBF,IAC5BJ,EAAAC,EAAAG,GACAG,EAAAP,IACAK,EAAAG,KAAAD,EAAAP,GAAA,IAEAO,EAAAP,GAAA,EAEA,IAAAD,KAAAG,EACAO,OAAAC,UAAAC,eAAAC,KAAAV,EAAAH,KACAc,EAAAd,GAAAG,EAAAH,IAGAe,KAAAhB,GAEA,MAAAO,EAAAC,OACAD,EAAAU,OAAAV,GAOA,OAHAW,EAAAR,KAAAS,MAAAD,EAAAb,GAAA,IAGAe,IAEA,SAAAA,IAEA,IADA,IAAAC,EACAf,EAAA,EAAiBA,EAAAY,EAAAV,OAA4BF,IAAA,CAG7C,IAFA,IAAAgB,EAAAJ,EAAAZ,GACAiB,GAAA,EACAC,EAAA,EAAkBA,EAAAF,EAAAd,OAA2BgB,IAAA,CAC7C,IAAAC,EAAAH,EAAAE,GACA,IAAAf,EAAAgB,KAAAF,GAAA,GAEAA,IACAL,EAAAQ,OAAApB,IAAA,GACAe,EAAAM,IAAAC,EAAAN,EAAA,KAGA,OAAAD,EAIA,IAAAQ,EAAA,GAKApB,EAAA,CACAqB,IAAA,GAGAZ,EAAA,GAGA,SAAAS,EAAA1B,GAGA,GAAA4B,EAAA5B,GACA,OAAA4B,EAAA5B,GAAA8B,QAGA,IAAAC,EAAAH,EAAA5B,GAAA,CACAK,EAAAL,EACAgC,GAAA,EACAF,QAAA,IAUA,OANAhB,EAAAd,GAAAa,KAAAkB,EAAAD,QAAAC,IAAAD,QAAAJ,GAGAK,EAAAC,GAAA,EAGAD,EAAAD,QAKAJ,EAAAO,EAAAnB,EAGAY,EAAAQ,EAAAN,EAGAF,EAAAS,EAAA,SAAAL,EAAAM,EAAAC,GACAX,EAAAY,EAAAR,EAAAM,IACA1B,OAAA6B,eAAAT,EAAAM,EAAA,CAA0CI,YAAA,EAAAC,IAAAJ,KAK1CX,EAAAgB,EAAA,SAAAZ,GACA,qBAAAa,eAAAC,aACAlC,OAAA6B,eAAAT,EAAAa,OAAAC,YAAA,CAAwDC,MAAA,WAExDnC,OAAA6B,eAAAT,EAAA,cAAiDe,OAAA,KAQjDnB,EAAAoB,EAAA,SAAAD,EAAAE,GAEA,GADA,EAAAA,IAAAF,EAAAnB,EAAAmB,IACA,EAAAE,EAAA,OAAAF,EACA,KAAAE,GAAA,kBAAAF,QAAAG,WAAA,OAAAH,EACA,IAAAI,EAAAvC,OAAAwC,OAAA,MAGA,GAFAxB,EAAAgB,EAAAO,GACAvC,OAAA6B,eAAAU,EAAA,WAAyCT,YAAA,EAAAK,UACzC,EAAAE,GAAA,iBAAAF,EAAA,QAAAM,KAAAN,EAAAnB,EAAAS,EAAAc,EAAAE,EAAA,SAAAA,GAAgH,OAAAN,EAAAM,IAAqBC,KAAA,KAAAD,IACrI,OAAAF,GAIAvB,EAAA2B,EAAA,SAAAtB,GACA,IAAAM,EAAAN,KAAAiB,WACA,WAA2B,OAAAjB,EAAA,YAC3B,WAAiC,OAAAA,GAEjC,OADAL,EAAAS,EAAAE,EAAA,IAAAA,GACAA,GAIAX,EAAAY,EAAA,SAAAgB,EAAAC,GAAsD,OAAA7C,OAAAC,UAAAC,eAAAC,KAAAyC,EAAAC,IAGtD7B,EAAA8B,EAAA,IAEA,IAAAC,EAAAC,OAAA,gBAAAA,OAAA,oBACAC,EAAAF,EAAAhD,KAAA2C,KAAAK,GACAA,EAAAhD,KAAAX,EACA2D,IAAAG,QACA,QAAAvD,EAAA,EAAgBA,EAAAoD,EAAAlD,OAAuBF,IAAAP,EAAA2D,EAAApD,IACvC,IAAAU,EAAA4C,EAIA1C,EAAAR,KAAA,qBAEAU,mICrJA,MAAA0C,EAAAnC,EAAA,QACAoC,EAAApC,EAAA,QACAqC,EAAArC,EAAA,QAEA,MAAasC,UAAaF,EAAAG,MAKtBC,YACIC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,GAEAC,MAAMP,EAAUI,EAAYC,EAAcC,GAb9CE,KAAAC,KAAO,OAcHD,KAAKP,KAAOA,EACZO,KAAKN,KAAOA,EACZM,KAAKL,MAAQA,GAAS,EAE1BJ,SACI,OAAOxD,OAAOmE,OAAOF,KAAKG,cAAe,CACrCV,KAAMO,KAAKP,KACXC,KAAMM,KAAKN,KACXC,MAAOK,KAAKL,QAGpBS,aACI,MAAO,CAAC,CAACJ,KAAKK,SAASC,EAAGN,KAAKK,SAASE,IAE5ChB,iBACI,OAAO,IAAIL,EAAAsB,aAAaR,KAAKK,SAAU,EAAG,GAE9Cd,KAAKkB,GACDV,MAAMW,KAAKD,GACXA,EAAIf,KAAOM,KAAKN,KAChBe,EAAIE,UAAYX,KAAKJ,WACrBa,EAAIG,OACJ,MAAMC,EAAOzB,EAAA0B,IAAId,KAAKK,UACtBI,EAAIM,UAAUF,EAAKP,EAAGO,EAAKN,GAC3BE,EAAIO,OAAOhB,KAAKL,OAChBc,EAAIQ,UAAY,SAChBjB,KAAKkB,SAAST,GAAKU,IAAIC,GAAQX,EAAIY,SAASD,EAAK3B,KAAM2B,EAAKd,EAAGc,EAAKb,IACpEE,EAAIa,UAER/B,SAASgC,GACL,OAAO,EAKXhC,OAAOiC,IACPjC,gBAAgBkC,GACZ,OAAOzB,KAAK0B,iBAAiBC,gBAAgBF,GAEjDlC,cACAA,gBACAA,OAAOqC,EAAqBL,IAE5BhC,aAAakB,GACT,MAAMoB,EAAQ7B,KAAKkB,SAAST,GACtBqB,EAAa,GACnB,OAAOA,EAAaD,EAAMjG,OAG9B2D,YAAYkB,GACR,MAAMoB,EAAQ7B,KAAKkB,SAAST,GACtBsB,EAASF,EAAMV,IAAIC,GAAQX,EAAIuB,YAAYZ,EAAK3B,MAAMwC,OAC5D,OAAOC,KAAKC,OAAOJ,GAGfxC,SAASkB,GACb,MAAMoB,EAAQ7B,KAAKP,KAAK2C,MAAM,MACxBC,EAAqD,GACrDC,EAAW7B,EAAIgB,OAAOQ,MACtBH,EAAa,GACbxB,EAAI,EACV,IAAIC,EAAI,EAER,IAAK,MAAMa,KAAQS,EAAO,CACtB,IAAIU,EAAa,GACjB,MAAMC,EAAQpB,EAAKgB,MAAM,KACzB,IAAK,MAAMK,KAAQD,EAAO,CACtB,MAAME,EAAWH,EAAaE,EAAO,IAC/BE,EAAUlC,EAAIuB,YAAYU,GAC1BE,EAAYD,EAAQV,MACtBW,EAAYN,GACZ7B,EAAIY,SAASkB,EAAYjC,EAAGC,GAC5B8B,EAASvG,KAAK,CAAE2D,KAAM8C,EAAYjC,IAAGC,MACrCgC,EAAaE,EAAO,IACpBlC,GAAKuB,GAELS,EAAaG,EAGrBL,EAASvG,KAAK,CAAE2D,KAAM8C,EAAYjC,IAAGC,MACrCA,GAAKuB,EAET,OAAOO,GAjGflF,EAAAkC,4CCLA,IAAAwD,EAAA9F,EAAA,QAAA+F,EAAA/F,EAAA2B,EAAAmE,GAA8gBC,EAAG,uCCAjhB/F,EAAAgB,EAAAgF,GAAA,IAAAC,EAAAjG,EAAA,QAAAkG,EAAAlG,EAAA,gBAAAmG,KAAAD,EAAA,YAAAC,GAAA,SAAA1E,GAAAzB,EAAAS,EAAAuF,EAAAvE,EAAA,kBAAAyE,EAAAzE,KAAA,CAAA0E,GAAAnG,EAAA,YAAAoG,EAAApG,EAAA,QAQAqG,EAAgBrH,OAAAoH,EAAA,KAAApH,CACdkH,EAAA,WACAD,EAAA,KACAA,EAAA,MACF,EACA,KACA,WACA,MAIAI,EAAAC,QAAAC,OAAA,mBACeP,EAAA,WAAAK,+CCpBf,IAAAG,EAAAxG,EAAA,QAAAyG,EAAAzG,EAAA2B,EAAA6E,GAAqbC,EAAG,uCCAxb,IAAAC,EAAA1G,EAAA,QAAA2G,EAAA3G,EAAA2B,EAAA+E,GAAogBC,EAAG,uCCAvgB,IAAAC,EAAA5G,EAAA,QAAA6G,EAAA7G,EAAA2B,EAAAiF,GAAsgBC,EAAG,0GCyBzgBC,EAAAC,EAAAC,gBAAAhH,EAAA,SACAiH,EAAAF,EAAAC,gBAAAhH,EAAA,SACAkH,EAAAH,EAAAC,gBAAAhH,EAAA,SAEAmH,EAAAnH,EAAA,SACAoH,EAAApH,EAAA,QAOA,IAAqBqH,EAArB,cAAyCJ,EAAAK,QALzC9E,kCASIS,KAAAsE,SAAU,EACVtE,KAAAuE,KAAO,EACPvE,KAAAwE,IAAM,EACNxE,KAAAyE,aAAc,EAEdlF,UACIS,KAAKyE,YAA4D,IAAxCzE,KAAK0E,MAAMC,aAAcC,IAAIC,KAAKC,EAC3D9E,KAAK+E,cAGTxF,OACQS,KAAKsE,SAAWtE,KAAKgF,WACzBhF,KAAK+E,cACL/E,KAAKsE,SAAU,EACftE,KAAKiF,UAAU,IAAMjF,KAAKkF,UAAU,GAAGC,IAAIC,UAE/C7F,YAAYrB,GACR8B,KAAKyE,YAA+B,IAAjBvG,EAAM2G,KAAKC,EAC9B,MAAMO,EAAWxB,EAAAQ,QAAUnG,EAAM2G,MAAMS,cACvCtF,KAAKuF,MAAM,eAAgBF,GAC3BrF,KAAKuF,MAAM,QAASF,GAExB9F,cACIS,KAAKsE,SAAU,EACftE,KAAKuF,MAAM,SAAUvF,KAAKwF,OAE9BjG,cACI,MAAMkG,EAAOzF,KAAKmF,IAAIO,wBAElBD,EAAKE,MAAQ,IAAM5G,OAAO6G,WAAY5F,KAAKuE,KAAOkB,EAAKlB,KAAO,IAC7DvE,KAAKuE,KAAOkB,EAAKE,MAClBF,EAAKI,OAAS,IAAM9G,OAAO+G,YAAa9F,KAAKwE,IAAMiB,EAAKjB,IAAM,IAC7DxE,KAAKwE,IAAMiB,EAAKI,SAnCX/B,EAAAiC,WAAA,CAAb5B,EAAA6B,KAAKC,qCACSnC,EAAAiC,WAAA,CAAd5B,EAAA6B,KAAKE,yCAFW9B,EAAWN,EAAAiC,WAAA,CAL/B9B,EAAAI,QAAuB,CACpB8B,WAAY,CACRC,gBAAiBlC,EAAAmC,WAGJjC,oDCrCrBrH,EAAAgB,EAAAgF,GAAA,IAAAuD,EAAAvJ,EAAA,QAAAwJ,EAAAxJ,EAAA,gBAAAmG,KAAAqD,EAAA,YAAArD,GAAA,SAAA1E,GAAAzB,EAAAS,EAAAuF,EAAAvE,EAAA,kBAAA+H,EAAA/H,KAAA,CAAA0E,GAAAnG,EAAA,QAAAA,EAAA,YAAAyJ,EAAAzJ,EAAA,QASAqG,EAAgBrH,OAAAyK,EAAA,KAAAzK,CACdwK,EAAA,WACAD,EAAA,KACAA,EAAA,MACF,EACA,KACA,WACA,MAIAlD,EAAAC,QAAAC,OAAA,WACeP,EAAA,WAAAK,2ICrBfqD,EAAA3C,EAAAC,gBAAAhH,EAAA,SAKA,SAAgB2J,EAAiBC,GAC7BxJ,EAAAyJ,OAAOC,GAAGC,KAAKC,cAAgBJ,EAAMK,OAAOC,gBAAgBN,EAAMK,OAAOE,OACzE/J,EAAAyJ,OAAOO,UAJEhK,EAAAyJ,OAASH,EAAApC,QAAG+C,SAASC,SAAW,KAAOD,SAASE,KAAO,cAAe,CAAEC,aAAa,IAElGpK,EAAAuJ,2HC0EA1C,EAAAF,EAAAC,gBAAAhH,EAAA,SACAkH,EAAAH,EAAAC,gBAAAhH,EAAA,SAEAyK,EAAA1D,EAAAC,gBAAAhH,EAAA,SACA0K,EAAA3D,EAAAC,gBAAAhH,EAAA,SACA2K,EAAA5D,EAAAC,gBAAAhH,EAAA,SAEA4K,EAAA5K,EAAA,QACA6K,EAAA7K,EAAA,QAEA8K,EAAA9K,EAAA,QAiBA,IAAqB+K,EAArB,cAA0C9D,EAAAK,QAf1C9E,kCAgBIS,KAAA+H,KAAiB,GACjB/H,KAAAgI,mBAAoB,EAEpBC,cACI,OAAOL,EAAAM,WAAWD,QAGtBE,YACI,OAAOP,EAAAM,WAAWC,MAGtBC,eACI,OAAOR,EAAAM,WAAWE,SAGtBC,YACI,OAAOT,EAAAM,WAAWG,MAGtBC,oBACI,OAAItI,KAAK+H,KAAKnM,OAAeoE,KAAK+H,KAAK/H,KAAK+H,KAAKnM,OAAS,GACnDgM,EAAAM,WAAWK,KAEtBC,mBACI,IAAIC,EAASzI,KAAK+H,KAAK/H,KAAK+H,KAAKnM,OAAS,GAE1C,YADe8M,IAAXD,IAAsBA,EAASb,EAAAM,WAAWK,MACvCE,EAEXE,wBACI,IAAK,MAAMC,KAAOhB,EAAAM,WAAWE,SACzB,GAAIR,EAAAM,WAAWG,MAAMvK,IAAI8K,GAAMC,UAC3B,OAAOjB,EAAAM,WAAWG,MAAMvK,IAAI8K,GAGpC,OAAO,KAEXrJ,gBAAgBuJ,GACRA,EAAa,EAAG9I,KAAK+H,KAAKgB,MACzB/I,KAAK+H,KAAKjM,KAAKgN,GACpBlB,EAAAM,WAAWc,gBACXrB,EAAAf,OAAOqC,KAAK,aAAcjJ,KAAKsI,eAEnC/I,kBACI,MAAM9B,EAAOsB,OAAOmK,OAAO,mBACd,OAATzL,GACAkK,EAAAf,OAAOqC,KAAK,gBAAiB,CAAExL,OAAMgL,OAAQzI,KAAKsI,gBAG1D/I,UAAU4J,EAAeC,GACjBxB,EAAAM,WAAWC,MAAMkB,SAASF,GAAQvB,EAAAM,WAAWC,MAAMrL,OAAO8K,EAAAM,WAAWC,MAAMmB,QAAQH,GAAQ,GAC1FvB,EAAAM,WAAWD,QAAQnL,OAAO8K,EAAAM,WAAWD,QAAQqB,QAAQH,GAAQ,GAClEvB,EAAAM,WAAWG,MAAMkB,OAAOJ,GACxBxB,EAAAf,OAAOqC,KAAK,aAAc,CAAEE,QAAOC,WAEvC7J,OAAOiK,EAAmBL,GACtB,GAAIK,EAAMC,UAAY7B,EAAAM,WAAWE,SAASxM,OAAS,EAAG,CAClD,MAAM8N,EAAS,IAAI9B,EAAAM,WAAWC,SAAUP,EAAAM,WAAWD,SAC7C0B,EAAQD,EAAOJ,QAAQ1B,EAAAM,WAAWE,SAASR,EAAAM,WAAWE,SAASxM,OAAS,IACxEgO,EAAMF,EAAOJ,QAAQH,GAC3B,IAAK,IAAIzN,EAAIiO,EAAOjO,IAAMkO,EAAKD,EAAQC,EAAMlO,IAAMA,IAC3CA,IAAMiO,GACV/B,EAAAM,WAAWE,SAAStM,KAAK4N,EAAOhO,IAEpCkM,EAAAM,WAAWE,SAAStM,KAAK4N,EAAOE,SAE3BJ,EAAMK,SACPjC,EAAAM,WAAWc,gBAEfpB,EAAAM,WAAWE,SAAStM,KAAKqN,GAGjC5J,UAAUiK,EAAkBM,GACG,OAAvBN,EAAMO,eACVP,EAAMO,aAAaC,QAAQ,OAAQ,YACnCR,EAAMO,aAAaE,WAAa,OAC3BrC,EAAAM,WAAWE,SAASiB,SAASS,IAAOlC,EAAAM,WAAWE,SAAStM,KAAKgO,GAClE9J,KAAKgI,mBAAoB,GAE7BzI,SAASiK,GACaA,EAAMJ,OAAQc,UAAUC,SAAS,WACjCX,EAAMJ,OAAQc,UAAUE,IAAI,kBAElD7K,UAAUiK,GACYA,EAAMJ,OAAQc,UAAUC,SAAS,WACjCX,EAAMJ,OAAQc,UAAUG,OAAO,kBAErD9K,SAASiK,EAAkBJ,GAEvB,GADcI,EAAMJ,OAAQc,UAAUG,OAAO,kBACzCrK,KAAKgI,kBAAmB,CACxB,IACKoB,IAAWxB,EAAAM,WAAWK,MAAQX,EAAAM,WAAWD,QAAQoB,SAASD,MAC1DxB,EAAAM,WAAWE,SAASiB,SAASD,GAE9B,IAAK,MAAMD,KAASvB,EAAAM,WAAWE,SAC3BpI,KAAKsK,UAAUnB,EAAOC,GAG9BxB,EAAAM,WAAWc,qBACJQ,EAAMO,cAAgBP,EAAMO,aAAa5B,MAAMvM,OAAS,GAC/DoE,KAAKuK,OAAOf,EAAMO,aAAa5B,MAAOiB,GAE1CpJ,KAAKgI,mBAAoB,EAE7BzI,gBACIiL,SAASC,eAAe,SAAUC,QAEtCnL,OAAOoL,EAAgBvB,GACnB,MAAMjB,EAA2BqC,SAASC,eAAe,SAAWtC,MACpE,QAAYO,IAARiC,EAAmB,CACnB,IAAIxC,EACC,OADMwC,EAAMxC,OAGNO,IAAXU,IAAsBA,EAASpJ,KAAKsI,eACxC,MAAMsC,EAAa,IACnB,IAAK,MAAMd,KAAQa,EAAK,CACpB,MAAM7K,EAAO+H,EAAAgD,SACPC,EAAS5I,KAAK6I,KAAKjB,EAAKkB,KAAOJ,GACrC,IAAK,IAAI3L,EAAQ,EAAGA,EAAQ6L,EAAQ7L,IAAS,CACzC,MAAMgM,EAAK,IAAIC,WACfD,EAAGE,kBACCrB,EAAK7K,MACDA,EAAQ2L,EACR3L,EAAQ2L,EAAa1I,KAAKkJ,IAAIR,EAAYd,EAAKkB,KAAO/L,EAAQ2L,KAGtEK,EAAGI,OAASC,KACR3D,EAAAf,OAAOqC,KAAK,eAAgB,CACxBxL,KAAMqM,EAAKrM,KACX8N,UAAWnC,EACXhO,KAAM6P,EAAGxO,OACTwC,QACAuM,YAAaV,EACbhL,eArIHgI,EAAYhE,EAAAiC,WAAA,CAfhC9B,EAAAI,QAAU,CACP8B,WAAY,CACRsF,OAAA/D,EAAArD,QACAqH,cAAAjE,EAAApD,QACAsH,iBAAAnE,EAAAnD,SAEJ9E,iBAAiBqM,EAAIC,EAAMC,GACvBnE,EAAAf,OAAOO,UACP2E,KAEJvM,iBAAiBqM,EAAIC,EAAMC,GACvBnE,EAAAf,OAAOmF,aACPD,QAGahE,oDC1GrB/K,EAAAgB,EAAAgF,GAAA,IAAAiJ,EAAAjP,EAAA,QAAAkP,EAAAlP,EAAA,gBAAAmG,KAAA+I,EAAA,YAAA/I,GAAA,SAAA1E,GAAAzB,EAAAS,EAAAuF,EAAAvE,EAAA,kBAAAyN,EAAAzN,KAAA,CAAA0E,GAAAnG,EAAA,YAAAoG,EAAApG,EAAA,QAQAqG,EAAgBrH,OAAAoH,EAAA,KAAApH,CACdkQ,EAAA,WACAD,EAAA,KACAA,EAAA,MACF,EACA,KACA,WACA,MAIA5I,EAAAC,QAAAC,OAAA,iBACeP,EAAA,WAAAK,iECpBf,IAAA8I,EAAAnP,EAAA,QAAAoP,EAAApP,EAAA2B,EAAAwN,GAA6gBC,EAAG,qCCAhhBpP,EAAAgB,EAAAgF,GAAA,IAAAqJ,EAAArP,EAAA,QAAAsP,EAAAtP,EAAA,gBAAAmG,KAAAmJ,EAAA,YAAAnJ,GAAA,SAAA1E,GAAAzB,EAAAS,EAAAuF,EAAAvE,EAAA,kBAAA6N,EAAA7N,KAAA,CAAA0E,GAAAnG,EAAA,YAAAoG,EAAApG,EAAA,QAQAqG,EAAgBrH,OAAAoH,EAAA,KAAApH,CACdsQ,EAAA,WACAD,EAAA,KACAA,EAAA,MACF,EACA,KACA,WACA,MAIAhJ,EAAAC,QAAAC,OAAA,YACeP,EAAA,WAAAK,8FCpBf,MAAAkJ,EAAAvP,EAAA,QACAqC,EAAArC,EAAA,QACAwP,EAAAxP,EAAA,QACAyP,EAAAzP,EAAA,QAEA,SAAgB0P,EAAYC,EAAqBC,GAC7C,MAAMC,EAAKN,EAAAO,aAAaC,SAAS,QACjC,QAAWpE,IAAPkE,EAAkB,OACtB,MAAMnM,EAAMmM,EAAGnM,IACfA,EAAIsM,SAAW,QAEftM,EAAIsM,SAAW,QACftM,EAAIuM,YACJvM,EAAIwM,iBACWvE,IAAXiE,SAA8C,IAAhBzK,KAAKgL,aAAmC,IAAhBhL,KAAKgL,aAAmC,IAAhBhL,KAAKgL,YAAoBP,EAC3GlM,EAAI0M,OAAO/N,EAAAgO,KAAKV,EAAQ,GAAG,IAAKtN,EAAAiO,KAAKX,EAAQ,GAAG,KAChD,IAAK,MAAMnL,KAASmL,EAChBjM,EAAI6M,OAAOlO,EAAAgO,KAAK7L,EAAM,IAAKnC,EAAAiO,KAAK9L,EAAM,KAE1Cd,EAAI8M,YACJ9M,EAAI+M,SAGR,SAAgBC,EAAaf,EAAqBC,GAC9C,MAAMC,EAAKN,EAAAO,aAAaC,SAAS,QACjC,QAAWpE,IAAPkE,EAAkB,OACtB,MAAMnM,EAAMmM,EAAGnM,IACfA,EAAIsM,SAAW,QAEftM,EAAIsM,SAAW,QACftM,EAAIuM,YACJvM,EAAIwM,iBACWvE,IAAXiE,SAA8C,IAAhBzK,KAAKgL,aAAmC,IAAhBhL,KAAKgL,aAAmC,IAAhBhL,KAAKgL,YAAoBP,EAC3GlM,EAAI0M,OAAOT,EAAQ,GAAG,GAAIA,EAAQ,GAAG,IACrC,IAAK,MAAMnL,KAASmL,EAChBjM,EAAI6M,OAAO/L,EAAM,GAAIA,EAAM,IAE/Bd,EAAI8M,YACJ9M,EAAI+M,SAGR,SAASlN,EAAEoN,EAAYC,GACnB,OAAIA,EAAcD,EACNtO,EAAAgO,KAAKM,GAGrB,SAASnN,EAAEqN,EAAYD,GACnB,OAAIA,EAAcC,EACNxO,EAAAiO,KAAKO,GA3CrBzQ,EAAAsP,cAkBAtP,EAAAsQ,eA4BA,IAAII,EAAI,EACJC,EAAI,EAER,SAASC,EAAItN,EAA+BoL,EAAgBD,EAAcoC,EAAsBL,GAQ5FlN,EAAIuM,YACJvM,EAAIwM,YAAce,EAAc,wBAA0B,sBAC1DvN,EAAI0M,OAAO7M,EAAEuL,EAAK,GAAI8B,GAAQpN,EAAEsL,EAAK,GAAI8B,IACzClN,EAAI6M,OAAOhN,EAAEsL,EAAG,GAAI+B,GAAQpN,EAAEqL,EAAG,GAAI+B,IACrClN,EAAI8M,YACJ9M,EAAI+M,SAGR,SAASS,EAAaC,EAAUP,GAAQ,EAAMQ,GAAQ,EAAMC,EAAkB,GAC1EP,EAAI,EACJC,EAAI,EACJ,IAAIO,EAAI,EACR,MAAMzB,EAAKN,EAAAO,aAAaC,SAAS,QACjC,QAAWpE,IAAPkE,EAAkB,OACtB,MAAMnM,EAAMmM,EAAGnM,IACX0N,GAAO1N,EAAI6N,UAAU,EAAG,EAAG,IAAM,KACrC7N,EAAIsM,SAAW,QAEftM,EAAIsM,SAAW,QACf,MAAMwB,EAAK,IAAIhC,EAAAiC,aAAaN,GAC5B,MAAOK,EAAGE,MACNF,EAAGzC,OACHyC,EAAGG,UAEPH,EAAGG,UACH,EAAG,CACC,MAAMC,EAAQJ,EAAGK,KAAKC,MAAOC,SAAStC,EAAAuC,IAAIR,EAAGK,KAAKI,SAAUzN,MACtD0N,EAAMV,EAAGK,KAAKC,MAAOC,SAAStC,EAAA0C,GAAGX,EAAGK,KAAKI,SAAUzN,MACzD,GAAI6M,EAAO,EAAG,CACV,GAAIO,EAAM,MAAQQ,KAAYF,EAAI,MAAQE,IAAU,CAChDZ,EAAGzC,OACH,SAEJgC,IACIS,EAAGK,KAAKC,MAAOO,YAAYb,EAAGK,KAAKI,SACnCnB,IACa,IAATO,GAAYiB,QAAQC,iBAAiBX,OAAWM,MACpC,IAATb,GAAYiB,QAAQC,aAAaX,OAAWM,KAE3D,GACIV,EAAGzC,OACHyC,EAAGG,gBACEH,EAAGE,aACI,OAAXF,EAAGgB,KACZ,IAAK,MAAMpR,KAAK+P,EAAIsB,UAAW,CAC3B,GAAIrR,EAAEsR,aAAc,SACpBpB,IACA,MAAMqB,EAAK,GACXjP,EAAIE,UAAY,WACM+H,IAAlBvK,EAAE2Q,SAAS,KACXY,EAAG5T,KAAKqC,EAAE2Q,SAAS,GAAIvN,OACvBd,EAAIuM,YACJvM,EAAIkP,IAAIrP,EAAEnC,EAAE2Q,SAAS,GAAIvN,MAAO,GAAIoM,GAAQpN,EAAEpC,EAAE2Q,SAAS,GAAIvN,MAAO,GAAIoM,GAAQ,EAAG,EAAG,EAAIzL,KAAK0N,IAC/FnP,EAAI8M,YACJ9M,EAAIoP,aAEcnH,IAAlBvK,EAAE2Q,SAAS,KACXY,EAAG5T,KAAKqC,EAAE2Q,SAAS,GAAIvN,OACvBd,EAAIkP,IAAIrP,EAAEnC,EAAE2Q,SAAS,GAAIvN,MAAO,GAAIoM,GAAQpN,EAAEpC,EAAE2Q,SAAS,GAAIvN,MAAO,GAAIoM,GAAQ,EAAG,EAAG,EAAIzL,KAAK0N,IAC/FnP,EAAI8M,YACJ9M,EAAIoP,aAEcnH,IAAlBvK,EAAE2Q,SAAS,KACXY,EAAG5T,KAAKqC,EAAE2Q,SAAS,GAAIvN,OACvBd,EAAIkP,IAAIrP,EAAEnC,EAAE2Q,SAAS,GAAIvN,MAAO,GAAIoM,GAAQpN,EAAEpC,EAAE2Q,SAAS,GAAIvN,MAAO,GAAIoM,GAAQ,EAAG,EAAG,EAAIzL,KAAK0N,IAC/FnP,EAAI8M,YACJ9M,EAAIoP,QAEK,IAATzB,GAAYiB,QAAQC,IAAI,UAAWI,EAAIvR,EAAEiR,aAE7C3O,EAAI0M,OAAO7M,EAAEnC,EAAE2Q,SAAS,GAAIvN,MAAO,GAAIoM,GAAQpN,EAAEpC,EAAE2Q,SAAS,GAAIvN,MAAO,GAAIoM,SACrDjF,IAAlBvK,EAAE2Q,SAAS,SAAsCpG,IAAlBvK,EAAE2Q,SAAS,IAC1Cf,EAAItN,EAAKtC,EAAE2Q,SAAS,GAAIvN,MAAQpD,EAAE2Q,SAAS,GAAIvN,MAAQpD,EAAEiR,YAAY,GAAIzB,QACvDjF,IAAlBvK,EAAE2Q,SAAS,SAAsCpG,IAAlBvK,EAAE2Q,SAAS,IAC1Cf,EAAItN,EAAKtC,EAAE2Q,SAAS,GAAIvN,MAAQpD,EAAE2Q,SAAS,GAAIvN,MAAQpD,EAAEiR,YAAY,GAAIzB,QACvDjF,IAAlBvK,EAAE2Q,SAAS,SAAsCpG,IAAlBvK,EAAE2Q,SAAS,IAC1Cf,EAAItN,EAAKtC,EAAE2Q,SAAS,GAAIvN,MAAQpD,EAAE2Q,SAAS,GAAIvN,MAAQpD,EAAEiR,YAAY,GAAIzB,GAE7ES,EAAO,IACPiB,QAAQC,cAAczB,KAAKC,KAC3BuB,QAAQC,cAAcjB,MAIxBtP,OAAQ+Q,GAAKrD,EACb1N,OAAQgR,IAAMtC,EACd1O,OAAQiR,IAAM/B,qCCpJpBlR,EAAAgB,EAAAgF,GAAA,IAAAkN,EAAAlT,EAAA,QAAAmT,EAAAnT,EAAA,gBAAAmG,KAAAgN,EAAA,YAAAhN,GAAA,SAAA1E,GAAAzB,EAAAS,EAAAuF,EAAAvE,EAAA,kBAAA0R,EAAA1R,KAAA,CAAA0E,GAAAnG,EAAA,YAAAoG,EAAApG,EAAA,QAQAqG,EAAgBrH,OAAAoH,EAAA,KAAApH,CACdmU,EAAA,WACAD,EAAA,KACAA,EAAA,MACF,EACA,KACA,WACA,MAIA7M,EAAAC,QAAAC,OAAA,gBACeP,EAAA,WAAAK,+CCpBf,IAAA+M,EAAApT,EAAA,QAAAqT,EAAArT,EAAA2B,EAAAyR,GAA4eC,EAAG,wGCA/eC,EAAAvM,EAAAwM,aAAAvT,EAAA,SAEA8K,EAAA9K,EAAA,QAIAwT,EAAAxT,EAAA,QACA6K,EAAA7K,EAAA,QACAqC,EAAArC,EAAA,QAEA,MAAayT,UAAsBD,EAAAE,OAI/BlR,YACImR,EACA3S,EACA0B,EACAC,EACAE,EACAC,EACAC,GAEAC,MAAM2Q,EAAQ3S,EAAG6B,EAAYC,EAAcC,GAZ/CE,KAAAC,KAAO,gBAaHD,KAAKP,KAAOA,EACZO,KAAKN,KAAOA,EAEhBH,SACI,OAAOxD,OAAOmE,OAAOF,KAAKG,cAAe,CACrCwQ,OAAQ3Q,KAAKjC,EACb0B,KAAMO,KAAKP,KACXC,KAAMM,KAAKN,OAGnBH,SAASnE,GACL2E,MAAM6Q,SAASxV,GACf4E,KAAKjC,EAAI3C,EAAKuV,OACd3Q,KAAKP,KAAOrE,EAAKqE,KACjBO,KAAKN,KAAOtE,EAAKsE,KAErBH,KAAKkB,GACDV,MAAMW,KAAKD,GACXA,EAAIf,KAAOM,KAAKN,KAChBe,EAAIG,OACJ,MAAMC,EAAOzB,EAAA0B,IAAId,KAAK0Q,UACtBjQ,EAAIQ,UAAY,SAChBR,EAAIoQ,aAAe,SACnB,MAAMC,EAAKjJ,EAAAkJ,cAActQ,EAAKT,KAAKP,KAAML,EAAA4R,KAAKhR,KAAKjC,GAAIqB,EAAA4R,KAAKhR,KAAKjC,IAC3DkT,EAAK,EACXxQ,EAAIyQ,UAAUJ,EAAIG,GAAKA,EAAIH,EAAIjQ,EAAKP,EAAGO,EAAKN,GAC5CE,EAAIE,UAAY0P,EAAUc,aAAanR,KAAKJ,WAAY,CAAC,OAAQ,SAASwR,cAC1E3Q,EAAIY,SAASrB,KAAKP,KAAM,EAAG,GAC3BgB,EAAIa,UAER/B,oBACI,MAAO,CACHO,KAAME,KAAKF,KACXuR,SAAUzJ,EAAA0J,UAAUC,MACpBC,OAAO,EACPC,OAAsB,KAAdzR,KAAKvC,MAA6B,kBAAduC,KAAKvC,KAA2BuC,KAAKP,KAAOO,KAAKvC,KAC7EiU,SAAS,EACTC,QAAS,GACTC,MAAOzC,MApDnBhS,EAAAqT,oGCVA,MAAAqB,EAAA9U,EAAA,QAEAuP,EAAAvP,EAAA,QACA+U,EAAA/U,EAAA,QACAgV,EAAAhV,EAAA,QACA6K,EAAA7K,EAAA,QACAqC,EAAArC,EAAA,QAEA,MAAaiV,EAMTzS,cAFAS,KAAAiS,OAAiB,EAGb,MAAMC,EAAS,IAAIL,EAAAM,YAAY,EAAG,GAClCnS,KAAKoS,eAAiB,IAAIL,EAAA1S,KAAK6S,EAAQ,GAAI,kBAAmB,EAAG,0BACjElS,KAAKqS,eAAiB,IAAIP,EAAAQ,KAAKJ,EAAQ,EAAG,EAAG,sBAGjD3S,cAAcE,GACV,QAAmBiJ,IAAf1I,KAAKuS,MAAqB,CAC1B,IAAIjG,EAAAO,aAAa2F,SAAS,QAMtB,YADAnD,QAAQoD,KAAK,kDAJbzS,KAAKuS,MAAQjG,EAAAO,aAAaC,SAAS,QACnC9M,KAAKuS,MAAMG,SAAS1S,KAAKqS,gBAAgB,GACzCrS,KAAKuS,MAAMG,SAAS1S,KAAKoS,gBAAgB,GAMjDpS,KAAKiS,MAAiB,KAATxS,EACbO,KAAKoS,eAAe/R,SAAWjB,EAAAuT,IAAI,IAAId,EAAAe,WAAW5S,KAAKuS,MAAM9Q,OAAOQ,MAAQ,EAAG,KAC/EjC,KAAKoS,eAAe3S,KAAOA,EAC3B,MAAMwC,EAAQjC,KAAKiS,MAAQjS,KAAKoS,eAAeS,YAAY7S,KAAKuS,MAAM9R,KAAO,GAAK,EAC5EqS,EAAS9S,KAAKiS,MAAQjS,KAAKoS,eAAeW,aAAa/S,KAAKuS,MAAM9R,KAAO,GAAK,EACpFT,KAAKqS,eAAehS,SAAWjB,EAAAuT,IAAI,IAAId,EAAAe,WAAW5S,KAAKuS,MAAM9Q,OAAOQ,MAAQ,EAAIA,EAAQ,EAAG,KAC3FjC,KAAKqS,eAAeW,EAAI/Q,EAAQ2F,EAAA0J,UAAU2B,WAC1CjT,KAAKqS,eAAea,EAAIJ,EAASlL,EAAA0J,UAAU2B,WAC3CjT,KAAKuS,MAAMY,YAAW,IA/B9BhW,EAAA6U,yDCRAjV,EAAAgB,EAAAgF,GAAA,IAAAqQ,EAAArW,EAAA,QAAAsW,EAAAtW,EAAA,gBAAAmG,KAAAmQ,EAAA,YAAAnQ,GAAA,SAAA1E,GAAAzB,EAAAS,EAAAuF,EAAAvE,EAAA,kBAAA6U,EAAA7U,KAAA,CAAA0E,GAAAnG,EAAA,YAAAoG,EAAApG,EAAA,QAQAqG,EAAgBrH,OAAAoH,EAAA,KAAApH,CACdsX,EAAA,WACAD,EAAA,KACAA,EAAA,MACF,EACA,KACA,WACA,MAIAhQ,EAAAC,QAAAC,OAAA,WACeP,EAAA,WAAAK,+CCpBfrG,EAAAgB,EAAAgF,GAAA,IAAAuQ,EAAAvW,EAAA,QAAAwW,EAAAxW,EAAA,gBAAAmG,KAAAqQ,EAAA,YAAArQ,GAAA,SAAA1E,GAAAzB,EAAAS,EAAAuF,EAAAvE,EAAA,kBAAA+U,EAAA/U,KAAA,CAAA0E,GAAAnG,EAAA,YAAAoG,EAAApG,EAAA,QAQAqG,EAAgBrH,OAAAoH,EAAA,KAAApH,CACdwX,EAAA,WACAD,EAAA,KACAA,EAAA,MACF,EACA,KACA,KACA,MAIAlQ,EAAAC,QAAAC,OAAA,kBACeP,EAAA,WAAAK,+CCpBfrG,EAAAgB,EAAAgF,GAAA,IAAAyQ,EAAAzW,EAAA,QAAA0W,EAAA1W,EAAA2B,EAAA8U,GAAA,QAAAtQ,KAAAsQ,EAAA,YAAAtQ,GAAA,SAAA1E,GAAAzB,EAAAS,EAAAuF,EAAAvE,EAAA,kBAAAgV,EAAAhV,KAAA,CAAA0E,GAAiWH,EAAA,WAAA0Q,EAAG,uCCApW1W,EAAAgB,EAAAgF,GAAA,IAAA2Q,EAAA3W,EAAA,QAAA4W,EAAA5W,EAAA2B,EAAAgV,GAAA,QAAAxQ,KAAAwQ,EAAA,YAAAxQ,GAAA,SAAA1E,GAAAzB,EAAAS,EAAAuF,EAAAvE,EAAA,kBAAAkV,EAAAlV,KAAA,CAAA0E,GAAmVH,EAAA,WAAA4Q,EAAG,uCCAtV,IAAAC,EAAA,WAA0B,IAAAC,EAAA7T,KAAa8T,EAAAD,EAAAE,eAA0BC,EAAAH,EAAAI,MAAAD,IAAAF,EAAwB,OAAAE,EAAA,SAAmBE,MAAA,CAAO7C,QAAAwC,EAAAxC,QAAA8C,MAAA,GAAmCC,GAAA,CAAKC,MAAA,SAAAC,GAAyBT,EAAAxC,SAAA,IAAqBkD,YAAAV,EAAAW,GAAA,EAAsBhW,IAAA,SAAAiW,GAAA,SAAAnX,GAA4B,OAAA0W,EAAA,OAAiBU,YAAA,eAAAR,MAAA,CAAkCS,UAAA,QAAmBP,GAAA,CAAKQ,UAAAtX,EAAAuX,UAAAC,QAAAxX,EAAAyX,UAA6C,CAAAf,EAAA,OAAAH,EAAAmB,GAAA,mBAAAhB,EAAA,OAAgDU,YAAA,eAAAN,GAAA,CAA+B1J,MAAA,SAAA4J,GAAyBT,EAAAxC,SAAA,KAAsB,CAAA2C,EAAA,KAAUU,YAAA,iCAA4C,CAAAV,EAAA,OAAYU,YAAA,cAAyB,CAAAV,EAAA,OAAYU,YAAA,QAAmB,CAAAV,EAAA,OAAYU,YAAA,UAAqB,CAAAV,EAAA,QAAaE,MAAA,CAAOe,MAAA,aAAoB,CAAApB,EAAAmB,GAAA,YAAAhB,EAAA,OAA+BU,YAAA,eAA0B,CAAAb,EAAAmB,GAAA,UAAAhB,EAAA,OAA6BU,YAAA,UAAqB,CAAAV,EAAA,QAAaE,MAAA,CAAOe,MAAA,YAAmB,CAAApB,EAAAmB,GAAA,YAAAhB,EAAA,OAA+BU,YAAA,UAAqB,CAAAV,EAAA,QAAaE,MAAA,CAAOe,MAAA,WAAkB,CAAApB,EAAAmB,GAAA,YAAAhB,EAAA,OAA+BU,YAAA,oBAAAQ,YAAA,CAA6CC,OAAA,aAAoBnB,EAAA,SAAcoB,WAAA,EAAa3X,KAAA,QAAA4X,QAAA,UAAAnX,MAAA2V,EAAA,OAAAyB,WAAA,WAAsEC,IAAA,SAAAb,YAAA,UAAAR,MAAA,CAA4CjU,KAAA,OAAAuV,YAAA,UAAqCC,SAAA,CAAWvX,MAAA2V,EAAA,QAAqBO,GAAA,CAAKsB,MAAA,SAAApB,GAAyBA,EAAAlL,OAAAuM,YAAsC9B,EAAA+B,OAAAtB,EAAAlL,OAAAlL,aAAiC8V,EAAA,OAAcU,YAAA,eAA0B,CAAAb,EAAAgC,GAAAhC,EAAA,oBAAAiC,GAA6C,OAAAjC,EAAAgC,GAAAhC,EAAAkC,OAAAD,GAAA,SAAAE,GAAsD,OAAAhC,EAAA,OAAkBxV,IAAA,OAAAwX,EAAAlW,KAAA4U,YAAA,MAAAN,GAAA,CAA4C1J,MAAA,SAAA4J,GAAyBT,EAAAoC,YAAAD,EAAAlW,SAA8B,CAAAkW,EAAA,UAAAhC,EAAA,OAA8BxV,IAAA,OAAAwX,EAAAlW,MAAsB,CAAA+T,EAAAmB,GAAAnB,EAAAqC,GAAAF,EAAAF,aAAA9B,EAAA,OAA6CxV,IAAA,QAAAwX,EAAAlW,KAAA4U,YAAA,QAA0C,CAAAb,EAAAmB,GAAAnB,EAAAqC,GAAAF,EAAAvY,UAAAoW,EAAAsC,KAAAH,EAAAF,SAAkJjC,EAAAsC,KAAlJ,CAAAnC,EAAA,OAAsExV,IAAA,OAAAwX,EAAAlW,OAAsBkU,EAAA,OAAYxV,IAAA,QAAAwX,EAAAlW,KAAA4U,YAAA,QAA0C,CAAAb,EAAAmB,GAAAnB,EAAAqC,GAAAF,EAAAvY,UAAAuW,EAAA,OAAmDxV,IAAA,WAAAwX,EAAAlW,KAAAsW,MAAA,CAAiCC,iBAAAL,EAAA3E,SAAgCiF,MAAA,CAASrV,UAAA,UAAoBmT,GAAA,CAAM1J,MAAA,SAAA4J,GAAyBA,EAAAiC,kBAAyB1C,EAAA2C,iBAAAR,MAA8B,CAAAhC,EAAA,KAAUU,YAAA,iBAAyBV,EAAA,OAAcxV,IAAA,UAAAwX,EAAAlW,KAAAsU,GAAA,CAA6B1J,MAAA,SAAA4J,GAAyBA,EAAAiC,kBAAyB1C,EAAA4C,YAAAT,EAAAlW,SAA8B,CAAAkU,EAAA,KAAUU,YAAA,wBAA+B,SAAY,IAAAb,EAAAkC,OAAAna,OAAA,CAAAoY,EAAA,OAAuCE,MAAA,CAAOwC,GAAA,cAAkB,CAAA7C,EAAAmB,GAAA,0BAAAnB,EAAAsC,MAAA,GAAAnC,EAAA,OAA0DU,YAAA,QAAmB,CAAAV,EAAA,OAAYU,YAAA,sBAAgCV,EAAA,SAAcoB,WAAA,EAAa3X,KAAA,QAAA4X,QAAA,eAAAnX,MAAA2V,EAAA,YAAAyB,WAAA,cAAAqB,UAAA,CAAgGC,MAAA,KAAa1C,MAAA,CAASjU,KAAA,QAAcwV,SAAA,CAAWvX,MAAA2V,EAAA,aAA0BO,GAAA,CAAKsB,MAAA,SAAApB,GAAyBA,EAAAlL,OAAAuM,YAAsC9B,EAAAgD,YAAAvC,EAAAlL,OAAAlL,MAAA0Y,SAA2CE,KAAA,SAAAxC,GAAyBT,EAAAkD,mBAAqB/C,EAAA,SAAcoB,WAAA,EAAa3X,KAAA,QAAA4X,QAAA,eAAAnX,MAAA2V,EAAA,QAAAyB,WAAA,UAAAqB,UAAA,CAAwFC,MAAA,KAAa1C,MAAA,CAASjU,KAAA,QAAcwV,SAAA,CAAWvX,MAAA2V,EAAA,SAAsBO,GAAA,CAAKsB,MAAA,SAAApB,GAAyBA,EAAAlL,OAAAuM,YAAsC9B,EAAAmD,QAAA1C,EAAAlL,OAAAlL,MAAA0Y,SAAuCE,KAAA,SAAAxC,GAAyBT,EAAAkD,mBAAqB/C,EAAA,UAAeE,MAAA,CAAOwC,GAAA,kBAAsBtC,GAAA,CAAK1J,MAAA,SAAA4J,GAAkD,OAAzBA,EAAAiC,kBAAyB1C,EAAAoD,SAAA3C,MAA8B,CAAAT,EAAAmB,GAAA,gBAC1vGkC,EAAA,GCDAna,EAAAS,EAAAuF,EAAA,sBAAA6Q,IAAA7W,EAAAS,EAAAuF,EAAA,sBAAAmU,0FCWA,MAAArF,EAAA9U,EAAA,QACAuP,EAAAvP,EAAA,QACAoa,EAAApa,EAAA,QACAwT,EAAAxT,EAAA,QACAqa,EAAAra,EAAA,QACAsa,EAAAta,EAAA,QACAua,EAAAva,EAAA,QACA+U,EAAA/U,EAAA,QAEAgV,EAAAhV,EAAA,QACAwa,EAAAxa,EAAA,QAEA,SAAgBya,EAAoBC,GAChC,IAAIC,EAMJ,MAAMrX,EAAW,IAAIwR,EAAAM,YAAYsF,EAAMnX,EAAGmX,EAAMlX,GAChD,GAAoB,SAAhBkX,EAAME,MAAkB,CACxB,MAAMlS,EAAmBgS,EACzBC,EAAK,IAAI5F,EAAAQ,KAAKjS,EAAUoF,EAAKxD,MAAOwD,EAAKqN,OAAQrN,EAAKmS,YAAanS,EAAKoS,cAAepS,EAAK3F,WACzF,GAAoB,WAAhB2X,EAAME,MAAoB,CACjC,MAAMG,EAAqBL,EAC3BC,EAAK,IAAInH,EAAAE,OAAOpQ,EAAUyX,EAAKnH,OAAQmH,EAAKF,YAAaE,EAAKD,cAAeC,EAAKhY,WAC/E,GAAoB,kBAAhB2X,EAAME,MAA2B,CACxC,MAAMI,EAA6BN,EACnCC,EAAK,IAAIN,EAAA5G,cACLnQ,EACA0X,EAAMpH,OACNoH,EAAMtY,KACNsY,EAAMrY,KACNqY,EAAMH,YACNG,EAAMF,cACNE,EAAMjY,WAEP,GAAoB,SAAhB2X,EAAME,MAAkB,CAC/B,MAAMvW,EAAmBqW,EACzBC,EAAK,IAAIL,EAAAW,KAAK3X,EAAU,IAAIwR,EAAAM,YAAY/Q,EAAK6W,GAAI7W,EAAK8W,IAAK9W,EAAK+W,WAAY/W,EAAKyW,cAAezW,EAAKtB,WAClG,GAAoB,cAAhB2X,EAAME,MAAuB,CACpC,MAAMS,EAA6BX,EACnCC,EAAK,IAAIJ,EAAAe,UACLhY,EACA+X,EAAUhY,OAAOe,IAAItC,GAAK,IAAIgT,EAAAM,YAAYtT,EAAEyB,EAAGzB,EAAE0B,IACjD6X,EAAUD,WACVC,EAAUP,cACVO,EAAUtY,WAEX,GAAoB,YAAhB2X,EAAME,MAAqB,CAClC,MAAMjL,EAAyB+K,EAC/BC,EAAK,IAAIH,EAAAe,QACLjY,EACAqM,EAAQoC,SAAS3N,IAAIoX,GAAK,IAAI1G,EAAAM,YAAYoG,EAAEjY,EAAGiY,EAAEhY,IACjDmM,EAAQkL,YACRlL,EAAQmL,cACRnL,EAAQ5M,WAET,GAAoB,SAAhB2X,EAAME,MAAkB,CAC/B,MAAMlY,EAAmBgY,EACzBC,EAAK,IAAI3F,EAAA1S,KAAKgB,EAAUZ,EAAKA,KAAMA,EAAKC,KAAMD,EAAKE,MAAOF,EAAKmY,YAAanY,EAAKoY,cAAepY,EAAKK,UAClG,IAAoB,cAAhB2X,EAAME,MAUb,OAVoC,CACpC,MAAMa,EAAqBf,EACrBgB,EAAM,IAAIC,MAAMF,EAAMvW,MAAOuW,EAAM1F,QACrC0F,EAAMG,IAAIC,WAAW,QAASH,EAAIE,IAAM,IAAIE,IAAIL,EAAMG,KAAKG,SAC1DL,EAAIE,IAAMH,EAAMG,IACrBjB,EAAK,IAAIP,EAAA4B,MAAMN,EAAKpY,EAAUmY,EAAMvW,MAAOuW,EAAM1F,OAAQ0F,EAAM1Y,MAC/D2Y,EAAIpN,OAAS,MACTiB,EAAAO,aAAaC,SAAS2K,EAAMlF,OAAQY,YAAW,MAMvD,OADAuE,EAAG9G,SAAS6G,GACLC,EA9DXva,EAAAqa,2DCvBA,IAAAwB,EAAAjc,EAAA,QAAAkc,EAAAlc,EAAA2B,EAAAsa,GAAugBC,EAAG,uCCA1gB,IAAArF,EAAA,WAA0B,IAAAC,EAAA7T,KAAa8T,EAAAD,EAAAE,eAA0BC,EAAAH,EAAAI,MAAAD,IAAAF,EAAwB,OAAAE,EAAA,iBAA2BuB,IAAA,mBACpH2B,EAAA,GCDAna,EAAAS,EAAAuF,EAAA,sBAAA6Q,IAAA7W,EAAAS,EAAAuF,EAAA,sBAAAmU,0GCAArT,EAAAC,EAAAC,gBAAAhH,EAAA,SAEA8K,EAAA9K,EAAA,QACA4K,EAAA5K,EAAA,QACAmc,EAAAnc,EAAA,QAGA8U,EAAA9U,EAAA,QACAuP,EAAAvP,EAAA,QAEA6K,EAAA7K,EAAA,QACAqC,EAAArC,EAAA,QAEA,MAAsBuC,EA0ClBC,YAAYc,EAAuBT,EAAqBC,EAAuBC,GA9B/EE,KAAAJ,WAAqB,OACrBI,KAAAH,aAAuB,gBAEvBG,KAAAvC,KAAO,gBACPuC,KAAAmZ,aAAc,EAGdnZ,KAAAoZ,SAAsB,GACtBpZ,KAAAqZ,MAAgB,GAChBrZ,KAAA+V,OAAkB,GACR/V,KAAAsZ,QAAoB,GAG9BtZ,KAAAuZ,mBAAoB,EAEpBvZ,KAAAwZ,qBAAsB,EAEtBxZ,KAAAyZ,SAAU,EAEVzZ,KAAA0Z,eAAgB,EAGhB1Z,KAAA2Z,WAAqB,GAGrB3Z,KAAA4Z,yBAAmC,cAGnC5Z,KAAAqD,QAA4B,IAAIwW,IAG5B7Z,KAAK8Z,UAAYzZ,EACjBL,KAAKF,KAAOA,GAAQ+H,EAAAgD,cACDnC,IAAf9I,IAA0BI,KAAKJ,WAAaA,QAC3B8I,IAAjB7I,IAA4BG,KAAKH,aAAeA,GAGxDQ,eACI,OAAOL,KAAK8Z,UAEhBzZ,aAAakB,GACTvB,KAAK8Z,UAAYvY,EAUrBhC,gBAAgBkC,GAOZ,OAAO,EAWXlC,cAAcV,EAAgBkb,EAAQ,GAClC,IAAK,MAAOC,EAAKzY,KAAUvB,KAAKI,OAAO6Z,UACnC,GAAI/X,KAAKgY,IAAIrb,EAAEyB,EAAIiB,EAAM,KAAOwY,GAAS7X,KAAKgY,IAAIrb,EAAE0B,EAAIgB,EAAM,KAAOwY,EAAO,OAAOC,EAEvF,OAAQ,EAGZza,oBAAoB7D,GAChB,MAAMye,EAAOtI,EAAAM,YAAYiI,UAAUpa,KAAKI,QAAQJ,KAAKI,OAAOxE,OAASF,EAAI,GAAKsE,KAAKI,OAAOxE,SACpF2F,EAAQsQ,EAAAM,YAAYiI,UAAUpa,KAAKI,OAAO1E,IAC1CoQ,EAAO+F,EAAAM,YAAYiI,UAAUpa,KAAKI,QAAQ1E,EAAI,GAAKsE,KAAKI,OAAOxE,SAC/Dye,EAAMvO,EAAKwO,SAASH,GACpBI,EAAMJ,EAAK/P,IAAIiQ,EAAIG,SAAS,KAClC,OAAOjZ,EAAM+Y,SAASC,GAAKE,YAG/Blb,WAAWmb,GACP,MAAMrd,EAAIiP,EAAAO,aAAaC,SAAS9M,KAAKuS,OACjClV,GAAGA,EAAE8V,WAAWuH,GAGxBnb,mBAAmBob,GAAc,GAC7B,MAAMC,EAAO5a,KACP6a,EAAmBjT,EAAA0J,UAAUwJ,eAAexR,QAAQtJ,KAAKF,MAC/D,IAAIib,GAAS,EACT/a,KAAKuZ,oBAA2C,IAAtBsB,GAC1BjT,EAAA0J,UAAUwJ,eAAehf,KAAKkE,KAAKF,MACnCib,GAAS,IACD/a,KAAKuZ,mBAAqBsB,GAAoB,IACtDjT,EAAA0J,UAAUwJ,eAAehe,OAAO+d,EAAkB,GAClDE,GAAS,GAETA,GAAUJ,GAAa/S,EAAA0J,UAAU0J,oBAGrChb,KAAKqZ,MAAM4B,QAAQC,IACf,MAAMC,EAAKvT,EAAA0J,UAAU8J,cACf1f,EAAIyf,EAAGE,UAAU1d,GAAKA,EAAE2d,OAASJ,EAAGpb,MACtCob,EAAGK,eAAuB,IAAP7f,EACnByf,EAAGrf,KAAK,CAAE2b,MAAOmD,EAAK9a,KAAMwb,KAAMJ,EAAGpb,QAC7Bob,EAAGK,cAAgB7f,GAAK,GAChCyf,EAAGre,OAAOpB,EAAG,KAIrB,IAAK,IAAIA,EAAIkM,EAAA0J,UAAU8J,cAAcxf,OAAS,EAAGF,GAAK,EAAGA,IAAK,CAC1D,MAAMyf,EAAKvT,EAAA0J,UAAU8J,cAAc1f,GAC/Byf,EAAG1D,QAAUmD,EAAK9a,OACb8a,EAAKvB,MAAMmC,KAAK1W,GAAKA,EAAEhF,OAASqb,EAAGG,MAAQxW,EAAEyW,eAAe3T,EAAA0J,UAAU8J,cAActe,OAAOpB,EAAG,KAK/G6D,iBAAiBkc,EAAyBd,GAAc,GACpD3a,KAAKwZ,oBAAsBiC,IAAkB,EAC7C,MAAMZ,EAAmBjT,EAAA0J,UAAUoK,iBAAiBpS,QAAQtJ,KAAKF,MACjE,IAAIib,GAAS,EACT/a,KAAKwZ,sBAA6C,IAAtBqB,GAC5BjT,EAAA0J,UAAUoK,iBAAiB5f,KAAKkE,KAAKF,MACrCib,GAAS,IACD/a,KAAKwZ,qBAAuBqB,GAAoB,IACxDjT,EAAA0J,UAAUoK,iBAAiB5e,OAAO+d,EAAkB,GACpDE,GAAS,GAETA,GAAUJ,GAAa/S,EAAA0J,UAAUqK,sBAGzCpc,WAAWka,GAEP,GADAzZ,KAAKyZ,QAAUA,EACXzZ,KAAK4b,UAAW,CAChB,MAAMlgB,EAAIkM,EAAA0J,UAAUuK,YAAYvS,QAAQtJ,KAAKF,MACzCE,KAAKyZ,UAAkB,IAAP/d,EAAUkM,EAAA0J,UAAUuK,YAAY/f,KAAKkE,KAAKF,OACpDE,KAAKyZ,SAAW/d,GAAK,GAAGkM,EAAA0J,UAAUuK,YAAY/e,OAAOpB,EAAG,IAK1E6D,cACI,MAAO,CACHoY,MAAO3X,KAAKC,KACZH,KAAME,KAAKF,KACXQ,EAAGN,KAAKK,SAASC,EACjBC,EAAGP,KAAKK,SAASE,EACjBgS,MAAOvS,KAAKuS,MACZuJ,cAAe9b,KAAK4Z,yBACpBmC,qBAAsB/b,KAAKwZ,oBAC3BwC,mBAAoBhc,KAAKuZ,kBACzBF,MAAOH,EAAA+C,cAAcjc,KAAKqZ,OAC1BD,SAAUpZ,KAAKoZ,SACfrD,OAAQ/V,KAAK+V,OACbmG,OAAQlc,KAAKsZ,QACb1B,YAAa5X,KAAKJ,WAClBiY,cAAe7X,KAAKH,aACpBpC,KAAMuC,KAAKvC,KACX0e,aAAcnc,KAAKmZ,YACnBQ,WAAY3Z,KAAK2Z,WACjByC,SAAUpc,KAAKyZ,QACfpW,QAASgZ,KAAKC,UAAU,IAAItc,KAAKqD,WAGzC9D,SAASnE,GACL4E,KAAKuS,MAAQnX,EAAKmX,MAClBvS,KAAK4Z,yBAA2Bxe,EAAK0gB,cACrC9b,KAAKwZ,oBAAsBpe,EAAK2gB,qBAChC/b,KAAKuZ,kBAAoBne,EAAK4gB,mBAC9Bhc,KAAKqZ,MAAQH,EAAAqD,gBAAgBnhB,EAAKie,OAClCrZ,KAAKoZ,SAAWhe,EAAKge,SACrBpZ,KAAK+V,OAAS3a,EAAK2a,OACnB/V,KAAKsZ,QAAUle,EAAK8gB,OACpBlc,KAAKyZ,QAAUre,EAAKghB,SACpBpc,KAAKmZ,YAAc/d,EAAK+gB,aACpB/gB,EAAKue,aAAY3Z,KAAK2Z,WAAave,EAAKue,YACxCve,EAAKqC,OAAMuC,KAAKvC,KAAOrC,EAAKqC,MAC5BrC,EAAKiI,UAASrD,KAAKqD,QAAU,IAAIwW,IAAIwC,KAAKG,MAAMphB,EAAKiI,WAG7D9D,KAAKkB,GAGD,QAFsCiI,IAAlC1I,KAAK4Z,yBAAwCnZ,EAAImZ,yBAA2B5Z,KAAK4Z,yBAChFnZ,EAAImZ,yBAA2B,cAChC5Z,KAAK0Z,cAAe,CACpB,MAAM+C,EAAOzc,KAAK0B,iBAClBjB,EAAIwM,YAAc,MAClBxM,EAAIic,WAAWtd,EAAAgO,KAAKqP,EAAKE,QAAQrc,GAAK,EAAGlB,EAAAiO,KAAKoP,EAAKE,QAAQpc,GAAK,EAAGnB,EAAA4R,KAAKyL,EAAKzJ,GAAK,GAAI5T,EAAA4R,KAAKyL,EAAKvJ,GAAK,KAI7G3T,UAAUkB,GACN,IAAK,MAAM6a,KAAQtb,KAAKqZ,MAAO,CAC3B,GAAmB,IAAfiC,EAAKpd,OAA4B,IAAbod,EAAKsB,IAAW,OACxCnc,EAAIuM,YAEJ,MAAM6P,EAAMzd,EAAA0B,IAAId,KAAK0Q,UACfoM,EAAa1d,EAAA2d,KAAKzB,EAAKpd,MAAQod,EAAKsB,KAE1C,GAAiB,IAAbtB,EAAKsB,IAAWnc,EAAIE,UAAY2a,EAAK3O,WACpC,CACD,MAAMqQ,EAAWvc,EAAIwc,qBACjBJ,EAAIvc,EACJuc,EAAItc,EACJnB,EAAA2d,KAAKzB,EAAKpd,OACV2e,EAAIvc,EACJuc,EAAItc,EACJnB,EAAA2d,KAAKzB,EAAKpd,MAAQod,EAAKsB,MAErBM,EAAKrZ,EAAAQ,QAAUiX,EAAK3O,QAC1BlM,EAAIE,UAAYqc,EAChBA,EAASG,aAAa,EAAG7B,EAAK3O,QAC9BqQ,EAASG,aAAa,EAAGD,EAAGE,SAAS,GAAG9X,eAE5C,GAAKgW,EAAKC,mBAAkC7S,IAAlB4S,EAAK+B,SAI3B,IACI5c,EAAIoP,KAAKyL,EAAK+B,UAChB,MAAO/R,GACL7K,EAAIkP,IAAIkN,EAAIvc,EAAGuc,EAAItc,EAAGuc,EAAY,EAAG,EAAI5a,KAAK0N,IAC9CnP,EAAIoP,OACJR,QAAQoD,KAAKnH,QARjB7K,EAAIkP,IAAIkN,EAAIvc,EAAGuc,EAAItc,EAAGuc,EAAY,EAAG,EAAI5a,KAAK0N,IAC9CnP,EAAIoP,QAahBtQ,oBACI,MAAO,CACHO,KAAME,KAAKF,KACXuR,SAAUzJ,EAAA0J,UAAUC,MACpBC,OAAO,EACPC,OAAQzR,KAAKvC,KACbiU,SAAS,EACTC,QAAS,GACTC,MAAOzC,KAIf5P,UAAUgT,EAAe+K,GACrB,MAAMC,EAAWjR,EAAAO,aAAaC,SAAS9M,KAAKuS,OACtCiL,EAAWlR,EAAAO,aAAaC,SAASyF,QACtB7J,IAAb6U,QAAuC7U,IAAb8U,IAC9Bxd,KAAKuS,MAAQA,EAEbgL,EAASE,OAAO3gB,OAAOygB,EAASE,OAAOnU,QAAQtJ,MAAO,GACtDwd,EAASC,OAAO3hB,KAAKkE,MAErBud,EAASpK,YAAW,GACpBqK,EAASrK,YAAW,GAEhBmK,GAAM3V,EAAAf,OAAOqC,KAAK,qBAAsB,CAAEnJ,KAAME,KAAKF,KAAMyS,WAGnE2J,aACI,OAAOngB,OAAO2hB,OAAO1d,KAAKsZ,QAAQra,SAGtCM,QAAQoe,GAEJ,YADiBjV,IAAbiV,IAAwBA,EAAW/V,EAAA0J,UAAUqM,UAC1C/V,EAAA0J,UAAUC,OAASvR,KAAKsZ,QAAQjQ,SAASsU,IAAc/V,EAAA0J,UAAUsM,aAAehW,EAAA0J,UAAUuM,aAAaxU,SAASrJ,KAAKF,MAGhIP,SAASue,GACA9d,KAAKsZ,QAAQjQ,SAASyU,IAAQ9d,KAAKsZ,QAAQxd,KAAKgiB,GAGzDve,YAAYwe,EAAkBC,GAC1B,MAAMC,EAAaje,KAAKsZ,QAAQ+B,UAAU1d,GAAKA,IAAMogB,GACjDE,GAAc,EAAGje,KAAKsZ,QAAQxc,OAAOmhB,EAAY,EAAGD,GACnDhe,KAAKke,SAASF,GAGvBze,YAAYue,GACR,MAAMG,EAAaje,KAAKsZ,QAAQ+B,UAAU1d,GAAKA,IAAMmgB,GACrD9d,KAAKsZ,QAAQxc,OAAOmhB,EAAY,IArSxC9gB,EAAAmC,6CCbAvC,EAAAgB,EAAAgF,GAAA,IAAAob,EAAAphB,EAAA,QAAAqhB,EAAArhB,EAAA2B,EAAAyf,GAAA,QAAAjb,KAAAib,EAAA,YAAAjb,GAAA,SAAA1E,GAAAzB,EAAAS,EAAAuF,EAAAvE,EAAA,kBAAA2f,EAAA3f,KAAA,CAAA0E,GAAkXH,EAAA,WAAAqb,EAAG,qCCArX,IAAAxK,EAAA,WAA0B,IAAAC,EAAA7T,KAAa8T,EAAAD,EAAAE,eAA0BC,EAAAH,EAAAI,MAAAD,IAAAF,EAAwB,cAAAD,EAAAwK,KAAArK,EAAA,SAAuCE,MAAA,CAAO7C,QAAAwC,EAAAxC,QAAA8C,MAAA,GAAmCC,GAAA,CAAKC,MAAA,SAAAC,GAAyBT,EAAAxC,SAAA,IAAqBkD,YAAAV,EAAAW,GAAA,EAAsBhW,IAAA,SAAAiW,GAAA,SAAAnX,GAA4B,OAAA0W,EAAA,OAAiBU,YAAA,eAAAR,MAAA,CAAkCS,UAAA,QAAmBP,GAAA,CAAKQ,UAAAtX,EAAAuX,UAAAC,QAAAxX,EAAAyX,UAA6C,CAAAf,EAAA,QAAaI,GAAA,CAAI1J,MAAA,SAAA4J,GAAyBT,EAAAnP,MAAAuQ,MAAAqJ,YAA2B,CAAAtK,EAAA,KAAUU,YAAA,oBAAAQ,YAAA,CAA6CqJ,YAAA,YAAoBvK,EAAA,SAAgBoB,WAAA,EAAa3X,KAAA,QAAA4X,QAAA,UAAAnX,MAAA2V,EAAAwK,KAAA,MAAA/I,WAAA,eAA8EC,IAAA,QAAAE,SAAA,CAAwBvX,MAAA2V,EAAAwK,KAAA,OAAyBjK,GAAA,CAAKoK,OAAA3K,EAAA4K,WAAA/I,MAAA,SAAApB,GAAiDA,EAAAlL,OAAAuM,WAAsC9B,EAAA6K,KAAA7K,EAAAwK,KAAA,QAAA/J,EAAAlL,OAAAlL,WAAmD8V,EAAA,OAAYU,YAAA,eAAAN,GAAA,CAA+B1J,MAAA,SAAA4J,GAAyBT,EAAAxC,SAAA,KAAsB,CAAA2C,EAAA,KAAUU,YAAA,iCAA4C,CAAAV,EAAA,OAAYU,YAAA,cAAyB,CAAAV,EAAA,YAAiBoB,WAAA,EAAa3X,KAAA,QAAA4X,QAAA,UAAAnX,MAAA2V,EAAAwK,KAAA,KAAA/I,WAAA,cAA4EC,IAAA,WAAAe,MAAA,CAAyBxD,OAAAe,EAAA8K,cAA2BlJ,SAAA,CAAYvX,MAAA2V,EAAAwK,KAAA,MAAwBjK,GAAA,CAAKoK,OAAA3K,EAAA4K,WAAA/I,MAAA,SAAApB,GAAiDA,EAAAlL,OAAAuM,WAAsC9B,EAAA6K,KAAA7K,EAAAwK,KAAA,OAAA/J,EAAAlL,OAAAlL,aAAkD8V,EAAA,OAAcU,YAAA,gBAA2B,CAAAV,EAAA,UAAeI,GAAA,CAAI1J,MAAAmJ,EAAA+K,aAAwB,CAAA5K,EAAA,KAAUU,YAAA,qBAA+Bb,EAAAmB,GAAA,uBAAAnB,EAAAsC,MACp8Ce,EAAA,GCDAna,EAAAS,EAAAuF,EAAA,sBAAA6Q,IAAA7W,EAAAS,EAAAuF,EAAA,sBAAAmU,yCCAA,IAAA2H,EAAA9hB,EAAA,QAAA+hB,EAAA/hB,EAAA2B,EAAAmgB,GAAqgBC,EAAG,wGCKxgB7a,EAAAH,EAAAC,gBAAAhH,EAAA,SAEAgiB,EAAAjb,EAAAC,gBAAAhH,EAAA,SACAiiB,EAAAlb,EAAAC,gBAAAhH,EAAA,SAGA8K,EAAA9K,EAAA,QACA4K,EAAA5K,EAAA,QACA8U,EAAA9U,EAAA,QAEAuP,EAAAvP,EAAA,QACA+U,EAAA/U,EAAA,QACA6K,EAAA7K,EAAA,QACAkiB,EAAAliB,EAAA,QACAqC,EAAArC,EAAA,QACAmiB,EAAAniB,EAAA,QAEA,IAAYoiB,GAAZ,SAAYA,GACRA,IAAA,kBACAA,IAAA,sBACAA,IAAA,kBACAA,IAAA,iCAJJ,CAAYA,EAAAhiB,EAAAgiB,mBAAAhiB,EAAAgiB,iBAAgB,KAO5B,MAAMxV,EAAQ,IAAIkI,EAAAM,aAAa,KAAO,KAOtC,IAAqBiN,EAArB,cAAwCJ,EAAA3a,QALxC9E,kCAMIS,KAAAvC,KAAO,SACPuC,KAAAqf,iBAAkB,EAClBrf,KAAAsf,QAAS,EAETtf,KAAA5B,KAAO+gB,EAAiBI,KACxBvf,KAAA4B,YAAc,EACd5B,KAAAwf,cAAe,EAGfxf,KAAAyf,QAAU,IAAI5N,EAAA6N,IAAgB,IAAI7N,EAAAe,WAAW,EAAG,GAAI,IAAIf,EAAA8N,OAAO,EAAG,IAClE3f,KAAA4f,oBAAsBjW,EACtB3J,KAAA6f,gBAAkB,IAAI/N,EAAAQ,KAAK3I,EAAO,EAAG,GACrCpK,UACIS,KAAK6f,gBAAgBjG,yBAA2B,cAEpDra,YAAYiK,GACR,MAAM+I,EAAQjG,EAAAO,aAAaC,WAC3B,QAAcpE,IAAV6J,EAEA,YADAlD,QAAQC,IAAI,oBAIXtP,KAAK6f,gBAAgB3D,OAAO7S,SAASzB,EAAA0J,UAAUqM,WAChD3d,KAAK6f,gBAAgB3B,SAAStW,EAAA0J,UAAUqM,UAG5C,MAAMmC,EAAQZ,EAAAa,SAASvW,GACjBwW,EAAc5gB,EAAAuT,IAAImN,GAExB,IAEIG,EAFAC,GAAM,EAILD,EADA1N,EAAM4N,UAAUvkB,OACC2W,EAAMkL,OAAO2C,OAAO7N,EAAM4N,WADF5N,EAAMkL,OAEpD,IAAK,IAAI/hB,EAAIukB,EAAerkB,OAAS,EAAGF,GAAK,EAAGA,IAAK,CACjD,MAAM+b,EAAQwI,EAAevkB,GAK7B,GAHAsE,KAAK4B,YAAc6V,EAAM4I,cAAcL,EAAa5gB,EAAAkhB,KAAK,IAGrDtgB,KAAK4B,aAAe,EAAG,CACvB2Q,EAAM4N,UAAY,CAAC1I,GACnB5P,EAAA0Y,OAAsB,iBAAiB9I,MAAQA,EAC/CzX,KAAK5B,KAAO+gB,EAAiBqB,OAC7BjO,EAAMY,YAAW,GACjB+M,GAAM,EACN,MAGG,GAAIzI,EAAMtN,SAAS6V,GAAc,CACpC,MAAMG,EAAY1I,GAC0B,IAAxClF,EAAM4N,UAAU7W,QAAQ6W,KACxB5N,EAAM4N,UAAY,CAACA,GACnBtY,EAAA0Y,OAAsB,iBAAiB9I,MAAQ0I,GAEnDngB,KAAK5B,KAAO+gB,EAAiBsB,KAC7B,MAAMC,EAAgBthB,EAAA0B,IAAIqf,EAAU9f,UACpCL,KAAKyf,QAAU,IAAI5N,EAAA6N,IAAgBgB,EAAeZ,EAAMxF,SAASoG,IACjEnO,EAAMY,YAAW,GACjB+M,GAAM,EACN,OAKR,IAAKA,EAAK,CACNlgB,KAAK5B,KAAO+gB,EAAiBwB,YAC7B,IAAK,MAAMR,KAAa5N,EAAM4N,UAAWtY,EAAA0Y,OAAsB,iBAAiB9I,MAAQ0I,EAExFngB,KAAK4f,oBAAsBI,EAE3BhgB,KAAK6f,gBAAgBxf,SAAWL,KAAK4f,oBACrC5f,KAAK6f,gBAAgB7M,EAAI,EACzBhT,KAAK6f,gBAAgB3M,EAAI,EAEzBX,EAAM4N,UAAY,CAACngB,KAAK6f,iBACxBtN,EAAMY,YAAW,GAErBnT,KAAKsf,QAAS,EAElB/f,YAAYiK,GAER,MAAM+I,EAAQjG,EAAAO,aAAaC,WAC3B,QAAcpE,IAAV6J,EAEA,YADAlD,QAAQC,IAAI,oBAGhB,MAAMwQ,EAAQZ,EAAAa,SAASvW,GACjBwW,EAAc5gB,EAAAuT,IAAImN,GAGxB,GAFA9f,KAAKwf,cAAe,EAEhBxf,KAAK5B,OAAS+gB,EAAiBwB,YAAa,CAE5C,MAAMC,EAAWZ,EAEjBhgB,KAAK6f,gBAAgB7M,EAAI9Q,KAAKgY,IAAI0G,EAAStgB,EAAIN,KAAK4f,oBAAoBtf,GACxEN,KAAK6f,gBAAgB3M,EAAIhR,KAAKgY,IAAI0G,EAASrgB,EAAIP,KAAK4f,oBAAoBrf,GACxEP,KAAK6f,gBAAgBxf,SAAW,IAAIwR,EAAAM,YAChCjQ,KAAKkJ,IAAIpL,KAAK4f,oBAAoBtf,EAAGsgB,EAAStgB,GAC9C4B,KAAKkJ,IAAIpL,KAAK4f,oBAAoBrf,EAAGqgB,EAASrgB,IAElDgS,EAAMY,YAAW,QACd,GAAIZ,EAAM4N,UAAUvkB,OAAQ,CAC/B,MAAMilB,EAAKzhB,EAAA0B,IAAIyR,EAAM4N,UAAU5N,EAAM4N,UAAUvkB,OAAS,GAAGyE,UACrD6R,EAAS2O,EAAGzW,IAAIpK,KAAKyf,QAAQqB,WACnC,IAAI/G,EAAQ+F,EAAMxF,SAASpI,GAAQsI,SAAS,EAAI5S,EAAA0J,UAAU2B,YAC1D,MAAM8N,EAAUhH,EAChB,GAAI/Z,KAAK5B,OAAS+gB,EAAiBsB,KAAM,CAErC,GAAmB,WAAflO,EAAM9U,QAAuB+L,EAAMC,WAAY7B,EAAA0J,UAAUC,OACzD,IAAK,MAAM3I,KAAO2J,EAAM4N,UACfvX,EAAIgT,WACLhT,EAAI9I,OAASE,KAAK6f,gBAAgB/f,OACtCia,EAAQkF,EAAA+B,eAAejH,EAAOnR,GAC1BmR,IAAUgH,IAAS/gB,KAAKwf,cAAe,IAInD,IAAK,MAAM5W,KAAO2J,EAAM4N,UACfvX,EAAIgT,YACThT,EAAIvI,SAAWuI,EAAIvI,SAAS+J,IAAI2P,GAC5BnR,IAAQ5I,KAAK6f,kBACTjX,EAAI2Q,mBAAmB3R,EAAA0J,UAAU0J,mBAAkB,GACvDrT,EAAAf,OAAOqC,KAAK,eAAgB,CAAEwO,MAAO7O,EAAIqY,SAAUC,QAAQ,EAAMC,WAAW,MAGpF5O,EAAMY,YAAW,QACd,GAAInT,KAAK5B,OAAS+gB,EAAiBqB,OACtC,IAAK,MAAM5X,KAAO2J,EAAM4N,UACfvX,EAAIgT,YACThT,EAAIwY,OAAOphB,KAAK4B,YAAake,GACzBlX,IAAQ5I,KAAK6f,kBACTjX,EAAI2Q,mBAAmB3R,EAAA0J,UAAU0J,mBAAkB,GACvDrT,EAAAf,OAAOqC,KAAK,eAAgB,CAAEwO,MAAO7O,EAAIqY,SAAUC,QAAQ,EAAMC,WAAW,KAEhF5O,EAAMY,YAAW,GACjBnT,KAAKqhB,aAAa9O,EAAOyN,SAG7BhgB,KAAKqhB,aAAa9O,EAAOyN,QAG7BxV,SAAS8W,KAAKhL,MAAMiL,OAAS,UAGrChiB,UAAU+L,GACN,IAAKtL,KAAKsf,OAAQ,OAClB,QAAgC5W,IAA5B4D,EAAAO,aAAaC,WAEb,YADAuC,QAAQC,IAAI,oBAGhB,MAAMiD,EAAQjG,EAAAO,aAAaC,WAEvB9M,KAAK5B,OAAS+gB,EAAiBwB,aAC/BpO,EAAMiP,iBACNjP,EAAMkL,OAAOxC,QAAQxD,IACjB,IAAKA,EAAMmE,UAAW,OACtB,GAAInE,IAAUzX,KAAK6f,gBAAiB,OACpC,MAAMpD,EAAOhF,EAAM/V,iBACd+V,EAAMmE,WAEP5b,KAAK6f,gBAAiBxf,SAASC,GAAKmc,EAAKgF,SAASnhB,GAClDN,KAAK6f,gBAAiBxf,SAASC,EAAIN,KAAK6f,gBAAiB7M,GAAKyJ,EAAKE,QAAQrc,GAC3EN,KAAK6f,gBAAiBxf,SAASE,GAAKkc,EAAKiF,QAAQnhB,GACjDP,KAAK6f,gBAAiBxf,SAASE,EAAIP,KAAK6f,gBAAiB3M,GAAKuJ,EAAKE,QAAQpc,GAE3EgS,EAAM4N,UAAUrkB,KAAK2b,KAMzBlF,EAAM4N,UAAUvkB,OAAS,GAAG2W,EAAM4N,UAAUrkB,KAAKkE,KAAK6f,iBAE1DtN,EAAMY,YAAW,IACVZ,EAAM4N,UAAUvkB,QACvB2W,EAAM4N,UAAUlF,QAAQrS,IACpB,GAAKA,EAAIgT,UAAT,CACA,GAAI5b,KAAK5B,OAAS+gB,EAAiBsB,KAAM,CACrC,GACIzgB,KAAKyf,QAAQvN,OAAQ5R,IAAMlB,EAAAgO,KAAKxE,EAAIvI,SAASC,IAC7CN,KAAKyf,QAAQvN,OAAQ3R,IAAMnB,EAAAiO,KAAKzE,EAAIvI,SAASE,GAE7C,QAEAqH,EAAA0J,UAAUqQ,SAAYrW,EAAEsW,QAAW5hB,KAAKwf,cACxC5W,EAAIiZ,aAGJjZ,IAAQ5I,KAAK6f,kBACTjX,EAAI2Q,mBAAmB3R,EAAA0J,UAAU0J,oBACjCpS,EAAI4Q,qBAAqB5R,EAAA0J,UAAUqK,sBACvChU,EAAAf,OAAOqC,KAAK,eAAgB,CAAEwO,MAAO7O,EAAIqY,SAAUC,QAAQ,EAAMC,WAAW,KAEhF5O,EAAMY,YAAW,GAEjBnT,KAAK5B,OAAS+gB,EAAiBqB,SAC3B5Y,EAAA0J,UAAUqQ,UAAYrW,EAAEsW,QACxBhZ,EAAIkZ,eAEJlZ,IAAQ5I,KAAK6f,kBACTjX,EAAI2Q,mBAAmB3R,EAAA0J,UAAU0J,oBACjCpS,EAAI4Q,qBAAqB5R,EAAA0J,UAAUqK,sBACvChU,EAAAf,OAAOqC,KAAK,eAAgB,CAAEwO,MAAO7O,EAAIqY,SAAUC,QAAQ,EAAMC,WAAW,KAEhF5O,EAAMY,YAAW,OAI7BnT,KAAK5B,KAAO+gB,EAAiBI,KAC7Bvf,KAAKsf,QAAS,EAElB/f,cAAciK,GACV,QAAgCd,IAA5B4D,EAAAO,aAAaC,WAEb,YADAuC,QAAQC,IAAI,oBAGhB,MAAMiD,EAAQjG,EAAAO,aAAaC,WACrBgT,EAAQZ,EAAAa,SAASvW,GACjBwW,EAAc5gB,EAAAuT,IAAImN,GAExB,IAAK,MAAMrI,KAASlF,EAAM4N,UACtB,GAAI1I,EAAMtN,SAAS6V,IAAgBvI,IAAUzX,KAAK6f,gBAK9C,OAJAtN,EAAM4N,UAAY,CAAC1I,GACnB5P,EAAA0Y,OAAsB,iBAAiB9I,MAAQA,EAC/ClF,EAAMY,YAAW,QACXnT,KAAK+hB,QAAQrd,MAAMsd,aAAcC,KAAKzY,EAAOiO,GAIrDzX,KAAK0E,MAAMwd,cAAeD,KAAKzY,GAEzCjK,aAAagT,EAAcyN,GACvB,IAAK,MAAMpX,KAAO2J,EAAM4N,UAAW,CAC/B,MAAMve,EAAcgH,EAAIyX,cAAcL,EAAa5gB,EAAAkhB,KAAK,IACxD,GAAI1e,EAAc,EAAG4I,SAAS8W,KAAKhL,MAAMiL,OAAS,cAC7C,CACD,IAAI5hB,EAAQiJ,EAAIuZ,oBAAoBvgB,GAAajC,QAC7CA,EAAQ,IAAGA,GAAS,KACxB,MAAMnC,EAAI,MACNmC,GAAS,IAAMnC,GAAKmC,EAAQnC,GAAMmC,GAAS,IAAMnC,GAAKmC,EAAQ,IAAMnC,KACpEgN,SAAS8W,KAAKhL,MAAMiL,OAAS,cAC5B5hB,GAAS,GAAKnC,GAAKmC,EAAQ,IAAMnC,GAAOmC,GAAS,IAAMnC,GAAKmC,EAAQ,IAAMnC,KAC3EgN,SAAS8W,KAAKhL,MAAMiL,OAAS,cAC5B5hB,GAASnC,GAAKmC,EAAQ,GAAKnC,GAAOmC,GAAS,IAAMnC,GAAKmC,EAAQ,IAAMnC,KACrEgN,SAAS8W,KAAKhL,MAAMiL,OAAS,gBAC5B5hB,GAAS,GAAKnC,GAAKmC,EAAQ,IAAMnC,GAAOmC,GAAS,IAAMnC,GAAKmC,EAAQ,IAAMnC,KAC3EgN,SAAS8W,KAAKhL,MAAMiL,OAAS,mBAxP5BnC,EAAUtb,EAAAiC,WAAA,CAL9B9B,EAAAI,QAAU,CACP8B,WAAY,CACRic,cAAArD,EAAA1a,YAGa+a,mGCpCrB,MAAAvN,EAAA9U,EAAA,QACAuP,EAAAvP,EAAA,QAEA6K,EAAA7K,EAAA,QACAslB,EAAAtlB,EAAA,QACAwP,EAAAxP,EAAA,QACAyP,EAAAzP,EAAA,QAMA,SAAgBikB,EAAejH,EAAenR,EAAY0Z,GACtD,GAAgB,IAAZvI,EAAMzZ,GAAuB,IAAZyZ,EAAMxZ,EAAS,OAAOwZ,EAC3C,GAA6B,QAAzBnS,EAAA0J,UAAUiR,WAAsB,MACnB7Z,IAAT4Z,IAAoBA,EAAO,IAC/B,MAAME,EAAY5Z,EAAIlH,iBAChB+gB,EAAaD,EAAUE,OAAO3I,GACpC,IAAI4I,GAAS,EACb,IAAK,MAAMC,KAAmBhb,EAAA0J,UAAUoK,iBAAkB,CACtD,GAAI4G,EAAKjZ,SAASuZ,GAAkB,SACpC,MAAMC,EAAUvW,EAAAO,aAAaiW,QAAQhlB,IAAI8kB,GACnCG,EAAcF,EAAQnhB,iBAC5B,IAAIshB,EAAQD,EAAYE,oBAAoBR,GAC5C,IAAKO,EAAO,CAER,MAAME,EAAMrR,EAAA6N,IAAIyD,WAAWX,EAAU7F,QAAQvS,IAAI2P,EAAMU,aAAcgI,EAAW9F,SAC1EyG,EAASF,EAAIpC,UAAUuC,UACvBC,EAAgB,CAACF,EAAO9iB,EAAI,EAAG8iB,EAAO7iB,EAAI,GAChDyiB,EAAQD,EAAYQ,WAAWL,EAAKE,EAAQE,GAAepD,IAG/D,GAAI8C,EAAO,CACP,MAAMQ,EAAUT,EAAYrS,SACtB+S,EAAUjB,EAAU9R,SAEpBlT,EAAIimB,EAAQnJ,SAASkJ,GACrBE,EAAK,IAAI7R,EAAA8N,OAAO,EAAG,GACnBgE,EAAK,IAAI9R,EAAA8N,OAAO,EAAG,GACzB,IAAIiE,EAAKpmB,EAAEqmB,IAAIH,GACXI,EAAKtmB,EAAEqmB,IAAIF,GACXC,EAAKb,EAAY/P,EAAI,IAAG4Q,EAAKb,EAAY/P,EAAI,GAC7C4Q,GAAMb,EAAY/P,EAAI,IAAG4Q,GAAMb,EAAY/P,EAAI,GAC/C8Q,EAAKf,EAAY7P,EAAI,IAAG4Q,EAAKf,EAAY7P,EAAI,GAC7C4Q,GAAMf,EAAY7P,EAAI,IAAG4Q,GAAMf,EAAY7P,EAAI,GAGnD,MAAMrU,EAAI2kB,EAAQpZ,IAAIsZ,EAAGlJ,SAASoJ,IAAKxZ,IAAIuZ,EAAGnJ,SAASsJ,IAEnDjlB,EAAEyB,IAAMkiB,EAAU7F,QAAQrc,GAAKzB,EAAEyB,IAAMkiB,EAAUf,SAASnhB,EAAGyZ,EAAQ,IAAIlI,EAAA8N,OAAO,EAAG5F,EAAMxZ,GACpF1B,EAAE0B,IAAMiiB,EAAU7F,QAAQpc,GAAK1B,EAAE0B,IAAMiiB,EAAUd,QAAQnhB,EAAGwZ,EAAQ,IAAIlI,EAAA8N,OAAO5F,EAAMzZ,EAAG,GAEzFzB,EAAEyB,EAAIkiB,EAAU7F,QAAQrc,EAAGyZ,EAAQ,IAAIlI,EAAA8N,OAAO9gB,EAAEyB,EAAIkiB,EAAU7F,QAAQrc,EAAGyZ,EAAMxZ,GAC1E1B,EAAEyB,EAAIkiB,EAAUf,SAASnhB,EAAGyZ,EAAQ,IAAIlI,EAAA8N,OAAO9gB,EAAEyB,EAAIkiB,EAAUf,SAASnhB,EAAGyZ,EAAMxZ,GACjF1B,EAAE0B,EAAIiiB,EAAU7F,QAAQpc,EAAGwZ,EAAQ,IAAIlI,EAAA8N,OAAO5F,EAAMzZ,EAAGzB,EAAE0B,EAAIiiB,EAAU7F,QAAQpc,GAC/E1B,EAAE0B,EAAIiiB,EAAUd,QAAQnhB,IAAGwZ,EAAQ,IAAIlI,EAAA8N,OAAO5F,EAAMzZ,EAAGzB,EAAE0B,EAAIiiB,EAAUd,QAAQnhB,IAE5FoiB,GAAS,EACTL,EAAKxmB,KAAK8mB,GACV,OAIR,OADID,IAAQ5I,EAAQiH,EAAejH,EAAOnR,EAAK0Z,IACxCvI,EACJ,CACH,MAAMgK,EAAiB1B,EAAA2B,OAAOC,SAASC,OAAOtb,EAAI8H,SAASyT,UAAW,MAAMtH,IAC5E,IAAK,MAAMtb,KAASqH,EAAIxI,OAAQ,CAC5B,MAAMgkB,EAAK/B,EAAA2B,OAAOC,SAASC,OAAO3iB,EAAOwiB,GACnCM,EAAWD,EAAGvH,IACH,OAAbwH,IACJtK,EAAQuK,EAAc/iB,EAAO8iB,EAAUtK,IAE3C,OAAOA,GAIf,SAASuK,EAAc/iB,EAAc8iB,EAAoBtK,EAAewK,EAAmB,IACvF,MAAM1lB,EAAI,IAAIgT,EAAAM,YAAY5Q,EAAM,GAAIA,EAAM,IACpCijB,EAAW3lB,EAAEuL,IAAI2P,GAAOoK,UAC9B,GAAIE,EAASla,SAASqa,GAAW,OAAOzK,EACxCwK,EAAKzoB,KAAKuoB,GAEV,IAAK,IAAI3oB,EAAI,EAAGA,EAAI,EAAGA,IAAK,CACxB,GAAI6oB,EAAKlb,SAASgb,EAASI,WAAW/oB,IAAM,SAE5C,MAAMgpB,EAAML,EAASvV,SAAStC,EAAA0C,GAAGxT,IAAK6F,MAChCojB,EAAON,EAASvV,SAAStC,EAAAuC,IAAIrT,IAAK6F,MAClCqjB,EAAKpY,EAAAqY,aAAatjB,EAAOijB,EAAUE,EAAKC,GAE9C,GAAW,OAAPC,EAAa,SAEjB,IAAKP,EAASS,cAAcppB,GAAI,OAAO4oB,EAAc/iB,EAAO8iB,EAASI,WAAW/oB,GAAKqe,EAAOwK,GAE5F,GAAIK,EAAG,KAAO/lB,EAAEyB,GAAKskB,EAAG,KAAO/lB,EAAE0B,EAAG,CACrBiM,EAAAuY,YAAX,MACMpnB,EAAI6O,EAAAuY,YAAYxjB,EAAOijB,EAAUG,GAEvC,GAAIhnB,IAAM4O,EAAAyY,KAAKC,UAAW,SAC1B,GAAItnB,IAAM4O,EAAAyY,KAAKE,KAAM,SAEzB,IAAIC,EAAW,IAAItT,EAAAM,YAAYyS,EAAG,GAAIA,EAAG,IAAItK,SAASzb,GAAG2b,SAAS,IAC9D2K,EAASvpB,SAAW,IAAGupB,EAAW,IAAItT,EAAA8N,OAAO,EAAG,IAChDwF,EAASvpB,SAAWme,EAAMne,WAAUme,EAAQoL,GAEpD,OAAOpL,EA5FX5c,EAAA6jB,sDCZA,IAAAoE,EAAAroB,EAAA,QAAAsoB,EAAAtoB,EAAA2B,EAAA0mB,GAAkfC,EAAG,uCCArftoB,EAAAgB,EAAAgF,GAAA,IAAAuiB,EAAAvoB,EAAA,QAAAwoB,EAAAxoB,EAAA2B,EAAA4mB,GAAA,QAAApiB,KAAAoiB,EAAA,YAAApiB,GAAA,SAAA1E,GAAAzB,EAAAS,EAAAuF,EAAAvE,EAAA,kBAAA8mB,EAAA9mB,KAAA,CAAA0E,GAAmWH,EAAA,WAAAwiB,EAAG,uCCAtWxoB,EAAAgB,EAAAgF,GAAA,IAAAyiB,EAAAzoB,EAAA,QAAA0oB,EAAA1oB,EAAA2B,EAAA8mB,GAAA,QAAAtiB,KAAAsiB,EAAA,YAAAtiB,GAAA,SAAA1E,GAAAzB,EAAAS,EAAAuF,EAAAvE,EAAA,kBAAAgnB,EAAAhnB,KAAA,CAAA0E,GAAkXH,EAAA,WAAA0iB,EAAG,wFCArX,MAAA9d,EAAA5K,EAAA,QACA6K,EAAA7K,EAAA,QAEA,SAAgB2oB,IACZ/d,EAAAf,OAAOqC,KAAK,qBAAsB,CAC9B0c,gBAAiB,CACbC,KAAMhe,EAAA0J,UAAUsU,KAChBC,KAAMje,EAAA0J,UAAUuU,KAChB5S,WAAYrL,EAAA0J,UAAU2B,cALlC9V,EAAAuoB,4HCsBA1hB,EAAAF,EAAAC,gBAAAhH,EAAA,SACAkH,EAAAH,EAAAC,gBAAAhH,EAAA,SACAoH,EAAApH,EAAA,QAGA8K,EAAA9K,EAAA,QAKA,IAAqB+oB,EAArB,cAAuC9hB,EAAAK,QAHvC9E,kCAMIS,KAAA+lB,UAAY,KACZ9d,cACI,OAAOlM,OAAOiqB,KAAKhmB,KAAKwY,OACnByN,OAAOC,IAAO,CAAC,WAAW7c,SAAS6c,IACnCC,KAAKte,EAAAue,UAGdje,YACI,OAAInI,KAAKwY,MAAM6N,QACUrmB,KAAKwY,MAAM6N,QAC3BjG,SACA+F,KAAK,CAACrhB,EAAGwhB,IAAOxhB,EAAErH,KAAK8oB,cAAgBD,EAAE7oB,KAAK8oB,cAAgB,GAAK,GACrE,GAGXhnB,OAAOiK,GAEH,IAAK,IAAI9N,EAAI,EAAGA,EAAI8N,EAAMJ,OAAOod,SAAS5qB,OAAQF,IAAK,CACnD,MAAMwqB,EAAkB1c,EAAMJ,OAAOod,SAAS9qB,GAC9CwqB,EAAG5P,MAAMhS,QAA+B,KAArB4hB,EAAG5P,MAAMhS,QAAiB,QAAU,IAI/D/E,UAAUiK,EAAkBid,GAExB,GADAzmB,KAAK+lB,UAAY,KACH,OAAVvc,GAAyC,OAAvBA,EAAMO,aAAuB,OACnD,MAAM0O,EAAoBjP,EAAMJ,OAAQsd,cAAc,YACtDld,EAAMO,aAAa4c,aAAalO,EAAK,EAAG,GACxCjP,EAAMO,aAAaC,QAAQ,aAAcyc,KA9BrC3iB,EAAAiC,WAAA,CAAP5B,EAAA6B,oCADgB8f,EAAShiB,EAAAiC,WAAA,CAH7B9B,EAAAI,QAAU,CACP5G,KAAM,gBAEWqoB,oDCnCrB,IAAAlS,EAAA,WAA0B,IAAAC,EAAA7T,KAAa8T,EAAAD,EAAAE,eAA0BC,EAAAH,EAAAI,MAAAD,IAAAF,EAAwB,OAAAD,EAAA,QAAAG,EAAA,OAA+BU,YAAA,cAAA4B,MAAA,CAAkC/R,KAAAsP,EAAAtP,KAAAC,IAAAqP,EAAArP,KAA2B0P,MAAA,CAAS0S,SAAA,MAAgBxS,GAAA,CAAK0C,KAAA,SAAAxC,GAAwBT,EAAAtO,MAAA,YAAqB,CAAAyO,EAAA,MAAAH,EAAAgT,GAAA,iBAAAhT,EAAAsC,MAChQe,EAAA,GCDAna,EAAAS,EAAAuF,EAAA,sBAAA6Q,IAAA7W,EAAAS,EAAAuF,EAAA,sBAAAmU,4GCCA4P,EAAA/pB,EAAA,QAGA6K,EAAA7K,EAAA,QAWA,IAAMgqB,EAAN,cAAyBD,EAAAE,WADzBznB,kCAEIS,KAAAuI,MAAQ,EACRvI,KAAAmI,MAAkB,GAClBnI,KAAAiI,QAAoB,GACpBjI,KAAAqI,MAA4B,IAAIwR,IAChC7Z,KAAAoI,SAAqB,GAGrB7I,QACIS,KAAKiI,QAAU,GACfjI,KAAKmI,MAAQ,GAIjB5I,gBACI8P,QAAQC,IAAI,WACZtP,KAAKoI,SAAW,GAIpB7I,QAAQgJ,GACJvI,KAAKuI,KAAOA,IAbhBzE,EAAAiC,WAAA,CADC+gB,EAAAG,oCAODnjB,EAAAiC,WAAA,CADC+gB,EAAAG,4CAODnjB,EAAAiC,WAAA,CADC+gB,EAAAG,sCAnBCF,EAAUjjB,EAAAiC,WAAA,CADf+gB,EAAAI,OAAO,CAAEC,SAAS,EAAMC,MAAOxf,EAAAyf,UAAW5pB,KAAM,SAAU6pB,YAAY,KACjEP,GAyBO5pB,EAAA+K,WAAa4e,EAAAS,UAAUR,iECxCpChqB,EAAAgB,EAAAgF,GAAA,IAAAykB,EAAAzqB,EAAA,QAAA0qB,EAAA1qB,EAAA2B,EAAA8oB,GAAA,QAAAtkB,KAAAskB,EAAA,YAAAtkB,GAAA,SAAA1E,GAAAzB,EAAAS,EAAAuF,EAAAvE,EAAA,kBAAAgpB,EAAAhpB,KAAA,CAAA0E,GAAwWH,EAAA,WAAA0kB,EAAG,0GC0B3WzjB,EAAAF,EAAAC,gBAAAhH,EAAA,SACAkH,EAAAH,EAAAC,gBAAAhH,EAAA,SAEA2qB,EAAA5jB,EAAAC,gBAAAhH,EAAA,SAGA8K,EAAA9K,EAAA,QACA4qB,EAAA5qB,EAAA,QACAuP,EAAAvP,EAAA,QAEA6K,EAAA7K,EAAA,QAOA,IAAqB6qB,EAArB,cAA0C5jB,EAAAK,QAL1C9E,kCAMIS,KAAAqR,SAAU,EACVrR,KAAAM,EAAI,EACJN,KAAAO,EAAI,EACJP,KAAAyX,MAAsB,KACtBoQ,kBACI,MAAMtV,EAAQjG,EAAAO,aAAaC,WAC3B,YAAiBpE,IAAV6J,EAAsB,GAAKA,EAAM9U,KAE5C8B,KAAKiK,EAAmBiO,GACpBzX,KAAKqR,SAAU,EACfrR,KAAKM,EAAIkJ,EAAMse,MACf9nB,KAAKO,EAAIiJ,EAAMue,MACf/nB,KAAKyX,MAAQA,EACbzX,KAAKiF,UAAU,IAAMjF,KAAKkF,UAAU,GAAGC,IAAIC,SAE/C7F,QACIS,KAAKqR,SAAU,EACfrR,KAAKyX,MAAQ,KAEjBlY,YACI,OAAO+M,EAAAO,aAAamb,OAAO/B,OAAO5oB,GAAKA,EAAE4qB,aAAergB,EAAA0J,UAAUC,OAASlU,EAAE6qB,iBAEjF3oB,iBACI,OAAO+M,EAAAO,aAAaC,WAExBvN,oBACI,OAAmB,OAAfS,KAAKyX,MAAuB,GACzB5P,EAAA0Y,OAAmB,cAAcpW,SAASnK,KAAKyX,MAAM3X,MAAQ,OAAS,MAEjFP,SAASie,GACc,OAAfxd,KAAKyX,QACTzX,KAAKyX,MAAM0Q,UAAU3K,GAAU,GAC/Bxd,KAAKqU,SAET9U,aACI,GAAmB,OAAfS,KAAKyX,MAAgB,OACzB,MAAMlF,EAAQvS,KAAKooB,iBACnB7V,EAAM8V,eAAeroB,KAAKyX,MAAO,GAAG,GACpCzX,KAAKqU,QAET9U,cACI,GAAmB,OAAfS,KAAKyX,MAAgB,OACzB,MAAMlF,EAAQvS,KAAKooB,iBACnB7V,EAAM8V,eAAeroB,KAAKyX,MAAOlF,EAAMkL,OAAO7hB,OAAS,GAAG,GAC1DoE,KAAKqU,QAET9U,gBACI,GAAmB,OAAfS,KAAKyX,MAAgB,OACzB,MAAM6Q,EAAazgB,EAAA0Y,OAAmB,cACjC+H,EAAWne,SAASnK,KAAKyX,MAAM3X,OAAOwoB,EAAWC,cAAcvoB,KAAKyX,MAAM+Q,qBAC/EF,EAAWjX,SAAU,EACrBrR,KAAKqU,QAET9U,iBACIooB,EAAAc,SAASljB,MAAM,kBAAmBvF,KAAKyX,OACvCzX,KAAKqU,UAxDQuT,EAAY9jB,EAAAiC,WAAA,CALhC9B,EAAAI,QAAU,CACP8B,WAAY,CACRuiB,YAAAhB,EAAArjB,YAGaujB,kDC3CrB7qB,EAAAgB,EAAAgF,GAAA,IAAA4lB,EAAA5rB,EAAA,QAAA6rB,EAAA7rB,EAAA2B,EAAAiqB,GAAA,QAAAzlB,KAAAylB,EAAA,YAAAzlB,GAAA,SAAA1E,GAAAzB,EAAAS,EAAAuF,EAAAvE,EAAA,kBAAAmqB,EAAAnqB,KAAA,CAAA0E,GAA+WH,EAAA,WAAA6lB,EAAG,wFCAlX,MAAAC,EAAA9rB,EAAA,QACA6K,EAAA7K,EAAA,QAEA,MAAa+rB,UAAkBD,EAAAE,MAC3BxpB,aACIS,KAAKyO,OAAQ,EAEjBlP,KAAKypB,GACIhpB,KAAKyO,OACNzO,KAAKipB,WAGb1pB,WACI,MAAMkB,EAAMT,KAAKS,IACjBT,KAAKmO,QACL1N,EAAIuM,YAEJ,MAAMkc,EAAKthB,EAAA0J,UAAU6X,SAErB,IAAK,IAAIztB,EAAI,EAAGA,EAAIsE,KAAKiC,MAAOvG,GAAKwtB,EAAKthB,EAAA0J,UAAU2B,WAChDxS,EAAI0M,OAAOzR,EAAKkM,EAAA0J,UAAUsU,KAAOsD,EAAMthB,EAAA0J,UAAU2B,WAAY,GAC7DxS,EAAI6M,OAAO5R,EAAKkM,EAAA0J,UAAUsU,KAAOsD,EAAMthB,EAAA0J,UAAU2B,WAAYjT,KAAK8S,QAClErS,EAAI0M,OAAO,EAAGzR,EAAKkM,EAAA0J,UAAUuU,KAAOqD,EAAMthB,EAAA0J,UAAU2B,YACpDxS,EAAI6M,OAAOtN,KAAKiC,MAAOvG,EAAKkM,EAAA0J,UAAUuU,KAAOqD,EAAMthB,EAAA0J,UAAU2B,YAGjExS,EAAIwM,YAAcrF,EAAA0J,UAAU8X,WAC5B3oB,EAAI4oB,UAAY,EAChB5oB,EAAI+M,SACJxN,KAAKyO,OAAQ,GA1BrBtR,EAAA2rB,6ICHA9kB,EAAAF,EAAAC,gBAAAhH,EAAA,SACAusB,EAAAxlB,EAAAC,gBAAAhH,EAAA,SAMAiH,EAAAK,QAAIklB,IAAID,EAAAjlB,SAQKlH,EAAAkqB,UAAY,IAAIiC,EAAAjlB,QAAKmlB,MAAiB,kECfnDzsB,EAAAgB,EAAAgF,GAAA,IAAA0mB,EAAA1sB,EAAA,QAAA2sB,EAAA3sB,EAAA,gBAAAmG,KAAAwmB,EAAA,YAAAxmB,GAAA,SAAA1E,GAAAzB,EAAAS,EAAAuF,EAAAvE,EAAA,kBAAAkrB,EAAAlrB,KAAA,CAAA0E,GAAAnG,EAAA,YAAAoG,EAAApG,EAAA,QAQAqG,EAAgBrH,OAAAoH,EAAA,KAAApH,CACd2tB,EAAA,WACAD,EAAA,KACAA,EAAA,MACF,EACA,KACA,WACA,MAIArmB,EAAAC,QAAAC,OAAA,kBACeP,EAAA,WAAAK,kHCAfa,EAAAH,EAAAC,gBAAAhH,EAAA,SAEAiiB,EAAAlb,EAAAC,gBAAAhH,EAAA,SAGAuP,EAAAvP,EAAA,QACA6K,EAAA7K,EAAA,QAIA,IAAqB4sB,EAArB,cAAwC3K,EAAA3a,QADxC9E,kCAEIS,KAAAvC,KAAO,SACPuC,KAAAsf,QAAS,EAETa,gBACI,OAAOvY,EAAA0J,UAAUuM,aAGrB+L,aACI,OAAOhiB,EAAA0J,UAAUuK,YAAY1a,IAAIhD,GAAKmO,EAAAO,aAAaiW,QAAQhlB,IAAIK,IAGnEoB,OAAOO,GACCE,KAAKmgB,UAAU9W,SAASvJ,GAAO8H,EAAA0J,UAAUuY,kBAAkB/pB,GAC1D8H,EAAA0J,UAAUwY,eAAehqB,KAdjB6pB,EAAU7lB,EAAAiC,WAAA,CAD9B9B,EAAAI,SACoBslB,oDC9BrB,IAAAI,EAAAhtB,EAAA,QAAAitB,EAAAjtB,EAAA2B,EAAAqrB,GAAieC,EAAG,8CCApe,IAAApW,EAAA,WAA0B,IAAAC,EAAA7T,KAAa8T,EAAAD,EAAAE,eAA0BC,EAAAH,EAAAI,MAAAD,IAAAF,EAAwB,OAAAE,EAAA,OAAiBE,MAAA,CAAOwC,GAAA,QAAY,CAAA1C,EAAA,eAAoBuB,IAAA,qBAAsB,IACvK2B,EAAA,2BCAA+S,EAAA,GAMA7mB,EAAgBrH,OAAAmuB,EAAA,KAAAnuB,CAChBkuB,EACErW,EACAsD,GACF,EACA,KACA,KACA,MAIA9T,EAAAC,QAAAC,OAAA,UACeP,EAAA,WAAAK,wECnBf,IAAAwQ,EAAA,WAA0B,IAAAC,EAAA7T,KAAa8T,EAAAD,EAAAE,eAA0BC,EAAAH,EAAAI,MAAAD,IAAAF,EAAwB,OAAAE,EAAA,OAAiBE,MAAA,CAAOwC,GAAA,QAAYtC,GAAA,CAAK+V,WAAAtW,EAAAsW,WAAAC,MAAAvW,EAAAwW,OAA8C,CAAAxW,EAAA,OAAAG,EAAA,YAAAH,EAAAsC,KAAAnC,EAAA,OAAiDE,MAAA,CAAOwC,GAAA,UAAc,CAAA7C,EAAAyW,MAAA,SAAAtW,EAAA,YAAsCoB,WAAA,EAAa3X,KAAA,OAAA4X,QAAA,SAAAnX,MAAA2V,EAAA,OAAAyB,WAAA,WAAoEC,IAAA,WAAc1B,EAAAsC,KAAAnC,EAAA,OAAsBE,MAAA,CAAOwC,GAAA,UAActC,GAAA,CAAKmW,UAAA1W,EAAA0W,UAAAC,QAAA3W,EAAA2W,QAAAC,UAAA5W,EAAA4W,UAAAC,YAAA,SAAApW,GAA0J,OAAjDA,EAAAqW,iBAAwBrW,EAAAiC,kBAAyB1C,EAAA6W,YAAApW,IAA+BsW,SAAA,SAAAtW,GAA6BA,EAAAqW,kBAAyBE,KAAA,SAAAvW,GAA0E,OAAjDA,EAAAqW,iBAAwBrW,EAAAiC,kBAAyB1C,EAAAgX,KAAAvW,OAA0BN,EAAA,OAAYoB,WAAA,EAAa3X,KAAA,OAAA4X,QAAA,SAAAnX,MAAA2V,EAAAiX,QAAAjX,EAAAmU,OAAApsB,OAAA,EAAA0Z,WAAA,8BAA8GpB,MAAA,CAASwC,GAAA,gBAAoB,CAAA1C,EAAA,KAAAH,EAAAgC,GAAAhC,EAAA,gBAAAtB,GAA8C,OAAAyB,EAAA,MAAgBxV,IAAA+T,EAAA9U,KAAA2Y,MAAA,CAAsB2U,iBAAAxY,IAAAsB,EAAAmX,eAAgD5W,GAAA,CAAKmW,UAAA,SAAAjW,GAA6BT,EAAAoX,YAAA1Y,MAAyB,CAAAyB,EAAA,KAAUE,MAAA,CAAOgX,KAAA,MAAY,CAAArX,EAAAmB,GAAAnB,EAAAqC,GAAA3D,cAA4B,GAAAyB,EAAA,kBAA8BoB,WAAA,EAAa3X,KAAA,OAAA4X,QAAA,SAAAnX,MAAA2V,EAAA,OAAAyB,WAAA,WAAoEC,IAAA,kBAAsBvB,EAAA,qBAA0BuB,IAAA,aAAArB,MAAA,CAAwBwC,GAAA,sBAAyB1C,EAAA,eAAoBuB,IAAA,SAAWvB,EAAA,gBAAqBuB,IAAA,WAAavB,EAAA,eAAoBoB,WAAA,EAAa3X,KAAA,OAAA4X,QAAA,SAAAnX,MAAA2V,EAAA,OAAAyB,WAAA,WAAoEpB,MAAA,CAASwC,GAAA,SAAA5D,OAAA,EAAA7Q,MAAA,IAAAmJ,IAAA,EAAAjJ,IAAA,EAAAgpB,SAAA,GAAAC,YAAA,EAAAC,aAAA,GAAAC,cAAA,SAAAC,QAAA,QAAAC,UAAA3X,EAAA4X,YAAAC,QAAA,GAAAC,eAAA,CAAkMC,gBAAA,OAAuBC,WAAA,CAAaC,mBAAA,OAAAC,aAAA,0CAAmFC,gBAAA,CAAkBF,mBAAA,SAA4BG,MAAA,CAAQ/tB,MAAA2V,EAAA,YAAAqY,SAAA,SAAAC,GAAiDtY,EAAA4X,YAAAU,GAAoB7W,WAAA,iBAA2BtB,EAAA,iBAAsBuB,IAAA,WAAavB,EAAA,kBAAuBuB,IAAA,aAAc,IAChjE2B,EAAA,GCDAna,EAAAS,EAAAuF,EAAA,sBAAA6Q,IAAA7W,EAAAS,EAAAuF,EAAA,sBAAAmU,wFCAA,MAAArF,EAAA9U,EAAA,QACA8rB,EAAA9rB,EAAA,QACAuP,EAAAvP,EAAA,QACAqvB,EAAArvB,EAAA,QACAwT,EAAAxT,EAAA,QAEA6K,EAAA7K,EAAA,QACAqC,EAAArC,EAAA,QACA8K,EAAA9K,EAAA,QACAsvB,EAAAtvB,EAAA,QAEA,MAAauvB,UAAiBzD,EAAAE,MAM1BxpB,YAAYkC,EAA2BhE,GACnCsC,MAAM0B,EAAQhE,GANlBuC,KAAAusB,eAAyB,EACzBvsB,KAAAwsB,aAAwB,GAMpBxsB,KAAKysB,cAAgBjiB,SAASkiB,cAAc,UAC5C1sB,KAAKysB,cAAcxqB,MAAQlD,OAAO6G,WAClC5F,KAAKysB,cAAc3Z,OAAS/T,OAAO+G,YACnC9F,KAAK2sB,KAAO3sB,KAAKysB,cAAcG,WAAW,MAG9CrtB,SAASkY,EAAc6F,EAAe6D,EAAqBhO,GAAa,GACpEpT,MAAM2S,SAAS+E,EAAO6F,EAAM6D,EAAWhO,GACnCsE,EAAMpU,QAAQwpB,IAAI,gBAAkBpV,EAAMpU,QAAQvF,IAAI,gBACtDkC,KAAKwsB,aAAa1wB,KAAK2b,GAI/BlY,YAAYkY,EAAc6F,EAAe6D,GACrC,GAAI1J,EAAMpU,QAAQwpB,IAAI,gBAAkBpV,EAAMpU,QAAQvF,IAAI,eAAgB,CACtE,MAAMkc,EAAMha,KAAKwsB,aAAanR,UAAUre,GAAKA,EAAE8C,OAAS2X,EAAM3X,MAC9DE,KAAKwsB,aAAa1vB,OAAOkd,EAAK,GAElCja,MAAM+sB,YAAYrV,EAAO6F,EAAM6D,GAGnC5hB,OACI,IAAKS,KAAKyO,MAAO,CACb,MAAMhO,EAAMT,KAAKS,IAEjB,GAAI2rB,EAAAW,SAASC,aAGT,OAFAvsB,EAAI6N,UAAU,EAAG,EAAGtO,KAAKyB,OAAOQ,MAAOjC,KAAKyB,OAAOqR,aACnD9S,KAAKyO,OAAQ,GAIjB,MAAMwe,EAAoBxsB,EAAImZ,yBAC9BnZ,EAAI6N,UAAU,EAAG,EAAGtO,KAAKyB,OAAOQ,MAAOjC,KAAKyB,OAAOqR,QAEnDrS,EAAIE,UAAY,mBAEhB,MAAMusB,EAAO5gB,EAAAO,aAAaC,SAAS,QAASrM,KACxC2rB,EAAAW,SAASI,gBAAkBf,EAAAW,SAASK,oBACpCF,EAAK5e,UAAU,EAAG,EAAG4e,EAAKzrB,OAAOQ,MAAOirB,EAAKzrB,OAAOqR,QAIpDlL,EAAA0J,UAAU+b,SAAW/gB,EAAAO,aAAa2F,SAAS,WAC3ClG,EAAAO,aAAaC,SAAS,UAAW2Q,OAAOxC,QAAQvD,IAC5C,IAAKA,EAAGkE,YAAclE,EAAG+B,QAAS,OAClC,MAAM6T,EAAK5V,EAAGhW,iBACR6rB,EAAUnuB,EAAA0B,IAAI4W,EAAGhH,UACjB8c,EAAM,GAAMpuB,EAAA4R,KAAKsc,EAAGta,GAC1BvS,EAAIuM,YACJvM,EAAIkP,IAAI4d,EAAQjtB,EAAGitB,EAAQhtB,EAAGitB,EAAK,EAAG,EAAItrB,KAAK0N,IAC/C,MAAMoN,EAAWvc,EAAIwc,qBAAqBsQ,EAAQjtB,EAAGitB,EAAQhtB,EAAGitB,EAAM,EAAGD,EAAQjtB,EAAGitB,EAAQhtB,EAAGitB,GAC/FxQ,EAASG,aAAa,EAAG,oBACzBH,EAASG,aAAa,EAAG,oBACzB1c,EAAIE,UAAYqc,EAChBvc,EAAIoP,SAIZ7P,KAAK2sB,KAAKre,UAAU,EAAG,EAAGvP,OAAO6G,WAAY7G,OAAO+G,aAGpD,IAAK,MAAM2nB,KAAS7lB,EAAA0J,UAAU8J,cAAe,CACzC,MAAM3D,EAAQnL,EAAAO,aAAaiW,QAAQhlB,IAAI2vB,EAAMhW,OAC7C,QAAc/O,IAAV+O,EAAqB,SACzB,MAAM6D,EAAO7D,EAAM4B,MAAMqU,KAAK5oB,GAAKA,EAAEhF,OAAS2tB,EAAMnS,MACpD,QAAa5S,IAAT4S,EAAoB,SAExB,MAAMqS,EAAavuB,EAAAwuB,gBAAgBtS,EAAKpd,MAAQod,EAAKsB,KAC/ClM,EAAS+G,EAAM/G,SACf6c,EAAUnuB,EAAA0B,IAAI4P,GAEdmd,EAAa,IAAItd,EAAAE,OAAOC,EAAQid,GACtC,GAAKE,EAAWlsB,gBAAgBlB,EAAIgB,QAEpC,GAA6B,QAAzBmG,EAAA0J,UAAUiR,WAAsB,CAChC,IAAIuL,GAAgB,EAEpB,MAAM/lB,EAAO,IAAIgmB,OAEjB,IAAIC,EADJjmB,EAAKoF,OAAOogB,EAAQjtB,EAAGitB,EAAQhtB,GAG/B,IAAK,IAAIZ,EAAQ,EAAGA,EAAQ,EAAIuC,KAAK0N,GAAIjQ,GAAUysB,EAAAW,SAASkB,WAAa,IAAO/rB,KAAK0N,GAAI,CACrF,MAAMse,EAAa,IAAIrc,EAAAM,YACnBzB,EAAOpQ,EAAIqtB,EAAazrB,KAAKisB,IAAIxuB,GACjC+Q,EAAOnQ,EAAIotB,EAAazrB,KAAKksB,IAAIzuB,IAEjCysB,EAAAW,SAASI,iBACTD,EAAMlgB,YACNkgB,EAAM/f,OAAO/N,EAAAgO,KAAKsD,EAAOpQ,GAAIlB,EAAAiO,KAAKqD,EAAOnQ,IACzC2sB,EAAM5f,OAAOlO,EAAAgO,KAAK8gB,EAAW5tB,GAAIlB,EAAAiO,KAAK6gB,EAAW3tB,IACjD2sB,EAAM1f,UAIV,MAAM6gB,EAAWxc,EAAA6N,IAAIyD,WAAWzS,EAAQwd,GAClCI,EAAY1mB,EAAA0J,UAAUid,GAAGC,UAAUH,GAKzC,GAHc,IAAV1uB,IAAaquB,EAAaM,EAAUpO,IAAMoO,EAAUE,UAAYN,GAG/DI,EAAUpO,KAYO,IAAlB4N,IACA/lB,EAAK4H,IAAI4d,EAAQjtB,EAAGitB,EAAQhtB,EAAGnB,EAAA2d,KAAKzB,EAAKpd,MAAQod,EAAKsB,KAAMkR,EAAcnuB,GAC1EmuB,GAAgB,GAEpB/lB,EAAKuF,OAAOlO,EAAAgO,KAAKkhB,EAAUE,UAAUluB,GAAIlB,EAAAiO,KAAKihB,EAAUE,UAAUjuB,SAd9D,IAAsB,IAAlButB,EAAqB,CAErBA,EAAenuB,EAEf,MAAMkB,EAAOzB,EAAA0B,IAAIotB,GACjBztB,EAAI6M,OAAOzM,EAAKP,EAAGO,EAAKN,IAepC,IAHsB,IAAlButB,EAAqB/lB,EAAKuF,OAAOlO,EAAAgO,KAAK4gB,EAAY1tB,GAAIlB,EAAAiO,KAAK2gB,EAAYztB,IACtEwH,EAAK4H,IAAI4d,EAAQjtB,EAAGitB,EAAQhtB,EAAGnB,EAAA2d,KAAKzB,EAAKpd,MAAQod,EAAKsB,KAAMkR,EAAc,EAAI5rB,KAAK0N,IAEpFhI,EAAA0J,UAAU+b,QAAS,CACnB,GAAI/R,EAAKsB,IAAM,EAAG,CAEd,MAAMI,EAAWvc,EAAIwc,qBACjBsQ,EAAQjtB,EACRitB,EAAQhtB,EACRnB,EAAA2d,KAAKzB,EAAKpd,OACVqvB,EAAQjtB,EACRitB,EAAQhtB,EACRnB,EAAA2d,KAAKzB,EAAKpd,MAAQod,EAAKsB,MAE3BI,EAASG,aAAa,EAAG,oBACzBH,EAASG,aAAa,EAAG,oBACzB1c,EAAIE,UAAYqc,OAEhBvc,EAAIE,UAAY,mBAEpBF,EAAIoP,KAAK9H,GAGbuT,EAAK+B,SAAWtV,MACb,CACH/H,KAAK2sB,KAAK/S,yBAA2B,cACrC5Z,KAAK2sB,KAAKhsB,UAAY,mBACtB,MAAM+L,EAAU2f,EAAAoC,kBAAkB/d,EAAQ,UAC1C1Q,KAAK2sB,KAAK3f,YACVhN,KAAK2sB,KAAKxf,OAAO/N,EAAAgO,KAAKV,EAAQ,GAAG,IAAKtN,EAAAiO,KAAKX,EAAQ,GAAG,KACtD,IAAK,MAAMnL,KAASmL,EAAS1M,KAAK2sB,KAAKrf,OAAOlO,EAAAgO,KAAK7L,EAAM,IAAKnC,EAAAiO,KAAK9L,EAAM,KAGzE,GAFAvB,KAAK2sB,KAAKpf,YACVvN,KAAK2sB,KAAK9c,OACNyL,EAAKsB,IAAM,EAAG,CAEd,MAAMI,EAAWhd,KAAK2sB,KAAK1P,qBACvBsQ,EAAQjtB,EACRitB,EAAQhtB,EACRnB,EAAA2d,KAAKzB,EAAKpd,OACVqvB,EAAQjtB,EACRitB,EAAQhtB,EACRnB,EAAA2d,KAAKzB,EAAKpd,MAAQod,EAAKsB,MAE3BI,EAASG,aAAa,EAAG,oBACzBH,EAASG,aAAa,EAAG,oBACzBnd,KAAK2sB,KAAKhsB,UAAYqc,OAEtBhd,KAAK2sB,KAAKhsB,UAAY,mBAE1BX,KAAK2sB,KAAK/S,yBAA2B,YACrC5Z,KAAK2sB,KAAK3f,YACVhN,KAAK2sB,KAAKhd,IAAI4d,EAAQjtB,EAAGitB,EAAQhtB,EAAGnB,EAAA2d,KAAKzB,EAAKpd,MAAQod,EAAKsB,KAAM,EAAG,EAAI1a,KAAK0N,IAC7E5P,KAAK2sB,KAAK9c,OACVpP,EAAIiuB,UAAU1uB,KAAKysB,cAAe,EAAG,IAKzC7kB,EAAA0J,UAAUqd,SACVluB,EAAImZ,yBAA2B,YAC/BnZ,EAAIiuB,UAAUpiB,EAAAO,aAAaC,SAAS,eAAgBrL,OAAQ,EAAG,IAGnE,IAAK,MAAMmtB,KAAY5uB,KAAKwsB,aAAc,CACtC,IAAKoC,EAASjtB,gBAAgB3B,KAAKyB,QAAS,SAC5C,MAAMotB,EAAcD,EAAShV,yBACxBhS,EAAA0J,UAAU+b,UAC+B,gBAAtCuB,EAAShV,yBACTgV,EAAShV,yBAA2B,kBACO,oBAAtCgV,EAAShV,2BACdgV,EAAShV,yBAA2B,gBAE5CgV,EAASluB,KAAKD,GACdmuB,EAAShV,yBAA2BiV,EAGpCjnB,EAAA0J,UAAU+b,UACV5sB,EAAImZ,yBAA2B,aAC/BnZ,EAAIE,UAAYkH,EAAAinB,eAChBruB,EAAIsuB,SAAS,EAAG,EAAGtuB,EAAIgB,OAAOQ,MAAOxB,EAAIgB,OAAOqR,SAGpD/S,MAAMW,MAAK,GAEXD,EAAImZ,yBAA2BqT,IAnN3C9vB,EAAAmvB,8CCXAvvB,EAAAgB,EAAAgF,GAAA,IAAAisB,EAAAjyB,EAAA,QAAAkyB,EAAAlyB,EAAA2B,EAAAswB,GAAA,QAAA9rB,KAAA8rB,EAAA,YAAA9rB,GAAA,SAAA1E,GAAAzB,EAAAS,EAAAuF,EAAAvE,EAAA,kBAAAwwB,EAAAxwB,KAAA,CAAA0E,GAAiWH,EAAA,WAAAksB,EAAG,uCCApW,IAAArb,EAAA,WAA0B,IAAAC,EAAA7T,KAAa8T,EAAAD,EAAAE,eAA0BC,EAAAH,EAAAI,MAAAD,IAAAF,EAAwB,OAAAE,EAAA,SAAmBE,MAAA,CAAO7C,QAAAwC,EAAAxC,QAAA8C,MAAA,GAAmCC,GAAA,CAAKC,MAAA,SAAAC,GAAyBT,EAAAxC,SAAA,IAAqBkD,YAAAV,EAAAW,GAAA,EAAsBhW,IAAA,SAAAiW,GAAA,SAAAnX,GAA4B,OAAA0W,EAAA,OAAiBU,YAAA,eAAAR,MAAA,CAAkCS,UAAA,QAAmBP,GAAA,CAAKQ,UAAAtX,EAAAuX,UAAAC,QAAAxX,EAAAyX,UAA6C,CAAAf,EAAA,OAAAH,EAAAmB,GAAA,gBAAAhB,EAAA,OAA6CU,YAAA,eAAAN,GAAA,CAA+B1J,MAAA,SAAA4J,GAAyBT,EAAAxC,SAAA,KAAsB,CAAA2C,EAAA,KAAUU,YAAA,iCAA4C,CAAAV,EAAA,OAAYU,YAAA,cAAyB,CAAAV,EAAA,OAAYU,YAAA,QAAmB,CAAAV,EAAA,SAAcE,MAAA,CAAOgb,IAAA,8BAAmC,CAAArb,EAAAmB,GAAA,UAAAhB,EAAA,SAA+BoB,WAAA,EAAa3X,KAAA,QAAA4X,QAAA,UAAAnX,MAAA2V,EAAA4D,MAAA,KAAAnC,WAAA,eAA8EJ,YAAA,CAAeia,cAAA,sBAAmCjb,MAAA,CAAQjU,KAAA,OAAAyW,GAAA,4BAAA1R,UAAA6O,EAAAub,OAAqE3Z,SAAA,CAAWvX,MAAA2V,EAAA4D,MAAA,MAAyBrD,GAAA,CAAKoK,OAAA,SAAAlK,GAA0BT,EAAAwb,aAAA,IAAuB3Z,MAAA,SAAApB,GAA0BA,EAAAlL,OAAAuM,WAAsC9B,EAAA6K,KAAA7K,EAAA4D,MAAA,OAAAnD,EAAAlL,OAAAlL,WAAmD8V,EAAA,OAAYsC,MAAA,CAAQgZ,QAAAzb,EAAA4D,MAAA0B,YAAA,KAAAlY,UAAA,UAAgEiT,MAAA,CAASlP,UAAA6O,EAAAub,OAAsBhb,GAAA,CAAK1J,MAAA,SAAA4J,GAAyBT,EAAA4D,MAAA0B,aAAAtF,EAAA4D,MAAA0B,YAA+CtF,EAAAwb,aAAA,MAAyB,CAAArb,EAAA,KAAUU,YAAA,iBAAyBV,EAAA,SAAgBE,MAAA,CAAOgb,IAAA,iCAAsC,CAAArb,EAAAmB,GAAA,gBAAAhB,EAAA,SAAqCU,YAAA,kBAAAQ,YAAA,CAA2Cqa,oBAAA,UAA6Brb,MAAA,CAAQjU,KAAA,WAAAyW,GAAA,+BAAA1R,UAAA6O,EAAAub,OAA4E3Z,SAAA,CAAW+Z,QAAA3b,EAAA4D,MAAAgC,SAA4BrF,GAAA,CAAK1J,MAAAmJ,EAAA4b,YAAsBzb,EAAA,SAAcE,MAAA,CAAOgb,IAAA,uCAA4C,CAAArb,EAAAmB,GAAA,yBAAAhB,EAAA,SAA8CoB,WAAA,EAAa3X,KAAA,QAAA4X,QAAA,UAAAnX,MAAA2V,EAAA4D,MAAA,kBAAAnC,WAAA,4BAAwGJ,YAAA,CAAeqa,oBAAA,UAA6Brb,MAAA,CAAQjU,KAAA,WAAAyW,GAAA,qCAAA1R,UAAA6O,EAAAub,OAAkF3Z,SAAA,CAAW+Z,QAAAE,MAAAC,QAAA9b,EAAA4D,MAAA8B,mBAAA1F,EAAA+b,GAAA/b,EAAA4D,MAAA8B,kBAAA,SAAA1F,EAAA4D,MAAA,mBAA+HrD,GAAA,CAAKoK,OAAA,UAAAlK,GAA2B,IAAAub,EAAAhc,EAAA4D,MAAA8B,kBAAAuW,EAAAxb,EAAAlL,OAAA2mB,IAAAD,EAAAN,QAAuF,GAAAE,MAAAC,QAAAE,GAAA,CAAuB,IAAA1D,EAAA,KAAA6D,EAAAnc,EAAA+b,GAAAC,EAAA1D,GAAiC2D,EAAAN,QAAiBQ,EAAA,GAAAnc,EAAA6K,KAAA7K,EAAA4D,MAAA,oBAAAoY,EAAAzP,OAAA,CAAA+L,KAA0E6D,GAAA,GAAAnc,EAAA6K,KAAA7K,EAAA4D,MAAA,oBAAAoY,EAAA5wB,MAAA,EAAA+wB,GAAA5P,OAAAyP,EAAA5wB,MAAA+wB,EAAA,UAAoGnc,EAAA6K,KAAA7K,EAAA4D,MAAA,oBAAAsY,IAA+Clc,EAAAoc,qBAAwBjc,EAAA,SAAcE,MAAA,CAAOgb,IAAA,qCAA0C,CAAArb,EAAAmB,GAAA,qBAAAhB,EAAA,SAA0CkB,YAAA,CAAaqa,oBAAA,UAA6Brb,MAAA,CAAQjU,KAAA,WAAAyW,GAAA,mCAAA1R,UAAA6O,EAAAub,OAAgF3Z,SAAA,CAAW+Z,QAAA3b,EAAA4D,MAAA+B,qBAAwCpF,GAAA,CAAK1J,MAAAmJ,EAAAqc,sBAAgClc,EAAA,SAAcE,MAAA,CAAOgb,IAAA,sCAA2C,CAAArb,EAAAmB,GAAA,mBAAAhB,EAAA,gBAA+CkB,YAAA,CAAaqa,oBAAA,UAA6Brb,MAAA,CAAQ1O,MAAAqO,EAAA4D,MAAA5X,aAAAmF,UAAA6O,EAAAub,OAAqDhb,GAAA,CAAK+b,eAAA,SAAA7b,GAAgCT,EAAA6K,KAAA7K,EAAA4D,MAAA,eAAAnD,IAA4CoB,MAAA,SAAApB,GAA0BT,EAAAwb,aAAA,OAA4B7Q,OAAA,SAAAlK,GAA2BT,EAAAwb,aAAA,OAAwBrb,EAAA,SAAcE,MAAA,CAAOgb,IAAA,oCAAyC,CAAArb,EAAAmB,GAAA,iBAAAhB,EAAA,gBAA6CkB,YAAA,CAAaqa,oBAAA,UAA6Brb,MAAA,CAAQ1O,MAAAqO,EAAA4D,MAAA7X,WAAAoF,UAAA6O,EAAAub,OAAmDhb,GAAA,CAAK+b,eAAA,SAAA7b,GAAgCT,EAAA6K,KAAA7K,EAAA4D,MAAA,aAAAnD,IAA0CoB,MAAA,SAAApB,GAA0BT,EAAAwb,aAAA,OAA4B7Q,OAAA,SAAAlK,GAA2BT,EAAAwb,aAAA,OAAwBrb,EAAA,OAAYU,YAAA,kBAA6B,CAAAb,EAAAmB,GAAA,YAAAnB,EAAAgC,GAAAhC,EAAA4D,MAAA,gBAAAqG,GAA+D,OAAA9J,EAAA,SAAoBxV,IAAAsf,EAAA5I,YAAA,CAAuBqa,oBAAA,QAA2Brb,MAAA,CAAQjU,KAAA,OAAAuV,YAAA,OAAAxQ,UAAA6O,EAAAub,OAAyD3Z,SAAA,CAAWvX,MAAA4f,GAAc1J,GAAA,CAAKoK,OAAA,SAAAlK,GAA0BT,EAAAuc,YAAA9b,EAAAwJ,OAAiC,KAAAA,EAAA9J,EAAA,OAA2BxV,IAAA,UAAAsf,EAAAxH,MAAA,CAA8BgZ,QAAAzb,EAAAub,MAAA,KAAAnuB,UAAA,SAAAovB,gBAAA,UAA+Enc,MAAA,CAASlP,UAAA6O,EAAAub,OAAsBhb,GAAA,CAAK1J,MAAA,SAAA4J,GAAyBT,EAAAyc,YAAAxS,MAAyB,CAAA9J,EAAA,KAAUU,YAAA,uBAA+Bb,EAAAsC,QAAcnC,EAAA,OAAYU,YAAA,kBAA6B,CAAAb,EAAAmB,GAAA,cAAAnB,EAAAgC,GAAAhC,EAAA4D,MAAA,kBAAA8Y,GAAqE,OAAAvc,EAAA,SAAoBoB,WAAA,EAAa3X,KAAA,QAAA4X,QAAA,UAAAnX,MAAAqyB,EAAA,KAAAjb,WAAA,iBAA8E9W,IAAA,QAAA+xB,EAAAzwB,KAAAoV,YAAA,CAAwCqa,oBAAA,QAA2Brb,MAAA,CAAQjU,KAAA,OAAAuV,YAAA,OAAAxQ,UAAA6O,EAAAub,OAAyD3Z,SAAA,CAAWvX,MAAAqyB,EAAA,MAAuBnc,GAAA,CAAKoK,OAAA,SAAAlK,GAA0BT,EAAAwb,aAAA,IAAwB3Z,MAAA,SAAApB,GAA0BA,EAAAlL,OAAAuM,WAAsC9B,EAAA6K,KAAA6R,EAAA,OAAAjc,EAAAlL,OAAAlL,WAAiD8V,EAAA,SAAcoB,WAAA,EAAa3X,KAAA,QAAA4X,QAAA,iBAAAnX,MAAAqyB,EAAA,MAAAjb,WAAA,gBAAAqB,UAAA,CAAkG6Z,QAAA,KAAehyB,IAAA,SAAA+xB,EAAAzwB,KAAAoU,MAAA,CAAmCjU,KAAA,OAAAgV,MAAA,gBAAAjQ,UAAA6O,EAAAub,OAA4D3Z,SAAA,CAAWvX,MAAAqyB,EAAA,OAAwBnc,GAAA,CAAKoK,OAAA,SAAAlK,GAA0BT,EAAAwb,aAAA,IAAuB3Z,MAAA,SAAApB,GAA0BA,EAAAlL,OAAAuM,WAAsC9B,EAAA6K,KAAA6R,EAAA,QAAA1c,EAAA4c,GAAAnc,EAAAlL,OAAAlL,SAAwD4Y,KAAA,SAAAxC,GAAyBT,EAAAkD,mBAAqB/C,EAAA,QAAaxV,IAAA,SAAA+xB,EAAAzwB,MAA0B,CAAA+T,EAAAmB,GAAA,OAAAhB,EAAA,SAA4BoB,WAAA,EAAa3X,KAAA,QAAA4X,QAAA,iBAAAnX,MAAAqyB,EAAA,SAAAjb,WAAA,mBAAAqB,UAAA,CAAwG6Z,QAAA,KAAehyB,IAAA,YAAA+xB,EAAAzwB,KAAAoU,MAAA,CAAsCjU,KAAA,OAAAgV,MAAA,gBAAAjQ,UAAA6O,EAAAub,OAA4D3Z,SAAA,CAAWvX,MAAAqyB,EAAA,UAA2Bnc,GAAA,CAAKoK,OAAA,SAAAlK,GAA0BT,EAAAwb,aAAA,IAAuB3Z,MAAA,SAAApB,GAA0BA,EAAAlL,OAAAuM,WAAsC9B,EAAA6K,KAAA6R,EAAA,WAAA1c,EAAA4c,GAAAnc,EAAAlL,OAAAlL,SAA2D4Y,KAAA,SAAAxC,GAAyBT,EAAAkD,mBAAqB/C,EAAA,QAAaxV,IAAA,SAAA+xB,EAAAzwB,OAA0BkU,EAAA,OAAYxV,IAAA,cAAA+xB,EAAAzwB,KAAAwW,MAAA,CAAuCgZ,QAAAiB,EAAAlf,QAAA,KAAApQ,UAAA,UAA0DiT,MAAA,CAASlP,UAAA6O,EAAAub,OAAsBhb,GAAA,CAAK1J,MAAA,SAAA4J,GAAyBic,EAAAlf,SAAAkf,EAAAlf,QAAmCwC,EAAAwb,aAAA,MAAyB,CAAArb,EAAA,KAAUU,YAAA,iBAAyBV,EAAA,QAAexV,IAAA,SAAA+xB,EAAAzwB,OAA0B,KAAAywB,EAAA9yB,MAAA,IAAA8yB,EAAAryB,MAAA8V,EAAA,OAAyDxV,IAAA,UAAA+xB,EAAAzwB,KAAAwW,MAAA,CAAmCgZ,QAAAzb,EAAAub,MAAA,KAAAnuB,UAAA,UAAoDiT,MAAA,CAASlP,UAAA6O,EAAAub,OAAsBhb,GAAA,CAAK1J,MAAA,SAAA4J,GAAyBT,EAAA6c,cAAAH,EAAAzwB,SAAkC,CAAAkU,EAAA,KAAUU,YAAA,uBAA+Bb,EAAAsC,QAAcnC,EAAA,OAAYU,YAAA,kBAA6B,CAAAb,EAAAmB,GAAA,WAAAnB,EAAAgC,GAAAhC,EAAA4D,MAAA,eAAA6D,GAA4D,OAAAtH,EAAA,SAAoBoB,WAAA,EAAa3X,KAAA,QAAA4X,QAAA,UAAAnX,MAAAod,EAAA,KAAAhG,WAAA,cAAwE9W,IAAA,QAAA8c,EAAAxb,KAAAoV,YAAA,CAAqCqa,oBAAA,QAA2Brb,MAAA,CAAQjU,KAAA,OAAAuV,YAAA,OAAAxQ,UAAA6O,EAAAub,OAAyD3Z,SAAA,CAAWvX,MAAAod,EAAA,MAAoBlH,GAAA,CAAKoK,OAAA,SAAAlK,GAA0BT,EAAAwb,aAAA,IAAuB3Z,MAAA,SAAApB,GAA0BA,EAAAlL,OAAAuM,WAAsC9B,EAAA6K,KAAApD,EAAA,OAAAhH,EAAAlL,OAAAlL,WAA8C8V,EAAA,SAAcoB,WAAA,EAAa3X,KAAA,QAAA4X,QAAA,iBAAAnX,MAAAod,EAAA,MAAAhG,WAAA,aAAAqB,UAAA,CAA4F6Z,QAAA,KAAehyB,IAAA,SAAA8c,EAAAxb,KAAAoU,MAAA,CAAgCjU,KAAA,OAAAgV,MAAA,gBAAAjQ,UAAA6O,EAAAub,OAA4D3Z,SAAA,CAAWvX,MAAAod,EAAA,OAAqBlH,GAAA,CAAKoK,OAAA,SAAAlK,GAA0BT,EAAAwb,aAAA,IAAsB3Z,MAAA,SAAApB,GAA0BA,EAAAlL,OAAAuM,WAAsC9B,EAAA6K,KAAApD,EAAA,QAAAzH,EAAA4c,GAAAnc,EAAAlL,OAAAlL,SAAqD4Y,KAAA,SAAAxC,GAAyBT,EAAAkD,mBAAqB/C,EAAA,QAAaxV,IAAA,SAAA8c,EAAAxb,MAAuB,CAAA+T,EAAAmB,GAAA,OAAAhB,EAAA,SAA4BoB,WAAA,EAAa3X,KAAA,QAAA4X,QAAA,iBAAAnX,MAAAod,EAAA,IAAAhG,WAAA,WAAAqB,UAAA,CAAwF6Z,QAAA,KAAehyB,IAAA,YAAA8c,EAAAxb,KAAAoU,MAAA,CAAmCjU,KAAA,OAAAgV,MAAA,YAAAjQ,UAAA6O,EAAAub,OAAwD3Z,SAAA,CAAWvX,MAAAod,EAAA,KAAmBlH,GAAA,CAAKoK,OAAA,SAAAlK,GAA0BT,EAAAwb,aAAA,IAAsB3Z,MAAA,SAAApB,GAA0BA,EAAAlL,OAAAuM,WAAsC9B,EAAA6K,KAAApD,EAAA,MAAAzH,EAAA4c,GAAAnc,EAAAlL,OAAAlL,SAAmD4Y,KAAA,SAAAxC,GAAyBT,EAAAkD,mBAAqB/C,EAAA,gBAAqBxV,IAAA,UAAA8c,EAAAxb,KAAAoU,MAAA,CAA+B1O,MAAA8V,EAAA3O,OAAA3H,UAAA6O,EAAAub,OAA0Chb,GAAA,CAAK+b,eAAA,SAAA7b,GAAgCT,EAAA6K,KAAApD,EAAA,SAAAhH,IAAiCoB,MAAA,SAAApB,GAA0BT,EAAA8c,iBAAArV,EAAAhH,IAAmCkK,OAAA,SAAAlK,GAA2BT,EAAAwb,aAAA,OAAwBrb,EAAA,OAAYxV,IAAA,cAAA8c,EAAAxb,KAAAwW,MAAA,CAAoCgZ,QAAAhU,EAAAjK,QAAA,KAAApQ,UAAA,UAAuDiT,MAAA,CAASlP,UAAA6O,EAAAub,OAAsBhb,GAAA,CAAK1J,MAAA,SAAA4J,GAAyBgH,EAAAjK,SAAAiK,EAAAjK,QAA6BwC,EAAAwb,aAAA,MAAwB,CAAArb,EAAA,KAAUU,YAAA,iBAAyBV,EAAA,OAAcxV,IAAA,gBAAA8c,EAAAxb,KAAAwW,MAAA,CAAsCgZ,QAAAhU,EAAAC,aAAA,KAAAta,UAAA,UAA4DiT,MAAA,CAASlP,UAAA6O,EAAAub,OAAsBhb,GAAA,CAAK1J,MAAA,SAAA4J,GAAyBT,EAAA+c,uBAAAtV,MAAmC,CAAAtH,EAAA,KAAUU,YAAA,uBAA+B,KAAA4G,EAAA7d,MAAA,IAAA6d,EAAApd,MAAA8V,EAAA,OAAqDxV,IAAA,UAAA8c,EAAAxb,KAAAwW,MAAA,CAAgCgZ,QAAAzb,EAAAub,MAAA,KAAAnuB,UAAA,UAAoDiT,MAAA,CAASlP,UAAA6O,EAAAub,OAAsBhb,GAAA,CAAK1J,MAAA,SAAA4J,GAAyBT,EAAAgd,WAAAvV,EAAAxb,SAA4B,CAAAkU,EAAA,KAAUU,YAAA,uBAA+Bb,EAAAsC,QAAcnC,EAAA,OAAYU,YAAA,kBAA6B,CAAAb,EAAAmB,GAAA,YAAAhB,EAAA,OAA+BU,YAAA,UAAAR,MAAA,CAA6BwC,GAAA,WAAe,CAAA7C,EAAAgC,GAAAhC,EAAA4D,MAAA,gBAAAzB,GAA4C,OAAAhC,EAAA,OAAiBxV,IAAAwX,EAAAlW,KAAA4U,YAAA,SAAmC,CAAAsB,EAAA,UAAAhC,EAAA,OAA8BU,YAAA,cAAyB,CAAAb,EAAAmB,GAAAnB,EAAAqC,GAAAF,EAAAF,aAAA9B,EAAA,OAA6CU,YAAA,aAAAN,GAAA,CAA6B1J,MAAA,SAAA4J,GAAyBT,EAAAid,YAAA9a,EAAAlW,SAA8B,CAAA+T,EAAAmB,GAAAnB,EAAAqC,GAAAF,EAAAvY,UAAAoW,EAAAsC,KAAAH,EAAAF,SAA0JjC,EAAAsC,KAA1J,CAAAnC,EAAA,OAAsEU,YAAA,aAAAN,GAAA,CAA6B1J,MAAA,SAAA4J,GAAyBT,EAAAid,YAAA9a,EAAAlW,SAA8B,CAAA+T,EAAAmB,GAAAnB,EAAAqC,GAAAF,EAAAvY,WAAA,KAA6CoW,EAAA,MAAAG,EAAA,OAAwBU,YAAA,QAAAR,MAAA,CAA2BwC,GAAA,cAAkB,CAAA1C,EAAA,OAAYU,YAAA,aAAAN,GAAA,CAA6B1J,MAAAmJ,EAAAkd,mBAA8B,CAAAld,EAAAmB,GAAA,SAAAnB,EAAAsC,MAAA,GAAAnC,EAAA,OAAyCU,YAAA,kBAA6B,CAAAb,EAAAmB,GAAA,gBAAAhB,EAAA,YAAwCU,YAAA,UAAAR,MAAA,CAA6BlP,UAAA6O,EAAAub,OAAsB3Z,SAAA,CAAWvX,MAAA2V,EAAA4D,MAAAkC,YAA6BvF,GAAA,CAAKoK,OAAA3K,EAAAmd,qBAA+B,QACl6T9Z,EAAA,GCDAna,EAAAS,EAAAuF,EAAA,sBAAA6Q,IAAA7W,EAAAS,EAAAuF,EAAA,sBAAAmU,wFCCA,MAAArF,EAAA9U,EAAA,QACAmC,EAAAnC,EAAA,QACAoC,EAAApC,EAAA,QACA6K,EAAA7K,EAAA,QACA8K,EAAA9K,EAAA,QACAqC,EAAArC,EAAA,QACAkiB,EAAAliB,EAAA,QAEA,MAAa0T,UAAetR,EAAAG,MAGxBC,YAAYmR,EAAqB3S,EAAW6B,EAAqBC,EAAuBC,GACpFC,MAAM2Q,EAAQ9Q,EAAYC,EAAcC,GAH5CE,KAAAC,KAAO,SAIHD,KAAKjC,EAAIA,GAAK,EAElBwB,SAKI,OAAOxD,OAAOmE,OAAOF,KAAKG,cAAe,CACrCwQ,OAAQ3Q,KAAKjC,IAGrBwB,SAASnE,GACL2E,MAAM6Q,SAASxV,GACf4E,KAAKjC,EAAI3C,EAAKuV,OAElBpR,iBACI,OAAO,IAAIL,EAAAsB,aACP,IAAIqR,EAAAM,YAAYnS,KAAKK,SAASC,EAAIN,KAAKjC,EAAGiC,KAAKK,SAASE,EAAIP,KAAKjC,GACxD,EAATiC,KAAKjC,EACI,EAATiC,KAAKjC,GAIbqC,aACI,OAAOJ,KAAK0B,iBAAiBtB,OAGjCb,KAAKkB,GACDV,MAAMW,KAAKD,GACXA,EAAIuM,YACoB,QAApBhN,KAAKJ,WAAsBa,EAAIE,UAAYse,EAAA6P,eAC1CruB,EAAIE,UAAYX,KAAKJ,WAC1B,MAAMid,EAAMzd,EAAA0B,IAAId,KAAKK,UACrBI,EAAIkP,IAAIkN,EAAIvc,EAAGuc,EAAItc,EAAGnB,EAAA4R,KAAKhR,KAAKjC,GAAI,EAAG,EAAImE,KAAK0N,IAChDnP,EAAIoP,OACsB,qBAAtB7P,KAAKH,eACLY,EAAIuM,YACJvM,EAAI4oB,UAAYjqB,EAAA4R,KAAK,GACrBvQ,EAAIwM,YAAcjN,KAAKH,aACvBY,EAAIkP,IAAIkN,EAAIvc,EAAGuc,EAAItc,EAAGnB,EAAA4R,KAAKhR,KAAKjC,GAAI,EAAG,EAAImE,KAAK0N,IAChDnP,EAAI+M,UAGZjO,SAASgC,GACL,OAAOW,KAAA+uB,IAAC1vB,EAAMjB,EAAIN,KAAKK,SAASC,EAAM,GAAI4B,KAAA+uB,IAAC1vB,EAAMhB,EAAIP,KAAKK,SAASE,EAAM,GAAI2B,KAAA+uB,IAAAjxB,KAAKjC,EAAK,GAI3FwB,OAAOiC,GACH,QAAoBkH,IAAhBlH,EAA2B,OAAOxB,KAAKK,SAC3CL,KAAKK,SAAWmB,EAEpBjC,gBAAgBkC,GACZ,OAAOzB,KAAK0B,iBAAiBC,gBAAgBF,GAEjDlC,aACI,MAAM2pB,EAAKthB,EAAA0J,UAAU6X,SACrB,IAAI+H,EACAC,EAEAD,EADE,EAAIlxB,KAAKjC,EAAKmrB,EAAM,IAAM,EAClBhnB,KAAKkvB,MAAMpxB,KAAKK,SAASC,EAAI4oB,GAAMA,EAEnChnB,KAAKkvB,OAAOpxB,KAAKK,SAASC,EAAI4oB,EAAK,GAAKA,GAAMA,EAAKlpB,KAAKjC,EAGlEozB,EADE,EAAInxB,KAAKjC,EAAKmrB,EAAM,IAAM,EAClBhnB,KAAKkvB,MAAMpxB,KAAKK,SAASE,EAAI2oB,GAAMA,EAEnChnB,KAAKkvB,OAAOpxB,KAAKK,SAASE,EAAI2oB,EAAK,GAAKA,GAAMA,EAAKlpB,KAAKjC,EAEtE,MAAMgc,EAAQlS,EAAAmZ,eAAe,IAAInP,EAAA8N,OAAOuR,EAAUlxB,KAAKK,SAASC,EAAG6wB,EAAUnxB,KAAKK,SAASE,GAAIP,MAC/FA,KAAKK,SAAWL,KAAKK,SAAS+J,IAAI2P,GAClC/Z,KAAKmT,YAAW,GAEpB5T,eACI,MAAM2pB,EAAKthB,EAAA0J,UAAU6X,SACrBnpB,KAAKjC,EAAImE,KAAKC,IAAID,KAAKkvB,MAAMpxB,KAAKjC,EAAImrB,GAAMA,EAAIA,EAAK,GACrDlpB,KAAKmT,YAAW,GAEpB5T,OAAOqC,EAAqBL,GACdqG,EAAA0J,UAAU2B,WAApB,MACMoe,EAAOjyB,EAAAuT,IAAIpR,GAAO+Y,SAASta,KAAKK,UACtCL,KAAKjC,EAAImE,KAAKovB,KAAKpvB,KAAK+uB,IAAII,EAAKz1B,SAAU,GAAK,IAtFxDuB,EAAAsT,iHCKAuO,EAAAlb,EAAAC,gBAAAhH,EAAA,SAEA8U,EAAA9U,EAAA,QACAuP,EAAAvP,EAAA,QACAw0B,EAAAx0B,EAAA,QACA+U,EAAA/U,EAAA,QACA6K,EAAA7K,EAAA,QACAqC,EAAArC,EAAA,QACA8K,EAAA9K,EAAA,QACAkH,EAAAH,EAAAC,gBAAAhH,EAAA,SAGA,IAAqBy0B,EAArB,cAAqCxS,EAAA3a,QADrC9E,kCAEIS,KAAAvC,KAAO,MACPuC,KAAAsf,QAAS,EACTtf,KAAAyxB,OAAS,EACTzxB,KAAA0xB,OAAS,EACT1xB,KAAA2xB,WAAiC,KACjC3xB,KAAAyF,KAAoB,KAEpBlG,YAAYiK,GACR,MAAM+I,EAAQjG,EAAAO,aAAaC,gBACbpE,IAAV6J,GAIJvS,KAAKsf,QAAS,EAEdtf,KAAK2xB,WAAavyB,EAAAuT,IAAI9K,EAAAkY,SAASvW,IAC/BxJ,KAAKyF,KAAO,IAAIqM,EAAAQ,KAAKtS,KAAK2xB,WAAWC,QAAS,EAAG,EAAG,gBAAiB,SACrErf,EAAMG,SAAS1S,KAAKyF,MAAM,GAAO,IAP7B4J,QAAQC,IAAI,oBASpB/P,YAAYiK,GACR,IAAKxJ,KAAKsf,QAAwB,OAAdtf,KAAKyF,MAAqC,OAApBzF,KAAK2xB,WAAqB,OACpE,MAAMpf,EAAQjG,EAAAO,aAAaC,WAC3B,QAAcpE,IAAV6J,EAEA,YADAlD,QAAQC,IAAI,oBAIhB,MAAMsR,EAAWxhB,EAAAuT,IAAI9K,EAAAkY,SAASvW,IAE9BxJ,KAAKyF,KAAKuN,EAAI9Q,KAAKgY,IAAI0G,EAAStgB,EAAIN,KAAK2xB,WAAWrxB,GACpDN,KAAKyF,KAAKyN,EAAIhR,KAAKgY,IAAI0G,EAASrgB,EAAIP,KAAK2xB,WAAWpxB,GACpDP,KAAKyF,KAAKpF,SAAW,IAAIwR,EAAAM,YACrBjQ,KAAKkJ,IAAIpL,KAAK2xB,WAAWrxB,EAAGsgB,EAAStgB,GACrC4B,KAAKkJ,IAAIpL,KAAK2xB,WAAWpxB,EAAGqgB,EAASrgB,IAEzCgS,EAAMY,YAAW,GAErB5T,UAAUiK,GACN,IAAKxJ,KAAKsf,QAAwB,OAAdtf,KAAKyF,KAAe,OACxC,MAAM8M,EAAQjG,EAAAO,aAAaC,WAC3B,QAAcpE,IAAV6J,EAEA,YADAlD,QAAQC,IAAI,oBAKhB,GAFAtP,KAAKsf,QAAS,EAEiB,IAA3B/M,EAAM4N,UAAUvkB,OAEhB,YADA2W,EAAMua,YAAY9sB,KAAKyF,MAAM,GAAO,GAIxC,MAAMuN,EAAIhT,KAAKyF,KAAKuN,EACdE,EAAIlT,KAAKyF,KAAKyN,EACdtK,EAAM2J,EAAM4N,UAAU,GAExBvX,aAAe2oB,EAAAM,WACfjpB,EAAIoK,GAAMhT,KAAKyxB,OAAS7pB,EAAA0J,UAAU6X,SAAYnW,EAC9CpK,EAAIsK,GAAMlT,KAAK0xB,OAAS9pB,EAAA0J,UAAU6X,SAAYjW,GAGlDX,EAAMua,YAAY9sB,KAAKyF,MAAM,GAAO,KA7DvB+rB,EAAO1tB,EAAAiC,WAAA,CAD3B9B,EAAAI,SACoBmtB,oDC1BrBz0B,EAAAgB,EAAAgF,GAAA,IAAA+uB,EAAA/0B,EAAA,QAAAg1B,EAAAh1B,EAAA,gBAAAmG,KAAA6uB,EAAA,YAAA7uB,GAAA,SAAA1E,GAAAzB,EAAAS,EAAAuF,EAAAvE,EAAA,kBAAAuzB,EAAAvzB,KAAA,CAAA0E,GAAA,IAAA8uB,EAAAj1B,EAAA,QAOAqG,EAAgBrH,OAAAi2B,EAAA,KAAAj2B,CACdg2B,EAAA,WACAD,EAAA,KACAA,EAAA,MACF,EACA,KACA,KACA,MAIA1uB,EAAAC,QAAAC,OAAA,WACeP,EAAA,WAAAK,gHCnBf4b,EAAAlb,EAAAC,gBAAAhH,EAAA,SAEA8K,EAAA9K,EAAA,QACA8U,EAAA9U,EAAA,QACAuP,EAAAvP,EAAA,QACA6K,EAAA7K,EAAA,QACAkiB,EAAAliB,EAAA,QACAkH,EAAAH,EAAAC,gBAAAhH,EAAA,SAGA,IAAqBk1B,EAArB,cAAqCjT,EAAA3a,QADrC9E,kCAEIS,KAAAvC,KAAO,MACPuC,KAAAkyB,SAAW,IAAIrgB,EAAAe,WAAW,EAAG,GAC7B5S,KAAAsf,QAAS,EAET/f,YAAYiK,GACRxJ,KAAKkyB,SAAWjT,EAAAc,SAASvW,GACzBxJ,KAAKsf,QAAS,EAElB/f,YAAYiK,GACR,IAAKxJ,KAAKsf,OAAQ,OAClB,MAAMQ,EAAQb,EAAAc,SAASvW,GACjB2oB,EAAWrS,EAAMxF,SAASta,KAAKkyB,UAAU1X,SAAS,EAAI5S,EAAA0J,UAAU2B,YACtErL,EAAA0J,UAAU8gB,aAAalwB,KAAKkvB,MAAMe,EAAS7xB,IAC3CsH,EAAA0J,UAAU+gB,aAAanwB,KAAKkvB,MAAMe,EAAS5xB,IAC3CP,KAAKkyB,SAAWpS,EAChBxT,EAAAO,aAAasG,aAEjB5T,UAAUiK,GACNxJ,KAAKsf,QAAS,EACdzX,EAAA6d,sBApBauM,EAAOnuB,EAAAiC,WAAA,CAD3B9B,EAAAI,SACoB4tB,oDCVrBl1B,EAAAgB,EAAAgF,GAAA,IAAAuvB,EAAAv1B,EAAA,QAAAw1B,EAAAx1B,EAAA,gBAAAmG,KAAAqvB,EAAA,YAAArvB,GAAA,SAAA1E,GAAAzB,EAAAS,EAAAuF,EAAAvE,EAAA,kBAAA+zB,EAAA/zB,KAAA,CAAA0E,GAAAnG,EAAA,YAAAoG,EAAApG,EAAA,QAQAqG,EAAgBrH,OAAAoH,EAAA,KAAApH,CACdw2B,EAAA,WACAD,EAAA,KACAA,EAAA,MACF,EACA,KACA,WACA,MAIAlvB,EAAAC,QAAAC,OAAA,oBACeP,EAAA,WAAAK,gGClBf,MAAAovB,EAAAz1B,EAAA,QAGA,SAAgB8N,IACZ,MAAO,uCAAuC4nB,QAAQ,QAASl1B,IAC3D,MAAMQ,EAAqB,GAAhBmE,KAAKgL,SAAiB,EAC3BqL,EAAU,MAANhb,EAAYQ,EAAS,EAAJA,EAAW,EACtC,OAAOwa,EAAEma,SAAS,MAI1B,SAAgBC,EAAWlzB,GACvB,OAAOA,EAAKmzB,OAAO,GAAGC,cAAgBpzB,EAAKR,MAAM,GAGrD,SAAgBmnB,EAASthB,EAAWwhB,GAChC,OAAIxhB,EAAEyhB,cAAgBD,EAAEC,eAAuB,EACnC,EAGhB,SAAgBuM,EAAYC,GACxB,IAAIrzB,EAAOqzB,EAAQzc,MAAM5W,KACzB,MAAgB,OAATA,GAA2C,OAA1BqzB,EAAQC,cAC5BD,EAAUA,EAAQC,cAClBtzB,EAAOqzB,EAAQzc,MAAM5W,KAGzB,OADa,OAATA,IAAeA,EAAOX,OAAOk0B,iBAAiBzoB,SAAS8W,MAAM4R,iBAAiB,SAC3ExzB,EAGX,SAAgByzB,EAAiB1zB,EAAcC,GAC3C,IAAI0zB,EAAiC5oB,SAASC,eAAe,eACzC,OAAhB2oB,IACAA,EAAc5oB,SAASkiB,cAAc,UACrC0G,EAAY1c,GAAK,cACjB0c,EAAY9c,MAAMhS,QAAU,GAC5BkG,SAAS8W,KAAK+R,YAAYD,IAE9B,MAAM3yB,EAAM2yB,EAAYxG,WAAW,MAEnC,OADAnsB,EAAIf,KAAOA,EACJwC,KAAK6I,KAAKtK,EAAIuB,YAAYvC,GAAMwC,OAG3C,SAAgBqxB,EAAaC,EAAUC,GACnC,MAAMC,EAAa,CAAC,GAAI,IAExB,OADAF,EAAItY,QAAQvc,GAAM80B,EAAU90B,GAAK+0B,EAAI,GAAG33B,KAAK4C,GAAK+0B,EAAI,GAAG33B,KAAK4C,IACvD+0B,EAGX,SAAgB1iB,EAActQ,EAA+BhB,EAAcwC,EAAe6Q,GACtF,MAAM1S,EAA2C,GAAlCszB,OAAOjzB,EAAIf,KAAK0C,MAAM,MAAM,IACrCuxB,EAAYlzB,EAAIuB,YAAYvC,GAAMwC,MACxC,OAAOC,KAAKkJ,IAAInJ,EAAQ0xB,EAAW7gB,EAAS1S,GAGhD,SAAgBwzB,EAAwBC,GACpC,OAAOC,mBAAmBD,GAAKpB,QAAQ,WAAYl1B,IAC/C,MAAO,IAAMA,EAAEw2B,WAAW,GAAGrB,SAAS,MAtD9Cv1B,EAAA0N,SAQA1N,EAAAw1B,aAIAx1B,EAAAipB,WAKAjpB,EAAA21B,cAUA31B,EAAAg2B,mBAaAh2B,EAAAm2B,YAMAn2B,EAAA4T,gBAMA5T,EAAAy2B,0BAMA,MAAaI,EAAbz0B,cACIS,KAAAgmB,KAAY,GACZhmB,KAAAi0B,OAAc,GAEdr4B,aACI,OAAOoE,KAAKgmB,KAAKpqB,OAGrB2D,IAAIf,GACA,OAAOwB,KAAKi0B,OAAOj0B,KAAKgmB,KAAK1c,QAAQ9K,IAEzCe,cAAcya,GACV,OAAOha,KAAKi0B,OAAOja,GAEvBza,YAAYya,GACR,OAAOha,KAAKgmB,KAAKhM,GAErBza,IAAIf,EAAQN,GACR8B,KAAKgmB,KAAKlqB,KAAK0C,GACfwB,KAAKi0B,OAAOn4B,KAAKoC,GAErBqB,IAAIf,GACA,OAAOwB,KAAKsJ,QAAQ9K,IAAQ,EAEhCe,QAAQwzB,GACJ,OAAO/yB,KAAKgmB,KAAK1c,QAAQypB,GAE7BxzB,OAAOwzB,GACH,MAAM/Y,EAAMha,KAAKsJ,QAAQypB,GACzB/yB,KAAKgmB,KAAKlpB,OAAOkd,EAAK,GACtBha,KAAKi0B,OAAOn3B,OAAOkd,EAAK,IAIhC,SAAgBka,IACZ,OAAU1B,EAAAt1B,IAAIgI,UAAU,GAAGR,MAAMyvB,gBAGrC,SAAgB5T,EAAsBhL,GAClC,MAAM+J,EAAckT,EAAAt1B,IAAIgI,UAAU,GAAGR,MAAMyvB,gBAC3C,OAAU7U,EAAO5a,MAAM6Q,GAxC3BpY,EAAA62B,aAkCA72B,EAAA+2B,eAIA/2B,EAAAojB,8CCrGAxjB,EAAAgB,EAAAgF,GAAA,IAAAqxB,EAAAr3B,EAAA,QAAAs3B,EAAAt3B,EAAA,gBAAAmG,KAAAmxB,EAAA,YAAAnxB,GAAA,SAAA1E,GAAAzB,EAAAS,EAAAuF,EAAAvE,EAAA,kBAAA61B,EAAA71B,KAAA,CAAA0E,GAAA,IAAA8uB,EAAAj1B,EAAA,QAOAqG,EAAgBrH,OAAAi2B,EAAA,KAAAj2B,CACds4B,EAAA,WACAD,EAAA,KACAA,EAAA,MACF,EACA,KACA,KACA,MAIAhxB,EAAAC,QAAAC,OAAA,kBACeP,EAAA,WAAAK,gGCnBf,MAAAmJ,EAAAxP,EAAA,QAIA,SAAgBmS,EAAG0C,GACf,OAAQA,EAAQ,GAAK,EAGzB,SAAgB7C,EAAI6C,GAChB,OAAQA,EAAQ,GAAK,EAGzB,SAAgB0iB,EAASC,EAAYC,GACjC,MAAMC,EAAK,IAAIloB,EAAAmoB,eAAeH,EAAI,MAClC,GAAIE,EAAGhmB,MACH,EAAG,CACC,MAAMkmB,EAAO,EAAIF,EAAGt2B,EAAGy2B,OAAOL,GAAME,EAAGI,GACjCtc,EAAIkc,EAAGt2B,EAAG2Q,SAAS6lB,GACzB,IAAKpc,EAAEuc,SAAU,CACb,GAAIvc,IAAMic,EACN,MAAO,CAAEnrB,UAAU,EAAM0rB,GAAIP,EAAIvpB,GAAIwpB,EAAGt2B,EAAIzC,EAAG+4B,EAAGI,IAC/C,CACH,MAAMG,EAASjQ,EAAYwP,EAAGhzB,MAAQizB,EAAGjzB,MAAQgX,EAAEhX,OACnD,GAAIyzB,IAAWzoB,EAAAyY,KAAKiQ,WAAaC,EAAiBX,EAAGhzB,MAAQgX,EAAEhX,MAAQizB,EAAGjzB,OACtE,MAAO,CAAE8H,UAAU,EAAM0rB,GAAIxc,EAAGtN,GAAIwpB,EAAGt2B,EAAIzC,EAAG+4B,EAAGI,YAIxDJ,EAAG3oB,QAEhB,MAAO,CAAEzC,UAAU,GAGvB,SAAgB6rB,EAAiBr2B,EAAUs2B,EAAUp3B,GACjD,IAAIq3B,EACAC,EAQJ,OAPIC,EAAQ,EAAGz2B,EAAGd,KAAOwO,EAAAyY,KAAKuQ,OAC1BH,EAAME,EAAQ,EAAGz2B,EAAGs2B,GACpBE,EAAMC,EAAQ,EAAGH,EAAGp3B,KAEpBq3B,EAAME,EAAQ,EAAGz2B,EAAGs2B,GACpBE,EAAMC,EAAQ,EAAGH,EAAGp3B,IAEhBq3B,IAAQ7oB,EAAAyY,KAAKwQ,SAAWH,IAAQ9oB,EAAAyY,KAAKwQ,SAAaJ,IAAQ7oB,EAAAyY,KAAKyQ,QAAUJ,IAAQ9oB,EAAAyY,KAAKyQ,OAGlG,SAASH,EAAQ1jB,EAAe9M,EAAUwhB,GACtC,OAAIxhB,EAAE8M,GAAS0U,EAAE1U,GAAerF,EAAAyY,KAAKwQ,QACjC1wB,EAAE8M,GAAS0U,EAAE1U,GAAerF,EAAAyY,KAAKyQ,OAC9BlpB,EAAAyY,KAAKuQ,MAGhB,SAAgBxQ,EAAYlmB,EAAUs2B,EAAUp3B,GAC5C,MAAM23B,EAAK72B,EAAE,GACP82B,EAAK92B,EAAE,GACP+2B,EAAKT,EAAE,GACPU,EAAKV,EAAE,GACPW,EAAK/3B,EAAE,GACPg4B,EAAKh4B,EAAE,GACPi4B,EAAMJ,EAAKF,EACXO,EAAMJ,EAAKF,EACXO,EAAMJ,EAAKJ,EACXS,EAAMJ,EAAKJ,EACXS,EAAMC,EAAYL,EAAKC,EAAKC,EAAKC,GACvC,IAAIG,EAAOp0B,KAAKgY,IAAI8b,GAChBO,EAAOr0B,KAAKgY,IAAI+b,GACpB,MAAMO,EAAOt0B,KAAKgY,IAAIgc,GAChBO,EAAOv0B,KAAKgY,IAAIic,GAKtB,GAJIG,EAAOE,IAAMF,EAAOE,GACpBD,EAAOE,IAAMF,EAAOE,GACpBH,EAAOC,KAAOD,EAAMC,GAAQ,CAACA,EAAMD,IAEnCA,EAAO,QAAmB,IAATA,EACjB,OAAO/pB,EAAAyY,KAAKE,KAGhB,GAAIqR,EAAO,MAAO,CACd,MAAMG,EAAMhD,OAAOiD,QAAUL,EAAOC,EACpC,GAAIH,EAAMM,EAAK,OAAOnqB,EAAAyY,KAAK4R,SAC3B,GAAIR,GAAOM,EAAK,OAAOnqB,EAAAyY,KAAK6R,SAEhC,OAAOtqB,EAAAyY,KAAKE,KAGhB,SAAgBmR,EAAYS,EAAaC,EAAaC,EAAaC,GAC/D,OAAOH,EAAMG,EAAMF,EAAMC,EAG7B,SAAgBE,EAA8Br4B,EAAUs2B,EAAUp3B,GAC9D,OAAOs4B,EAAYlB,EAAE,GAAKt2B,EAAE,GAAIs2B,EAAE,GAAKt2B,EAAE,GAAId,EAAE,GAAKc,EAAE,GAAId,EAAE,GAAKc,EAAE,IAAM,EAG7E,SAAgBs4B,EAAqBh5B,EAAaU,EAAUu4B,GACxD,IAAKj5B,EAAEsR,aACH,OAAO4nB,EAAsBl5B,EAAE2Q,SAAS,GAAIvN,MAAQpD,EAAE2Q,SAAS,GAAIvN,MAAQpD,EAAE2Q,SAAS,GAAIvN,MAAQ1C,EAAGu4B,GACzG,MAAM,IAAIE,MAAM,OAGpB,SAASD,EAAsBE,EAAWC,EAAWC,EAAW54B,EAAUu4B,GACtE,MAAMM,EAAKC,EAAgBJ,EAAIC,EAAIC,EAAI54B,GACvC,GAAI64B,IAAOnrB,EAAAyY,KAAK4S,uBAAyBR,EAAS,OAAOM,EACzD,MAAMt3B,EAAS,CAACm3B,EAAIC,EAAIC,EAAI54B,GAC5BuB,EAAO+lB,KAAK,CAACrhB,EAAGwhB,IAAMxhB,EAAE,GAAKwhB,EAAE,IAAMxhB,EAAE,GAAKwhB,EAAE,IAC9C,IAAK,MAAM/kB,KAASnB,EAAOy3B,UAAW,CAClC,GAAIt2B,IAAU1C,EAAG,OAAO0N,EAAAyY,KAAK8S,iBAC7B,IAAIn6B,EAAIonB,EAAYwS,EAAIC,EAAI34B,GAC5B,GAAI0C,IAAUk2B,GAAM95B,IAAM4O,EAAAyY,KAAKiQ,UAAW,OAAOt3B,EAEjD,GADAA,EAAIonB,EAAYwS,EAAI14B,EAAG44B,GACnBl2B,IAAUi2B,GAAM75B,IAAM4O,EAAAyY,KAAKiQ,UAAW,OAAOt3B,EAEjD,GADAA,EAAIonB,EAAYlmB,EAAG24B,EAAIC,GACnBl2B,IAAUg2B,GAAM55B,IAAM4O,EAAAyY,KAAKiQ,UAAW,OAAOt3B,EAErD,OAAO4O,EAAAyY,KAAK8S,iBAGhB,SAAgBC,EAAQl5B,EAAUs2B,GAC9B,OAAOt2B,EAAE,KAAOs2B,EAAE,IAAMt2B,EAAE,KAAOs2B,EAAE,GAGvC,SAAgB6C,EAAUn5B,EAAUs2B,GAChC,OAAOt2B,EAAE,GAAKs2B,EAAE,IAAOt2B,EAAE,KAAOs2B,EAAE,IAAMt2B,EAAE,GAAKs2B,EAAE,GAGrD,SAAgB8C,EAAUp5B,EAAUs2B,GAChC,OAAI6C,EAAUn5B,EAAGs2B,GAAW5oB,EAAAyY,KAAKwQ,QAC7BuC,EAAQl5B,EAAGs2B,GAAW5oB,EAAAyY,KAAKuQ,MACxBhpB,EAAAyY,KAAKyQ,OAGhB,SAASkC,EAAgB94B,EAAUs2B,EAAUp3B,EAAUI,GACnD,MAAM+5B,EAAM/C,EAAE,GAAKt2B,EAAE,GACfs5B,EAAMhD,EAAE,GAAKt2B,EAAE,GACfu5B,EAAMr6B,EAAE,GAAKc,EAAE,GACfw5B,EAAMt6B,EAAE,GAAKc,EAAE,GACfy5B,EAAMn6B,EAAE,GAAKU,EAAE,GACf05B,EAAMp6B,EAAE,GAAKU,EAAE,GACf25B,EAAMr6B,EAAE,GAAKg3B,EAAE,GACfsD,EAAMt6B,EAAE,GAAKg3B,EAAE,GACfuD,EAAM36B,EAAE,GAAKo3B,EAAE,GACfwD,EAAM56B,EAAE,GAAKo3B,EAAE,GAEfiB,EAAMC,EAAY6B,EAAMK,EAAMJ,EAAMG,EAAKA,EAAME,EAAMD,EAAME,EAAKP,EAAMG,EAAMF,EAAMC,EAAKA,EAAMM,EAAML,EAAMM,GAC/G,IAAIC,EAAO12B,KAAKgY,IAAIge,GAChBW,EAAO32B,KAAKgY,IAAIie,GACpB,MAAMW,EAAO52B,KAAKgY,IAAIke,GAChBW,EAAO72B,KAAKgY,IAAIme,GAChBW,EAAO92B,KAAKgY,IAAIse,GAChBS,EAAO/2B,KAAKgY,IAAIue,GAChBS,EAAOh3B,KAAKgY,IAAIoe,GAChBa,EAAOj3B,KAAKgY,IAAIqe,GAChBa,EAAOl3B,KAAKgY,IAAIwe,GAChBW,EAAOn3B,KAAKgY,IAAIye,GActB,GAZIC,EAAOE,IAAMF,EAAOE,GACpBF,EAAOM,IAAMN,EAAOM,GACpBN,EAAOI,IAAMJ,EAAOI,GACpBJ,EAAOQ,IAAMR,EAAOQ,GAEpBP,EAAOE,IAAMF,EAAOE,GACpBF,EAAOM,IAAMN,EAAOM,GACpBN,EAAOI,IAAMJ,EAAOI,GACpBJ,EAAOQ,IAAMR,EAAOQ,GAEpBT,EAAOC,KAAOD,EAAMC,GAAQ,CAACA,EAAMD,IAEnCA,EAAO,OAAkB,IAATA,EAAY,OAAOrsB,EAAAyY,KAAK4S,qBAEvC,GAAIiB,EAAO,KAAM,CAClB,MAAMnC,EAAMhD,OAAOiD,QAAUiC,EAAOC,GAAQA,EAAOA,GACnD,GAAIzC,EAAMM,EAAK,OAAOnqB,EAAAyY,KAAKsU,iBAC3B,GAAIlD,GAAOM,EAAK,OAAOnqB,EAAAyY,KAAK8S,iBAGhC,OAAOvrB,EAAAyY,KAAKE,KAGhB,SAASqU,EAA0B/B,EAAWC,EAAW+B,EAAWC,GAChE,OAAQ1U,EAAYyS,EAAIC,EAAI+B,IACxB,KAAKjtB,EAAAyY,KAAKC,UACN,OAAOF,EAAYyU,EAAIC,EAAIhC,KAAQlrB,EAAAyY,KAAK0U,WAC5C,KAAKntB,EAAAyY,KAAK0U,WACN,OAAO3U,EAAYyU,EAAIC,EAAIhC,KAAQlrB,EAAAyY,KAAKC,UAC5C,KAAK1Y,EAAAyY,KAAKiQ,UACN,OAAO,GAInB,SAAS0E,EAA2BnC,EAAWC,EAAW+B,EAAWC,GACjE,OAAQ1U,EAAYyS,EAAIC,EAAI+B,IACxB,KAAKjtB,EAAAyY,KAAKC,UACN,OAAOF,EAAYyS,EAAIC,EAAIgC,KAAQltB,EAAAyY,KAAKC,UAC5C,KAAK1Y,EAAAyY,KAAK0U,WACN,OAAO3U,EAAYyS,EAAIC,EAAIgC,KAAQltB,EAAAyY,KAAK0U,WAC5C,KAAKntB,EAAAyY,KAAKiQ,UACN,OAAO,GAInB,SAAgBpQ,EAAa+U,EAAWC,EAAWC,EAAWC,GAC1D,MAAMr+B,EAAIs+B,EAAoBJ,EAAIC,EAAIC,EAAIC,GAC1C,OAAQr+B,EAAEu+B,kBACN,KAAKC,EAAiBC,MAClB,OAAOz+B,EAAE6F,MACb,KAAK24B,EAAiBE,gBAClB,OAAO,KAEf,MAAM,IAAI9C,MAAM,eAGpB,IAAK4C,EAML,SAASG,EAAQ9C,EAAWC,GACxB,GAAID,EAAG,KAAOC,EAAG,GAAI,MAAO,CAAC,EAAG,GAAID,EAAG,IACvC,GAAIA,EAAG,KAAOC,EAAG,GAAI,MAAO,CAAC,EAAG,GAAID,EAAG,IACvC,MAAMj3B,EAAIk3B,EAAG,GAAKD,EAAG,GACfh3B,EAAIi3B,EAAG,GAAKD,EAAG,GACrB,MAAO,EAAEh3B,EAAGD,GAAIA,EAAIi3B,EAAG,GAAKh3B,EAAIg3B,EAAG,IAGvC,SAASyC,EAAoBJ,EAAWC,EAAWC,EAAWC,GAC1D,IAAKO,EAAYV,EAAIC,EAAIC,EAAIC,GAAK,MAAO,CAAEE,iBAAkBC,EAAiBE,gBAAiB74B,MAAO,MACtG,MAAMg5B,EAAKF,EAAQT,EAAIC,GACjBW,EAAKH,EAAQP,EAAIC,GACjBU,EAAOC,EAAwBH,EAAIC,GACzC,OAAQC,EAAKR,kBACT,KAAKC,EAAiBC,MAClB,OAAOM,EAGf,MAAM,IAAInD,MAAM,eAGpB,SAASoD,EAAwBC,EAAUC,GACvC,MAAMC,EAAQF,EAAG,GAAKC,EAAG,GAAKA,EAAG,GAAKD,EAAG,GACnCG,EAAOH,EAAG,GAAKC,EAAG,GAAKA,EAAG,GAAKD,EAAG,GAClCI,EAAOH,EAAG,GAAKD,EAAG,GAAKA,EAAG,GAAKC,EAAG,GACxC,MAAO,CACHX,iBAAkBC,EAAiBC,MACnC54B,MAAO,CAACu5B,EAAOD,EAAOE,EAAOF,IAIrC,SAASP,EAAYU,EAAWC,EAAWC,EAAWC,GAClD,GAAInD,EAAUgD,EAAIC,IACd,GAAIjD,EAAUkD,EAAIC,IACd,GAAInD,EAAUiD,EAAIC,IAAOlD,EAAUmD,EAAIH,GAAK,OAAO,OAEnD,GAAIhD,EAAUiD,EAAIE,IAAOnD,EAAUkD,EAAIF,GAAK,OAAO,OAGvD,GAAIhD,EAAUkD,EAAIC,IACd,GAAInD,EAAUgD,EAAIE,IAAOlD,EAAUmD,EAAIF,GAAK,OAAO,OAEnD,GAAIjD,EAAUgD,EAAIG,IAAOnD,EAAUkD,EAAID,GAAK,OAAO,EAG3D,GAAIjD,EAAUgD,EAAIC,GACd,GAAIjD,EAAUkD,EAAIC,GACd,OAAQlD,EAAU+C,EAAIE,IAClB,KAAK3uB,EAAAyY,KAAKwQ,QACN,OAAQyC,EAAUgD,EAAIC,IAClB,KAAK3uB,EAAAyY,KAAKwQ,QACN,OAAO,EACX,KAAKjpB,EAAAyY,KAAKuQ,MACN,OAAO,EACX,QACI,OAAQ0C,EAAUgD,EAAIE,IAClB,KAAK5uB,EAAAyY,KAAKwQ,QACN,OAAO+D,EAA0ByB,EAAIC,EAAIC,EAAIC,GACjD,KAAK5uB,EAAAyY,KAAKuQ,MACN,OAAO,EACX,QACI,OAAOoE,EAA2BqB,EAAIC,EAAIC,EAAIC,IAKlE,KAAK5uB,EAAAyY,KAAKuQ,MACN,OAAO,EACX,QACI,OAAQ0C,EAAUkD,EAAIH,IAClB,KAAKzuB,EAAAyY,KAAKwQ,QACN,OAAO,EACX,KAAKjpB,EAAAyY,KAAKuQ,MACN,OAAO,EACX,QACI,OAAQ0C,EAAUkD,EAAIF,IAClB,KAAK1uB,EAAAyY,KAAKwQ,QACN,OAAO+D,EAA0B2B,EAAIC,EAAIH,EAAIC,GACjD,KAAK1uB,EAAAyY,KAAKuQ,MACN,OAAO,EACX,QACI,OAAOoE,EAA2BuB,EAAIC,EAAIH,EAAIC,UAMtE,OAAQhD,EAAU+C,EAAIG,IAClB,KAAK5uB,EAAAyY,KAAKwQ,QACN,OAAQyC,EAAUgD,EAAIE,IAClB,KAAK5uB,EAAAyY,KAAKwQ,QACN,OAAO,EACX,KAAKjpB,EAAAyY,KAAKuQ,MACN,OAAO,EACX,QACI,OAAQ0C,EAAUgD,EAAIC,IAClB,KAAK3uB,EAAAyY,KAAKwQ,QACN,OAAO+D,EAA0ByB,EAAIC,EAAIE,EAAID,GACjD,KAAK3uB,EAAAyY,KAAKuQ,MACN,OAAO,EACX,QACI,OAAOoE,EAA2BqB,EAAIC,EAAIE,EAAID,IAKlE,KAAK3uB,EAAAyY,KAAKuQ,MACN,OAAO,EACX,QACI,OAAQ0C,EAAUiD,EAAIF,IAClB,KAAKzuB,EAAAyY,KAAKwQ,QACN,OAAO,EACX,KAAKjpB,EAAAyY,KAAKuQ,MACN,OAAO,EACX,QACI,OAAQ0C,EAAUiD,EAAID,IAClB,KAAK1uB,EAAAyY,KAAKwQ,QACN,OAAO+D,EAA0B4B,EAAID,EAAIF,EAAIC,GACjD,KAAK1uB,EAAAyY,KAAKuQ,MACN,OAAO,EACX,QACI,OAAOoE,EAA2BwB,EAAID,EAAIF,EAAIC,UAO1E,GAAIjD,EAAUkD,EAAIC,GACd,OAAQlD,EAAUgD,EAAIC,IAClB,KAAK3uB,EAAAyY,KAAKwQ,QACN,OAAQyC,EAAU+C,EAAIE,IAClB,KAAK3uB,EAAAyY,KAAKwQ,QACN,OAAO,EACX,KAAKjpB,EAAAyY,KAAKuQ,MACN,OAAO,EACX,QACI,OAAQ0C,EAAU+C,EAAIG,IAClB,KAAK5uB,EAAAyY,KAAKwQ,QACN,OAAO+D,EAA0B0B,EAAID,EAAIE,EAAIC,GACjD,KAAK5uB,EAAAyY,KAAKuQ,MACN,OAAO,EACX,QACI,OAAOoE,EAA2BsB,EAAID,EAAIE,EAAIC,IAKlE,KAAK5uB,EAAAyY,KAAKuQ,MACN,OAAO,EACX,QACI,OAAQ0C,EAAUkD,EAAIF,IAClB,KAAK1uB,EAAAyY,KAAKwQ,QACN,OAAO,EACX,KAAKjpB,EAAAyY,KAAKuQ,MACN,OAAO,EACX,QACI,OAAQ0C,EAAUkD,EAAIH,IAClB,KAAKzuB,EAAAyY,KAAKwQ,QACN,OAAO+D,EAA0B2B,EAAIC,EAAIF,EAAID,GACjD,KAAKzuB,EAAAyY,KAAKuQ,MACN,OAAO,EACX,QACI,OAAOoE,EAA2BuB,EAAIC,EAAIF,EAAID,UAMtE,OAAQ/C,EAAUgD,EAAIE,IAClB,KAAK5uB,EAAAyY,KAAKwQ,QACN,OAAQyC,EAAU+C,EAAIG,IAClB,KAAK5uB,EAAAyY,KAAKwQ,QACN,OAAO,EACX,KAAKjpB,EAAAyY,KAAKuQ,MACN,OAAO,EACX,QACI,OAAQ0C,EAAU+C,EAAIE,IAClB,KAAK3uB,EAAAyY,KAAKwQ,QACN,OAAO+D,EAA0B0B,EAAID,EAAIG,EAAID,GACjD,KAAK3uB,EAAAyY,KAAKuQ,MACN,OAAO,EACX,QACI,OAAOoE,EAA2BsB,EAAID,EAAIG,EAAID,IAKlE,KAAK3uB,EAAAyY,KAAKuQ,MACN,OAAO,EACX,QACI,OAAQ0C,EAAUiD,EAAID,IAClB,KAAK1uB,EAAAyY,KAAKwQ,QACN,OAAO,EACX,KAAKjpB,EAAAyY,KAAKuQ,MACN,OAAO,EACX,QACI,OAAQ0C,EAAUiD,EAAIF,IAClB,KAAKzuB,EAAAyY,KAAKwQ,QACN,OAAO+D,EAA0B4B,EAAID,EAAID,EAAID,GACjD,KAAKzuB,EAAAyY,KAAKuQ,MACN,OAAO,EACX,QACI,OAAOoE,EAA2BwB,EAAID,EAAID,EAAID,MASlF,SAASI,EAAO96B,GACZ,GAAIA,IAAMA,EACN,OAAOA,EAEX,GAAIA,KAAM,IACN,OAAQozB,OAAO2H,UAEnB,GAAI/6B,IAAM,IACN,OAAO,IAEX,GAAIA,KAAOozB,OAAO2H,UACd,OAAO,IAEX,IAAI96B,EAAID,GAAKA,EAAI,EAAI,EAAIozB,OAAOiD,QAAU,EAAI,EAAIjD,OAAOiD,SACrDp2B,IAAMD,IACNC,EAAImzB,OAAO4H,UAAY5H,OAAOiD,QAAU,EAAIr2B,EAAIozB,OAAO4H,UAAY5H,OAAOiD,QAAUr2B,EAAIozB,OAAO4H,WAE/F/6B,IAAM,MACNA,GAAKmzB,OAAO2H,WAEhB,MAAM/U,EAAIhmB,GAAKC,EAAID,GAAK,EACpBA,EAAIgmB,GAAKA,EAAI/lB,IACbA,EAAI+lB,GAER,MAAM/oB,GAAKgD,EAAID,GAAK,EAIpB,OAHIA,EAAI/C,GAAKA,EAAIgD,IACbA,EAAIhD,GAEK,IAANgD,GAAW,EAAIA,EAG1B,SAAgBg7B,EAAIj7B,GAChB,OAAOA,EAAI,EAAI86B,EAAO96B,GAAKA,EAAIA,EAAI86B,GAAQ96B,GAvc/CnD,EAAA+R,KAIA/R,EAAA4R,MAIA5R,EAAAm3B,WAqBAn3B,EAAA+3B,mBAmBA/3B,EAAA4nB,cAgCA5nB,EAAAk5B,cAIAl5B,EAAA+5B,gCAIA/5B,EAAAg6B,uBAuBAh6B,EAAA46B,UAIA56B,EAAA66B,YAIA76B,EAAA86B,YA2EA96B,EAAA0nB,eAWA,SAAKqV,GACDA,IAAA,wCACAA,IAAA,oBACAA,IAAA,wBAHJ,CAAKA,MAAgB,KAyPrB/8B,EAAAo+B,2CC1cAx+B,EAAAgB,EAAAgF,GAAA,IAAAy4B,EAAAz+B,EAAA,QAAA0+B,EAAA1+B,EAAA2B,EAAA88B,GAAA,QAAAt4B,KAAAs4B,EAAA,YAAAt4B,GAAA,SAAA1E,GAAAzB,EAAAS,EAAAuF,EAAAvE,EAAA,kBAAAg9B,EAAAh9B,KAAA,CAAA0E,GAAsXH,EAAA,WAAA04B,EAAG,uCCAzX,IAAAC,EAAA3+B,EAAA,QAAA4+B,EAAA5+B,EAAA2B,EAAAg9B,GAAsgBC,EAAG,uCCAzgB,IAAAC,EAAA7+B,EAAA,QAAA8+B,EAAA9+B,EAAA2B,EAAAk9B,GAA2gBC,EAAG,0GCmB9gB73B,EAAAF,EAAAC,gBAAAhH,EAAA,SACAkH,EAAAH,EAAAC,gBAAAhH,EAAA,SACAoH,EAAApH,EAAA,QAGA,IAAqB++B,EAArB,cAAmC93B,EAAAK,QADnC9E,kCASIS,KAAA+7B,YAAa,EACb/7B,KAAAg8B,QAAU,EACVh8B,KAAAi8B,QAAU,EACVj8B,KAAAk8B,QAAU,EACVl8B,KAAAm8B,QAAU,EACVn8B,KAAAo8B,UAAW,EAGX78B,UACIS,KAAKq8B,iBAGT98B,UACIS,KAAKq8B,iBAGT98B,MAAMiK,GACFxJ,KAAKuF,MAAM,SAEfhG,iBACI,IAAKS,KAAK+7B,WAAY,CAClB,MAAMO,EAAiBt8B,KAAK0E,MAAM43B,UAClC,GAA8B,IAA1BA,EAAUC,aAAgD,IAA3BD,EAAUE,aAAoB,OACjEx8B,KAAK0E,MAAM43B,UAAUhmB,MAAM/R,MAAQxF,OAAO6G,WAAa02B,EAAUC,aAAe,EAAI,KACpFv8B,KAAK0E,MAAM43B,UAAUhmB,MAAM9R,KAAOzF,OAAO+G,YAAcw2B,EAAUE,cAAgB,EAAI,KACrFx8B,KAAK+7B,YAAa,GAG1Bx8B,UAAUiK,GACQ,OAAVA,GAAyC,OAAvBA,EAAMO,eAC5BP,EAAMO,aAAaC,QAAQ,OAAQ,IAGnCR,EAAMO,aAAa4c,aAAsB3mB,KAAK0E,MAAM43B,UAAW9yB,EAAMwyB,QAASxyB,EAAMyyB,SACpFj8B,KAAKg8B,QAAUxyB,EAAMwyB,QACrBh8B,KAAKi8B,QAAUzyB,EAAMyyB,QACrBj8B,KAAKk8B,QAAU1yB,EAAM0yB,QACrBl8B,KAAKm8B,QAAU3yB,EAAM2yB,QACrBn8B,KAAKo8B,UAAW,GAEpB78B,QAAQiK,GACJxJ,KAAKo8B,UAAW,EAChB,IAAI73B,EAAOiF,EAAMizB,QAAUz8B,KAAKg8B,QAC5Bx3B,EAAMgF,EAAMkzB,QAAU18B,KAAKi8B,QACT,IAAlBzyB,EAAMizB,SAAmC,IAAlBjzB,EAAMkzB,SAAiC,IAAhBlzB,EAAMse,OAA+B,IAAhBte,EAAMue,QACzExjB,EAAOo4B,SAAS38B,KAAK0E,MAAM43B,UAAUhmB,MAAM/R,KAAO,KAAOvE,KAAKk8B,QAAU1yB,EAAM0yB,SAC9E13B,EAAMm4B,SAAS38B,KAAK0E,MAAM43B,UAAUhmB,MAAM9R,IAAM,KAAOxE,KAAKm8B,QAAU3yB,EAAM2yB,UAE5E53B,EAAO,IAAGA,EAAO,GACjBA,EAAOxF,OAAO6G,WAAa,MAAKrB,EAAOxF,OAAO6G,WAAa,KAC3DpB,EAAM,IAAGA,EAAM,GACfA,EAAMzF,OAAO+G,YAAc,MAAKtB,EAAMzF,OAAO+G,YAAc,KAC/D9F,KAAK0E,MAAM43B,UAAUhmB,MAAM/R,KAAOA,EAAO,KACzCvE,KAAK0E,MAAM43B,UAAUhmB,MAAM9R,IAAMA,EAAM,KACvCxE,KAAK0E,MAAM43B,UAAUhmB,MAAMhS,QAAU,QAEzC/E,SAASiK,GACDxJ,KAAKo8B,WAAUp8B,KAAK0E,MAAM43B,UAAUhmB,MAAMhS,QAAU,UAhE7CR,EAAAiC,WAAA,CAAd5B,EAAA6B,KAAKE,wCACkCpC,EAAAiC,WAAA,CAAvC5B,EAAA6B,KAAK,CAAE/F,KAAMiG,QAAS7B,SAAS,gCAFfy3B,EAAKh4B,EAAAiC,WAAA,CADzB9B,EAAAI,SACoBy3B,qHCxBrBr1B,EAAA3C,EAAAC,gBAAAhH,EAAA,SAGA6K,EAAA7K,EAAA,QAEaI,EAAAyJ,OAASH,EAAApC,QAAG+C,SAASC,SAAW,KAAOD,SAASE,KAAO,gBAAiB,CAAEC,aAAa,IAGpGpK,EAAAyJ,OAAOwN,GAAG,UAAW,KACjB/E,QAAQC,IAAI,eAEhBnS,EAAAyJ,OAAOwN,GAAG,aAAc,KACpB/E,QAAQC,IAAI,kBAEhBnS,EAAAyJ,OAAOwN,GAAG,WAAawoB,IACnBvtB,QAAQC,IAAI,eACZvQ,OAAOqI,SAAS8jB,KAAO0R,IAE3Bz/B,EAAAyJ,OAAOwN,GAAG,kBAAoB7L,IAC1BX,EAAAM,WAAW20B,QAAQt0B,KAEvBpL,EAAAyJ,OAAOwN,GAAG,aAAe0oB,IAErB,GADAl1B,EAAAM,WAAWiG,QACP2uB,EAAOtW,SACP,IAAK,MAAMuW,KAASD,EAAOtW,SACvB5e,EAAAM,WAAWG,MAAM20B,IAAID,EAAMrmB,GAAIqmB,GAC3BA,EAAMl0B,UACNjB,EAAAM,WAAWC,MAAMrM,KAAKihC,EAAMrmB,IAE5B9O,EAAAM,WAAWD,QAAQnM,KAAKihC,EAAMrmB,MAK9CvZ,EAAAyJ,OAAOwN,GAAG,gBAAkB0oB,IACxBl1B,EAAAM,WAAWD,QAAQnM,KAAKghC,EAAOpmB,IAC/B9O,EAAAM,WAAWG,MAAM20B,IAAIF,EAAOpmB,GAAIomB,KAEpC3/B,EAAAyJ,OAAOwN,GAAG,sBAAwBoE,IAC9B5Q,EAAAM,WAAWG,MAAM20B,IAAIxkB,EAAM9B,GAAI8B,GAC/B5Q,EAAAM,WAAWC,MAAMrM,KAAK0c,EAAM9B,4GCnBhCzS,EAAAH,EAAAC,gBAAAhH,EAAA,SAEAkgC,EAAAn5B,EAAAC,gBAAAhH,EAAA,SACAiiB,EAAAlb,EAAAC,gBAAAhH,EAAA,SAEA4K,EAAA5K,EAAA,QACAuP,EAAAvP,EAAA,QACA6K,EAAA7K,EAAA,QAOA,IAAqBmgC,EAArB,cAAwCle,EAAA3a,QALxC9E,kCAMIS,KAAAvC,KAAO,SACPuC,KAAAsf,QAAS,EAETvJ,aACI,MAAMonB,EAAkD,CAACC,GAAI,IAC7D,IAAK,MAAMt9B,KAAQ/D,OAAOiqB,KAAKpe,EAAA0J,UAAUyE,QAAS,CAC9C,MAAMC,EAAQpO,EAAA0J,UAAUyE,OAAOjW,GAC1BkW,EAAMF,UAEDE,EAAMF,YAAYqnB,IAAMA,EAAInnB,EAAMF,UAAY,IACpDqnB,EAAInnB,EAAMF,UAAUha,KAAK,CAACka,EAAMlW,KAAMkW,EAAMvY,OAC5C0/B,EAAInnB,EAAMF,UAAUqQ,KAAK,CAACrhB,EAAGwhB,IAAMxhB,EAAE,GAAGu4B,cAAc/W,EAAE,MAJvC6W,EAAI,IAAIrhC,KAAK,CAACka,EAAMlW,KAAMkW,EAAMvY,OAOzD,OAAO0/B,EAGXG,mBACI,MAAMrJ,EAA2C,GACjD,IAAK,MAAMkJ,KAAOphC,OAAOiqB,KAAKhmB,KAAK+V,QAC/Bke,EAAOkJ,GAAOv1B,EAAA0J,UAAUisB,aAAatX,OAAOuX,GAAKx9B,KAAK+V,OAAOonB,GAAKh8B,IAAI9D,GAAKA,EAAE,IAAIgM,SAASm0B,IAE9F,OAAOvJ,EAGXwJ,iBACI,OAAO1hC,OAAOiqB,KAAKhmB,KAAK+V,QAAQoQ,OAGpC5mB,SAASO,GACL,OAAO8H,EAAA0J,UAAUisB,aAAal0B,SAASvJ,GAG3CP,aAAaO,GACT,MAAMpE,EAAIkM,EAAA0J,UAAUisB,aAAaj0B,QAAQxJ,GACrCpE,GAAK,EAAGkM,EAAA0J,UAAUisB,aAAazgC,OAAOpB,EAAG,GACxCkM,EAAA0J,UAAUisB,aAAazhC,KAAKgE,GACjCwM,EAAAO,aAAasG,aAGjB5T,kBACIqI,EAAA0J,UAAUosB,wBACVpxB,EAAAO,aAAasG,aAGjB5T,gBAAgBnE,GACZ,GAAMA,EAAK6Z,SAASjV,KAAK+V,OAAzB,CACA,IAAK,MAAOjW,EAAM69B,KAAM39B,KAAK+V,OAAO3a,EAAK6Z,OAAQ,CAC7C,MAAM+E,EAAMpS,EAAA0J,UAAUisB,aAAaj0B,QAAQxJ,GACrCsI,EAAWhN,EAAK+kB,UAAU9W,SAASvJ,GACrCka,GAAO,IAAM5R,GACbR,EAAA0J,UAAUisB,aAAazgC,OAAOkd,EAAK,GACnCrS,EAAAf,OAAOqC,KAAK,uBAAwBnJ,IAC7Bka,EAAM,GAAK5R,IAClBR,EAAA0J,UAAUisB,aAAazhC,KAAKgE,GAC5B6H,EAAAf,OAAOqC,KAAK,oBAAqBnJ,IAGzCwM,EAAAO,aAAasG,gBA3DA+pB,EAAUp5B,EAAAiC,WAAA,CAL9B9B,EAAAI,QAAU,CACP8B,WAAY,CACRy3B,UAAWX,EAAA54B,YAGE64B,uHChBrBl5B,EAAAF,EAAAC,gBAAAhH,EAAA,SACAkH,EAAAH,EAAAC,gBAAAhH,EAAA,SAEAoH,EAAApH,EAAA,QAIA,IAAqB8gC,EAArB,cAAuC75B,EAAAK,QADvC9E,kCAOIS,KAAAoI,SAAqB,GAErBpI,KAAAsf,QAAS,EAET/f,UACIS,KAAKoI,SAAWpI,KAAK89B,cACrB99B,KAAK+9B,iBAGTx+B,cAAciK,GACVxJ,KAAKsf,QAAUtf,KAAKsf,OAGxB/f,iBACI,MAAMy+B,EAAUh+B,KAAK0E,MAAMs5B,QACvBA,EAAQxO,QAASxvB,KAAKoI,SAAWpI,KAAKi+B,MAAM98B,IAAKzF,GAAMA,EAAE,IACxDsE,KAAKoI,SAAW,GACrBpI,KAAKuF,MAAM,kBAAmB,CAAC0P,MAAOjV,KAAKiV,MAAOkL,UAAWngB,KAAKoI,WAGtE7I,iBACI,MAAMy+B,EAAUh+B,KAAK0E,MAAMs5B,QACE,IAAzBh+B,KAAKoI,SAASxM,QACdoiC,EAAQxO,SAAU,EAClBwO,EAAQE,eAAgB,GAClBl+B,KAAKoI,SAASxM,SAAWoE,KAAKi+B,MAAMriC,QAC1CoiC,EAAQxO,SAAU,EAClBwO,EAAQE,eAAgB,IAExBF,EAAQxO,SAAU,EAClBwO,EAAQE,eAAgB,GAIhC3+B,gBAAgB4+B,GACZ,MAAMnb,EAAQhjB,KAAKoI,SAASkB,QAAQ60B,IACrB,IAAXnb,EAAchjB,KAAKoI,SAAStM,KAAKqiC,GAChCn+B,KAAKoI,SAAStL,OAAOkmB,EAAO,GACjChjB,KAAK+9B,iBACL/9B,KAAKuF,MAAM,kBAAmB,CAAC0P,MAAOjV,KAAKiV,MAAOkL,UAAWngB,KAAKoI,aA5CxDtE,EAAAiC,WAAA,CAAb5B,EAAA6B,KAAKC,qCACkCnC,EAAAiC,WAAA,CAAvC5B,EAAA6B,KAAK,CAAE3B,SAAS,EAAMpE,KAAMiG,2CACDpC,EAAAiC,WAAA,CAA3B5B,EAAA6B,KAAK,CAAE3B,QAAS,IAAM,kCACKP,EAAAiC,WAAA,CAA3B5B,EAAA6B,KAAK,CAAE3B,QAAS,IAAM,0CAJNw5B,EAAS/5B,EAAAiC,WAAA,CAD7B9B,EAAAI,SACoBw5B,kDC1BrB,IAAAjqB,EAAA,WAA0B,IAAAC,EAAA7T,KAAa8T,EAAAD,EAAAE,eAA0BC,EAAAH,EAAAI,MAAAD,IAAAF,EAAwB,OAAAD,EAAA,SAAAG,EAAA,OAAgCU,YAAA,cAAA4B,MAAA,CAAkC8nB,gBAAAvqB,EAAAwqB,YAAAC,gBAAAzqB,EAAA0qB,cAAqE1qB,EAAAgC,GAAAhC,EAAA,gBAAAkE,GAAqC,OAAA/D,EAAA,OAAiBxV,IAAAuZ,EAAAjY,KAAA4U,YAAA,QAAA0B,MAAA,CAA0ChO,SAAAyL,EAAAsM,UAAA9W,SAAA0O,EAAAjY,OAA+CsU,GAAA,CAAK1J,MAAA,SAAA4J,GAAyBT,EAAA2qB,OAAAzmB,EAAAjY,SAAyB,CAAAiY,EAAA,IAAA/D,EAAA,OAAwBE,MAAA,CAAOyE,IAAAZ,EAAAY,IAAA1W,MAAA,OAAA6Q,OAAA,UAAgDe,EAAAsC,KAAAnC,EAAA,OAAAH,EAAAmB,GAAAnB,EAAAqC,GAAA6B,EAAAta,cAAoDoW,EAAAsC,MACziBe,EAAA,GCDAna,EAAAS,EAAAuF,EAAA,sBAAA6Q,IAAA7W,EAAAS,EAAAuF,EAAA,sBAAAmU,kECAA,IAAAunB,EAAA1hC,EAAA,QAAA2hC,EAAA3hC,EAAA2B,EAAA+/B,GAAwcC,EAAG,+GCA3c,MAAA7sB,EAAA9U,EAAA,QACAmC,EAAAnC,EAAA,QACAoC,EAAApC,EAAA,QACAqC,EAAArC,EAAA,QACA8K,EAAA9K,EAAA,QAGA,MAAasb,UAAkBlZ,EAAAG,MAI3BC,YACIoyB,EACAvxB,EACAipB,EACAxpB,EACAC,GAEAC,MAAM4xB,EAAY,mBAAoB9xB,GAAgB,OAAQC,GAVlEE,KAAAC,KAAO,YACPD,KAAA2+B,QAAyB,GAUrB3+B,KAAK2+B,QAAUv+B,GAAU,GACzBJ,KAAKqpB,UAAYA,GAAa,EAGlChpB,eACI,OAAOL,KAAK8Z,UAEhBzZ,aAAakB,GACT,MAAMwY,EAAQxY,EAAM+Y,SAASta,KAAK8Z,WAClC9Z,KAAK8Z,UAAYvY,EACjB,IAAK,IAAI7F,EAAI,EAAGA,EAAIsE,KAAK2+B,QAAQ/iC,OAAQF,IAAKsE,KAAK2+B,QAAQjjC,GAAKsE,KAAK2+B,QAAQjjC,GAAG0O,IAAI2P,GAGxFxa,SACI,OAAOxD,OAAOmE,OAAOF,KAAKG,cAAe,CACrCgY,WAAYnY,KAAKqpB,UACjBjpB,OAAQJ,KAAK2+B,QAAQx9B,IAAItC,IAAK,CAAGyB,EAAGzB,EAAEyB,EAAGC,EAAG1B,EAAE0B,OAGtDhB,SAASnE,GACL2E,MAAM6Q,SAASxV,GACf4E,KAAK2+B,QAAUvjC,EAAKgF,OAAOe,IAAItC,GAAK,IAAIgT,EAAAM,YAAYtT,EAAEyB,EAAGzB,EAAE0B,IAE/DH,aACI,OAAOJ,KAAK2+B,QAAQx9B,IAAII,GAAS,CAACA,EAAMjB,EAAGiB,EAAMhB,IAErDhB,iBACI,IAAIq/B,EAAe5+B,KAAKK,SAASC,EAC7Bs4B,EAAe54B,KAAKK,SAASC,EAC7Bu+B,EAAe7+B,KAAKK,SAASE,EAC7Bs4B,EAAe74B,KAAKK,SAASE,EACjC,IAAK,MAAM1B,KAAKmB,KAAK2+B,QACb9/B,EAAEyB,EAAIs+B,IAAMA,EAAO//B,EAAEyB,GACrBzB,EAAEyB,EAAIs4B,IAAMA,EAAO/5B,EAAEyB,GACrBzB,EAAE0B,EAAIs+B,IAAMA,EAAOhgC,EAAE0B,GACrB1B,EAAE0B,EAAIs4B,IAAMA,EAAOh6B,EAAE0B,GAE7B,OAAO,IAAIrB,EAAAsB,aAAa,IAAIqR,EAAAM,YAAYysB,EAAMC,GAAOjG,EAAOgG,EAAM/F,EAAOgG,GAE7Et/B,KAAKkB,GACDV,MAAMW,KAAKD,GACXA,EAAIuM,YACJvM,EAAIq+B,QAAU,QACdr+B,EAAIsM,SAAW,QACftM,EAAI0M,OAAO/N,EAAAgO,KAAKpN,KAAKK,SAASC,GAAIlB,EAAAiO,KAAKrN,KAAKK,SAASE,IACrD,IAAK,MAAM1B,KAAKmB,KAAK2+B,QAASl+B,EAAI6M,OAAOlO,EAAAgO,KAAKvO,EAAEyB,GAAIlB,EAAAiO,KAAKxO,EAAE0B,IACjC,QAAtBP,KAAKH,aAAwBY,EAAIwM,YAAcpF,EAAAinB,eAC9CruB,EAAIwM,YAAcjN,KAAKH,aAC5BY,EAAI4oB,UAAYjqB,EAAA4R,KAAKhR,KAAKqpB,WAC1B5oB,EAAI+M,SAERjO,SAASgC,GACL,OAAOvB,KAAK0B,iBAAiByI,SAAS5I,GAK1ChC,OAAOiC,GACH,OAAOxB,KAAK0B,iBAAiBgP,SAEjCnR,gBAAgBkC,GACZ,OAAOzB,KAAK0B,iBAAiBC,gBAAgBF,GAEjDlC,cACAA,gBACAA,OAAOqC,EAAqBL,GACJ,IAAhBK,EAAmB5B,KAAK8Z,UAAY1a,EAAAuT,IAAIpR,GACvCvB,KAAK2+B,QAAQ/8B,EAAc,GAAKxC,EAAAuT,IAAIpR,IA/EjDpE,EAAAkb,iDCPAtb,EAAAgB,EAAAgF,GAAA,IAAAg8B,EAAAhiC,EAAA,QAAAiiC,EAAAjiC,EAAA,gBAAAmG,KAAA87B,EAAA,YAAA97B,GAAA,SAAA1E,GAAAzB,EAAAS,EAAAuF,EAAAvE,EAAA,kBAAAwgC,EAAAxgC,KAAA,CAAA0E,GAAAnG,EAAA,YAAAoG,EAAApG,EAAA,QAQAqG,EAAgBrH,OAAAoH,EAAA,KAAApH,CACdijC,EAAA,WACAD,EAAA,KACAA,EAAA,MACF,EACA,KACA,WACA,MAIA37B,EAAAC,QAAAC,OAAA,WACeP,EAAA,WAAAK,kHCpBfS,EAAAC,EAAAC,gBAAAhH,EAAA,SAEA8U,EAAA9U,EAAA,QACA6K,EAAA7K,EAAA,QAEA,SAAgBgjB,EAASzU,GACrB,OAAO,IAAIuG,EAAAe,WAAWtH,EAAEwc,MAAOxc,EAAEyc,OAGrC,SAAgB+G,EAAamQ,GAAoB,GAC7C,MAAM/hB,EAAKrZ,EAAAQ,QAAUuD,EAAA0J,UAAU4tB,WAG/B,OAFIt3B,EAAA0J,UAAUC,MAAO2L,EAAGE,SAAS6hB,EAAW,EAAIr3B,EAAA0J,UAAU6tB,YACrDjiB,EAAGE,SAAS,GACVF,EAAG5X,cAGd,SAAgB85B,EAAU96B,GAGtB,OAAO,IAAM,EAAI,EAAK,GAAK,GAAMpC,KAAKm9B,IAAI,KAAO/6B,IAGrD,SAAgBmnB,EAAYvtB,GACxB,OAAOgE,KAAKoN,IAA2B,GAAK,IAA3B,EAAIpR,EAAQ,EAAI,IAAkB,KAlBvDf,EAAA4iB,WAIA5iB,EAAA2xB,eAOA3xB,EAAAiiC,YAMAjiC,EAAAsuB,sHCOApb,EAAAvM,EAAAwM,aAAAvT,EAAA,SACAiH,EAAAF,EAAAC,gBAAAhH,EAAA,SACAkH,EAAAH,EAAAC,gBAAAhH,EAAA,SAEAusB,EAAAvsB,EAAA,QAEAuiC,EAAAx7B,EAAAC,gBAAAhH,EAAA,SACAwiC,EAAAz7B,EAAAC,gBAAAhH,EAAA,SAEA8K,EAAA9K,EAAA,QACA8U,EAAA9U,EAAA,QACAuP,EAAAvP,EAAA,QACAqa,EAAAra,EAAA,QACA6K,EAAA7K,EAAA,QACAqC,EAAArC,EAAA,QACAoH,EAAApH,EAAA,QAWA,IAAqByiC,EAArB,cAA8Cx7B,EAAAK,QAT9C9E,kCAUIS,KAAAM,EAAI,EACJN,KAAAO,EAAI,EACJP,KAAAqR,SAAU,EACVrR,KAAAP,KAAO,IACPO,KAAAJ,WAAa,yBACbI,KAAAy/B,aAAe,mBAEflgC,UACIS,KAAK0/B,gBAITngC,aAAaye,EAAkBD,GAC3B/d,KAAK0/B,gBAGTngC,aAAaye,EAAkBD,GAC3B/d,KAAK0/B,gBAGTngC,eAAeye,EAAkBD,GAC7B/d,KAAK0/B,gBAGTngC,KAAKe,EAAWC,GACZP,KAAKqR,SAAU,EACfrR,KAAKM,EAAIA,EACTN,KAAKO,EAAIA,EAEbhB,SACI,MAAMgT,EAAQjG,EAAAO,aAAaC,WAC3B,QAAcpE,IAAV6J,EAAqB,OACzB,MAAMwF,EAAQ,IAAIX,EAAA5G,cACdpR,EAAAuT,IAAI,IAAId,EAAAe,WAAW5S,KAAKM,EAAGN,KAAKO,IAChCnB,EAAAwuB,gBAAgBhmB,EAAA0J,UAAUquB,SAAW,GACrC3/B,KAAKP,KACL,aACAO,KAAKJ,WACLI,KAAKy/B,cAET1nB,EAAMmG,SAAStW,EAAA0J,UAAUqM,UACzBpL,EAAMG,SAASqF,GAAO,GACtBxF,EAAMY,YAAW,GACjBnT,KAAKqR,SAAU,EAEnB9R,gBACI,MAAMkB,EAA0BT,KAAK0E,MAAMjD,OAAQmrB,WAAW,MAC9DnsB,EAAI6N,UAAU,EAAG,EAAG7N,EAAIgB,OAAOQ,MAAOxB,EAAIgB,OAAOqR,QACjDrS,EAAIuM,YACJ,MAAMnM,EAAO,CAAEP,EAAGG,EAAIgB,OAAOQ,MAAQ,EAAG1B,EAAGE,EAAIgB,OAAOqR,OAAS,GACzD/U,EAA+B,GAA3BmE,KAAKkJ,IAAIvK,EAAKP,EAAGO,EAAKN,GAEhCE,EAAIE,UAAYX,KAAKJ,WAErBa,EAAIkP,IAAI9O,EAAKP,EAAGO,EAAKN,EAAGxC,EAAG,EAAG,EAAImE,KAAK0N,IACvCnP,EAAIoP,OACsB,qBAAtB7P,KAAKy/B,eACLh/B,EAAIuM,YACJvM,EAAI4oB,UAAY,EAChB5oB,EAAIwM,YAAcjN,KAAKy/B,aACvBh/B,EAAIkP,IAAI9O,EAAKP,EAAGO,EAAKN,EAAGxC,EAAG,EAAG,EAAImE,KAAK0N,IACvCnP,EAAI+M,UAER/M,EAAIG,OACJH,EAAIQ,UAAY,SAChBR,EAAIoQ,aAAe,SACnB,MAAMC,EAAKjJ,EAAAkJ,cAActQ,EAAKT,KAAKP,KAAM1B,EAAGA,GACtCkT,EAAK,EACXxQ,EAAIyQ,UAAUJ,EAAIG,GAAKA,EAAIH,EAAIjQ,EAAKP,EAAGO,EAAKN,GAC5CE,EAAIE,UAAY0P,EAAUc,aAAanR,KAAKJ,WAAY,CAAC,OAAQ,SAASwR,cAC1E3Q,EAAIY,SAASrB,KAAKP,KAAM,EAAG,GAC3BgB,EAAIa,YA3DRwC,EAAAiC,WAAA,CADC5B,EAAAy7B,MAAM,0CAKP97B,EAAAiC,WAAA,CADC5B,EAAAy7B,MAAM,gDAKP97B,EAAAiC,WAAA,CADC5B,EAAAy7B,MAAM,oDApBUJ,EAAgB17B,EAAAiC,WAAA,CATpC9B,EAAAI,QAAU,CACP8B,WAAY,CACR21B,MAAAyD,EAAAl7B,QACAw7B,eAAgBP,EAAAj7B,SAEpBy7B,SAAQ/jC,OAAAmE,OAAA,GACDopB,EAAAyW,SAAS,OAAQ,CAAC,iBAGRP,uHCpBrBx7B,EAAAF,EAAAC,gBAAAhH,EAAA,SACAkH,EAAAH,EAAAC,gBAAAhH,EAAA,SAGAwiC,EAAAz7B,EAAAC,gBAAAhH,EAAA,SAEA8K,EAAA9K,EAAA,QAEA6K,EAAA7K,EAAA,QAOA,IAAqBijC,EAArB,cAAwCh8B,EAAAK,QALxC9E,kCAMIS,KAAAqR,SAAU,EACVrR,KAAAqe,KAAoB,KAEpB9e,KAAK8e,GACDre,KAAKqR,SAAU,EACfrR,KAAKqe,KAAOA,EAEhB9e,aACI,GAAIS,KAAK0E,MAAMu7B,SAAU,CACrB,MAAM/Z,EAAkBlmB,KAAK0E,MAAMu7B,SAInC,OAHA/Z,EAAG5P,MAAMxD,OAAS,OAClBoT,EAAG5P,MAAMxD,OAASoT,EAAGga,aAAe,KAE7Bha,EAAGga,aAAe,KAE7B,MAAO,QAEX3gC,aACQS,KAAKqe,MAAMzW,EAAA0J,UAAUmN,WAAW,CAAEJ,KAAMre,KAAKqe,KAAMf,MAAM,IAEjE/d,aACIsI,EAAA0Y,OAAsB,WACjB0B,KAAK,yCACLke,KACI1jC,IACOA,GAAUuD,KAAKqe,OACfzW,EAAA0J,UAAUsN,WAAW,CAAEP,KAAMre,KAAKqe,KAAMf,MAAM,IAC9Ctd,KAAKqR,SAAU,IAGvB,UA/BK2uB,EAAUl8B,EAAAiC,WAAA,CAL9B9B,EAAAI,QAAU,CACP8B,WAAY,CACR21B,MAAAyD,EAAAl7B,YAGa27B,uHCNrB/7B,EAAAH,EAAAC,gBAAAhH,EAAA,SAEAoH,EAAApH,EAAA,QAEAuiC,EAAAx7B,EAAAC,gBAAAhH,EAAA,SACAiiB,EAAAlb,EAAAC,gBAAAhH,EAAA,SAEA4K,EAAA5K,EAAA,QACA8U,EAAA9U,EAAA,QACAuP,EAAAvP,EAAA,QACAwT,EAAAxT,EAAA,QACAsa,EAAAta,EAAA,QACAua,EAAAva,EAAA,QACAwa,EAAAxa,EAAA,QACA+U,EAAA/U,EAAA,QAEA6K,EAAA7K,EAAA,QACAqC,EAAArC,EAAA,QACA8K,EAAA9K,EAAA,QAOA,IAAqBqjC,EAArB,cAAsCphB,EAAA3a,QALtC9E,kCAMIS,KAAAvC,KAAO,OACPuC,KAAAsf,QAAS,EAETtf,KAAA2xB,WAAiC,KACjC3xB,KAAAyX,MAAsB,KACtBzX,KAAAqgC,YAA6B,KAC7BrgC,KAAAsgC,MAAqB,KAErBtgC,KAAAJ,WAAa,mBACbI,KAAAy/B,aAAe,yBAEfz/B,KAAAugC,YAAc,SACdvgC,KAAAyd,OAAS,CAAC,SAAU,SAAU,eAAgB,eAC9Czd,KAAAwgC,WAAa,SACbxgC,KAAAygC,MAAQ,CAAC,SAAU,SAAU,QAE7BzgC,KAAA0gC,UAAYthC,EAAAwuB,gBAAgBhmB,EAAA0J,UAAUquB,UAEtCgB,iBACI,MAAyB,gBAArB3gC,KAAKugC,YAAsCvgC,KAAK0gC,UAAY,EACzDthC,EAAAwuB,gBAAgB5tB,KAAK2/B,UAAY,EAE5CpuB,YACI,OAAO3J,EAAA0J,UAAUC,MAErBouB,eACI,OAAO/3B,EAAA0J,UAAUquB,SAErBhe,cACI,OAAO/Z,EAAA0J,UAAUqQ,QAIrBpiB,eACQS,KAAKqgC,cAAargC,KAAKqgC,YAAYzgC,WAAaI,KAAKJ,YAI7DL,aAAaye,EAAkBD,GAC3B/d,KAAK4gC,aAAa5iB,EAAUD,GAGhCxe,aAC6B,OAArBS,KAAKqgC,cACe,WAApBrgC,KAAKwgC,YAA+C,SAApBxgC,KAAKwgC,YACrCxgC,KAAKqgC,YAAYh9B,QAAQ25B,IAAI,eAAe,GAC5Ch9B,KAAKqgC,YAAYh9B,QAAQ25B,IAAI,YAAY,GACzCh9B,KAAKqgC,YAAYzgC,WAAa,mBAEN,WAApBI,KAAKwgC,WAAyBxgC,KAAKqgC,YAAYzmB,yBAA2B,cACjD,SAApB5Z,KAAKwgC,aAAuBxgC,KAAKqgC,YAAYzmB,yBAA2B,qBAEjF5Z,KAAKqgC,YAAYh9B,QAAQkG,OAAO,eAChCvJ,KAAKqgC,YAAYh9B,QAAQkG,OAAO,YAChCvJ,KAAKqgC,YAAYzmB,yBAA2B,cAC5C5Z,KAAKqgC,YAAYzgC,WAAaI,KAAKJ,aAG3CL,aAAaye,EAAkBD,GAC3B,GAAyB,OAArB/d,KAAKqgC,YAAsB,OAE/B,MAAMQ,EAAWv0B,EAAAO,aAAaC,SAAS,OACjCg0B,EAAcx0B,EAAAO,aAAaC,gBAChBpE,IAAbm4B,QAA0Cn4B,IAAhBo4B,IAE9B9gC,KAAK+gC,aAEY,WAAb/iB,GAAsC,WAAbD,GACzB+iB,EAAYhU,YAAY9sB,KAAKqgC,aAAa,GAC1CQ,EAASnuB,SAAS1S,KAAKqgC,aAAa,IAChB,WAAbriB,GAAsC,WAAbD,IAChC+iB,EAAYpuB,SAAS1S,KAAKqgC,aAAa,GACvCQ,EAAS/T,YAAY9sB,KAAKqgC,aAAa,KAG/C9gC,WACI,MAAwB,WAApBS,KAAKwgC,WAAgCl0B,EAAAO,aAAaC,WAC/CR,EAAAO,aAAaC,SAAS,OAEjCvN,YAAYiK,GACR,MAAM+I,EAAQvS,KAAK8M,WACnB,QAAcpE,IAAV6J,EAAJ,CAIA,GAAKvS,KAAKsf,OA+CgB,OAAftf,KAAKyX,OAAkBzX,KAAKyX,iBAAiBF,EAAAe,SAEpDtY,KAAKyX,MAAMupB,UAAUllC,KAAKsD,EAAAuT,IAAI9K,EAAAkY,SAASvW,SAjDzB,CAGd,OAFAxJ,KAAK2xB,WAAavyB,EAAAuT,IAAI9K,EAAAkY,SAASvW,IAC/BxJ,KAAKsf,QAAS,EACNtf,KAAKugC,aACT,IAAK,SACDvgC,KAAKyX,MAAQ,IAAI3F,EAAAQ,KAAKtS,KAAK2xB,WAAWC,QAAS,EAAG,EAAG5xB,KAAKJ,WAAYI,KAAKy/B,cAC3E,MAEJ,IAAK,SACDz/B,KAAKyX,MAAQ,IAAIlH,EAAAE,OACbzQ,KAAK2xB,WAAWC,QAChB5xB,KAAK2gC,WACL3gC,KAAKJ,WACLI,KAAKy/B,cAET,MAEJ,IAAK,cACDz/B,KAAKyX,MAAQ,IAAIH,EAAAe,UAAUrY,KAAK2xB,WAAWC,QAAS,GAAI5xB,KAAK0gC,WAC7D1gC,KAAKyX,MAAM7X,WAAaI,KAAKJ,WAC7B,MAEJ,IAAK,eACDI,KAAKyX,MAAQ,IAAIF,EAAAe,QAAQtY,KAAK2xB,WAAWC,QAAS,GAAI5xB,KAAKJ,WAAYI,KAAKy/B,cAC5E,MAEJ,QACI,OAGgB,WAApBz/B,KAAKwgC,aACLxgC,KAAKyX,MAAMpU,QAAQ25B,IAAI,eAAe,GACtCh9B,KAAKyX,MAAMpU,QAAQ25B,IAAI,YAAY,GACnCh9B,KAAKyX,MAAM7X,WAAa,oBAEJ,WAApBI,KAAKwgC,WAAyBxgC,KAAKyX,MAAMmC,yBAA2B,cAC3C,SAApB5Z,KAAKwgC,aAAuBxgC,KAAKyX,MAAMmC,yBAA2B,mBAE3E5Z,KAAKyX,MAAMyG,SAAStW,EAAA0J,UAAUqM,UACX,QAAfpL,EAAM9U,MAAsC,WAApBuC,KAAKwgC,aAC7BxgC,KAAKyX,MAAM8B,mBAAoB,EAC/BvZ,KAAKyX,MAAM+B,qBAAsB,GAErCjH,EAAMG,SAAS1S,KAAKyX,OAAO,GAAM,GAAO,GAGxCzX,KAAKihC,gBAKT,GAAmB,OAAfjhC,KAAKyX,OAAkBzX,KAAKyX,iBAAiBF,EAAAe,QAAS,CACtD,MAAM4oB,EAAY9hC,EAAAuT,IAAI9K,EAAAkY,SAASvW,IACZ,OAAfxJ,KAAKsgC,OACLtgC,KAAKsgC,MAAQ,IAAIjpB,EAAAW,KAAKkpB,EAAWA,EAAW,EAAG,SAC/C3uB,EAAMG,SAAS1S,KAAKsgC,OAAO,KAE3BtgC,KAAKsgC,MAAMjgC,SAAW6gC,EACtBlhC,KAAKsgC,MAAM1f,SAAWsgB,GAEtBlhC,KAAKyX,MAAM8B,mBAAmB3R,EAAA0J,UAAU0J,mBAAkB,GAC9DzI,EAAMY,YAAW,GACjBxL,EAAAf,OAAOqC,KAAK,eAAgB,CAAEwO,MAAOzX,KAAKyX,MAAOwJ,SAAUC,QAAQ,EAAMC,WAAW,UAjEpF9R,QAAQC,IAAI,oBAoEpB/P,YAAYiK,GACR,MAAMoX,EAAWxhB,EAAAuT,IAAI9K,EAAAkY,SAASvW,IACxB+I,EAAQvS,KAAK8M,WACnB,QAAcpE,IAAV6J,GAWJ,GANyB,OAArBvS,KAAKqgC,cACLrgC,KAAKqgC,YAAYtiC,EAAIiC,KAAK2gC,WAC1B3gC,KAAKqgC,YAAYhgC,SAAWugB,EACvB5gB,KAAKsf,QAAQ/M,EAAMY,YAAW,IAGlCnT,KAAKsf,QAA8B,OAApBtf,KAAK2xB,YAAsC,OAAf3xB,KAAKyX,MAArD,CAEA,OAAQzX,KAAKugC,aACT,IAAK,SACMvgC,KAAKyX,MAAOzE,EAAI9Q,KAAKgY,IAAI0G,EAAStgB,EAAIN,KAAK2xB,WAAWrxB,GACtDN,KAAKyX,MAAOvE,EAAIhR,KAAKgY,IAAI0G,EAASrgB,EAAIP,KAAK2xB,WAAWpxB,GAC7DP,KAAKyX,MAAMpX,SAAW,IAAIwR,EAAAM,YACtBjQ,KAAKkJ,IAAIpL,KAAK2xB,WAAWrxB,EAAGsgB,EAAStgB,GACrC4B,KAAKkJ,IAAIpL,KAAK2xB,WAAWpxB,EAAGqgB,EAASrgB,IAEzC,MAEJ,IAAK,SACQP,KAAKyX,MAAO1Z,EAAI6iB,EAAStG,SAASta,KAAK2xB,YAAY/1B,SAC5D,MAEJ,IAAK,cACWoE,KAAKyX,MAAOknB,QAAQ7iC,KAAK8kB,GACrC,MAEJ,IAAK,eACD5gB,KAAKsgC,MAAO1f,SAAWA,EACvB,MAIF5gB,KAAKyX,iBAAiBF,EAAAe,UACxB3Q,EAAAf,OAAOqC,KAAK,eAAgB,CAAEwO,MAAOzX,KAAKyX,MAAOwJ,SAAUC,QAAQ,EAAMC,WAAW,IAChFnhB,KAAKyX,MAAM8B,mBAAmB3R,EAAA0J,UAAU0J,mBAAkB,IAElEzI,EAAMY,YAAW,SAxCb9D,QAAQC,IAAI,oBA0CpB/P,UAAUiK,IACDxJ,KAAKsf,QAAyB,OAAftf,KAAKyX,OAAkBzX,KAAKyX,iBAAiBF,EAAAe,WAC5D9O,EAAMoY,QAAU5hB,KAAK2hB,SACtB3hB,KAAKyX,MAAMqK,eAEf9hB,KAAKmhC,iBAET5hC,cAAciK,GACV,IAAKxJ,KAAKsf,QAAyB,OAAftf,KAAKyX,SAAoBzX,KAAKyX,iBAAiBF,EAAAe,SAAU,OAC7E,MAAM/F,EAAQvS,KAAK8M,gBACLpE,IAAV6J,GAIJA,EAAMua,YAAY9sB,KAAKsgC,OAAQ,GAC/BtgC,KAAKsgC,MAAQ,KACbtgC,KAAKmhC,iBALD9xB,QAAQC,IAAI,oBAQZ/P,gBACe,OAAfS,KAAKyX,QACLzX,KAAKyX,MAAM8B,mBAAmB3R,EAAA0J,UAAU0J,oBACxChb,KAAKyX,MAAM+B,qBAAqB5R,EAAA0J,UAAUqK,sBAC9ChU,EAAAf,OAAOqC,KAAK,eAAgB,CAAEwO,MAAOzX,KAAKyX,MAAOwJ,SAAUC,QAAQ,EAAMC,WAAW,IACpFnhB,KAAKsf,QAAS,GAGlB/f,WACI,MAAMgT,EAAQvS,KAAK8M,gBACLpE,IAAV6J,IACJvS,KAAKqgC,YAAc,IAAI9vB,EAAAE,OAAO,IAAIoB,EAAAM,aAAa,KAAO,KAAOnS,KAAK0gC,UAAY,EAAG1gC,KAAKJ,YACtFI,KAAK+gC,aACLxuB,EAAMG,SAAS1S,KAAKqgC,aAAa,IAErC9gC,aACI,MAAMgT,EAAQvS,KAAK8M,WACM,OAArB9M,KAAKqgC,kBAAkC33B,IAAV6J,GAAqBA,EAAMua,YAAY9sB,KAAKqgC,aAAa,GACtFrgC,KAAKsf,aAAoB5W,IAAV6J,GAAsC,OAAfvS,KAAKyX,QAC3ClF,EAAMua,YAAY9sB,KAAKyX,OAAO,GAAM,GACpCzX,KAAKyX,MAAQ,KACbzX,KAAKsf,QAAS,EACd/M,EAAMY,YAAW,IAIjB5T,gBACJ,MAAMgT,EAAQvS,KAAK8M,gBACLpE,IAAV6J,GAIqB,OAArBvS,KAAKqgC,aAAsB9tB,EAAMua,YAAY9sB,KAAKqgC,aAAa,GACnErgC,KAAKqgC,YAAc,IAAI9vB,EAAAE,OAAO,IAAIoB,EAAAM,aAAa,KAAO,KAAOnS,KAAK0gC,UAAY,EAAG1gC,KAAKJ,YACtFI,KAAK+gC,aACLxuB,EAAMG,SAAS1S,KAAKqgC,aAAa,IAN7BhxB,QAAQC,IAAI,sBAnNpBxL,EAAAiC,WAAA,CADC5B,EAAAy7B,MAAM,gDAMP97B,EAAAiC,WAAA,CADC5B,EAAAy7B,MAAM,gDAtCUQ,EAAQt8B,EAAAiC,WAAA,CAL5B9B,EAAAI,QAAU,CACP8B,WAAY,CACR05B,eAAgBP,EAAAj7B,YAGH+7B,qGCrErB,MAAAvuB,EAAA9U,EAAA,QACAmC,EAAAnC,EAAA,QACAoC,EAAApC,EAAA,QACAqC,EAAArC,EAAA,QAEA,MAAaib,UAAa7Y,EAAAG,MAItBC,YACIoyB,EACA/Q,EACAyI,EACAxpB,EACAC,GAEAC,MAAM4xB,EAAY,mBAAoB9xB,GAAgB,OAAQC,GAVlEE,KAAAC,KAAO,OAWHD,KAAK4gB,SAAWA,EAChB5gB,KAAKqpB,eAA0B3gB,IAAd2gB,EAA0B,EAAIA,EAEnD9pB,SACI,OAAOxD,OAAOmE,OAAOF,KAAKG,cAAe,CACrC8X,GAAIjY,KAAK4gB,SAAStgB,EAClB4X,GAAIlY,KAAK4gB,SAASrgB,EAClB4X,WAAYnY,KAAKqpB,YAGzBjpB,aACI,MAAO,CAAC,CAACJ,KAAKK,SAASC,EAAGN,KAAKK,SAASE,GAAI,CAACP,KAAK4gB,SAAStgB,EAAGN,KAAK4gB,SAASrgB,IAEhFhB,iBACI,OAAO,IAAIL,EAAAsB,aACP,IAAIqR,EAAAM,YAAYjQ,KAAKkJ,IAAIpL,KAAKK,SAASC,EAAGN,KAAK4gB,SAAStgB,GAAI4B,KAAKkJ,IAAIpL,KAAKK,SAASE,EAAGP,KAAK4gB,SAASrgB,IACpG2B,KAAKgY,IAAIla,KAAKK,SAASC,EAAIN,KAAK4gB,SAAStgB,GACzC4B,KAAKgY,IAAIla,KAAKK,SAASE,EAAIP,KAAK4gB,SAASrgB,IAGjDhB,KAAKkB,GACDV,MAAMW,KAAKD,GACXA,EAAIwM,YAAcjN,KAAKH,aACvBY,EAAIuM,YACJvM,EAAI0M,OAAO/N,EAAAgO,KAAKpN,KAAKK,SAASC,GAAIlB,EAAAiO,KAAKrN,KAAKK,SAASE,IACrDE,EAAI6M,OAAOlO,EAAAgO,KAAKpN,KAAK4gB,SAAStgB,GAAIlB,EAAAiO,KAAKrN,KAAK4gB,SAASrgB,IACrDE,EAAI4oB,UAAYrpB,KAAKqpB,UACrB5oB,EAAI+M,SAERjO,SAASgC,GACL,OAAO,EAKXhC,OAAOiC,IACPjC,gBAAgBkC,GACZ,OAAOzB,KAAK0B,iBAAiBC,gBAAgBF,GAEjDlC,cACAA,gBACAA,OAAOqC,EAAqBL,GACJ,IAAhBK,EAAmB5B,KAAKK,SAAWjB,EAAAuT,IAAIpR,GACtCvB,KAAK4gB,SAAWxhB,EAAAuT,IAAIpR,IAvDjCpE,EAAA6a,+GCHAopB,EAAAt9B,EAAAC,gBAAAhH,EAAA,SACAiH,EAAAF,EAAAC,gBAAAhH,EAAA,SACAskC,EAAAv9B,EAAAC,gBAAAhH,EAAA,SAEAiH,EAAAK,QAAIklB,IAAI8X,EAAAh9B,SAER,MAAAi9B,EAAAx9B,EAAAC,gBAAAhH,EAAA,SACAwkC,EAAAz9B,EAAAC,gBAAAhH,EAAA,SACAykC,EAAA19B,EAAAC,gBAAAhH,EAAA,SACA0kC,EAAA39B,EAAAC,gBAAAhH,EAAA,SACA2kC,EAAA59B,EAAAC,gBAAAhH,EAAA,SACA4kC,EAAA79B,EAAAC,gBAAAhH,EAAA,SACA6kC,EAAA99B,EAAAC,gBAAAhH,EAAA,SAEA6K,EAAA7K,EAAA,QAIaI,EAAA0kC,OAAS,IAAIR,EAAAh9B,QAAO,CAC7BjG,KAAM,UACN0jC,KAAM,IACNC,OAAQ,CACJ,CACIh6B,KAAM,IACNi6B,SAAU,cAEd,CACIj6B,KAAM,SACNtK,KAAM,OACN2F,UAAWq+B,EAAAp9B,SAEf,CACI0D,KAAM,UACN3E,UAAWk+B,EAAAj9B,QACX49B,KAAM,CACFC,MAAM,IAGd,CACIn6B,KAAM,QACN3E,UAAW,CAAE++B,SAAU,+BACvB3b,SAAU,CAAC,CAAEze,KAAM,QAAS3E,UAAWm+B,EAAAl9B,SAAS,CAAE0D,KAAM,SAAU3E,UAAWo+B,EAAAn9B,WAEjF,CACI0D,KAAM,gBACN3E,UAAWw+B,EAAAv9B,QACX49B,KAAM,CACFC,MAAM,IAGd,CACIn6B,KAAM,aACN3E,UAAWs+B,EAAAr9B,QACX49B,KAAM,CACFC,MAAM,IAGd,CACIn6B,KAAM,uBACN3E,UAAWu+B,EAAAt9B,QACX49B,KAAM,CACFC,MAAM,OAMtB/kC,EAAA0kC,OAAOO,WAAW,CAACx2B,EAAIC,EAAMC,KACpBlE,EAAAy6B,UAAUC,aAA2B,WAAZ12B,EAAG7D,KAetB6D,EAAG22B,QAAQ/mB,KAAKgnB,GAAUA,EAAOP,KAAKC,QAAUt6B,EAAAy6B,UAAUI,cACjE32B,EAAK,CAAE/D,KAAM,cAAehB,MAAO,CAAEi7B,SAAUp2B,EAAG7D,QAElD+D,KAjBAA,EAAK,CAAE/D,KAAM,WACbq5B,EAAA/8B,QACKvG,IAAI,aACJqiC,KAAMuC,IACCA,EAAStnC,KAAK8mC,OACdt6B,EAAAy6B,UAAUM,kBAAiB,GAC3B/6B,EAAAy6B,UAAUO,YAAYF,EAAStnC,KAAKuiB,WAExC/V,EAAAy6B,UAAUQ,gBAAe,GACzB1lC,EAAA0kC,OAAO/lC,KAAK8P,EAAG7D,QAElB+6B,MAAM,KACHzzB,QAAQ0zB,MAAM,6JChF9B/+B,EAAAF,EAAAC,gBAAAhH,EAAA,SACAkH,EAAAH,EAAAC,gBAAAhH,EAAA,SAGA,IAAqBimC,EAArB,cAAkCh/B,EAAAK,QADlC9E,kCAEIS,KAAAvC,KAAO,GACPuC,KAAAoI,UAAW,EACXpI,KAAAsf,QAAS,EACT+e,kBACI,MAAM54B,EAAazF,KAAK+hB,QAAQrd,MAAM1E,KAAKvC,KAAO,aAAc,GAAGiI,wBAC7D6U,EAAM9U,EAAKlB,KAAOkB,EAAKxD,MAAQ,EAErC,SAAUlD,OAAO6G,WAAa1D,KAAKkJ,IAAIrM,OAAO6G,WAAa,GAAI2U,EAAM,QAEzEgkB,kBACI,MAAM94B,EAAazF,KAAK+hB,QAAQrd,MAAM1E,KAAKvC,KAAO,aAAc,GAAGiI,wBAC7D6U,EAAM9U,EAAKlB,KAAOkB,EAAKxD,MAAQ,EAC/B0D,EAAQzD,KAAKkJ,IAAIrM,OAAO6G,WAAa,GAAI2U,EAAM,IACrD,SAAU5U,EAAQ4U,EAAM,OAE5Bhb,UACIS,KAAK+hB,QAAQkhB,IAAI,YAAa,CAACz5B,EAAmB05B,KAC1CA,IAASljC,KAAKvC,MAAMuC,KAAKmjC,YAAY35B,KAE7CxJ,KAAK+hB,QAAQkhB,IAAI,UAAW,CAACz5B,EAAmB05B,KACxCA,IAASljC,KAAKvC,MAAMuC,KAAKojC,UAAU55B,KAE3CxJ,KAAK+hB,QAAQkhB,IAAI,YAAa,CAACz5B,EAAmB05B,KAC1CA,IAASljC,KAAKvC,MAAMuC,KAAKqjC,YAAY75B,KAE7CxJ,KAAK+hB,QAAQkhB,IAAI,cAAe,CAACz5B,EAAmB05B,KAC5CA,IAASljC,KAAKvC,MAAMuC,KAAKsjC,cAAc95B,KAE/CxJ,KAAK+hB,QAAQkhB,IAAI,sBAAuB,CAACjlB,EAAkBD,KACnDA,IAAa/d,KAAKvC,MAClBuC,KAAKoI,UAAW,EAChBpI,KAAKujC,cACEvlB,IAAahe,KAAKvC,OACzBuC,KAAKoI,UAAW,EAChBpI,KAAKwjC,cAIjBjkC,YACAA,cACAA,YAAYiK,IACZjK,UAAUiK,IACVjK,YAAYiK,IACZjK,cAAciK,MA5CGw5B,EAAIl/B,EAAAiC,WAAA,CADxB9B,EAAAI,SACoB2+B,2ECPrBjmC,EAAAgB,EAAAgF,GAAA,IAAA0gC,EAAA1mC,EAAA,QAAA2mC,EAAA3mC,EAAA,gBAAAmG,KAAAwgC,EAAA,YAAAxgC,GAAA,SAAA1E,GAAAzB,EAAAS,EAAAuF,EAAAvE,EAAA,kBAAAklC,EAAAllC,KAAA,CAAA0E,GAAAnG,EAAA,YAAAoG,EAAApG,EAAA,QAQAqG,EAAgBrH,OAAAoH,EAAA,KAAApH,CACd2nC,EAAA,WACAD,EAAA,KACAA,EAAA,MACF,EACA,KACA,WACA,MAIArgC,EAAAC,QAAAC,OAAA,YACeP,EAAA,WAAAK,6CCpBfrG,EAAAgB,EAAAgF,GAAA,IAAA4gC,EAAA5mC,EAAA,QAAA6mC,EAAA7mC,EAAA2B,EAAAilC,GAAA,QAAAzgC,KAAAygC,EAAA,YAAAzgC,GAAA,SAAA1E,GAAAzB,EAAAS,EAAAuF,EAAAvE,EAAA,kBAAAmlC,EAAAnlC,KAAA,CAAA0E,GAAgXH,EAAA,WAAA6gC,EAAG,wICGnX,MAAArS,EAAAx0B,EAAA,QACA6K,EAAA7K,EAAA,QACAqC,EAAArC,EAAA,QAEA,MAAagc,UAAcwY,EAAAM,SAIvBtyB,YAAYkZ,EAAuBorB,EAAsB7wB,EAAWE,EAAWpT,GAC3EC,MAAM8jC,EAAS7wB,EAAGE,OAAGxK,OAAWA,EAAW5I,GAJ/CE,KAAAC,KAAO,YAEPD,KAAA2Y,IAAc,GAGV3Y,KAAKyY,IAAMA,EAEflZ,SACI,OAAOxD,OAAOmE,OAAOF,KAAKG,cAAe,CACrCwY,IAAK3Y,KAAK2Y,MAGlBpZ,SAASnE,GACL2E,MAAM6Q,SAASxV,GACf4E,KAAK2Y,IAAMvd,EAAKud,IAEpBpZ,KAAKkB,GACDV,MAAMW,KAAKD,GACX,IACIA,EAAIiuB,UAAU1uB,KAAKyY,IAAKrZ,EAAAgO,KAAKpN,KAAKK,SAASC,GAAIlB,EAAAiO,KAAKrN,KAAKK,SAASE,GAAInB,EAAA4R,KAAKhR,KAAKgT,GAAI5T,EAAA4R,KAAKhR,KAAKkT,IAChG,MAAO6vB,GACL1zB,QAAQoD,cAAczS,KAAKF,iCAAiCE,KAAK2Y,QAGzEpZ,oBACI,MAAO,CACHO,KAAME,KAAKF,KACXuR,SAAUzJ,EAAA0J,UAAUC,MACpBC,OAAO,EACPC,OAAQzR,KAAK2Y,IACbjH,SAAS,EACTC,QAAS,GACTC,MAAOzC,MAjCnBhS,EAAA4b,8FCPA,MAAAxM,EAAAxP,EAAA,QAYAyP,EAAAzP,EAAA,QAcA,MAAa+mC,EAETvkC,cACIS,KAAKkO,IAAM,IAAI3B,EAAAw3B,IAEnBxkC,iBAAiBuF,EAAUwhB,GACvB,MAAMiO,EAAKv0B,KAAKgkC,OAAOl/B,GACjB0vB,EAAKx0B,KAAKgkC,OAAO1d,GACnBiO,IAAOC,GAAIx0B,KAAKikC,kBAAkB1P,EAAIC,GAG9Cj1B,kBAAkBg1B,EAAYC,GAC1B,MAAM0P,EAAQ,CAAC,CAAC3P,EAAIC,IACpB,MAAO0P,EAAMtoC,OAAS,EAAG,CACrB,MAAM2c,EAAI2rB,EAAMn7B,MACV0xB,EAAOjuB,EAAA8nB,SAAS/b,EAAE,GAAIA,EAAE,IAC9B,GAAIkiB,EAAKpxB,SAAU,CACfrJ,KAAKmkC,eAAe1J,EAAKxvB,GAAKwvB,EAAK/+B,GAC/B++B,EAAK1F,KAAQxc,EAAE,IACf2rB,EAAMpoC,KAAK,CAAC2+B,EAAK1F,GAAKxc,EAAE,KAE5B,SAEJ,MAAM6rB,EAAmBpkC,KAAKqkC,qBAAqB9rB,EAAE,GAAIA,EAAE,IACvD6rB,EAAiBphB,MACbohB,EAAiBrP,KAAOxc,EAAE,IAAM6rB,EAAiBrP,KAAOxc,EAAE,IAC1D2rB,EAAMpoC,KAAK,CAACyc,EAAE,GAAI6rB,EAAiBrP,KACnCmP,EAAMpoC,KAAK,CAACsoC,EAAiBrP,GAAIxc,EAAE,MAEnC2rB,EAAMpoC,KAAKyc,IAInBvY,KAAKskC,gBAAgBF,EAAiBG,iBAAkBH,EAAiBI,OAAQJ,EAAiBK,QAC9FL,EAAiBrP,KAAOxc,EAAE,IAC1B2rB,EAAMpoC,KAAK,CAACsoC,EAAiBrP,GAAIxc,EAAE,OAK/ChZ,gBAAgBglC,EAA8BC,EAAgBC,GAC1D,MAAMC,EAAgB,GACtB1kC,KAAK2kC,iBAAiBJ,EAAkBC,EAAQC,EAAQC,GACxD1kC,KAAK4kC,iBAAiBF,GAG1BnlC,iBAAiBglC,EAA8BC,EAAgBC,EAAgBC,GAC3E,GAAIF,EAAO5oC,OAAS,EAAG,CACnBoE,KAAK6kC,oBAAoBL,EAAQE,GACjC1kC,KAAK6kC,oBAAoBJ,EAAQC,GACjC,MAAMI,EAAKN,EAAO,GAAG,GACfv5B,EAAKw5B,EAAO,GAAG,GACrBK,EAAGrgB,WAAW,GAAKxZ,EACnBA,EAAGwZ,WAAW,GAAKqgB,EACnBA,EAAG11B,YAAY,IAAK,EACpBnE,EAAGmE,YAAY,IAAK,EAEpB,MAAOm1B,EAAiB3oC,OAAS,EAC7BoE,KAAKkO,IAAI62B,eAAeR,EAAiBloC,UAKrDkD,oBAAoBylC,EAA4BN,GAC5C,IACIO,EACAC,EAFAC,EAAK,EAGT,MAAMC,EAAU,IAAMJ,EAAmBG,GACnCr5B,EAAO,IAAMk5B,EAAmBC,GAGhC1Q,EAAK6Q,IAAU,GAAGt2B,SAAStC,EAAAuC,IAAIq2B,IAAU,KAI/C,IAAI1mC,EACA2mC,EACAC,EACAC,EACAC,EACAC,EARJR,EAAKE,IACHF,EAQF,EAAG,CACCI,EAAKD,IAAU,GACfI,EAAOJ,IAAU,GACW,OAAxBC,EAAG5gB,WAAW+gB,KACd9mC,EAAI2mC,EAAG5gB,WAAW+gB,GAClBD,EAAM/4B,EAAA0C,GAAGxQ,EAAEk2B,OAAOyQ,EAAGv2B,SAAStC,EAAA0C,GAAGs2B,MACjCH,EAAK3mC,EAAE+lB,WAAW8gB,GAClBC,EAAOxlC,KAAKkO,IAAIw3B,YAAYhnC,EAAG6mC,IAEnCD,EAAKx5B,IAAO,GACZ25B,EAAO35B,IAAO,GACc,OAAxBw5B,EAAG7gB,WAAWghB,KACd/mC,EAAI4mC,EAAG7gB,WAAWghB,GAClBF,EAAM/4B,EAAA0C,GAAGxQ,EAAEk2B,OAAO0Q,EAAGx2B,SAAStC,EAAA0C,GAAGu2B,MACjCH,EAAK5mC,EAAE+lB,WAAW8gB,GAClBE,EAAOzlC,KAAKkO,IAAIw3B,YAAYhnC,EAAG6mC,IAEnC,MAAMI,EAAKN,EAAGv2B,SAAStC,EAAAuC,IAAIy2B,IACrBI,EAAKP,EAAGv2B,SAAStC,EAAA0C,GAAGs2B,IACpBK,EAAKP,EAAGx2B,SAAStC,EAAA0C,GAAGu2B,IACpBzQ,EAASxoB,EAAAuY,YAAY4gB,EAAGpkC,MAAQqkC,EAAGrkC,MAAQskC,EAAGtkC,OACpD,OAAQyzB,GACJ,KAAKzoB,EAAAyY,KAAK0U,WAAY,CAClB,MAAMoM,EAAQ9lC,KAAKkO,IAAI63B,eAAeJ,EAAIE,EAAID,EAAI,KAAM,KAAM,MAC9DlB,EAAM5oC,KAAK,CAACgqC,EAAO,IACnBA,EAAMrhB,WAAW,GAAK4gB,EACtBS,EAAMrhB,WAAW,GAAK6gB,EACtBD,EAAG5gB,WAAW+gB,GAAQM,EACtBR,EAAG7gB,WAAWghB,GAAQK,EAClBT,EAAGvgB,cAAc0gB,KAAOM,EAAM12B,YAAY,IAAK,GAC/Ck2B,EAAGxgB,cAAc2gB,KAAOK,EAAM12B,YAAY,IAAK,GACnDu2B,EAAGthB,SAAWyhB,EACdF,EAAGvhB,SAAWyhB,EACdD,EAAGxhB,SAAWyhB,EACdZ,EAAKC,EAAK,EACVH,EAAmBloC,OAAOqoC,EAAI,EAAG,CAACW,EAAO,IACzCd,EAAmBloC,OAAOoF,KAAKC,IAAI+iC,EAAID,GAAK,GAC5CD,EAAmBloC,OAAOoF,KAAKkJ,IAAI85B,EAAID,GAAK,GAC5CA,EAAKE,EACDQ,IAAOpR,IAAM4Q,IACVF,EACP,MAEJ,KAAK14B,EAAAyY,KAAKC,UACV,KAAK1Y,EAAAyY,KAAKiQ,YACJkQ,IACAF,EACF,aAGHA,EAAKD,EAAmBppC,QAGrC2D,qBAAqBymC,EAAaC,GAC9B,MAAMC,EAAKF,EAAIzkC,MACT+rB,EAAK2Y,EAAI1kC,MACTijC,EAAiB,GACjBC,EAAiB,GACjBF,EAA+B,GAC/B4B,EAAM,IAAI55B,EAAA65B,mBAAmBJ,EAAKhmC,KAAMstB,GAC9C,IACIyH,EADAwQ,EAAMY,EAAI52B,IAAKqlB,OAAOoR,GAE1B,GAAIG,EAAI52B,IAAKuV,cAAcygB,GAEvB,OADAxQ,EAAK/0B,KAAKwuB,UAAU2X,EAAI52B,IAAMg2B,EAAKS,EAAKC,GACjC,CAAEjjB,OAAO,EAAM+R,KAAIyP,SAAQC,SAAQF,oBAE9C,IAAI8B,EAAKF,EAAI52B,IAAKkV,WAAWjY,EAAAuC,IAAIw2B,IAC7Be,EAAKH,EAAI52B,IAAKkV,WAAWjY,EAAA0C,GAAGq2B,IAChCf,EAAO1oC,KAAK,CAACuqC,EAAIA,EAAGE,OAAOJ,EAAI52B,OAC/Bk1B,EAAO+B,QAAQ,CAACF,EAAIA,EAAGC,OAAOJ,EAAI52B,OAClCg1B,EAAiBiC,QAAQL,EAAI52B,KAC7B,IAAIk3B,EAAeN,EAAI52B,IACvB42B,EAAIr6B,OACJy5B,EAAMY,EAAI52B,IAAKg3B,OAAOE,GACtB,IAAIC,EAAgBP,EAAI52B,IAAKT,SAASy2B,GAClCjjB,GAAO,EACX,MAAOokB,IAAkBT,IAAQ3jB,EAAM,CACnC,IAAIqkB,EACAC,EACJ,MAAM5R,EAASxoB,EAAAuY,YAAYmhB,EAAI5Y,EAAIoZ,EAAcnlC,OACjD,OAAQyzB,GACJ,KAAKzoB,EAAAyY,KAAKiQ,UACN3S,GAAO,EACP,MAEJ,KAAK/V,EAAAyY,KAAKC,UACV,KAAK1Y,EAAAyY,KAAK0U,WAQN,GAPI1E,IAAWzoB,EAAAyY,KAAKC,WAChB0hB,EAAKn6B,EAAAuC,IAAIw2B,GACTqB,EAAKp6B,EAAA0C,GAAGq2B,KAERoB,EAAKn6B,EAAA0C,GAAGq2B,GACRqB,EAAKp6B,EAAAuC,IAAIw2B,IAETY,EAAI52B,IAAKuV,cAAc6hB,GAEvB,OADA5R,EAAK/0B,KAAKwuB,UAAU2X,EAAI52B,IAAMo3B,EAAIX,EAAKC,GAChC,CAAEjjB,OAAO,EAAM+R,KAAIyP,SAAQC,SAAQF,oBAE1C8B,EAAKF,EAAI52B,IAAKkV,WAAWmiB,GACzBrC,EAAiBiC,QAAQL,EAAI52B,KACzBylB,IAAWzoB,EAAAyY,KAAKC,UAAWuf,EAAO1oC,KAAK,CAACuqC,EAAIA,EAAGE,OAAOJ,EAAI52B,OACzDk1B,EAAO+B,QAAQ,CAACH,EAAIA,EAAGE,OAAOJ,EAAI52B,OACvCk3B,EAAeN,EAAI52B,IACnB42B,EAAIr6B,OACJy5B,EAAMY,EAAI52B,IAAKg3B,OAAOE,GACtBC,EAAgBP,EAAI52B,IAAKT,SAASy2B,GAEtC,OAUZ,OANAxQ,EAAK2R,EACLnC,EAAiBiC,QAAQL,EAAI52B,KAC7B82B,EAAKF,EAAI52B,IAAKkV,WAAWjY,EAAA0C,GAAGq2B,IAC5Bf,EAAO1oC,KAAK,CAACuqC,EAAIA,EAAGE,OAAOJ,EAAI52B,OAC/B+2B,EAAKH,EAAI52B,IAAKkV,WAAWjY,EAAAuC,IAAIw2B,IAC7Bd,EAAO+B,QAAQ,CAACF,EAAIA,EAAGC,OAAOJ,EAAI52B,OAC3B,CAAEyT,OAAO,EAAO+R,KAAIyP,SAAQC,SAAQF,oBAG/ChlC,UAAUpB,EAAazC,EAAWsqC,EAAaC,GAC3C,MAAMY,EAAM1oC,EAAE2Q,SAAStC,EAAA0C,GAAGxT,IACpBorC,EAAM3oC,EAAE2Q,SAAStC,EAAAuC,IAAIrT,IACrBk+B,EAAKoM,EAAIzkC,MACTs4B,EAAKoM,EAAI1kC,MACTu4B,EAAK+M,EAAItlC,MACTw4B,EAAK+M,EAAIvlC,MACf,IASIwzB,EATAgS,EAAKv6B,EAAAqY,aAAa+U,EAAIC,EAAIC,EAAIC,GAClC,GAAIgN,IAAOnN,GAAMmN,IAAOlN,GAAMkN,IAAOjN,GAAMiN,IAAOhN,EAAI,CAClD,MAAMtd,EAAO,IAAIlQ,EAAAy6B,YAAYD,GAC7BtqB,EAAKwqB,OAAO,GACRxqB,EAAKyqB,SAAS,IAAI36B,EAAAy6B,YAAYpN,MAAMmN,EAAKnN,GACzCnd,EAAKyqB,SAAS,IAAI36B,EAAAy6B,YAAYnN,MAAMkN,EAAKlN,GACzCpd,EAAKyqB,SAAS,IAAI36B,EAAAy6B,YAAYlN,MAAMiN,EAAKjN,GACzCrd,EAAKyqB,SAAS,IAAI36B,EAAAy6B,YAAYjN,MAAMgN,EAAKhN,GAGjD,GAAW,OAAPgN,EAAa,MAAM,IAAIzP,MAAM,QAYjC,OAVIt3B,KAAKmnC,sBAAsBhpC,EAAGzC,GAC9Bq5B,EAAK/0B,KAAKgkC,OAAO+C,EAAI5oC,GAGrB42B,IAAO8R,GAAO9R,IAAO+R,GACrB9mC,KAAKikC,kBAAkB4C,EAAK9R,GAC5B/0B,KAAKikC,kBAAkBlP,EAAI+R,IAE3B9mC,KAAKikC,kBAAkB4C,EAAKC,GAEzB/R,EAGXx1B,sBAAsBpB,EAAazC,GAC/ByC,EAAEiR,YAAY1T,IAAK,EACQ,IAAvBsE,KAAKkO,IAAIk5B,YAAiBjpC,EAAEsmB,WAAW/oB,GAAI0T,YAAYpP,KAAKkO,IAAIw3B,YAAYvnC,EAAGzC,KAAM,GAG7F6D,0BAA0BgZ,GACtB,IAAIpa,EAAIoa,EAAE8L,SACV,MAAM1a,EAAQxL,EACd,IAAIkpC,EACJ,GACIA,EAAOlpC,EAAEy2B,OAAOrc,GACZpa,EAAEsmB,WAAW4iB,GAAOj4B,YAAYpP,KAAKkO,IAAIw3B,YAAYvnC,EAAGkpC,IAAQlpC,EAAEiR,YAAYi4B,IAAQ,EACrFlpC,EAAEiR,YAAYi4B,IAAQ,EAC3BlpC,EAAIA,EAAEsmB,WAAWjY,EAAAuC,IAAIs4B,UAChBlpC,IAAMwL,GAGnBpK,eAAepB,EAAazC,GACG,IAAvBsE,KAAKkO,IAAIk5B,UAAiBjpC,EAAEiR,YAAY,IAAK,GAE7CjR,EAAEiR,YAAY1T,IAAK,EACnByC,EAAEsmB,WAAW/oB,GAAI0T,YAAYpP,KAAKkO,IAAIw3B,YAAYvnC,EAAGzC,KAAM,GAInE6D,OAAOV,EAAU8K,EAAyB,MACtC,MAAM29B,EAAatnC,KAAKkkB,OAAOrlB,EAAGmB,KAAKunC,QAAQ1oC,EAAG8K,IAC5C4qB,EAAKv0B,KAAKwnC,QAAQ3oC,EAAGyoC,EAAWzqB,IAAKyqB,EAAWljB,GAAIkjB,EAAWG,IAErE,OADAznC,KAAK0nC,WAAWnT,GACTA,EAGXh1B,WAAWgZ,GACP,GAAIvY,KAAKkO,IAAIk5B,WAAa,EAAG,OAC7B,IACI1rC,EACAoQ,EAFA3N,EAAIoa,EAAE8L,SAGV,MAAM1a,EAAQxL,EACd,GACIzC,EAAIyC,EAAEy2B,OAAOrc,GACbzM,EAAO3N,EAAEsmB,WAAWjY,EAAAuC,IAAIrT,IACxBsE,KAAK2nC,gBAAgBxpC,EAAGzC,GACxByC,EAAI2N,QACCA,IAASnC,GAGtBpK,gBAAgBpB,EAAazC,EAAWksC,EAAQ,GAC5C,IAAK5nC,KAAK6nC,WAAW1pC,EAAGzC,GAAI,OAC5B,MAAMosC,EAAW,IACjB,GAAIF,IAAUE,EACV,MAAM,IAAIxQ,MAAM,SAGpB,MAAMyQ,EAAK5pC,EAAEsmB,WAAW/oB,GACxBsE,KAAKgoC,KAAK7pC,EAAGzC,GACbsE,KAAK2nC,gBAAgBxpC,EAAGzC,EAAGksC,EAAQ,GACnClsC,EAAIqsC,EAAGnT,OAAOz2B,EAAE2Q,SAASpT,IACzBsE,KAAK2nC,gBAAgBI,EAAIrsC,EAAGksC,EAAQ,GAGxCroC,SAAS0oC,EAAUC,GACf,MAAM1C,EAAOyC,EAAG,GACVxC,EAAOyC,EAAG,GAChB,OAAOD,EAAG,GAAGE,IAAMD,EAAG,GAAGC,KAAQF,EAAG,GAAGE,MAAQD,EAAG,GAAGC,KAAO3C,EAAOC,EAGvElmC,iBAAiBmlC,GACb,IACIvmC,EACAzC,EACA0sC,EAHAC,EAAK,EAIT,MAAMC,EAAkB,GACxB,MAAOD,EAAK3D,EAAM9oC,OACduC,EAAIumC,EAAM2D,GAAI,GACd3sC,EAAIgpC,EAAM2D,GAAI,GACVroC,KAAK6nC,WAAW1pC,EAAGzC,KACnB0sC,EAAM,CAACjqC,EAAEsmB,WAAW/oB,GAAKsE,KAAKkO,IAAIw3B,YAAYvnC,EAAGzC,IAC7CsE,KAAKuoC,SAAS7D,EAAM2D,GAAKD,GAAME,EAAQxsC,KAAK4oC,EAAM2D,IACjDC,EAAQxsC,KAAKssC,MAEpBC,EAEN,IAAIhB,EACAU,EACAS,EACAj6B,EACJ,MAAMjD,EAAqB,CAAC,KAAM,KAAM,KAAM,MAC9C,MAAOg9B,EAAQ1sC,OAAS,EAAG,CACvBuC,EAAImqC,EAAQ,GAAG,GACfjB,EAAOiB,EAAQ,GAAG,GAClBP,EAAK5pC,EAAEsmB,WAAW4iB,GAClBmB,EAAOxoC,KAAKkO,IAAIw3B,YAAYvnC,EAAGkpC,GAC/B94B,EAAK,CAACpQ,EAAGkpC,GACTiB,EAAQxrC,OAAOwrC,EAAQjtB,UAAUotB,GAAMA,EAAG,KAAOl6B,EAAG,IAAMk6B,EAAG,KAAOl6B,EAAG,IAAK,GAC5EjD,EAAE,GAAK,CAACnN,EAAGqO,EAAA0C,GAAGm4B,IACd/7B,EAAE,GAAK,CAACnN,EAAGqO,EAAAuC,IAAIs4B,IACf/7B,EAAE,GAAK,CAACy8B,EAAIv7B,EAAA0C,GAAGs5B,IACfl9B,EAAE,GAAK,CAACy8B,EAAIv7B,EAAAuC,IAAIy5B,IAEhB,IAAK,MAAM55B,KAAQtD,EAAG,CAClB,MAAMo9B,EAAK95B,EAAM,GACX+5B,EAAK/5B,EAAM,GACjBw5B,EAAM,CAACM,EAAGjkB,WAAWkkB,GAAM3oC,KAAKkO,IAAIw3B,YAAYgD,EAAIC,IAChD3oC,KAAKuoC,SAAS35B,EAAOw5B,GACrBE,EAAQxrC,OAAOwrC,EAAQjtB,UAAUotB,GAAMA,EAAG,KAAO75B,EAAM,IAAM65B,EAAG,KAAO75B,EAAM,IAAK,GACjF05B,EAAQxrC,OAAOwrC,EAAQjtB,UAAUotB,GAAMA,EAAG,KAAOL,EAAI,IAAMK,EAAG,KAAOL,EAAI,IAAK,GAGvFpoC,KAAKgoC,KAAK7pC,EAAGkpC,GAEb,IAAK,MAAMz4B,KAAQtD,EAAG,CAClB,MAAMo9B,EAAK95B,EAAM,GACX+5B,EAAK/5B,EAAM,GACb5O,KAAK6nC,WAAWa,EAAIC,KACpBP,EAAM,CAACM,EAAGjkB,WAAWkkB,GAAM3oC,KAAKkO,IAAIw3B,YAAYgD,EAAIC,IAChD3oC,KAAKuoC,SAAS35B,EAAOw5B,GAAME,EAAQxsC,KAAK8S,GACvC05B,EAAQxsC,KAAKssC,MAMlC7oC,KAAKpB,EAAazC,GACd,MAAMktC,EAAIzqC,EAAEsmB,WAAW/oB,GACjBkB,EAAIoD,KAAKkO,IAAIw3B,YAAYvnC,EAAGzC,GAC5BmtC,EAAK1qC,EAAEsmB,WAAWjY,EAAA0C,GAAGxT,IACrBirC,EAAK3mC,KAAKkO,IAAIw3B,YAAYvnC,EAAGqO,EAAA0C,GAAGxT,IAChCotC,EAAK3qC,EAAEsmB,WAAWjY,EAAAuC,IAAIrT,IACtBkrC,EAAK5mC,KAAKkO,IAAIw3B,YAAYvnC,EAAGqO,EAAAuC,IAAIrT,IACjCqtC,EAAKH,EAAEnkB,WAAWjY,EAAA0C,GAAGtS,IACrBosC,EAAKhpC,KAAKkO,IAAIw3B,YAAYkD,EAAGp8B,EAAA0C,GAAGtS,IAChCqsC,EAAKL,EAAEnkB,WAAWjY,EAAAuC,IAAInS,IACtBssC,EAAKlpC,KAAKkO,IAAIw3B,YAAYkD,EAAGp8B,EAAAuC,IAAInS,IACvCoD,KAAKkO,IAAI85B,KAAK7pC,EAAGzC,GACjByC,EAAEiR,YAAYjR,EAAEooC,OAAOqC,KAAM,EAC7BA,EAAEx5B,YAAYw5B,EAAErC,OAAOpoC,KAAM,EAC7B0qC,EAAGpkB,WAAWkiB,GAAKv3B,YAAYpP,KAAKkO,IAAIw3B,YAAYmD,EAAIlC,IAAOkC,EAAGz5B,YAAYu3B,GAC9EmC,EAAGrkB,WAAWmiB,GAAKx3B,YAAYpP,KAAKkO,IAAIw3B,YAAYoD,EAAIlC,IAAOkC,EAAG15B,YAAYw3B,GAC9EmC,EAAGtkB,WAAWukB,GAAK55B,YAAYpP,KAAKkO,IAAIw3B,YAAYqD,EAAIC,IAAOD,EAAG35B,YAAY45B,GAC9EC,EAAGxkB,WAAWykB,GAAK95B,YAAYpP,KAAKkO,IAAIw3B,YAAYuD,EAAIC,IAAOD,EAAG75B,YAAY85B,GAGlF3pC,WAAWpB,EAAazC,EAAW07B,GAAU,GACzC,MAAM2Q,EAAK5pC,EAAEsmB,WAAW/oB,GACxB,OAAIyC,EAAEsR,eAAgBs4B,EAAGt4B,gBACrBtR,EAAEiR,YAAY1T,IACX8Q,EAAA2qB,qBAAqB4Q,EAAI5pC,EAAE2Q,SAASpT,GAAI6F,MAAQ61B,KAAa7qB,EAAAyY,KAAKsU,kBAG7E/5B,QAAQuF,EAAU+X,EAAsBuH,EAAgBqjB,GACpD,IACI7B,EACAC,EAFAsD,GAA0B,EAG1B/kB,IAAO7X,EAAA68B,WAAWC,MAAQxsB,EAAKiI,cAAc2iB,KAC7C0B,GAA0B,EAC1BvD,EAAK/oB,EAAK/N,SAAStC,EAAAuC,IAAI04B,IACvB5B,EAAKhpB,EAAK/N,SAAStC,EAAA0C,GAAGu4B,KAE1B,MAAMlT,EAAKv0B,KAAKspC,QAAQxkC,EAAG+X,EAAKuH,EAAIqjB,GAIpC,OAHI0B,EAAyBnpC,KAAKupC,0BAA0BhV,EAAIqR,EAAKC,GAC5DzhB,IAAO7X,EAAA68B,WAAWI,QAAQxpC,KAAKypC,yBAAyBlV,GACtC,IAAvBv0B,KAAKkO,IAAIk5B,WAAiBpnC,KAAK0pC,0BAA0BnV,GACtDA,EAGXh1B,0BAA0Bg1B,EAAYoV,EAAYC,GAC9C,GAA2B,IAAvB5pC,KAAKkO,IAAIk5B,UACb,GAA2B,IAAvBpnC,KAAKkO,IAAIk5B,UAAiB,CAC1B,MAAM3S,EAAK,IAAIloB,EAAAmoB,eAAeH,EAAI,MAClC,GACIE,EAAGt2B,EAAGiR,YAAY,IAAK,QAClBqlB,EAAG3oB,YACT,CACH,MAAM+9B,EAAK,IAAIt9B,EAAAu9B,eAAevV,EAAI,MAClC,EAAG,CACC,MAAM8S,EAAOwC,EAAG1rC,EAAGy2B,OAAOL,GACpBwV,EAAMv9B,EAAA0C,GAAGm4B,GACT2C,EAAOx9B,EAAAuC,IAAIs4B,GACbwC,EAAG1rC,EAAG2Q,SAASi7B,KAASJ,GAAME,EAAG1rC,EAAG2Q,SAASi7B,KAASH,GACtDC,EAAG1rC,EAAGiR,YAAY46B,IAAQ,EAC1BH,EAAG1rC,EAAGiR,YAAY26B,IAAO,IAEzBF,EAAG1rC,EAAGiR,YAAY46B,IAAQ,EAC1BH,EAAG1rC,EAAGiR,YAAY26B,IAAO,SAExBF,EAAG/9B,SAIpBvM,yBAAyBgZ,GACrB,MAAMkc,EAAK,IAAIloB,EAAAmoB,eAAenc,EAAG,MACjC,GAAIkc,EAAGhmB,MACH,EAAG,CACC,MAAMtQ,EAAIs2B,EAAGt2B,EACPkpC,EAAO5S,EAAGI,GAChB12B,EAAEiR,YAAYi4B,IAAQ,EACK,IAAvBrnC,KAAKkO,IAAIk5B,YAAiBjpC,EAAEsmB,WAAW4iB,GAAOj4B,YAAYpP,KAAKkO,IAAIw3B,YAAYvnC,EAAGkpC,KAAS,SAC1F5S,EAAG3oB,QAIpBvM,QAAQV,EAAUge,EAAsBuH,EAAgBqjB,GACpD,GAAiC,IAA7BznC,KAAKkO,IAAIY,SAASlT,OAClB,OAAOoE,KAAKiqC,YAAYprC,GACrB,GAAiC,IAA7BmB,KAAKkO,IAAIY,SAASlT,OACzB,OAAIwoB,IAAO7X,EAAA68B,WAAWI,OAAexpC,KAAKkO,IAAIg8B,aAClClqC,KAAKmqC,aAAatrC,GAElC,OAAQulB,GACJ,KAAK7X,EAAA68B,WAAWI,OACZ,OAAO3sB,EAAK/N,SAAS24B,GAEzB,KAAKl7B,EAAA68B,WAAWgB,oBACZ,OAAOpqC,KAAKqqC,wBAAwBxrC,GAExC,KAAK0N,EAAA68B,WAAWkB,oBACZ,OAAOtqC,KAAKuqC,wBAAwB1rC,EAAGge,GAE3C,KAAKtQ,EAAA68B,WAAWC,KACZ,OAAOrpC,KAAKwqC,aAAa3rC,EAAGge,EAAM4qB,GAEtC,KAAKl7B,EAAA68B,WAAWqB,KACZ,OAAOzqC,KAAK0qC,aAAa7rC,EAAGge,GAGpC,MAAM,IAAIya,MAAM,OAIpB/3B,aAAaV,EAAUge,EAAe4qB,GAClC,MAAMlvB,EAAIvY,KAAKkO,IAAIs8B,aAAa3tB,EAAK4qB,GAErC,OADAlvB,EAAEhX,MAAQ1C,EACH0Z,EAGXhZ,aAAaV,EAAUge,GACnB,MAAMtE,EAAIvY,KAAKkO,IAAIw8B,aAAa7tB,GAEhC,OADAtE,EAAEhX,MAAQ1C,EACH0Z,EAGXhZ,YAAYV,GACR,MAAM0Z,EAAIvY,KAAKkO,IAAIy8B,cAEnB,OADApyB,EAAEhX,MAAQ1C,EACH0Z,EAGXhZ,aAAaV,GACT,MAAM0Z,EAAIvY,KAAKkO,IAAIy8B,YAAY3qC,KAAKkO,IAAI08B,WAAW,GAEnD,OADAryB,EAAEhX,MAAQ1C,EACH0Z,EAGXhZ,wBAAwBV,GACpB,IAAIgsC,GAAU,EACd,GAA2B,IAAvB7qC,KAAKkO,IAAIk5B,UAAiB,CAC1B,MAAMjpC,EAAI6B,KAAKkO,IAAI48B,WAAWj8B,MACxBmmB,EAASxoB,EAAAuY,YAAY5mB,EAAE2Q,SAAS,GAAIvN,MAAQpD,EAAE2Q,SAAS,GAAIvN,MAAQ1C,GACzEgsC,EAAU7V,IAAWzoB,EAAAyY,KAAK+lB,iBAE9B,MAAMxyB,EAAIvY,KAAKkO,IAAIy8B,YAAY3qC,KAAKkO,IAAI08B,UAAWC,GAEnD,OADAtyB,EAAEhX,MAAQ1C,EACH0Z,EAGXhZ,wBAAwBV,EAAUV,GAC9B,IAAIoa,EACJ,GAA2B,IAAvBvY,KAAKkO,IAAIk5B,UACT,MAAM,IAAI9P,MAAM,aAKpB,OAHI/e,EAAIvY,KAAKgrC,yBAAyBnsC,EAAGV,GAEzCoa,EAAEhX,MAAQ1C,EACH0Z,EAGXhZ,yBAAyBV,EAAUV,GAC/B,IAAIspC,EAAKtpC,EAAEy2B,OAAO50B,KAAKkO,IAAI08B,WAC3B,MAAMK,EAAsB,GACtBC,EAAqB,GAC3B,IAAIrB,EAAK,IAAIt9B,EAAAu9B,eAAe9pC,KAAKkO,IAAI08B,UAAWzsC,GAC5CmkB,GAAO,EACX,OAAQA,EAAM,CACVunB,EAAG1vB,OACHstB,EAAKoC,EAAG1rC,EAAGy2B,OAAO50B,KAAKkO,IAAI08B,WAC3B,MAAMzV,EAAI0U,EAAG1rC,EAAG2Q,SAAStC,EAAAuC,IAAI04B,IAAMlmC,MAC7BxD,EAAI8rC,EAAG1rC,EAAG2Q,SAAStC,EAAA0C,GAAGu4B,IAAMlmC,MAC9BiL,EAAAuY,YAAYlmB,EAAGs2B,EAAGp3B,KAAOwO,EAAAyY,KAAKC,UAAWgmB,EAAQnvC,KAAK+tC,EAAG1rC,GACxDmkB,GAAO,EAEhBunB,EAAK,IAAIt9B,EAAAu9B,eAAe9pC,KAAKkO,IAAI08B,UAAWzsC,GAC5CmkB,GAAO,EACP,OAAQA,EAAM,CACVunB,EAAG/9B,OACH27B,EAAKoC,EAAG1rC,EAAGy2B,OAAO50B,KAAKkO,IAAI08B,WAC3B,MAAMzV,EAAI0U,EAAG1rC,EAAG2Q,SAAStC,EAAAuC,IAAI04B,IAAMlmC,MAC7BxD,EAAI8rC,EAAG1rC,EAAG2Q,SAAStC,EAAA0C,GAAGu4B,IAAMlmC,MAC9BiL,EAAAuY,YAAYlmB,EAAGs2B,EAAGp3B,KAAOwO,EAAAyY,KAAKC,UAAWimB,EAAOpvC,KAAK+tC,EAAG1rC,GACvDmkB,GAAO,EAEhB,MAAM/J,EAAIvY,KAAKkO,IAAIw8B,aAAavsC,GAEhC,IAAIgtC,EADJ5yB,EAAEhX,MAAQ1C,EAEV,MAAOosC,EAAQrvC,OAAS,EACpBuvC,EAAKF,EAAQ,GACbxD,EAAKj7B,EAAAuC,IAAIo8B,EAAGvW,OAAO50B,KAAKkO,IAAI08B,YAC5B5qC,KAAKkO,IAAI85B,KAAKmD,EAAI1D,GAClBwD,EAAQ5uC,QAEZ,MAAO6uC,EAAOtvC,OAAS,EACnBuvC,EAAKD,EAAO,GACZzD,EAAKj7B,EAAA0C,GAAGi8B,EAAGvW,OAAO50B,KAAKkO,IAAI08B,YAC3B5qC,KAAKkO,IAAI85B,KAAKmD,EAAI1D,GAClByD,EAAO7uC,QAEXwtC,EAAK,IAAIt9B,EAAAu9B,eAAevxB,EAAG,MAC3B,OAAQsxB,EAAG1rC,EAAGsR,aAAco6B,EAAG/9B,OAE/B,OADA9L,KAAKkO,IAAI08B,UAAUvmB,SAAWwlB,EAAG1rC,EAC1Boa,EAGXhZ,OAAOV,EAAU8K,GACb,IAAIya,EAAK,EACLqjB,EAAK,EACT,GAAIznC,KAAKkO,IAAIk5B,UAAY,EAGrB,OAFAhjB,EAAK7X,EAAA68B,WAAWgB,oBAChB3C,EAAK,EACE,CAAE5qB,IAAK,KAAMuH,KAAIqjB,MACrB,GAA2B,IAAvBznC,KAAKkO,IAAIk5B,UAOhB,OALIhjB,EADA5X,EAAAurB,QAAQl5B,EAAGmB,KAAKkO,IAAIg8B,aAAa7lB,SAAUvV,SAAS,GAAIvN,OACnDgL,EAAA68B,WAAWI,OAEXj9B,EAAA68B,WAAWgB,oBAEpB3C,EAAK,EACE,CAAE5qB,IAAK,KAAMuH,KAAIqjB,MACrB,GAA2B,IAAvBznC,KAAKkO,IAAIk5B,UAChB,OAAOpnC,KAAKorC,cAAcvsC,GAE9B,GAAc,OAAV8K,EAAgB,CAChB,MAAMxL,EAAI6B,KAAKkO,IAAI08B,UAAUvmB,SAC7B1a,EAAQxL,EAAEsmB,WAAWtmB,EAAEy2B,OAAO50B,KAAKkO,IAAI08B,iBAChCjhC,EAAM8F,eACb9F,EAAQA,EAAM8a,WAAW9a,EAAMirB,OAAO50B,KAAKkO,IAAI08B,aAEnD,OAAO5qC,KAAKqrC,cAAc1hC,EAAO9K,GAGrCU,cAAcV,GACV,MAAMysC,EAAKtrC,KAAKkO,IAAI08B,UAAUvmB,SACxBknB,EAAKD,EAAG1W,OAAO50B,KAAKkO,IAAI08B,WACxBzsC,EAAImtC,EAAG7mB,WAAW8mB,GAClBC,EAAMh/B,EAAAuY,YAAY5mB,EAAE2Q,SAAS,GAAIvN,MAAQpD,EAAE2Q,SAAS,GAAIvN,MAAQ1C,GACtE,GAAI2sC,IAAQj/B,EAAAyY,KAAK0U,YAAc8R,IAAQj/B,EAAAyY,KAAKC,UACxC,MAAO,CAAEpI,IAAK,IAAItQ,EAAAk/B,SAAYrnB,GAAI7X,EAAA68B,WAAWgB,oBAAqB3C,GAAI,GAE1E,MAAM/rC,EAAIyC,EAAEooC,OAAO+E,GACnB,GAAI9+B,EAAA0oB,iBAAiBr2B,EAAGV,EAAE2Q,SAAS,EAAIpT,GAAI6F,MAAQpD,EAAE2Q,SAASpT,GAAI6F,OAC9D,MAAO,CAAEsb,IAAKyuB,EAAIlnB,GAAI7X,EAAA68B,WAAWkB,oBAAqB7C,GAAI8D,GAE9D,GAAI/+B,EAAAurB,QAAQl5B,EAAGV,EAAE2Q,SAAS,EAAIpT,GAAI6F,OAAS,MAAO,CAAEsb,IAAK1e,EAAGimB,GAAI7X,EAAA68B,WAAWI,OAAQ/B,GAAI,EAAI/rC,GAC3F,MAAM,IAAI47B,MAAM,UAGpB/3B,cAAchC,EAAasB,GACvB,IAEIulB,EACAqjB,EAHAttB,EAAO,KACPtL,GAAQ,EAGZ,MAAO,EAAM,CACT,GAAItR,EAAEkS,aACF,MAAO,CAAEoN,IAAKtf,EAAG6mB,GAAI7X,EAAA68B,WAAWkB,oBAAqB7C,GAAIlqC,EAAEq3B,OAAO50B,KAAKkO,IAAI08B,YAE/E,MAAMc,EAAY,EACZnU,EAAKh6B,EAAEuR,SAAS,GAAIvN,MACpBi2B,EAAKj6B,EAAEuR,SAAS,GAAIvN,MACpBk2B,EAAKl6B,EAAEuR,SAAS,GAAIvN,MAC1B,IAAIoqC,EACAC,EACAC,EACJ,GAAIh9B,EAAO,CAIP,GAHAsL,EAAO5c,EACPsR,GAAQ,EACR88B,EAAKn/B,EAAAuY,YAAYwS,EAAIC,EAAI34B,GACrB8sC,IAAOp/B,EAAAyY,KAAK6R,SAAU,CACtBt5B,EAAIA,EAAEknB,WAAW,GACjB,SAGJ,GADAmnB,EAAKp/B,EAAAuY,YAAYyS,EAAIC,EAAI54B,GACrB+sC,IAAOr/B,EAAAyY,KAAK6R,SAAU,CACtBt5B,EAAIA,EAAEknB,WAAW,GACjB,SAGJ,GADAonB,EAAKr/B,EAAAuY,YAAY0S,EAAIF,EAAI14B,GACrBgtC,IAAOt/B,EAAAyY,KAAK6R,SAAU,CACtBt5B,EAAIA,EAAEknB,WAAW,GACjB,eAED,GAAIinB,EACP,GAAInuC,EAAEknB,WAAW,KAAQtK,EAAM,CAG3B,GAFAA,EAAO5c,EACPouC,EAAKn/B,EAAAuY,YAAYwS,EAAIC,EAAI34B,GACrB8sC,IAAOp/B,EAAAyY,KAAK6R,SAAU,CACtBt5B,EAAIA,EAAEknB,WAAW,GACjB,SAGJ,GADAonB,EAAKr/B,EAAAuY,YAAY0S,EAAIF,EAAI14B,GACrBgtC,IAAOt/B,EAAAyY,KAAK6R,SAAU,CACtBt5B,EAAIA,EAAEknB,WAAW,GACjB,SAEJmnB,EAAKr/B,EAAAyY,KAAK4R,cACP,GAAIr5B,EAAEknB,WAAW,KAAQtK,EAAM,CAGlC,GAFAA,EAAO5c,EACPquC,EAAKp/B,EAAAuY,YAAYyS,EAAIC,EAAI54B,GACrB+sC,IAAOr/B,EAAAyY,KAAK6R,SAAU,CACtBt5B,EAAIA,EAAEknB,WAAW,GACjB,SAGJ,GADAknB,EAAKn/B,EAAAuY,YAAYwS,EAAIC,EAAI34B,GACrB8sC,IAAOp/B,EAAAyY,KAAK6R,SAAU,CACtBt5B,EAAIA,EAAEknB,WAAW,GACjB,SAEJonB,EAAKt/B,EAAAyY,KAAK4R,aACP,CAGH,GAFAzc,EAAO5c,EACPsuC,EAAKr/B,EAAAuY,YAAY0S,EAAIF,EAAI14B,GACrBgtC,IAAOt/B,EAAAyY,KAAK6R,SAAU,CACtBt5B,EAAIA,EAAEknB,WAAW,GACjB,SAGJ,GADAmnB,EAAKp/B,EAAAuY,YAAYyS,EAAIC,EAAI54B,GACrB+sC,IAAOr/B,EAAAyY,KAAK6R,SAAU,CACtBt5B,EAAIA,EAAEknB,WAAW,GACjB,SAEJknB,EAAKp/B,EAAAyY,KAAK4R,cAGd,GAAIr5B,EAAEknB,WAAW,KAAOtK,EAAM,CAG1B,GAFAA,EAAO5c,EACPsuC,EAAKr/B,EAAAuY,YAAY0S,EAAIF,EAAI14B,GACrBgtC,IAAOt/B,EAAAyY,KAAK6R,SAAU,CACtBt5B,EAAIA,EAAEknB,WAAW,GACjB,SAGJ,GADAknB,EAAKn/B,EAAAuY,YAAYwS,EAAIC,EAAI34B,GACrB8sC,IAAOp/B,EAAAyY,KAAK6R,SAAU,CACtBt5B,EAAIA,EAAEknB,WAAW,GACjB,SAEJmnB,EAAKr/B,EAAAyY,KAAK4R,cACP,GAAIr5B,EAAEknB,WAAW,KAAOtK,EAAM,CAGjC,GAFAA,EAAO5c,EACPouC,EAAKn/B,EAAAuY,YAAYwS,EAAIC,EAAI34B,GACrB8sC,IAAOp/B,EAAAyY,KAAK6R,SAAU,CACtBt5B,EAAIA,EAAEknB,WAAW,GACjB,SAGJ,GADAmnB,EAAKp/B,EAAAuY,YAAYyS,EAAIC,EAAI54B,GACrB+sC,IAAOr/B,EAAAyY,KAAK6R,SAAU,CACtBt5B,EAAIA,EAAEknB,WAAW,GACjB,SAEJonB,EAAKt/B,EAAAyY,KAAK4R,aACP,CAGH,GAFAzc,EAAO5c,EACPquC,EAAKp/B,EAAAuY,YAAYyS,EAAIC,EAAI54B,GACrB+sC,IAAOr/B,EAAAyY,KAAK6R,SAAU,CACtBt5B,EAAIA,EAAEknB,WAAW,GACjB,SAGJ,GADAonB,EAAKr/B,EAAAuY,YAAY0S,EAAIF,EAAI14B,GACrBgtC,IAAOt/B,EAAAyY,KAAK6R,SAAU,CACtBt5B,EAAIA,EAAEknB,WAAW,GACjB,SAEJknB,EAAKp/B,EAAAyY,KAAK4R,SAGlB,MAAMkV,GACDH,IAAOp/B,EAAAyY,KAAKiQ,UAAY,EAAI,IAAM2W,IAAOr/B,EAAAyY,KAAKiQ,UAAY,EAAI,IAAM4W,IAAOt/B,EAAAyY,KAAKiQ,UAAY,EAAI,GACrG,OAAQ6W,GACJ,KAAK,EACD1nB,EAAK7X,EAAA68B,WAAWqB,KAChBhD,EAAK,EACL,MAEJ,KAAK,EACDrjB,EAAK7X,EAAA68B,WAAWC,KAChB5B,EAAKkE,IAAOp/B,EAAAyY,KAAKiQ,UAAY,EAAI2W,IAAOr/B,EAAAyY,KAAKiQ,UAAY,EAAI,EAC7D,MAEJ,KAAK,EACD7Q,EAAK7X,EAAA68B,WAAWI,OAChB/B,EAAKkE,IAAOp/B,EAAAyY,KAAKiQ,UAAY,EAAI2W,IAAOr/B,EAAAyY,KAAKiQ,UAAY,EAAI,EAC7D,MAGR,QAAWvsB,IAAP0b,QAA2B1b,IAAP++B,EAAkB,MAAM,IAAInQ,MAAM,OAC1D,MAAO,CAAEza,IAAKtf,EAAG6mB,KAAIqjB,OAI7BloC,QAAQV,EAAU8K,GACd,GAAI3J,KAAKkO,IAAIk5B,UAAY,EAAG,OAAOz9B,EACnC,GAAc,OAAVA,EAAgB,CAChB,MAAMxL,EAAI6B,KAAKkO,IAAI08B,UAAUvmB,SAC7B1a,EAAQxL,EAAEsmB,WAAWtmB,EAAEy2B,OAAO50B,KAAKkO,IAAI08B,iBAChCjhC,EAAM8F,eACb9F,EAAQA,EAAM8a,WAAW9a,EAAMirB,OAAO50B,KAAKkO,IAAI08B,aAEnD,IAAIzwB,EAAO,KACP5c,EAAIoM,EACJkF,GAAQ,EACRk9B,EAAS,KACb,MAAO,EAAM,CACT,IAAKA,IAAU,OAAOxuC,EACtB,GAAIA,EAAEkS,aAAc,OAAOlS,EAC3B,MAAMg6B,EAAKh6B,EAAEuR,SAAS,GAAIvN,MACpBi2B,EAAKj6B,EAAEuR,SAAS,GAAIvN,MACpBk2B,EAAKl6B,EAAEuR,SAAS,GAAIvN,MAC1B,GAAIsN,EAAO,CAGP,GAFAsL,EAAO5c,EACPsR,GAAQ,EACJrC,EAAA0qB,8BAA8BK,EAAIC,EAAI34B,GAAI,CAC1CtB,EAAIA,EAAEknB,WAAW,GACjB,SAEJ,GAAIjY,EAAA0qB,8BAA8BM,EAAIC,EAAI54B,GAAI,CAC1CtB,EAAIA,EAAEknB,WAAW,GACjB,SAEJ,GAAIjY,EAAA0qB,8BAA8BO,EAAIF,EAAI14B,GAAI,CAC1CtB,EAAIA,EAAEknB,WAAW,GACjB,eAGJ,GAAIlnB,EAAEknB,WAAW,KAAOtK,EAAM,CAE1B,GADAA,EAAO5c,EACHiP,EAAA0qB,8BAA8BK,EAAIC,EAAI34B,GAAI,CAC1CtB,EAAIA,EAAEknB,WAAW,GACjB,SAEJ,GAAIjY,EAAA0qB,8BAA8BO,EAAIF,EAAI14B,GAAI,CAC1CtB,EAAIA,EAAEknB,WAAW,GACjB,eAED,GAAIlnB,EAAEknB,WAAW,KAAOtK,EAAM,CAEjC,GADAA,EAAO5c,EACHiP,EAAA0qB,8BAA8BK,EAAIC,EAAI34B,GAAI,CAC1CtB,EAAIA,EAAEknB,WAAW,GACjB,SAEJ,GAAIjY,EAAA0qB,8BAA8BM,EAAIC,EAAI54B,GAAI,CAC1CtB,EAAIA,EAAEknB,WAAW,GACjB,cAED,CAEH,GADAtK,EAAO5c,EACHiP,EAAA0qB,8BAA8BO,EAAIF,EAAI14B,GAAI,CAC1CtB,EAAIA,EAAEknB,WAAW,GACjB,SAEJ,GAAIjY,EAAA0qB,8BAA8BM,EAAIC,EAAI54B,GAAI,CAC1CtB,EAAIA,EAAEknB,WAAW,GACjB,UAIZ,MAEJ,OAAOlnB,GAtyBfJ,EAAA2mC,2CC1BA/mC,EAAAgB,EAAAgF,GAAA,IAAAipC,EAAAjvC,EAAA,QAAAkvC,EAAAlvC,EAAA2B,EAAAstC,GAAA,QAAA9oC,KAAA8oC,EAAA,YAAA9oC,GAAA,SAAA1E,GAAAzB,EAAAS,EAAAuF,EAAAvE,EAAA,kBAAAwtC,EAAAxtC,KAAA,CAAA0E,GAAgXH,EAAA,WAAAkpC,EAAG,wFCAnX,MAAAp6B,EAAA9U,EAAA,QAGAoa,EAAApa,EAAA,QAEA6K,EAAA7K,EAAA,QACAqC,EAAArC,EAAA,QAEA,MAAMmvC,EAUF3sC,cATAS,KAAAgoB,OAAkB,GAClBhoB,KAAAiC,MAAQlD,OAAO6G,WACf5F,KAAA8S,OAAS/T,OAAO+G,YAEhB9F,KAAA8iB,QAA8B,IAAIjJ,IAGlC7Z,KAAAmrB,SAAW,GAWXnrB,KAAAmsC,SAAW,MACP,IAAK,IAAIzwC,EAAIsE,KAAKgoB,OAAOpsB,OAAS,EAAGF,GAAK,EAAGA,IACzCsE,KAAKgoB,OAAOtsB,GAAGgF,OAEnB0rC,sBAAsBpsC,KAAKmsC,YAZ3BC,sBAAsBpsC,KAAKmsC,UAG/B5sC,QACIS,KAAKgoB,OAAS,GACdhoB,KAAK8iB,QAAU,IAAIjJ,IAUvBta,SAAS0C,GACLjC,KAAKiC,MAAQA,EACb,IAAK,MAAMsQ,KAASvS,KAAKgoB,OACrBzV,EAAM9Q,OAAOQ,MAAQA,EACrBsQ,EAAMtQ,MAAQA,EAItB1C,UAAUuT,GACN9S,KAAK8S,OAASA,EACd,IAAK,MAAMP,KAASvS,KAAKgoB,OACrBzV,EAAM9Q,OAAOqR,OAASA,EACtBP,EAAMO,OAASA,EAIvBvT,SAASgT,GACLvS,KAAKgoB,OAAOlsB,KAAKyW,IACZ3K,EAAA0J,UAAUC,OAAUgB,EAAM2V,iBAC3B3V,EAAM0V,YAAYrgB,EAAA0J,UAAU+6B,SAAS95B,EAAM9U,MAGnD8B,SAAS9B,GACL,OAAOuC,KAAKgoB,OAAOxM,KAAKne,GAAKA,EAAEI,OAASA,GAG5C8B,SAAS9B,GACLA,OAAgBiL,IAATjL,EAAqBmK,EAAA0J,UAAU0Z,cAAgBvtB,EACtD,IAAK,MAAM8U,KAASvS,KAAKgoB,OACrB,GAAIzV,EAAM9U,OAASA,EAAM,OAAO8U,EAIxChT,YAAY9B,EAAc6f,GAAgB,GACtC,IAAI0F,GAAQ,EACZ,IAAK,MAAMzQ,KAASvS,KAAKgoB,OAChBzV,EAAM0V,aACPjF,GAAwB,QAAfzQ,EAAM9U,KAAgB8U,EAAM9R,IAAI6rC,YAAc,GACtD/5B,EAAM9R,IAAI6rC,YAAc,EAEzB7uC,IAAS8U,EAAM9U,OACfmK,EAAA0J,UAAU2Z,YAAY,CAAExtB,OAAM6f,SAC9B0F,GAAQ,GAGZzQ,EAAMiP,iBACNjP,EAAMY,YAAW,IAIzB5T,eACI,OAAkBS,KAAK8M,SAAS,QAGpCvN,eACI,MAAM4gB,EAAYngB,KAAKusC,eACvB,YAAqB7jC,IAAdyX,GAA2BA,EAAUvkB,OAAS,EAIzD2D,eACI,MAAMgT,EAAQvS,KAAK8M,WACnB,QAAcpE,IAAV6J,EACJ,OAAOA,EAAM4N,UAGjB5gB,aACI,IAAK,IAAI7D,EAAIsE,KAAKgoB,OAAOpsB,OAAS,EAAGF,GAAK,EAAGA,IACzCsE,KAAKgoB,OAAOtsB,GAAGyX,YAAW,GAIlC5T,kBACI,IAAK,IAAI7D,EAAIsE,KAAKgoB,OAAOpsB,OAAS,EAAGF,GAAK,EAAGA,IACrCsE,KAAKgoB,OAAOtsB,GAAG6wB,eAAevsB,KAAKgoB,OAAOtsB,GAAGyX,YAAW,GAGpE5T,UAAUiK,GACN,MAAM+I,EAAQvS,KAAK8M,WACnB,QAAcpE,IAAV6J,GAAiC,OAAV/I,GAAyC,OAAvBA,EAAMO,aAAuB,OAC1E,MAAMyiC,EAAQhiC,SAASkiB,cAAc,OACrC8f,EAAM7zB,IAAMnP,EAAMO,aAAa0iC,QAAQ,cACvC,MAAMj0B,EAAQ,IAAIrB,EAAA4B,MACdyzB,EACA,IAAI36B,EAAAM,YAAY/S,EAAAstC,KAAKljC,EAAMizB,SAAUr9B,EAAAutC,KAAKnjC,EAAMkzB,UAChDt9B,EAAAkhB,KAAKksB,EAAMvqC,OACX7C,EAAAkhB,KAAKksB,EAAM15B,SAIf,GAFA0F,EAAMG,IAAM,IAAIE,IAAI2zB,EAAM7zB,KAAKG,SAE3BlR,EAAA0J,UAAUqQ,QAAS,CACnB,MAAMuH,EAAKthB,EAAA0J,UAAU6X,SACrB3Q,EAAMnY,SAAW,IAAIwR,EAAAM,YACjBjQ,KAAKkvB,MAAM5Y,EAAMnY,SAASC,EAAI4oB,GAAMA,EACpChnB,KAAKkvB,MAAM5Y,EAAMnY,SAASE,EAAI2oB,GAAMA,GAExC1Q,EAAMxF,EAAI9Q,KAAKC,IAAID,KAAKkvB,MAAM5Y,EAAMxF,EAAIkW,GAAMA,EAAIA,GAClD1Q,EAAMtF,EAAIhR,KAAKC,IAAID,KAAKkvB,MAAM5Y,EAAMtF,EAAIgW,GAAMA,EAAIA,GAGtD3W,EAAMG,SAAS8F,GAAO,IAIjBrb,EAAA0P,aAAe,IAAIq/B,EAC1BntC,OAAQ6tC,GAAKzvC,EAAA0P,gDC3InB9P,EAAAgB,EAAAgF,GAAA,IAAA8pC,EAAA9vC,EAAA,QAAA+vC,EAAA/vC,EAAA2B,EAAAmuC,GAAA,QAAA3pC,KAAA2pC,EAAA,YAAA3pC,GAAA,SAAA1E,GAAAzB,EAAAS,EAAAuF,EAAAvE,EAAA,kBAAAquC,EAAAruC,KAAA,CAAA0E,GAAuWH,EAAA,WAAA+pC,EAAG,qCCA1W/vC,EAAAgB,EAAAgF,GAAA,IAAAgqC,EAAAhwC,EAAA,QAAAiwC,EAAAjwC,EAAA,gBAAAmG,KAAA8pC,EAAA,YAAA9pC,GAAA,SAAA1E,GAAAzB,EAAAS,EAAAuF,EAAAvE,EAAA,kBAAAwuC,EAAAxuC,KAAA,CAAA0E,GAAAnG,EAAA,YAAAoG,EAAApG,EAAA,QAQAqG,EAAgBrH,OAAAoH,EAAA,KAAApH,CACdixC,EAAA,WACAD,EAAA,KACAA,EAAA,MACF,EACA,KACA,WACA,MAIA3pC,EAAAC,QAAAC,OAAA,wBACeP,EAAA,WAAAK,gGClBf,MAAa6pC,EAIT1tC,YAAY2tC,EAAqBzwB,GADjCzc,KAAAwmB,SAA2B,GAEvBxmB,KAAKktC,YAAcA,EACnBltC,KAAKyc,KAAOA,GANpBtf,EAAA8vC,eAUA,MAAaE,UAAiBF,EAE1B1tC,YAAYsP,EAAenQ,EAAW+d,GAClC1c,MAAMrB,EAAG+d,GACTzc,KAAKotC,gBAAkBv+B,GAJ/B1R,EAAAgwC,WAQA,MAAaE,UAAqBJ,EAE9B1tC,YAAY6nC,EAAmBuC,EAAkBC,GAC7C7pC,MAAM,EAAG4pC,EAAGltB,KAAK6wB,MAAM1D,EAAGntB,OAC1Bzc,KAAKonC,UAAYA,EACjBpnC,KAAKwmB,SAAS1qB,KAAK6tC,GACnB3pC,KAAKwmB,SAAS1qB,KAAK8tC,IAN3BzsC,EAAAkwC,oDCpBAtwC,EAAAgB,EAAAgF,GAAA,IAAAwqC,EAAAxwC,EAAA,QAAAywC,EAAAzwC,EAAA2B,EAAA6uC,GAAA,QAAArqC,KAAAqqC,EAAA,YAAArqC,GAAA,SAAA1E,GAAAzB,EAAAS,EAAAuF,EAAAvE,EAAA,kBAAA+uC,EAAA/uC,KAAA,CAAA0E,GAA6XH,EAAA,WAAAyqC,EAAG,wFCEhY,MAAA3lC,EAAA9K,EAAA,QACA4K,EAAA5K,EAAA,QACAkiB,EAAAliB,EAAA,QAEA4qB,EAAA5qB,EAAA,QACA8U,EAAA9U,EAAA,QACAuP,EAAAvP,EAAA,QACAmiB,EAAAniB,EAAA,QACA6K,EAAA7K,EAAA,QACA0wC,EAAA1wC,EAAA,QAEA,SAAgB2wC,EAAQlkC,GACpB,GAAIA,EAAMJ,kBAAkBukC,kBAAoBnkC,EAAMJ,kBAAkBwkC,0BAEpE,GAAkB,WAAdpkC,EAAMhL,KAAkC,QAAdgL,EAAMhL,KAA+B,cAAdgL,EAAMhL,IAAqB,CAC5E,QAA8BkK,IAA1B4D,EAAAO,aAAaC,SAEb,YADAuC,QAAQC,IAAI,iDAGhB,MAAMjS,EAAIiP,EAAAO,aAAaC,WACvB,IAAK,IAAIpR,EAAI2B,EAAE8iB,UAAUvkB,OAAS,EAAGF,GAAK,EAAGA,IAAK,CAC9C,MAAMkN,EAAMvL,EAAE8iB,UAAUzkB,GACdmM,EAAA0Y,OAAc,SAAS7b,MAAMmpC,WAAYhuB,gBAAgB/f,OAAS8I,EAAI9I,MAIhFzC,EAAEyvB,YAAYlkB,GAAK,GAAM,GACzB+e,EAAAc,SAASljB,MAAM,0BAA2B,MAC1CoiB,EAAAc,SAASljB,MAAM,oBAAqBqD,EAAI9I,OALpCzC,EAAE8iB,UAAUrjB,OAAOpB,EAAG,KAW1C,SAAgBoyC,EAAUtkC,GACtB,GAAIA,EAAMJ,kBAAkBukC,kBAAoBnkC,EAAMJ,kBAAkBwkC,oBAC9C,KAAlBpkC,EAAMukC,SAAkBvkC,EAAMK,SAASL,EAAMJ,OAAQkV,cAEzD,GAAI9U,EAAMukC,SAAW,IAAMvkC,EAAMukC,SAAW,GAAI,CAE5C,MAAM5kB,EAAWjnB,KAAKkvB,MAAMxpB,EAAA0J,UAAU6X,UACtC,IAAI6S,EAAU7S,GAAY3f,EAAMukC,QAAU,GACtC9R,EAAU9S,GAAY3f,EAAMukC,QAAU,EAAI,EAAI,GAClD,GAAIzhC,EAAAO,aAAamhC,eAAgB,CAC7B,MAAM7tB,EAAY7T,EAAAO,aAAa0/B,eAC/BvQ,GAAWxyB,EAAMukC,SAAW,IAAM,EAAI,EACtC9R,GAAWzyB,EAAMukC,SAAW,IAAM,EAAI,EACtC,IAAIh0B,EAAQ,IAAIlI,EAAA8N,OAAOqc,EAASC,GAChC,IAAKzyB,EAAMC,WAAa7B,EAAA0J,UAAUC,MAE9B,IAAK,MAAM3I,KAAOuX,EACJtY,EAAA0Y,OAAc,SAAS7b,MAAMmpC,WAAYhuB,gBAAgB/f,OAAS8I,EAAI9I,OAChFia,EAAQ0zB,EAAAzsB,eAAejH,EAAOnR,IAGtC,IAAK,MAAMA,KAAOuX,EACJtY,EAAA0Y,OAAc,SAAS7b,MAAMmpC,WAAYhuB,gBAAgB/f,OAAS8I,EAAI9I,OAChF8I,EAAIvI,SAAWuI,EAAIvI,SAAS+J,IAAI2P,GAGhCpS,EAAAf,OAAOqC,KAAK,wBAAyB,CAAEwO,MAAO7O,EAAIqY,SAAUC,QAAQ,EAAMC,WAAW,KAEzFvZ,EAAA0J,UAAU0J,oBACV1O,EAAAO,aAAaC,WAAYqG,YAAW,QAGpCvL,EAAA0J,UAAU8gB,aAAa4J,GAAWxyB,EAAMukC,SAAW,GAAK,GAAK,IAC7DnmC,EAAA0J,UAAU+gB,aAAa4J,GAAWzyB,EAAMukC,SAAW,GAAK,GAAK,IAC7DzhC,EAAAO,aAAasG,aACb8L,EAAAyG,yBAED,GAAsB,KAAlBlc,EAAMukC,QAAgB,CAC7B,MAAMx7B,EAAQjG,EAAAO,aAAaC,WACvByF,IACAA,EAAMiP,iBACNjP,EAAMY,YAAW,SAElB,GAAkB,MAAd3J,EAAMhL,KAAegL,EAAMK,QAClCL,EAAMmhB,iBACNnhB,EAAM+M,kBACN3O,EAAA0J,UAAU28B,gBACP,GAAkB,MAAdzkC,EAAMhL,KAAegL,EAAMK,QAAS,CAC3C,MAAM0I,EAAQjG,EAAAO,aAAaC,WAC3B,IAAKyF,EAAO,OACZ,IAAKA,EAAM4N,UAAW,OACtB,MAAM+tB,EAAY,GAClB,IAAK,MAAMz2B,KAASlF,EAAM4N,UACZtY,EAAA0Y,OAAc,SAAS7b,MAAMmpC,WAAYhuB,gBAAgB/f,OAAS2X,EAAM3X,MAClFouC,EAAUpyC,KAAK2b,EAAMwJ,UAEzBrZ,EAAA0J,UAAU68B,aAAaD,QACpB,GAAkB,MAAd1kC,EAAMhL,KAAegL,EAAMK,QAAS,CAC3C,MAAM0I,EAAQjG,EAAAO,aAAaC,WAC3B,IAAKyF,EAAO,OACZ,IAAK3K,EAAA0J,UAAU48B,UAAW,OAC1B37B,EAAM4N,UAAY,GAClB,IAAK,MAAMiuB,KAAQxmC,EAAA0J,UAAU48B,UAAW,CACpCE,EAAK9tC,GAAK,GACV8tC,EAAK7tC,GAAK,GACV6tC,EAAKtuC,KAAO+H,EAAAgD,SACZ,MAAMwjC,EAAcD,EAAKh1B,SACzBg1B,EAAKh1B,SAAW,GAChB,IAAK,MAAMmX,KAAW8d,EAAa,CAC/B,MAAMC,EAAUvyC,OAAAmE,OAAA,GACTqwB,EAAO,CACVzwB,KAAM+H,EAAAgD,WAEVujC,EAAKh1B,SAAStd,KAAKwyC,GAEvB,MAAMC,EAAWH,EAAK/0B,MACtB+0B,EAAK/0B,MAAQ,GACb,IAAK,MAAMiC,KAAQizB,EAAU,CACzB,MAAMC,EAAOzyC,OAAAmE,OAAA,GACNob,EAAI,CACPxb,KAAM+H,EAAAgD,WAEVujC,EAAK/0B,MAAMvd,KAAK0yC,GAEpB,MAAM/2B,EAAQyH,EAAA1H,oBAAoB42B,QACpB1lC,IAAV+O,IACJlF,EAAMG,SAAS+E,GAAO,GACtBlF,EAAM4N,UAAUrkB,KAAK2b,IAEM,IAA3BlF,EAAM4N,UAAUvkB,OAAc+rB,EAAAc,SAASljB,MAAM,0BAA2BgN,EAAM4N,UAAU,IACvFwH,EAAAc,SAASljB,MAAM,0BAA2B,MAC/CgN,EAAMY,YAAW,IAlH7BhW,EAAAuwC,UAuBAvwC,EAAA2wC,iDCpCA,IAAAW,EAAA1xC,EAAA,QAAA2xC,EAAA3xC,EAAA2B,EAAA+vC,GAA2cC,EAAG,qCCA9c,IAAAC,EAAA5xC,EAAA,QAAA6xC,EAAA7xC,EAAA2B,EAAAiwC,GAA4gBC,EAAG,0GCoC/gB5qC,EAAAF,EAAAC,gBAAAhH,EAAA,SAEA8xC,EAAA/qC,EAAAC,gBAAAhH,EAAA,SACA+xC,EAAAhrC,EAAAC,gBAAAhH,EAAA,SACAgyC,EAAAjrC,EAAAC,gBAAAhH,EAAA,SACAiyC,EAAAlrC,EAAAC,gBAAAhH,EAAA,SACAkyC,EAAAnrC,EAAAC,gBAAAhH,EAAA,SACAmyC,EAAAprC,EAAAC,gBAAAhH,EAAA,SACAoyC,EAAArrC,EAAAC,gBAAAhH,EAAA,SACAqyC,EAAAtrC,EAAAC,gBAAAhH,EAAA,SAEAuP,EAAAvP,EAAA,QACAsyC,EAAAtyC,EAAA,QACA6K,EAAA7K,EAAA,QACAuyC,EAAAvyC,EAAA,QACAqC,EAAArC,EAAA,QACA8K,EAAA9K,EAAA,QACAkH,EAAAH,EAAAC,gBAAAhH,EAAA,SAoBA,IAAqBwyC,EAArB,cAAmCvrC,EAAAK,QAlBnC9E,kCAuBIS,KAAAwvC,YAAc,SACdxvC,KAAAyvC,MAAQ,CAAC,SAAU,MAAO,OAAQ,QAAS,MAAO,SAAU,UAC5DzvC,KAAA0vC,QAAU,CAAC,OAEXn+B,YACI,OAAO3J,EAAA0J,UAAUC,MAGrBo+B,2BACI,SAAU3vC,KAAKwvC,YAAYjpB,qBAG/BqpB,mBACI,OAAO5vC,KAAKyvC,MAAMxpB,OAAO9nB,IAAO6B,KAAK0vC,QAAQrmC,SAASlL,IAAM6B,KAAKuR,OAGrEhS,YAAY2jC,GACR,MAAa,WAATA,EACOnnC,OAAOiqB,KAAKpe,EAAA0J,UAAUyE,QAAQna,OAAS,EAC9B,WAATsnC,GACAt7B,EAAA0J,UAAUuK,YAAYjgB,OAAS,EAK9C2D,UAAUiK,GACN,GAA4C,WAA1BA,EAAMJ,OAAQymC,QAAsB,OAEtD,IAAIC,EAAa9vC,KAAKwvC,YACtB,GAAqB,IAAjBhmC,EAAMumC,OACND,EAAa,WACV,GAAqB,IAAjBtmC,EAAMumC,OACb,OAGJ/vC,KAAKuF,MAAM,YAAaiE,EAAOsmC,GAEnCvwC,QAAQiK,GACJ,GAA4C,WAA1BA,EAAMJ,OAAQymC,QAAsB,OAEtD,IAAIC,EAAa9vC,KAAKwvC,YACtB,GAAqB,IAAjBhmC,EAAMumC,OACND,EAAa,WACV,GAAqB,IAAjBtmC,EAAMumC,OACb,OAGJ/vC,KAAKuF,MAAM,UAAWiE,EAAOsmC,GAEjCvwC,UAAUiK,GACN,GAA4C,WAA1BA,EAAMJ,OAAQymC,QAAsB,OAEtD,IAAIC,EAAa9vC,KAAKwvC,YACtB,GAA4B,KAAP,EAAhBhmC,EAAMwmC,SACPF,EAAa,WACV,IAAoB,EAAftmC,EAAMumC,QAAc,EAC5B,OAGJ/vC,KAAKuF,MAAM,YAAaiE,EAAOsmC,GAG/B,IAAI9sB,GAAQ,EACZ,IAAK,MAAMljB,KAAQ8H,EAAA0J,UAAU2+B,YACzB,GAAI3jC,EAAAO,aAAaiW,QAAQ+J,IAAI/sB,IAASwM,EAAAO,aAAa2F,SAAS,QAAS,CACjE,MAAMiF,EAAQnL,EAAAO,aAAaiW,QAAQhlB,IAAIgC,GACnC2X,EAAMtN,SAAS/K,EAAAuT,IAAI9K,EAAAkY,SAASvW,OAC5BwZ,GAAQ,EACRqsB,EAAAa,YAAYC,kBAAkBC,cAAc34B,EAAMkC,cAIzDqJ,GAASqsB,EAAAa,YAAYC,kBAAkBl+B,OACxCo9B,EAAAa,YAAYC,kBAAkBC,cAAc,IAGpD7wC,WAAWiK,GAEqB,KAAP,EAAhBA,EAAMwmC,UACPhwC,KAAKuF,MAAM,UAAWiE,EAAOxJ,KAAKwvC,aAG1CjwC,YAAYiK,GACoC,WAA1BA,EAAMJ,OAAQymC,SACX,IAAjBrmC,EAAMumC,QAAwD,WAA1BvmC,EAAMJ,OAAQymC,SACtD7vC,KAAKuF,MAAM,cAAeiE,EAAOxJ,KAAKwvC,eA1FzBD,EAAKzrC,EAAAiC,WAAA,CAlBzB9B,EAAAI,QAAU,CACP8B,WAAY,CACRkqC,cAAelB,EAAA9qC,QACfisC,WAAYpB,EAAA7qC,QACZksC,YAAaxB,EAAA1qC,QACbmsC,aAAclB,EAAAmB,UACdC,WAAYzB,EAAA5qC,QACZssC,cAAe3B,EAAA3qC,QACfusC,cAAexB,EAAA/qC,QACfwsC,aAAchC,EAAAxqC,QACdysC,qBAAsBhC,EAAAzqC,SAE1B0sC,MAAO,CACHxxC,YAAYye,EAAUD,GAClB/d,KAAKuF,MAAM,sBAAuByY,EAAUD,QAInCwxB,oDCzErBxyC,EAAAgB,EAAAgF,GAAA,IAAAiuC,EAAAj0C,EAAA,QAAAk0C,EAAAl0C,EAAA2B,EAAAsyC,GAAA,QAAA9tC,KAAA8tC,EAAA,YAAA9tC,GAAA,SAAA1E,GAAAzB,EAAAS,EAAAuF,EAAAvE,EAAA,kBAAAwyC,EAAAxyC,KAAA,CAAA0E,GAA0XH,EAAA,WAAAkuC,EAAG,uCCA7Xl0C,EAAAgB,EAAAgF,GAAA,IAAAmuC,EAAAn0C,EAAA,QAAAo0C,EAAAp0C,EAAA2B,EAAAwyC,GAAA,QAAAhuC,KAAAguC,EAAA,YAAAhuC,GAAA,SAAA1E,GAAAzB,EAAAS,EAAAuF,EAAAvE,EAAA,kBAAA0yC,EAAA1yC,KAAA,CAAA0E,GAAiXH,EAAA,WAAAouC,EAAG,uCCApX,IAAAC,EAAAr0C,EAAA,QAAAs0C,EAAAt0C,EAAA2B,EAAA0yC,GAAofC,EAAG,uCCAvf,IAAAC,EAAAv0C,EAAA,QAAAw0C,EAAAx0C,EAAA2B,EAAA4yC,GAAieC,EAAG,uCCApe,IAAA39B,EAAA,WAA0B,IAAAC,EAAA7T,KAAa8T,EAAAD,EAAAE,eAA0BC,EAAAH,EAAAI,MAAAD,IAAAF,EAAwB,OAAAE,EAAA,OAAiBE,MAAA,CAAOwC,GAAA,kBAAsB,CAAA1C,EAAA,OAAYuB,IAAA,KAAAe,MAAA,CACnJ/R,KAAAsP,EAAAxC,QAAAmgC,SAAA,YACAhtC,IAAAqP,EAAAxC,QAAAogC,UAAA,aACWv9B,MAAA,CAASwC,GAAA,eAAmB,CAAA1C,EAAA,OAAYU,YAAA,cAAyB,CAAAV,EAAA,OAAYU,YAAA,cAAyB,CAAAV,EAAA,MAAWU,YAAA,UAAA0B,MAAA,CAA6Bs7B,aAAA79B,EAAAtC,QAA2B,CAAAsC,EAAA,MAAAG,EAAA,MAAuBU,YAAA,UAAAR,MAAA,CAA6BwC,GAAA,gBAAoBtC,GAAA,CAAK1J,MAAA,SAAA4J,GAAyBT,EAAAxC,QAAAogC,WAAA59B,EAAAxC,QAAAogC,aAAiD,CAAA59B,EAAA89B,GAAA,KAAA99B,EAAAsC,KAAAnC,EAAA,MAAgCU,YAAA,UAAAR,MAAA,CAA6BwC,GAAA,eAAmBtC,GAAA,CAAK1J,MAAA,SAAA4J,GAAyBT,EAAAxC,QAAAmgC,UAAA39B,EAAAxC,QAAAmgC,YAA+C,CAAA39B,EAAA89B,GAAA,SAAA99B,EAAA89B,GAAA,OAAA39B,EAAA,cAAiDE,MAAA,CAAOzW,KAAA,YAAkB2W,GAAA,CAAKw9B,MAAA,SAAAt9B,GAAyBT,EAAAnP,MAAAmtC,GAAAv7B,MAAAw7B,WAAA,gBAA+C,CAAAj+B,EAAAxC,QAAA,SAAA2C,EAAA,OAAmCuB,IAAA,WAAArB,MAAA,CAAsBwC,GAAA,QAAYtC,GAAA,CAAK1J,MAAAmJ,EAAAk+B,gBAA2B,CAAA/9B,EAAA,OAAYkB,YAAA,CAAajT,MAAA,QAAA6Q,OAAA,MAAAk/B,aAAA,OAAAC,aAAA,WAA0E,CAAAp+B,EAAA,OAAAG,EAAA,UAA4BU,YAAA,kBAA6B,CAAAb,EAAAmB,GAAA,YAAAhB,EAAA,OAA+BU,YAAA,wBAAmC,CAAAV,EAAA,KAAUU,YAAA,eAAAR,MAAA,CAAkCgX,KAAA,UAAA9hB,OAAA,QAAA6L,MAAA,uBAAgE,CAAAjB,EAAA,KAAUU,YAAA,+BAAuCV,EAAA,OAAcU,YAAA,YAAAR,MAAA,CAA+BwC,GAAA,gBAAoB,CAAA1C,EAAA,cAAmBE,MAAA,CAAOsE,MAAA3E,EAAAq+B,UAAoBr+B,EAAAq+B,OAAAr+B,EAAAsC,KAAAnC,EAAA,OAAAH,EAAAmB,GAAA,qBAAAhB,EAAA,UAA4EU,YAAA,kBAA6B,CAAAb,EAAAmB,GAAA,WAAAhB,EAAA,OAA8BU,YAAA,wBAAmC,CAAAV,EAAA,OAAYU,YAAA,0BAAAR,MAAA,CAA6CwC,GAAA,eAAmB,CAAA1C,EAAA,KAAUU,YAAA,eAAAN,GAAA,CAA+B1J,MAAAmJ,EAAAs+B,aAAwB,CAAAn+B,EAAA,KAAUU,YAAA,yBAAiCb,EAAAgC,GAAAhC,EAAA,eAAAwK,GAAsC,OAAArK,EAAA,OAAiBxV,IAAA6f,EAAAve,KAAAoV,YAAA,CAA2BqM,OAAA,WAAmBnN,GAAA,CAAK1J,MAAA,SAAA4J,GAAyBT,EAAAu+B,SAAA/zB,MAAqB,CAAAxK,EAAAmB,GAAAnB,EAAAqC,GAAAmI,EAAApJ,OAAA,YAAwCpB,EAAAw+B,MAAAz2C,OAAAiY,EAAAsC,KAAAnC,EAAA,OAAAH,EAAAmB,GAAA,oBAAAhB,EAAA,UAAiFU,YAAA,kBAA6B,CAAAb,EAAAmB,GAAA,gBAAAhB,EAAA,OAAmCU,YAAA,wBAAmC,CAAAV,EAAA,OAAYU,YAAA,2BAAsC,CAAAV,EAAA,SAAcE,MAAA,CAAOgb,IAAA,oBAAyB,CAAArb,EAAAmB,GAAA,kBAAAhB,EAAA,SAAuCoB,WAAA,EAAa3X,KAAA,QAAA4X,QAAA,UAAAnX,MAAA2V,EAAA,WAAAyB,WAAA,eAA8EpB,MAAA,CAASwC,GAAA,kBAAAzW,KAAA,WAAAuvB,QAAA,WAA6D/Z,SAAA,CAAW+Z,QAAAE,MAAAC,QAAA9b,EAAAy+B,YAAAz+B,EAAA+b,GAAA/b,EAAAy+B,WAAA,SAAAz+B,EAAA,YAAwFO,GAAA,CAAKoK,OAAA,SAAAlK,GAA0B,IAAAub,EAAAhc,EAAAy+B,WAAAxiB,EAAAxb,EAAAlL,OAAA2mB,IAAAD,EAAAN,QAA0E,GAAAE,MAAAC,QAAAE,GAAA,CAAuB,IAAA1D,EAAA,KAAA6D,EAAAnc,EAAA+b,GAAAC,EAAA1D,GAAiC2D,EAAAN,QAAiBQ,EAAA,IAAAnc,EAAAy+B,WAAAziB,EAAAzP,OAAA,CAAA+L,KAA+C6D,GAAA,IAAAnc,EAAAy+B,WAAAziB,EAAA5wB,MAAA,EAAA+wB,GAAA5P,OAAAyP,EAAA5wB,MAAA+wB,EAAA,UAAyEnc,EAAAy+B,WAAAviB,MAAsB/b,EAAA,SAAcE,MAAA,CAAOgb,IAAA,iBAAsB,CAAArb,EAAAmB,GAAA,eAAAhB,EAAA,SAAoCoB,WAAA,EAAa3X,KAAA,QAAA4X,QAAA,UAAAnX,MAAA2V,EAAA,QAAAyB,WAAA,YAAwEpB,MAAA,CAASwC,GAAA,eAAAzW,KAAA,WAAAuvB,QAAA,WAA0D/Z,SAAA,CAAW+Z,QAAAE,MAAAC,QAAA9b,EAAA8N,SAAA9N,EAAA+b,GAAA/b,EAAA8N,QAAA,SAAA9N,EAAA,SAA+EO,GAAA,CAAKoK,OAAA,SAAAlK,GAA0B,IAAAub,EAAAhc,EAAA8N,QAAAmO,EAAAxb,EAAAlL,OAAA2mB,IAAAD,EAAAN,QAAuE,GAAAE,MAAAC,QAAAE,GAAA,CAAuB,IAAA1D,EAAA,KAAA6D,EAAAnc,EAAA+b,GAAAC,EAAA1D,GAAiC2D,EAAAN,QAAiBQ,EAAA,IAAAnc,EAAA8N,QAAAkO,EAAAzP,OAAA,CAAA+L,KAA4C6D,GAAA,IAAAnc,EAAA8N,QAAAkO,EAAA5wB,MAAA,EAAA+wB,GAAA5P,OAAAyP,EAAA5wB,MAAA+wB,EAAA,UAAsEnc,EAAA8N,QAAAoO,MAAmB/b,EAAA,SAAcE,MAAA,CAAOgb,IAAA,gBAAqB,CAAArb,EAAAmB,GAAA,kCAAAhB,EAAA,SAAuDoB,WAAA,EAAa3X,KAAA,QAAA4X,QAAA,UAAAnX,MAAA2V,EAAA,QAAAyB,WAAA,YAAwEpB,MAAA,CAASwC,GAAA,cAAAzW,KAAA,YAAqCwV,SAAA,CAAW+Z,QAAAE,MAAAC,QAAA9b,EAAAwZ,SAAAxZ,EAAA+b,GAAA/b,EAAAwZ,QAAA,SAAAxZ,EAAA,SAA+EO,GAAA,CAAKoK,OAAA,SAAAlK,GAA0B,IAAAub,EAAAhc,EAAAwZ,QAAAyC,EAAAxb,EAAAlL,OAAA2mB,IAAAD,EAAAN,QAAuE,GAAAE,MAAAC,QAAAE,GAAA,CAAuB,IAAA1D,EAAA,KAAA6D,EAAAnc,EAAA+b,GAAAC,EAAA1D,GAAiC2D,EAAAN,QAAiBQ,EAAA,IAAAnc,EAAAwZ,QAAAwC,EAAAzP,OAAA,CAAA+L,KAA4C6D,GAAA,IAAAnc,EAAAwZ,QAAAwC,EAAA5wB,MAAA,EAAA+wB,GAAA5P,OAAAyP,EAAA5wB,MAAA+wB,EAAA,UAAsEnc,EAAAwZ,QAAA0C,MAAmB/b,EAAA,SAAcE,MAAA,CAAOgb,IAAA,eAAoB,CAAArb,EAAAmB,GAAA,kBAAAhB,EAAA,SAAuCoB,WAAA,EAAa3X,KAAA,QAAA4X,QAAA,iBAAAnX,MAAA2V,EAAA,WAAAyB,WAAA,aAAAqB,UAAA,CAAgG6Z,QAAA,KAAetc,MAAA,CAASwC,GAAA,aAAAzW,KAAA,SAAAmL,IAAA,IAAAjJ,IAAA,IAAAowC,KAAA,OAAmE98B,SAAA,CAAWvX,MAAA2V,EAAA,YAAyBO,GAAA,CAAKsB,MAAA,SAAApB,GAAyBA,EAAAlL,OAAAuM,YAAsC9B,EAAAsrB,WAAAtrB,EAAA4c,GAAAnc,EAAAlL,OAAAlL,SAA2C4Y,KAAA,SAAAxC,GAAyBT,EAAAkD,mBAAqB/C,EAAA,SAAcE,MAAA,CAAOgb,IAAA,WAAgB,CAAArb,EAAAmB,GAAA,8BAAAhB,EAAA,SAAmDoB,WAAA,EAAa3X,KAAA,QAAA4X,QAAA,UAAAnX,MAAA2V,EAAA,OAAAyB,WAAA,WAAsEpB,MAAA,CAASwC,GAAA,SAAAzW,KAAA,YAAgCwV,SAAA,CAAW+Z,QAAAE,MAAAC,QAAA9b,EAAA8a,QAAA9a,EAAA+b,GAAA/b,EAAA8a,OAAA,SAAA9a,EAAA,QAA4EO,GAAA,CAAKoK,OAAA,SAAAlK,GAA0B,IAAAub,EAAAhc,EAAA8a,OAAAmB,EAAAxb,EAAAlL,OAAA2mB,IAAAD,EAAAN,QAAsE,GAAAE,MAAAC,QAAAE,GAAA,CAAuB,IAAA1D,EAAA,KAAA6D,EAAAnc,EAAA+b,GAAAC,EAAA1D,GAAiC2D,EAAAN,QAAiBQ,EAAA,IAAAnc,EAAA8a,OAAAkB,EAAAzP,OAAA,CAAA+L,KAA2C6D,GAAA,IAAAnc,EAAA8a,OAAAkB,EAAA5wB,MAAA,EAAA+wB,GAAA5P,OAAAyP,EAAA5wB,MAAA+wB,EAAA,UAAqEnc,EAAA8a,OAAAoB,MAAkB/b,EAAA,SAAcE,MAAA,CAAOgb,IAAA,kBAAuB,CAAArb,EAAAmB,GAAA,yBAAAhB,EAAA,SAA8CoB,WAAA,EAAa3X,KAAA,QAAA4X,QAAA,iBAAAnX,MAAA2V,EAAA,SAAAyB,WAAA,WAAAqB,UAAA,CAA4F6Z,QAAA,KAAetc,MAAA,CAASwC,GAAA,gBAAAzW,KAAA,UAAqCwV,SAAA,CAAWvX,MAAA2V,EAAA,UAAuBO,GAAA,CAAKsB,MAAA,SAAApB,GAAyBA,EAAAlL,OAAAuM,YAAsC9B,EAAA8rB,SAAA9rB,EAAA4c,GAAAnc,EAAAlL,OAAAlL,SAAyC4Y,KAAA,SAAAxC,GAAyBT,EAAAkD,mBAAqB/C,EAAA,SAAcE,MAAA,CAAOgb,IAAA,kBAAuB,CAAArb,EAAAmB,GAAA,4BAAAhB,EAAA,SAAiDoB,WAAA,EAAa3X,KAAA,QAAA4X,QAAA,iBAAAnX,MAAA2V,EAAA,SAAAyB,WAAA,WAAAqB,UAAA,CAA4F6Z,QAAA,KAAetc,MAAA,CAASwC,GAAA,gBAAAzW,KAAA,SAAAmL,IAAA,KAA+CqK,SAAA,CAAWvX,MAAA2V,EAAA,UAAuBO,GAAA,CAAKsB,MAAA,SAAApB,GAAyBA,EAAAlL,OAAAuM,YAAsC9B,EAAAsV,SAAAtV,EAAA4c,GAAAnc,EAAAlL,OAAAlL,SAAyC4Y,KAAA,SAAAxC,GAAyBT,EAAAkD,mBAAqB/C,EAAA,SAAcE,MAAA,CAAOgb,IAAA,eAAoB,CAAArb,EAAAmB,GAAA,kBAAAhB,EAAA,UAAwCE,MAAA,CAAOwC,GAAA,cAAkBtC,GAAA,CAAKoK,OAAA3K,EAAA2+B,mBAA+B,CAAAx+B,EAAA,UAAeyB,SAAA,CAAUrN,SAAA,QAAAyL,EAAA4+B,OAAAC,MAAAC,KAAApwB,aAAuD,CAAA1O,EAAAmB,GAAA,SAAAhB,EAAA,UAA+ByB,SAAA,CAAUrN,SAAA,aAAAyL,EAAA4+B,OAAAC,MAAAC,KAAApwB,aAA4D,CAAA1O,EAAAmB,GAAA,gBAAAhB,EAAA,SAAqCE,MAAA,CAAOgb,IAAA,YAAiB,CAAArb,EAAAmB,GAAA,+BAAAhB,EAAA,SAAoDoB,WAAA,EAAa3X,KAAA,QAAA4X,QAAA,sBAAAnX,MAAA2V,EAAA,eAAAyB,WAAA,iBAAAqB,UAAA,CAA6Gi8B,MAAA,EAAApiB,QAAA,KAA2Btc,MAAA,CAASwC,GAAA,UAAAzW,KAAA,SAAAmL,IAAA,KAAyCqK,SAAA,CAAWvX,MAAA2V,EAAA,gBAA6BO,GAAA,CAAKoK,OAAA,SAAAlK,GAA0BT,EAAAg/B,eAAAh/B,EAAA4c,GAAAnc,EAAAlL,OAAAlL,QAA+C4Y,KAAA,SAAAxC,GAAyBT,EAAAkD,mBAAqB/C,EAAA,SAAcE,MAAA,CAAOgb,IAAA,YAAiB,CAAArb,EAAAmB,GAAA,0BAAAhB,EAAA,SAA+CoB,WAAA,EAAa3X,KAAA,QAAA4X,QAAA,sBAAAnX,MAAA2V,EAAA,eAAAyB,WAAA,iBAAAqB,UAAA,CAA6Gi8B,MAAA,EAAApiB,QAAA,KAA2Btc,MAAA,CAASwC,GAAA,UAAAzW,KAAA,SAAAmL,IAAA,KAAyCqK,SAAA,CAAWvX,MAAA2V,EAAA,gBAA6BO,GAAA,CAAKoK,OAAA,SAAAlK,GAA0BT,EAAAi/B,eAAAj/B,EAAA4c,GAAAnc,EAAAlL,OAAAlL,QAA+C4Y,KAAA,SAAAxC,GAAyBT,EAAAkD,mBAAqB/C,EAAA,SAAcE,MAAA,CAAOgb,IAAA,eAAoB,CAAArb,EAAAmB,GAAA,sBAAAhB,EAAA,SAA2CE,MAAA,CAAOwC,GAAA,aAAAzW,KAAA,OAAA8yC,SAAA,YAAsDt9B,SAAA,CAAWvX,MAAA2V,EAAAm/B,uBAA4Bn/B,EAAAsC,KAAAnC,EAAA,UAA6BU,YAAA,kBAA6B,CAAAb,EAAAmB,GAAA,oBAAAhB,EAAA,OAAuCU,YAAA,wBAAmC,CAAAV,EAAA,OAAYU,YAAA,2BAAsC,CAAAV,EAAA,SAAcE,MAAA,CAAOgb,IAAA,eAAoB,CAAArb,EAAAmB,GAAA,kBAAAhB,EAAA,gBAA8CE,MAAA,CAAOwC,GAAA,aAAAlR,MAAAqO,EAAAuV,YAAyChV,GAAA,CAAK+b,eAAA,SAAA7b,GAAgCT,EAAAuV,WAAA9U,MAAwBN,EAAA,SAAcE,MAAA,CAAOgb,IAAA,cAAmB,CAAArb,EAAAmB,GAAA,iBAAAhB,EAAA,gBAA6CE,MAAA,CAAOwC,GAAA,YAAAlR,MAAAqO,EAAAqrB,WAAuC9qB,GAAA,CAAK+b,eAAA,SAAA7b,GAAgCT,EAAAqrB,UAAA5qB,MAAuBN,EAAA,SAAcE,MAAA,CAAOgb,IAAA,gBAAqB,CAAArb,EAAAmB,GAAA,mBAAAhB,EAAA,gBAA+CE,MAAA,CAAOwC,GAAA,cAAAlR,MAAAqO,EAAAo/B,aAA2C7+B,GAAA,CAAK+b,eAAA,SAAA7b,GAAgCT,EAAAo/B,YAAA3+B,OAAyB,SAAAN,EAAA,eAA8BU,YAAA,iBAAAQ,YAAA,CAA0Cg+B,kBAAA,OAAA5uC,QAAA,eAAA9E,SAAA,WAAAqG,OAAA,KAAqFqO,MAAA,CAAQtI,GAAA,eAAmB,CAAAiI,EAAAmB,GAAA,cAAAnB,EAAAsC,OAAAnC,EAAA,cAAmDE,MAAA,CAAOzW,KAAA,aAAmB2W,GAAA,CAAKw9B,MAAA,SAAAt9B,GAAyBT,EAAAnP,MAAAmtC,GAAAv7B,MAAAw7B,WAAA,eAA8C,CAAAj+B,EAAAtC,OAAAsC,EAAAxC,QAAAogC,UAAAz9B,EAAA,OAAiDE,MAAA,CAAOwC,GAAA,mBAAuB,CAAA1C,EAAA,OAAAH,EAAAgC,GAAAhC,EAAA,mBAAAzM,GAAsD,OAAA4M,EAAA,OAAiBxV,IAAA4I,EAAAgN,GAAA,CAAiB1J,MAAA,SAAA4J,GAAyBT,EAAAs/B,eAAA/rC,MAA+B,CAAAyM,EAAAmB,GAAAnB,EAAAqC,GAAA9O,QAA6B4M,EAAA,OAAYI,GAAA,CAAI1J,MAAAmJ,EAAAu/B,iBAA4B,CAAAp/B,EAAA,KAAUU,YAAA,mBAA0B,KAAAb,EAAAsC,OAAAnC,EAAA,OAA+BE,MAAA,CAAOwC,GAAA,gBAAkB,IAC/nRQ,EAAA,YAAoC,IAAArD,EAAA7T,KAAa8T,EAAAD,EAAAE,eAA0BC,EAAAH,EAAAI,MAAAD,IAAAF,EAAwB,OAAAE,EAAA,KAAeE,MAAA,CAAOgX,KAAA,MAAY,CAAAlX,EAAA,KAAUU,YAAA,sBAAiC,WAAc,IAAAb,EAAA7T,KAAa8T,EAAAD,EAAAE,eAA0BC,EAAAH,EAAAI,MAAAD,IAAAF,EAAwB,OAAAE,EAAA,KAAeE,MAAA,CAAOgX,KAAA,MAAY,CAAAlX,EAAA,KAAUU,YAAA,kBAA6B,WAAc,IAAAb,EAAA7T,KAAa8T,EAAAD,EAAAE,eAA0BC,EAAAH,EAAAI,MAAAD,IAAAF,EAAwB,OAAAE,EAAA,QAAkBU,YAAA,aAAwB,CAAAV,EAAA,KAAUU,YAAA,uBCJvc3X,EAAAS,EAAAuF,EAAA,sBAAA6Q,IAAA7W,EAAAS,EAAAuF,EAAA,sBAAAmU,4GCqBAlT,EAAAF,EAAAC,gBAAAhH,EAAA,SACAkH,EAAAH,EAAAC,gBAAAhH,EAAA,SAEAwiC,EAAAz7B,EAAAC,gBAAAhH,EAAA,SAOA,IAAqB0O,EAArB,cAAoCzH,EAAAK,QALpC9E,kCAUIS,KAAAqR,SAAU,EACVrR,KAAAqzC,SAAW,GACXrzC,KAAAszC,OAAS,GACTtzC,KAAAiV,MAAQ,GAERjV,KAAAuzC,QAAU,CAACr1C,OACX8B,KAAAwzC,OAAS,SAETj0C,SACIS,KAAKuzC,QAAQvzC,KAAKszC,QAClBtzC,KAAKqU,QAET9U,QACIS,KAAKwzC,SACLxzC,KAAKqR,SAAU,EACfrR,KAAKqzC,SAAW,GAChBrzC,KAAKszC,OAAS,GACdtzC,KAAKiV,MAAQ,GAEjB1V,OAAO8zC,EAAkBp+B,GAOrB,OANAjV,KAAKqzC,SAAWA,EAChBrzC,KAAKiV,MAAQA,EACbjV,KAAKqR,SAAU,EACfrR,KAAKiF,UAAU,KACXjF,KAAK0E,MAAM4uC,OAAOluC,UAEf,IAAIquC,QAAQ,CAACF,EAASC,KACzBxzC,KAAKuzC,QAAUA,EACfvzC,KAAKwzC,OAASA,MAjCL/nC,EAAM3H,EAAAiC,WAAA,CAL1B9B,EAAAI,QAAU,CACP8B,WAAY,CACR21B,MAAAyD,EAAAl7B,YAGaoH,kDC/BrB,IAAAioC,EAAA32C,EAAA,QAAA42C,EAAA52C,EAAA2B,EAAAg1C,GAAufC,EAAG,uCCA1f,IAAA//B,EAAA,WAA0B,IAAAC,EAAA7T,KAAa8T,EAAAD,EAAAE,eAA0BC,EAAAH,EAAAI,MAAAD,IAAAF,EAAwB,OAAAE,EAAA,OAAAH,EAAAmB,GAAAnB,EAAAqC,GAAArC,EAAA+/B,aACzF18B,EAAA,GCDAna,EAAAS,EAAAuF,EAAA,sBAAA6Q,IAAA7W,EAAAS,EAAAuF,EAAA,sBAAAmU,yCCAAna,EAAAgB,EAAAgF,GAAA,IAAA8wC,EAAA92C,EAAA,QAAA+2C,EAAA/2C,EAAA2B,EAAAm1C,GAAA,QAAA3wC,KAAA2wC,EAAA,YAAA3wC,GAAA,SAAA1E,GAAAzB,EAAAS,EAAAuF,EAAAvE,EAAA,kBAAAq1C,EAAAr1C,KAAA,CAAA0E,GAAgXH,EAAA,WAAA+wC,EAAG,wFCAnX,MAAAjiC,EAAA9U,EAAA,QACAqC,EAAArC,EAAA,QAEA,MAAayD,EAQTjB,YAAYskC,EAAsB7wB,EAAWE,GACzClT,KAAKgT,EAAIA,EACThT,KAAKkT,EAAIA,EACTlT,KAAK2c,QAAUknB,EACf7jC,KAAKyhB,SAAW,IAAI5P,EAAAM,YAAY0xB,EAAQvjC,EAAI0S,EAAG6wB,EAAQtjC,GACvDP,KAAK+zC,SAAW,IAAIliC,EAAAM,YAAY0xB,EAAQvjC,EAAI0S,EAAG6wB,EAAQtjC,EAAI2S,GAC3DlT,KAAK0hB,QAAU,IAAI7P,EAAAM,YAAY0xB,EAAQvjC,EAAGujC,EAAQtjC,EAAI2S,GAG1D3T,SAASgC,GACL,OACIvB,KAAK2c,QAAQrc,GAAKiB,EAAMjB,GACxBN,KAAKyhB,SAASnhB,GAAKiB,EAAMjB,GACzBN,KAAK2c,QAAQpc,GAAKgB,EAAMhB,GACxBP,KAAK0hB,QAAQnhB,GAAKgB,EAAMhB,EAIhCH,aACI,OAAe,IAAXJ,KAAKgT,GAAsB,IAAXhT,KAAKkT,EAAgB,CAAC,CAAClT,KAAK2c,QAAQrc,EAAGN,KAAK2c,QAAQpc,IACjE,CACH,CAACP,KAAK2c,QAAQrc,EAAGN,KAAK2c,QAAQpc,GAC9B,CAACP,KAAK0hB,QAAQphB,EAAGN,KAAK0hB,QAAQnhB,GAC9B,CAACP,KAAK+zC,SAASzzC,EAAGN,KAAK+zC,SAASxzC,GAChC,CAACP,KAAKyhB,SAASnhB,EAAGN,KAAKyhB,SAASlhB,IAIxChB,OAAOy0C,GACH,OAAO,IAAIxzC,EAAaR,KAAK2c,QAAQvS,IAAI4pC,GAASh0C,KAAKgT,EAAGhT,KAAKkT,GAGnE3T,MAAM00C,GACF,MAAMC,EAAOhyC,KAAKkJ,IAAIpL,KAAK2c,QAAQrc,EAAG2zC,EAAMt3B,QAAQrc,GAC9C6zC,EAAOjyC,KAAKC,IAAInC,KAAKyhB,SAASnhB,EAAG2zC,EAAMxyB,SAASnhB,GAChD8zC,EAAOlyC,KAAKkJ,IAAIpL,KAAK2c,QAAQpc,EAAG0zC,EAAMt3B,QAAQpc,GAC9C8zC,EAAOnyC,KAAKC,IAAInC,KAAK0hB,QAAQnhB,EAAG0zC,EAAMvyB,QAAQnhB,GACpD,OAAO,IAAIC,EAAa,IAAIqR,EAAAM,YAAY+hC,EAAME,GAAOD,EAAOD,EAAMG,EAAOD,GAG7E70C,cAAc+0C,GACV,OAAOA,EAAWt0C,KAAK+zC,SAAW/zC,KAAK2c,QAG3Cpd,eAAe00C,GACX,QACIA,EAAMt3B,QAAQrc,EAAIN,KAAKyhB,SAASnhB,GAChC2zC,EAAMxyB,SAASnhB,EAAIN,KAAK2c,QAAQrc,GAChC2zC,EAAMt3B,QAAQpc,EAAIP,KAAK0hB,QAAQnhB,GAC/B0zC,EAAMvyB,QAAQnhB,EAAIP,KAAK2c,QAAQpc,GAIvChB,oBAAoB00C,GAChB,QACIA,EAAMt3B,QAAQrc,GAAKN,KAAKyhB,SAASnhB,GACjC2zC,EAAMxyB,SAASnhB,GAAKN,KAAK2c,QAAQrc,GACjC2zC,EAAMt3B,QAAQpc,GAAKP,KAAK0hB,QAAQnhB,GAChC0zC,EAAMvyB,QAAQnhB,GAAKP,KAAK2c,QAAQpc,GAIxChB,WAAW2jB,EAAiBE,EAAgBmxB,GACxC,IAAIC,EAAQpxB,EAAO9iB,GAAKN,KAAKy0C,cAAcF,EAAS,IAAIj0C,EAAI4iB,EAAIhR,OAAQ5R,GACpEo0C,EAAQtxB,EAAO9iB,GAAKN,KAAKy0C,eAAeF,EAAS,IAAIj0C,EAAI4iB,EAAIhR,OAAQ5R,GACzE,MAAMq0C,EAAQvxB,EAAO7iB,GAAKP,KAAKy0C,cAAcF,EAAS,IAAIh0C,EAAI2iB,EAAIhR,OAAQ3R,GACpEq0C,EAAQxxB,EAAO7iB,GAAKP,KAAKy0C,eAAeF,EAAS,IAAIh0C,EAAI2iB,EAAIhR,OAAQ3R,GAC3E,OAAIi0C,EAAQI,GAASD,EAAQD,EAAc,CAAEx0B,KAAK,EAAO9U,IAAKopC,EAAOryC,IAAKuyC,IACtEC,EAAQH,IAAOA,EAAQG,GACvBC,EAAQF,IAAOA,EAAQE,GACpB,CAAE10B,IAAKs0B,EAAQtxB,EAAI2xB,MAASH,EAAQ,EAAGtpC,IAAKopC,EAAOryC,IAAKuyC,IAGnEn1C,SACI,OAAOS,KAAK2c,QAAQvS,IAAI,IAAIyH,EAAA8N,OAAO3f,KAAKgT,EAAI,EAAGhT,KAAKkT,EAAI,IAG5D3T,eACI,OAAOS,KAAKgT,EAAIhT,KAAKkT,EAAI,EAAI,EAEjC3T,gBAAgBkC,GACZ,MAAMqzC,IACF11C,EAAAgO,KAAKpN,KAAK2c,QAAQrc,GAAKmB,EAAOQ,OAC9B7C,EAAAiO,KAAKrN,KAAK2c,QAAQpc,GAAKkB,EAAOqR,QAC9B1T,EAAAgO,KAAKpN,KAAKyhB,SAASnhB,GAAK,GACxBlB,EAAAiO,KAAKrN,KAAK+zC,SAASxzC,GAAK,GAE5B,QAAIu0C,GA/FZ33C,EAAAqD,oDCHA,IAAAoT,EAAA,WAA0B,IAAAC,EAAA7T,KAAa8T,EAAAD,EAAAE,eAA0BC,EAAAH,EAAAI,MAAAD,IAAAF,EAAwB,OAAAE,EAAA,OAAiBE,MAAA,CAAOwC,GAAA,kBAAsB,CAAA7C,EAAAub,OAAAvb,EAAAkhC,OAAA/gC,EAAA,QAAAA,EAAA,YAAAA,EAAA,UAAmEU,YAAA,UAAqB,CAAAb,EAAAmB,GAAA,mBAAAhB,EAAA,OAAsCU,YAAA,SAAoB,CAAAb,EAAAgC,GAAAhC,EAAA,eAAA3M,EAAAxL,GAAsC,OAAAsY,EAAA,eAAyBxV,IAAA,KAAA9C,EAAAwY,MAAA,CAAkBtI,GAAA,SAAA1E,EAAA,OAAAA,EAAA,KAAyC,CAAA2M,EAAAmB,GAAAnB,EAAAqC,GAAAhP,EAAA,SAA4B2M,EAAAgC,GAAAhC,EAAA,gBAAA3M,EAAAxL,GAAuC,OAAAsY,EAAA,eAAyBxV,IAAA,KAAA9C,EAAAwY,MAAA,CAAkBtI,GAAA,SAAA1E,EAAA,OAAAA,EAAA,KAAyC,CAAA2M,EAAAmB,GAAAnB,EAAAqC,GAAAhP,EAAA,QAAA2M,EAAAqC,GAAAhP,EAAA,UAAgD,OAAA2M,EAAAub,MAAAxzB,OAAAoY,EAAA,OAAyCU,YAAA,SAAoB,CAAAb,EAAAmB,GAAA,wBAAAnB,EAAAsC,SAAAtC,EAAAsC,KAAAtC,EAAA89B,GAAA,GAAA39B,EAAA,QAA4EI,GAAA,CAAI4gC,OAAA,SAAA1gC,GAAkD,OAAxBA,EAAAqW,iBAAwB9W,EAAAohC,WAAA3gC,MAAgC,CAAAN,EAAA,YAAAH,EAAAub,OAAAvb,EAAAkhC,OAA+E/gC,EAAA,OAAyCU,YAAA,SAAoB,CAAAb,EAAAmB,GAAA,0BAA5IhB,EAAA,UAA0DU,YAAA,UAAqB,CAAAb,EAAAmB,GAAA,sBAA6DhB,EAAA,OAA6CU,YAAA,SAAoB,CAAAV,EAAA,SAAcoB,WAAA,EAAa3X,KAAA,QAAA4X,QAAA,UAAAnX,MAAA2V,EAAA,eAAAyB,WAAA,mBAAsFpB,MAAA,CAASjU,KAAA,OAAAxC,KAAA,YAAA+X,YAAA,gBAA8DC,SAAA,CAAWvX,MAAA2V,EAAA,gBAA6BO,GAAA,CAAKsB,MAAA,SAAApB,GAAyBA,EAAAlL,OAAAuM,YAAsC9B,EAAAqhC,eAAA5gC,EAAAlL,OAAAlL,WAAyC2V,EAAA89B,GAAA,KAAA99B,EAAA89B,GAAA,OAAA39B,EAAA,OAAsCE,MAAA,CAAOwC,GAAA,oBAAwB,CAAA1C,EAAA,QAAaI,GAAA,CAAI4gC,OAAA,SAAA1gC,GAA0BA,EAAAqW,oBAA2B,CAAA3W,EAAA,eAAoBU,YAAA,SAAAR,MAAA,CAA4BihC,IAAA,SAAAlgC,MAAA,mBAAArJ,GAAA,aAA2D,CAAAoI,EAAA,KAAUU,YAAA,kBAAyB,GAAAV,EAAA,QAAmBI,GAAA,CAAI4gC,OAAA,SAAA1gC,GAA0BA,EAAAqW,oBAA2B,CAAA3W,EAAA,eAAoBU,YAAA,SAAAR,MAAA,CAA4BihC,IAAA,SAAAlgC,MAAA,SAAArJ,GAAA,iBAAqD,CAAAoI,EAAA,KAAUU,YAAA,2BAAkC,QACz0DwC,EAAA,YAAoC,IAAArD,EAAA7T,KAAa8T,EAAAD,EAAAE,eAA0BC,EAAAH,EAAAI,MAAAD,IAAAF,EAAwB,OAAAE,EAAA,MAAAA,EAAA,QAAAH,EAAAmB,GAAA,WAA4C,WAAc,IAAAnB,EAAA7T,KAAa8T,EAAAD,EAAAE,eAA0BC,EAAAH,EAAAI,MAAAD,IAAAF,EAAwB,OAAAE,EAAA,QAAAA,EAAA,KAA0BU,YAAA,sBAAiC,WAAc,IAAAb,EAAA7T,KAAa8T,EAAAD,EAAAE,eAA0BC,EAAAH,EAAAI,MAAAD,IAAAF,EAAwB,OAAAE,EAAA,UAAoBU,YAAA,SAAAR,MAAA,CAA4BjU,KAAA,SAAAgV,MAAA,WAAkC,CAAAjB,EAAA,KAAUU,YAAA,2BCDhc3X,EAAAS,EAAAuF,EAAA,sBAAA6Q,IAAA7W,EAAAS,EAAAuF,EAAA,sBAAAmU,yCCMA,SAAgBk+B,EAAiB5d,EAAWC,GACxC,MAAM3yB,EAAI0yB,EAAGl3B,EAAIm3B,EAAGn3B,EACdgmB,EAAIkR,EAAGj3B,EAAIk3B,EAAGl3B,EACpB,OAAO2B,KAAKovB,KAAKxsB,EAAIA,EAAIwhB,EAAIA,oDAHjCnpB,EAAAi4C,mBAMA,MAAaC,EAGT91C,YAAYe,EAAWC,GACnBP,KAAKM,EAAIA,EACTN,KAAKO,EAAIA,EAEbhB,iBAAiBgC,GACb,OAAO,IAAI8zC,EAAM9zC,EAAM,GAAIA,EAAM,IAErChC,IAAI8a,GACA,OAAO,IAAIg7B,EAAMr1C,KAAKM,EAAI+Z,EAAI/Z,EAAGN,KAAKO,EAAI8Z,EAAI9Z,GAElDhB,SAAS00C,GACL,OAAO,IAAIt0B,EAAO3f,KAAKM,EAAI2zC,EAAM3zC,EAAGN,KAAKO,EAAI0zC,EAAM1zC,GAEvDhB,QACI,OAAO,IAAI81C,EAAMr1C,KAAKM,EAAGN,KAAKO,GAElChB,IAAI6nC,GACA,OAAkB,IAAdA,EAAwBpnC,KAAKM,EAC1BN,KAAKO,EAEhBhB,UACI,MAAO,CAACS,KAAKM,EAAGN,KAAKO,IAxB7BpD,EAAAk4C,QA2BA,MAAaljC,UAAoBkjC,EAK7B91C,IAAI8a,GACA,OAAoBta,MAAMqK,IAAIiQ,GAElC9a,SAAS00C,GACL,OAAOl0C,MAAMua,SAAS25B,GAE1B10C,QACI,OAAoBQ,MAAM6xB,QAE9BryB,iBAAiBgC,GACb,OAAO,IAAI4Q,EAAY5Q,EAAM,GAAIA,EAAM,KAf/CpE,EAAAgV,cAmBA,MAAaS,UAAmByiC,EAK5B91C,IAAI8a,GACA,OAAmBta,MAAMqK,IAAIiQ,GAEjC9a,SAAS00C,GACL,OAAOl0C,MAAMua,SAAS25B,GAE1B10C,QACI,OAAmBQ,MAAM6xB,SAZjCz0B,EAAAyV,aAgBA,MAAa+M,EAGTpgB,YAAYe,EAAWC,GACnBP,KAAKM,EAAIA,EACTN,KAAKO,EAAIA,EAEbhB,IAAI00C,GACA,OAAOj0C,KAAKM,EAAI2zC,EAAM3zC,EAAIN,KAAKO,EAAI0zC,EAAM1zC,EAE7ChB,UACI,OAAO,IAAIogB,EAAkB,IAAX3f,KAAKM,EAAU,EAAI,EAAIN,KAAKM,EAAc,IAAXN,KAAKO,EAAU,EAAI,EAAIP,KAAKO,GAEjFhB,SACI,OAAO2C,KAAKovB,KAAKpvB,KAAK+uB,IAAIjxB,KAAKM,EAAG,GAAK4B,KAAK+uB,IAAIjxB,KAAKO,EAAG,IAE5DhB,YACI,MAAMlC,EAAI2C,KAAKpE,SACf,OAAO,IAAI+jB,EAAO3f,KAAKM,EAAIjD,EAAG2C,KAAKO,EAAIlD,GAE3CkC,UACI,OAAO,IAAIogB,GAAQ3f,KAAKM,GAAIN,KAAKO,GAErChB,SAAS+1C,GACL,OAAO,IAAI31B,EAAO3f,KAAKM,EAAIg1C,EAAOt1C,KAAKO,EAAI+0C,GAE/C/1C,QACI,OAAqC,IAA7B2C,KAAKqzC,MAAMv1C,KAAKO,EAAGP,KAAKM,GAAY4B,KAAK0N,IA3BzDzS,EAAAwiB,SA+BA,MAAaD,EAITngB,YAAY2S,EAAW4O,EAAmB+zB,GACtC70C,KAAK8gB,UAAYA,EACjB9gB,KAAKkS,OAASA,OACDxJ,IAATmsC,IAAoBA,EAAO1lC,KAC/BnP,KAAK60C,KAAOA,EAEhBt1C,kBAAmCi4B,EAAOC,GACtC,MAAMpd,EAAM,IAAIsF,EAAO8X,EAAGn3B,EAAIk3B,EAAGl3B,EAAGm3B,EAAGl3B,EAAIi3B,EAAGj3B,GAC9C,IAAIi1C,EAGJ,OAF4BA,EAAxBtzC,KAAKgY,IAAIG,EAAI/Z,GAAK,KAAcm3B,EAAGn3B,EAAIk3B,EAAGl3B,GAAK+Z,EAAI/Z,GAC1Cm3B,EAAGl3B,EAAIi3B,EAAGj3B,GAAK8Z,EAAI9Z,EACzB,IAAImf,EAAI8X,EAAInd,EAAKm7B,GAE5Bj2C,IAAIpB,GACA,OAAU,IAAIk3C,EAAMr1C,KAAKkS,OAAO5R,EAAInC,EAAI6B,KAAK8gB,UAAUxgB,EAAGN,KAAKkS,OAAO3R,EAAIpC,EAAI6B,KAAK8gB,UAAUvgB,GAEjGhB,YAAYspC,EAAYC,GACpB,OAAO5mC,KAAKovB,KAAKpvB,KAAK+uB,IAAI6X,EAAKD,EAAI,IAAM3mC,KAAK+uB,IAAIjxB,KAAK8gB,UAAUxgB,EAAG,GAAK4B,KAAK+uB,IAAIjxB,KAAK8gB,UAAUvgB,EAAG,KAExGhB,KAAKspC,EAAY1W,GACb,OAAO0W,EAAK3mC,KAAKovB,KAAKpvB,KAAK+uB,IAAIkB,EAAU,IAAMjwB,KAAK+uB,IAAIjxB,KAAK8gB,UAAUxgB,EAAG,GAAK4B,KAAK+uB,IAAIjxB,KAAK8gB,UAAUvgB,EAAG,MAxBlHpD,EAAAuiB,2CCzGA,IAAA9L,EAAA,WAA0B,IAAAC,EAAA7T,KAAa8T,EAAAD,EAAAE,eAA0BC,EAAAH,EAAAI,MAAAD,IAAAF,EAAwB,OAAAE,EAAA,MAAAH,EAAAgC,GAAAhC,EAAA,iBAAAipB,GAAsD,OAAA9oB,EAAA,MAAgBxV,IAAAs+B,EAAApoB,YAAA,SAAAN,GAAA,CAAoC1J,MAAA,SAAA4J,GAAkD,OAAzBA,EAAAiC,kBAAyB1C,EAAA2qB,OAAAlqB,MAA4B,CAAAT,EAAAmB,GAAA,aAAAnB,EAAAqC,GAAA4mB,GAAA,cAAA9oB,EAAA,cAAoEE,MAAA,CAAOsE,MAAA3E,EAAA2E,MAAAskB,OAA2B,KAAMjpB,EAAAgC,GAAAhC,EAAA,eAAA/J,GAAoC,OAAAkK,EAAA,MAAgBxV,IAAAsL,EAAArM,KAAAiX,YAAA,uBAAAR,MAAA,CAAwDS,UAAA,QAAmBP,GAAA,CAAKqhC,UAAA,SAAAnhC,GAA6BT,EAAAkS,UAAAjc,EAAA4rC,MAA0BC,SAAA,SAAArhC,GAA6BT,EAAAkS,UAAA,MAAqBnR,UAAA,SAAAN,GAA8BT,EAAAgB,UAAAP,EAAA,kBAAAxK,EAAA4rC,SAAuD,CAAA7hC,EAAAmB,GAAA,aAAAnB,EAAAqC,GAAApM,EAAArM,MAAA,cAAAoW,EAAAkS,WAAAjc,EAAA4rC,KAAA1hC,EAAA,OAA6FU,YAAA,WAAsB,CAAAV,EAAA,OAAYU,YAAA,sBAAAR,MAAA,CAAyCyE,IAAA,kBAAA7O,EAAA4rC,UAAqC7hC,EAAAsC,UAAe,IAC35Be,EAAA,GCDAna,EAAAS,EAAAuF,EAAA,sBAAA6Q,IAAA7W,EAAAS,EAAAuF,EAAA,sBAAAmU,qIC2DAlT,EAAAF,EAAAC,gBAAAhH,EAAA,SACAkH,EAAAH,EAAAC,gBAAAhH,EAAA,SACA64C,EAAA9xC,EAAAC,gBAAAhH,EAAA,SAEAA,EAAA,QAEA,MAAA84C,EAAA94C,EAAA,QAGA0K,EAAA3D,EAAAC,gBAAAhH,EAAA,SACA2K,EAAA5D,EAAAC,gBAAAhH,EAAA,SACA+4C,EAAAhyC,EAAAC,gBAAAhH,EAAA,SACAg5C,EAAAjyC,EAAAC,gBAAAhH,EAAA,SACAi5C,EAAAlyC,EAAAC,gBAAAhH,EAAA,SACAk5C,EAAAnyC,EAAAC,gBAAAhH,EAAA,SACAm5C,EAAApyC,EAAAC,gBAAAhH,EAAA,SACAo5C,EAAAryC,EAAAC,gBAAAhH,EAAA,SAEA4K,EAAA5K,EAAA,QACAq5C,EAAAr5C,EAAA,QACAs5C,EAAAt5C,EAAA,QACAuP,EAAAvP,EAAA,QACA6K,EAAA7K,EAAA,QACAqC,EAAArC,EAAA,QACA8U,EAAA9U,EAAA,QAuBA,IAAqBu5C,EAArB,cAAkCtyC,EAAAK,QArBlC9E,kCA2BIS,KAAAsqB,MAAQ,CACJisB,SAAS,EACT9G,OAAO,GAGX3kB,aACI,OAAOljB,EAAA0J,UAAUwZ,OAGrBvZ,YACI,OAAO3J,EAAA0J,UAAUC,MAGrByW,aACI,OAAOpgB,EAAA0J,UAAU0W,OAGrBgD,oBACI,OAAOpjB,EAAA0J,UAAU0Z,cAGrBS,kBACI,OAAO7jB,EAAA0J,UAAUma,YAGrBA,gBAAgBvtB,GACZ0J,EAAA0J,UAAUklC,WAAW,CACjBC,eAAgBv4C,EAChBw4C,aAAct3C,EAAAuT,IAAI,IAAId,EAAAe,WAAW7T,OAAO6G,WAAa,EAAG7G,OAAO+G,YAAc,MAIrFvG,UACIR,OAAO43C,iBAAiB,SAAU32C,KAAK42C,cACvC73C,OAAO43C,iBAAiB,QAASP,EAAA1I,SACjC3uC,OAAO43C,iBAAiB,UAAWP,EAAAtI,WACnC9tC,KAAKsqB,MAAMisB,SAAU,EAGzBh3C,YACIR,OAAO83C,oBAAoB,SAAU72C,KAAK42C,cAC1C73C,OAAO83C,oBAAoB,QAAST,EAAA1I,SACpC3uC,OAAO83C,oBAAoB,UAAWT,EAAAtI,WACtC9tC,KAAKsqB,MAAMisB,SAAU,EAKzBh3C,KAAKiK,GACDqsC,EAAAiB,SAAST,EAAAU,WAATlB,CAAqBrsC,GAGzBjK,eACI+M,EAAAO,aAAamqC,SAASj4C,OAAO6G,YAC7B0G,EAAAO,aAAaoqC,UAAUl4C,OAAO+G,aAC9BwG,EAAAO,aAAasG,aAKjB5T,UAAUiK,GACNxJ,KAAK0E,MAAM+qC,MAAMllB,UAAU/gB,GAE/BjK,QAAQiK,GACJxJ,KAAK0E,MAAM+qC,MAAMjlB,QAAQhhB,GAE7BjK,UAAUiK,GACNxJ,KAAK0E,MAAM+qC,MAAMhlB,UAAUjhB,GAE/BjK,WAAWiK,GACPxJ,KAAK0E,MAAM+qC,MAAMtlB,WAAW3gB,GAEhCjK,YAAYiK,GACRxJ,KAAK0E,MAAM+qC,MAAM/kB,YAAYlhB,GAEjCjK,YAAYgT,GACRjG,EAAAO,aAAaoe,YAAY1Y,GAE7BhT,KAAKiK,GACD,GAAc,OAAVA,GAAyC,OAAvBA,EAAMO,aAC5B,GAAIP,EAAMO,aAAa5B,MAAMvM,OAAS,EAClCoE,KAAK0E,MAAMwyC,QACNj1B,KAAK,4DAA6D,KAAM,IACxEke,KAAK,OAAU,YACjB,IAAiD,KAA7C32B,EAAMO,aAAa0iC,QAAQ,cAClC,OAEAngC,EAAAO,aAAasqC,UAAU3tC,MA7Fd8sC,EAAIxyC,EAAAiC,WAAA,CArBxB9B,EAAAI,QAAU,CACP8B,WAAY,CACRixC,WAAYjB,EAAA9xC,QACZgzC,iBAAkBnB,EAAA7xC,QAClBizC,gBAAiB5vC,EAAArD,QACjBkzC,iBAAkB9vC,EAAApD,QAClBmzC,WAAYxB,EAAA3xC,QACZozC,oBAAqB3B,EAAAzxC,QACrBqzC,cAAe9B,EAAAvxC,QACfszC,cAAe1B,EAAA5xC,QACfuzC,eAAgB7B,EAAA1xC,SAEpB9E,iBAAiBqM,EAAIC,EAAMC,GACvBnE,EAAAjB,iBAAiBkF,GACjBE,KAEJvM,iBAAiBqM,EAAIC,EAAMC,GACvBnE,EAAAf,OAAOmF,aACPD,QAGawqC,4HC1GrB,MAAAzkC,EAAA9U,EAAA,QACA6K,EAAA7K,EAAA,QAEA,SAAgB+D,EAAI+2C,GAChB,MAAMC,EAAIlwC,EAAA0J,UAAU2B,WACd2S,EAAOhe,EAAA0J,UAAUsU,KACjBC,EAAOje,EAAA0J,UAAUuU,KACvB,OAAO,IAAIhU,EAAAe,YAAYilC,EAAIv3C,EAAIslB,GAAQkyB,GAAID,EAAIt3C,EAAIslB,GAAQiyB,GAG/D,SAAgB1qC,EAAK9M,GACjB,OAAOQ,EAAI,IAAI+Q,EAAAM,YAAY7R,EAAG,IAAIA,EAGtC,SAAgB+M,EAAK9M,GACjB,OAAOO,EAAI,IAAI+Q,EAAAM,YAAY,EAAG5R,IAAIA,EAGtC,SAAgByQ,EAAK8mC,GACjB,OAAOA,EAAIlwC,EAAA0J,UAAU2B,WAGzB,SAAgB2a,EAAgB7vB,GAC5B,OAAQA,EAAI6J,EAAA0J,UAAUquB,SAAY/3B,EAAA0J,UAAU6X,SAGhD,SAAgBpM,EAAKhf,GACjB,OAAOiT,EAAK4c,EAAgB7vB,IAKhC,SAAgB4U,EAAIklC,GAChB,MAAMC,EAAIlwC,EAAA0J,UAAU2B,WACd2S,EAAOhe,EAAA0J,UAAUsU,KACjBC,EAAOje,EAAA0J,UAAUuU,KACvB,OAAIgyB,aAAehmC,EAAAe,WACR,IAAIf,EAAAM,YAAY0lC,EAAIv3C,EAAIw3C,EAAIlyB,EAAMiyB,EAAIt3C,EAAIu3C,EAAIjyB,GAE9C,IAAIhU,EAAA6N,IAAiB/M,EAAIklC,EAAI3lC,QAAS2lC,EAAI/2B,UAAUtG,SAAS,EAAIs9B,GAAID,EAAIhD,MAIxF,SAAgBnI,EAAKpsC,GACjB,OAAOqS,EAAI,IAAId,EAAAe,WAAWtS,EAAG,IAAIA,EAGrC,SAAgBqsC,EAAKpsC,GACjB,OAAOoS,EAAI,IAAId,EAAAe,WAAW,EAAGrS,IAAIA,EAGrC,SAAgB+f,EAAKw3B,GACjB,OAAOA,EAAIlwC,EAAA0J,UAAU2B,WAGzB,SAAgB8kC,EAAKh6C,GACjB,OAAOuiB,EAAKsN,EAAgB7vB,IArDhCZ,EAAA2D,MAOA3D,EAAAiQ,OAIAjQ,EAAAkQ,OAIAlQ,EAAA6T,OAIA7T,EAAAywB,kBAIAzwB,EAAA4f,OAMA5f,EAAAwV,MAWAxV,EAAAuvC,OAIAvvC,EAAAwvC,OAIAxvC,EAAAmjB,OAIAnjB,EAAA46C,OAIMh5C,OAAQqO,KAAOA,EACfrO,OAAQsO,KAAOA,wGCwFrBrJ,EAAAF,EAAAC,gBAAAhH,EAAA,SACAkH,EAAAH,EAAAC,gBAAAhH,EAAA,SAEAusB,EAAAvsB,EAAA,QAEAuiC,EAAAx7B,EAAAC,gBAAAhH,EAAA,SAEAi7C,EAAAl0C,EAAAC,gBAAAhH,EAAA,SAGA8K,EAAA9K,EAAA,QACA4K,EAAA5K,EAAA,QAEAuP,EAAAvP,EAAA,QACA6K,EAAA7K,EAAA,QAWA,IAAqBk7C,EAArB,cAAqCj0C,EAAAK,QATrC9E,kCAUIS,KAAAqR,QAAU,CACNmgC,UAAU,EACVC,WAAW,GAGflgC,YACI,OAAO3J,EAAA0J,UAAUC,OAAS3J,EAAA0J,UAAUsM,YAGxC00B,iBACI,OAAO1qC,EAAA0J,UAAUsM,YAErB00B,eAAep0C,GACX0J,EAAA0J,UAAU4mC,cAAch6C,GAE5ByjB,cACI,OAAO/Z,EAAA0J,UAAUqQ,QAErBA,YAAYzjB,GACR0J,EAAA0J,UAAU6mC,WAAW,CAAEx2B,QAASzjB,EAAOof,MAAM,IAEjD+P,cACI,OAAOzlB,EAAA0J,UAAU+b,QAErBA,YAAYnvB,GACR0J,EAAA0J,UAAU8mC,WAAW,CAAE/qB,QAASnvB,EAAOof,MAAM,IAEjD6hB,iBACI,OAAOv3B,EAAA0J,UAAU6tB,WAErBA,eAAejhC,GACU,kBAAVA,GACX0J,EAAA0J,UAAU+mC,cAAc,CAAElZ,WAAYjhC,EAAOof,MAAM,IAEvDqR,aACI,OAAO/mB,EAAA0J,UAAUqd,OAErBA,WAAWzwB,GACP0J,EAAA0J,UAAUgnC,eAAe,CAAE3pB,OAAQzwB,EAAOof,MAAM,IAEpDqiB,eACI,OAAO/3B,EAAA0J,UAAUquB,SAErBA,aAAazhC,GACY,kBAAVA,GACX0J,EAAA0J,UAAUinC,YAAY,CAAE5Y,SAAUzhC,EAAOof,MAAM,IAEnD6L,eACI,OAAOvhB,EAAA0J,UAAU6X,SAErBA,aAAajrB,GACY,kBAAVA,GACX0J,EAAA0J,UAAUknC,YAAY,CAAErvB,SAAUjrB,EAAOof,MAAM,IAEnD8L,iBACI,OAAOxhB,EAAA0J,UAAU8X,WAErBA,eAAelrB,GACX0J,EAAA0J,UAAUmnC,cAAc,CAAE9rC,OAAQzO,EAAOof,MAAM,IAEnD4hB,gBACI,OAAOt3B,EAAA0J,UAAU4tB,UAErBA,cAAchhC,GACV0J,EAAA0J,UAAUonC,aAAa,CAAE/rC,OAAQzO,EAAOof,MAAM,IAElD21B,kBACI,OAAOrrC,EAAA0J,UAAU2hC,YAErBA,gBAAgB/0C,GACZ0J,EAAA0J,UAAUqnC,eAAe,CAAEhsC,OAAQzO,EAAOof,MAAM,IAEpDu1B,qBACI,OAAOjrC,EAAA0J,UAAUuhC,eAErBA,mBAAmB30C,GACM,kBAAVA,GACX0J,EAAA0J,UAAUsnC,kBAAkB,CAAE16C,QAAOof,MAAM,IAE/Cw1B,qBACI,OAAOlrC,EAAA0J,UAAUwhC,eAErBA,mBAAmB50C,GACM,kBAAVA,GACX0J,EAAA0J,UAAUunC,kBAAkB,CAAE36C,QAAOof,MAAM,IAE/C/d,cAAciK,GACV,GAAIA,EAAMJ,OAAOc,UAAUC,SAAS,kBAAmB,CACnDX,EAAMJ,OAAOc,UAAUs0B,OAAO,yBAC9B,MAAM1yB,EAAoBtC,EAAMJ,OAAO0vC,mBAC1B,OAAThtC,IAAeA,EAAKwK,MAAMhS,QAAiC,KAAvBwH,EAAKwK,MAAMhS,QAAiB,QAAU,KAGtF/E,eAAe9B,GACXkK,EAAAf,OAAOqC,KAAK,kBAAmBxL,GAEnC8B,iBACIsI,EAAA0Y,OAAe,UACVrX,OAAO,qBAAsB,uBAC7Bi3B,KACIjiC,IACGyJ,EAAAf,OAAOqC,KAAK,eAAgB/K,IAEhC,QAGZqB,aACI,MAAM8e,EAAO,CAAEpJ,MAAO,WAAYxV,KAAM,GAAIK,KAAM+H,EAAAgD,UAClDjD,EAAA0J,UAAUynC,QAAQ,CAAE16B,OAAMf,MAAM,IAChCtd,KAAKoyC,SAAS/zB,GAElB9e,SAAS8e,GACLxW,EAAA0Y,OAAmB,QAAQ0B,KAAK5D,GAEpC9e,iBAAiBiK,GACb,MAAMtL,EAAQsL,EAAMJ,OAAOlL,MAAMqoB,cACnB,QAAVroB,GAA6B,aAAVA,IACvB0J,EAAA0J,UAAU0nC,cAAc,CAAE56C,KAAMF,EAAOof,MAAM,IAC7C1V,EAAA0J,UAAU0J,oBACVpT,EAAA0J,UAAUqK,sBACVrP,EAAAO,aAAasG,gBAzHA8kC,EAAOn0C,EAAAiC,WAAA,CAT3B9B,EAAAI,QAAU,CACP8B,WAAY,CACR05B,eAAgBP,EAAAj7B,QAChB40C,aAAcjB,EAAA3zC,SAElBy7B,SAAQ/jC,OAAAmE,OAAA,GACDopB,EAAAyW,SAAS,OAAQ,CAAC,iBAAkB,YAAa,SAAU,cAGjDkY,oDC7KrBl7C,EAAAgB,EAAAgF,GAAA,IAAAm2C,EAAAn8C,EAAA,QAAAo8C,EAAAp8C,EAAA2B,EAAAw6C,GAAA,QAAAh2C,KAAAg2C,EAAA,YAAAh2C,GAAA,SAAA1E,GAAAzB,EAAAS,EAAAuF,EAAAvE,EAAA,kBAAA06C,EAAA16C,KAAA,CAAA0E,GAAwWH,EAAA,WAAAo2C,EAAG,qCCA3W,IAAAvlC,EAAA,WAA0B,IAAAC,EAAA7T,KAAa8T,EAAAD,EAAAE,eAA0BC,EAAAH,EAAAI,MAAAD,IAAAF,EAAwB,OAAAE,EAAA,eAAyBE,MAAA,CAAO7C,QAAAwC,EAAAxC,QAAA9M,KAAAsP,EAAAvT,EAAA,KAAAkE,IAAAqP,EAAAtT,EAAA,MAA6D6T,GAAA,CAAKC,MAAAR,EAAAQ,QAAmB,CAAAR,EAAA,MAAAG,EAAA,MAAuBI,GAAA,CAAI1J,MAAAmJ,EAAAulC,eAA0B,CAAAvlC,EAAAmB,GAAA,mBAAAnB,EAAAsC,KAAAnC,EAAA,MAA8CI,GAAA,CAAI1J,MAAAmJ,EAAAwlC,cAAyB,CAAAxlC,EAAAmB,GAAA,wBAAAhB,EAAA,MAA0CI,GAAA,CAAI1J,MAAAmJ,EAAAylC,iBAA4B,CAAAzlC,EAAAmB,GAAA,wBACxZkC,EAAA,GCDAna,EAAAS,EAAAuF,EAAA,sBAAA6Q,IAAA7W,EAAAS,EAAAuF,EAAA,sBAAAmU,0FCCA,MAAA1K,EAAAzP,EAAA,QAMA,IAAIw8C,EAEJ,IAAYv0B,EAwBPw0B,EAQL,SAASC,IACL,MAAO,CAACt8C,EAAAu8C,SAAUv8C,EAAAu8C,UArCTv8C,EAAAu8C,UAAY,SAIzB,SAAY10B,GACRA,IAAA,2BACAA,IAAA,kBACAA,IAAA,0BAEAA,IAAA,+BACAA,IAAA,4BAEAA,IAAA,yBACAA,IAAA,oBACAA,IAAA,sBAEAA,IAAA,6BACAA,IAAA,0CAEAA,IAAA,4BACAA,IAAA,0BACAA,IAAA,8BAEAA,IAAA,2CACAA,IAAA,kDACAA,IAAA,0CArBJ,CAAYA,EAAA7nB,EAAA6nB,OAAA7nB,EAAA6nB,KAAI,KAwBhB,SAAKw0B,GACDA,IAAA,6BACAA,IAAA,oCACAA,IAAA,gCACAA,IAAA,gCACAA,IAAA,4BALJ,CAAKA,MAAa,KAYlB,MAAa/N,EAOTlsC,eAAeuP,GANf9O,KAAA8O,SAA8B,GAC9B9O,KAAAykB,WAAkC,CAAC,KAAM,KAAM,MAC/CzkB,KAAAoP,YAAc,EAAC,GAAO,GAAO,GAE7BpP,KAAAmoC,IAAMsD,EAASkO,WAGX35C,KAAK8O,SAAWA,EAGpBvP,KAAKpB,GAID,OAHA6B,KAAK8O,SAAW3Q,EAAE2Q,SAAS7P,MAAM,EAAGd,EAAE2Q,SAASlT,QAC/CoE,KAAKykB,WAAatmB,EAAEsmB,WAAWxlB,MAAM,EAAGd,EAAEsmB,WAAW7oB,QACrDoE,KAAKoP,YAAcjR,EAAEiR,YAAYnQ,MAAM,EAAGd,EAAEiR,YAAYxT,QACjDoE,KAGXonC,gBACI,OAAOpnC,KAAK8O,SAASlT,OAAS,EAGlC2D,UAAUq6C,QACSlxC,IAAXkxC,GACAvqC,QAAQC,IAAI,mBAEhBtP,KAAK8O,SAAShT,KAAK89C,GACnBA,EAAOv1B,SAAWrkB,KAGtBT,cAAcqS,GACV,OAAO5R,KAAKoP,YAAYwC,GAG5BrS,WAEIS,KAAK8O,SAAW,CAAC9O,KAAK8O,SAAS,GAAI9O,KAAK8O,SAAS,GAAI9O,KAAK8O,SAAS,IAAI7P,MAAM,EAAGe,KAAK8O,SAASlT,QAC9FoE,KAAKykB,WAAa,CAACzkB,KAAKykB,WAAW,GAAIzkB,KAAKykB,WAAW,GAAIzkB,KAAKykB,WAAW,IAC3EzkB,KAAKoP,YAAc,CAACpP,KAAKoP,YAAY,GAAIpP,KAAKoP,YAAY,GAAIpP,KAAKoP,YAAY,IAGnF7P,OAAOgZ,GACH,OAAOvY,KAAK8O,SAASxF,QAAQiP,GAGjChZ,OAAOpB,GACH,OAAO6B,KAAKykB,WAAWnb,QAAQnL,GAGnCoB,WAAWqS,GACP,YAAclJ,IAAVkJ,EACO5R,KAAK8O,SAASzF,SAASkwC,GAEvBv5C,KAAK8O,SAAStC,EAAAuC,IAAI6C,IAASkjB,UAAY90B,KAAK8O,SAAStC,EAAA0C,GAAG0C,IAASkjB,SAIhFv1B,SAASgC,GACL,MAAMs4C,GACD75C,KAAK8O,SAAS,GAAIvN,MAAO,GAAKvB,KAAK8O,SAAS,GAAIvN,MAAO,GACxDvB,KAAK8O,SAAS,GAAIvN,MAAO,KAAOvB,KAAK8O,SAAS,GAAIvN,MAAO,GAAKvB,KAAK8O,SAAS,GAAIvN,MAAO,IACvFvB,KAAK8O,SAAS,GAAIvN,MAAO,IAAMvB,KAAK8O,SAAS,GAAIvN,MAAO,GAAKvB,KAAK8O,SAAS,GAAIvN,MAAO,IACtFvB,KAAK8O,SAAS,GAAIvN,MAAO,GAAKvB,KAAK8O,SAAS,GAAIvN,MAAO,GACrDu4C,EAAOD,EAAI,GAAK,EAAI,EACpB78C,GACDgD,KAAK8O,SAAS,GAAIvN,MAAO,GAAKvB,KAAK8O,SAAS,GAAIvN,MAAO,GACpDvB,KAAK8O,SAAS,GAAIvN,MAAO,GAAKvB,KAAK8O,SAAS,GAAIvN,MAAO,IACtDvB,KAAK8O,SAAS,GAAIvN,MAAO,GAAKvB,KAAK8O,SAAS,GAAIvN,MAAO,IAAMA,EAAM,IACnEvB,KAAK8O,SAAS,GAAIvN,MAAO,GAAKvB,KAAK8O,SAAS,GAAIvN,MAAO,IAAMA,EAAM,IACxEu4C,EACJ,GAAI98C,EAAI,EAAG,OAAO,EAClB,MAAMmB,GACD6B,KAAK8O,SAAS,GAAIvN,MAAO,GAAKvB,KAAK8O,SAAS,GAAIvN,MAAO,GACpDvB,KAAK8O,SAAS,GAAIvN,MAAO,GAAKvB,KAAK8O,SAAS,GAAIvN,MAAO,IACtDvB,KAAK8O,SAAS,GAAIvN,MAAO,GAAKvB,KAAK8O,SAAS,GAAIvN,MAAO,IAAMA,EAAM,IACnEvB,KAAK8O,SAAS,GAAIvN,MAAO,GAAKvB,KAAK8O,SAAS,GAAIvN,MAAO,IAAMA,EAAM,IACxEu4C,EAEJ,OAAO37C,EAAI,GAAKnB,EAAImB,EAAI07C,EAAIC,GA1EzBrO,EAAAkO,SAAW,EAJtBx8C,EAAAsuC,WAkFA,MAAasO,EAKTx6C,YAAYgC,GAJZvB,KAAA80B,UAAW,EAKP90B,KAAKg6C,OAASz4C,EAGlBA,YACI,OAAOvB,KAAKg6C,OAGhBz4C,UAAUA,GACNvB,KAAKg6C,OAASz4C,EACdvB,KAAK80B,UAAW,GAfxB33B,EAAA48C,SAmBA,MAAarlB,EAQTn1B,YAAYgZ,EAAkBpa,GAQ1B,GAPA6B,KAAKuY,EAAIA,EACTvY,KAAK7B,EAAIA,EACC,OAANoa,EACAvY,KAAK7B,EAAI,KACI,OAANA,IACP6B,KAAK7B,EAAIoa,EAAE8L,UAED,MAAVrkB,KAAK7B,GAAa6B,KAAK7B,EAAEipC,UAAY,EACrCpnC,KAAK60B,GAAK,EACV70B,KAAKuY,EAAI,KACTvY,KAAK7B,EAAI,SACN,CACH,MAAMzC,EAAIsE,KAAK7B,EAAEy2B,OAAOrc,GACC,IAArBvY,KAAK7B,EAAEipC,UAAiBpnC,KAAK60B,GAAKroB,EAAAuC,IAAIrT,GACrCsE,KAAK60B,GAAK,EAEnB70B,KAAKi6C,IAAMj6C,KAAK60B,GAChB70B,KAAKgV,GAAKhV,KAAKuY,EACfvY,KAAK6mB,GAAK7mB,KAAK7B,EAGnBsQ,YACI,OAAkB,OAAXzO,KAAK7B,GAAyB,OAAX6B,KAAKuY,EAGnChZ,OACI,IAAI7D,EAAIsE,KAAK7B,EAAGy2B,OAAO50B,KAAKuY,GAQ5B,OAP0B,IAAtBvY,KAAK7B,EAAGipC,UACRpnC,KAAK7B,EAAI6B,KAAK7B,EAAGsmB,WAAiB,IAAN/oB,EAAU,EAAI,IAE1CsE,KAAK7B,EAAI6B,KAAK7B,EAAGsmB,WAAWjY,EAAAuC,IAAIrT,IAChCA,EAAIsE,KAAK7B,EAAGy2B,OAAO50B,KAAKuY,GACxBvY,KAAK60B,GAAKroB,EAAAuC,IAAIrT,IAEXsE,KAAK60B,KAAO70B,KAAKi6C,KAAOj6C,KAAKuY,IAAMvY,KAAKgV,IAAMhV,KAAK7B,IAAM6B,KAAK6mB,IA3C7E1pB,EAAAu3B,iBA+CA,MAAalmB,EAMTjP,YAAY2O,GAGR,GARIlO,KAAAtE,EAAI,EAEZsE,KAAA4O,KAAa,IAAIsrC,EAEjBl6C,KAAAm6C,IAAM,EAEFn6C,KAAKkO,IAAMA,EACXlO,KAAK4O,KAAKI,OAAS,EACfd,EAAIk5B,WAAa,EACjBpnC,KAAKuP,IAAM,SADf,CAIAvP,KAAKuP,IAAMrB,EAAIsB,UAAU,GACH,IAAlBtB,EAAIk5B,YAAiBpnC,KAAK4O,KAAKI,OAAS,GAC5C,MAAoB,OAAbhP,KAAKuP,MAAiBvP,KAAKo6C,iBAC9B,MAAM,IAAI9iB,MAAM,QAGE,IAAlBppB,EAAIk5B,YAAiBpnC,KAAKm6C,IAAM,IAGxC1rC,YACI,OAAqB,OAAbzO,KAAKuP,KAAgBvP,KAAKm6C,MAAQn6C,KAAK4O,KAAKI,SAAWhP,KAAKuP,IAAKE,WAAWzP,KAAK4O,KAAKI,QAGlGzP,OACI,GACIS,KAAKq6C,kBACa,OAAbr6C,KAAKuP,MAAiBvP,KAAKo6C,kBAGxC76C,UAEI,OADAS,KAAK4O,KAAKC,MAAQ7O,KAAKuP,IAChBvP,KAAK4O,KAGhBrP,iBACI,OAA2B,IAAvBS,KAAKkO,IAAIk5B,WAETpnC,KAAKkO,IAAIsB,UAAUlG,QAAQtJ,KAAKuP,KAAQvP,KAAKkO,IAAIsB,UAAUlG,QAAQtJ,KAAKuP,IAAKkV,WAAWzkB,KAAK4O,KAAKI,SAI1GzP,YAC+B,IAAvBS,KAAKkO,IAAIk5B,WACTpnC,KAAKtE,IACDsE,KAAKkO,IAAIsB,UAAU5T,QAAUoE,KAAKtE,EAAGsE,KAAKuP,IAAM,KAC/CvP,KAAKuP,IAAMvP,KAAKkO,IAAIsB,UAAUxP,KAAKtE,IACZ,IAArBsE,KAAK4O,KAAKI,QACjBhP,KAAK4O,KAAKI,OAAS,EACnBhP,KAAKtE,IACDsE,KAAKkO,IAAIsB,UAAU5T,QAAUoE,KAAKtE,EAAGsE,KAAKuP,IAAM,KAC/CvP,KAAKuP,IAAMvP,KAAKkO,IAAIsB,UAAUxP,KAAKtE,IAExCsE,KAAK4O,KAAKI,UAvDtB7R,EAAAqR,eA4DA,MAAas7B,EAMTvqC,YAAYgZ,EAAkBpa,GAC1B6B,KAAKuY,EAAIA,EACTvY,KAAK7B,EAAIA,EACC,OAANoa,EACAvY,KAAK7B,EAAI,KACI,OAANA,IACP6B,KAAK7B,EAAIoa,EAAE8L,WAED,MAAVrkB,KAAK7B,GAAa6B,KAAK7B,EAAEipC,UAAY,KACrCpnC,KAAKuY,EAAI,KACTvY,KAAK7B,EAAI,MAEb6B,KAAKgV,GAAKhV,KAAKuY,EACfvY,KAAK6mB,GAAK7mB,KAAK7B,EAGnBsQ,YACI,OAAkB,OAAXzO,KAAK7B,GAAyB,OAAX6B,KAAKuY,EAGnChZ,OACI,MAAM7D,EAAIsE,KAAK7B,EAAGy2B,OAAO50B,KAAKuY,GAC9BvY,KAAK7B,EAAI6B,KAAK7B,EAAGsmB,WAAWjY,EAAA0C,GAAGxT,IAGnC6D,OACI,MAAM7D,EAAIsE,KAAK7B,EAAGy2B,OAAO50B,KAAKuY,GAE9B,OADAvY,KAAK7B,EAAI6B,KAAK7B,EAAGsmB,WAAWjY,EAAAuC,IAAIrT,IACzBsE,KAAKuY,IAAMvY,KAAKgV,IAAMhV,KAAK7B,IAAM6B,KAAK6mB,IAlCrD1pB,EAAA2sC,iBAsCA,MAAa1D,EAQT7mC,YAAYgZ,EAAW+hC,EAASC,GAPxBv6C,KAAAtE,EAAI,EACZsE,KAAAuP,IAAuB,KAEvBvP,KAAAhD,EAAmBw8C,EAAcgB,UAK7Bx6C,KAAKy6C,IAAMH,EACXt6C,KAAKnB,EAAI0Z,EAAEhX,MACXvB,KAAKm1B,EAAIolB,EAET,MAAM1Q,EAAK,IAAIC,EAAevxB,EAAG,MACjC,IAAImiC,EAAK7Q,EAAG1rC,EAAGy2B,OAAOrc,GAClBoiC,EAAK9Q,EAAG1rC,EAAG2Q,SAAStC,EAAA0C,GAAGwrC,IAC3B,MAAOniC,IAAMghC,GAAoB/sC,EAAAuY,YAAY/kB,KAAKnB,EAAGmB,KAAKm1B,EAAGwlB,EAAGp5C,SAAYyjB,EAAKC,UAI7E,GAHA4kB,EAAG/9B,OACH4uC,EAAK7Q,EAAG1rC,EAAGy2B,OAAOrc,GAClBoiC,EAAK9Q,EAAG1rC,EAAG2Q,SAAStC,EAAA0C,GAAGwrC,KAClB7Q,EAAGp7B,MACJ,OAIR,IAAImsC,EAAK/Q,EAAG1rC,EAAG2Q,SAAStC,EAAAuC,IAAI2rC,IACxBG,EAAY71B,EAAK0U,WAErB,MAAOkhB,IAAOrB,IAAqBsB,EAAMruC,EAAAuY,YAAY/kB,KAAKnB,EAAGmB,KAAKm1B,EAAGylB,EAAGr5C,UAAayjB,EAAKC,UACtF4kB,EAAG1vB,OACHugC,EAAK7Q,EAAG1rC,EAAGy2B,OAAOrc,GAClBqiC,EAAK/Q,EAAG1rC,EAAG2Q,SAAStC,EAAAuC,IAAI2rC,IAM5B,GAHAA,EAAK7Q,EAAG1rC,EAAGy2B,OAAOrc,GAClBoiC,EAAK9Q,EAAG1rC,EAAG2Q,SAAStC,EAAA0C,GAAGwrC,IAEnBE,IAAOrB,EAKP,OAJA1P,EAAG1vB,OACHugC,EAAK7Q,EAAG1rC,EAAGy2B,OAAOrc,GAClBqiC,EAAK/Q,EAAG1rC,EAAG2Q,SAAStC,EAAAuC,IAAI2rC,IACxBG,EAAMruC,EAAAuY,YAAY/kB,KAAKnB,EAAGmB,KAAKm1B,EAAGylB,EAAGr5C,OAC7Bs5C,GACJ,KAAK71B,EAAK0U,WACV,KAAK1U,EAAKiQ,UACN4U,EAAG/9B,OACH4uC,EAAK7Q,EAAG1rC,EAAGy2B,OAAO2kB,GAClBv5C,KAAKuP,IAAMs6B,EAAG1rC,EACd6B,KAAKhD,EAAIw8C,EAAcsB,cACvB96C,KAAKtE,EAAIg/C,EACT,MAEJ,KAAK11B,EAAKC,UACN,WAGD41B,IAAQ71B,EAAKiQ,WACpBj1B,KAAKuP,IAAMs6B,EAAG1rC,EACd6B,KAAKhD,EAAIw8C,EAAcsB,cACvB96C,KAAKtE,EAAI8Q,EAAAuC,IAAI2rC,KAEb16C,KAAKuP,IAAMs6B,EAAG1rC,EACd6B,KAAKhD,EAAIw8C,EAAcuB,YACvB/6C,KAAKtE,EAAIg/C,GAIjBn7C,OACIS,KAAKq6C,YAGT96C,YACI,IAAI5B,EACJ,GAAIqC,KAAKhD,IAAMw8C,EAAcsB,eAAiB96C,KAAKhD,IAAMw8C,EAAcwB,YAAa,CAChF,EAAG,CACC,MAAMt8C,EAAIsB,KAAKuP,IAAKkV,WAAWjY,EAAA0C,GAAGlP,KAAKtE,IAGvC,GAFAsE,KAAKtE,EAAIgD,EAAE6nC,OAAOvmC,KAAKuP,KACvBvP,KAAKuP,IAAM7Q,EACPsB,KAAKuP,IAAKT,SAAS9O,KAAKtE,KAAO69C,EAAkB,CACjD57C,EAAIqnB,EAAKiQ,UACTj1B,KAAKtE,EAAI8Q,EAAA0C,GAAGlP,KAAKtE,GACjB,MAEJiC,EAAI6O,EAAAuY,YAAY/kB,KAAKnB,EAAGmB,KAAKm1B,EAAGn1B,KAAKuP,IAAKT,SAAS9O,KAAKtE,GAAI6F,OAC5DvB,KAAKtE,EAAI8Q,EAAA0C,GAAGlP,KAAKtE,SACZiC,IAAMqnB,EAAKC,WAChBtnB,IAAMqnB,EAAKiQ,WACXj1B,KAAKhD,EAAIw8C,EAAcsB,cACvB96C,KAAKtE,EAAI8Q,EAAAuC,IAAI/O,KAAKtE,IAElBsE,KAAKhD,EAAIw8C,EAAcuB,gBAExB,CACH,MAAMr8C,EAAIsB,KAAKuP,IAAKkV,WAAWzkB,KAAKtE,GAC9BqsC,EAAKrpC,EAAE6nC,OAAOvmC,KAAKuP,KAMzB,OALAvP,KAAKuP,IAAM7Q,EACXf,EACIqC,KAAKuP,IAAKT,SAASi5B,KAASwR,EACtBv0B,EAAKiQ,UACLzoB,EAAAuY,YAAY/kB,KAAKnB,EAAGmB,KAAKm1B,EAAGn1B,KAAKuP,IAAKT,SAASi5B,GAAKxmC,OACtD5D,GACJ,KAAKqnB,EAAKC,UACNjlB,KAAKhD,EAAIw8C,EAAcyB,UACvBj7C,KAAKtE,EAAI8Q,EAAAuC,IAAIg5B,GACb,MAEJ,KAAK/iB,EAAK0U,WACN15B,KAAKhD,EAAIw8C,EAAcyB,UACvBj7C,KAAKtE,EAAI8Q,EAAA0C,GAAG64B,GACZ,MAEJ,QACI/nC,KAAKhD,EAAIw8C,EAAcwB,YACvBh7C,KAAKtE,EAAIqsC,KAjH7B5qC,EAAAipC,qBAwHA,MAAM8T,EAAN36C,cACIS,KAAA6O,MAAyB,KACzB7O,KAAAgP,OAAiB,IAGrB,SAAYo6B,GACRA,IAAA,sBACAA,IAAA,kBACAA,IAAA,kBACAA,IAAA,gDACAA,IAAA,iDALJ,CAAYjsC,EAAAisC,aAAAjsC,EAAAisC,WAAU,KAQtB,MAAarF,EAMTxkC,cALAS,KAAAonC,WAAa,EACbpnC,KAAA8O,SAAqB,GACrB9O,KAAAwP,UAAwB,GAIpBxP,KAAK4qC,UAAY5qC,KAAKk7C,eACtB3B,EAAmBv5C,KAAK4qC,UACxB,MAAMzsC,EAAI,IAAIstC,EACdttC,EAAEg9C,UAAUn7C,KAAK4qC,WACjB5qC,KAAKwP,UAAU1T,KAAKqC,GAGxBoB,eACI,MAAMgZ,EAAIvY,KAAKo7C,eAKf,YAJU1yC,IAAN6P,GACAlJ,QAAQC,IAAI,mBAEhBtP,KAAK8O,SAAShT,KAAKyc,GACZA,EAGXhZ,eACIomC,EACAC,EACAC,EACAwV,EACAhW,EACAC,GAEA,MAAMnnC,EAAI,IAAIstC,EAAS9F,EAAIC,EAAIC,GAK/B,OAJA1nC,EAAEsmB,WAAW,GAAK42B,EAClBl9C,EAAEsmB,WAAW,GAAK4gB,EAClBlnC,EAAEsmB,WAAW,GAAK6gB,EAClBtlC,KAAKwP,UAAU1T,KAAKqC,GACbA,EAGXoB,eAAe+7C,GACXt7C,KAAKwP,UAAYxP,KAAKwP,UAAUyW,OAAO9nB,GAAKA,IAAMm9C,GAGtD/7C,aAAag8C,EAAcC,EAAY3S,EAAclC,GACjD4U,EAAG92B,WAAW+2B,GAAM3S,EACpBA,EAAGpkB,WAAWkiB,GAAM4U,EAGxBrR,mBACI,OAAOlqC,KAAK8O,SAAS,GAGzBssC,qBACI,MAAM7iC,EAAI,IAAIwhC,EAAON,KAErB,OADAlhC,EAAEuc,UAAW,EACNvc,EAGXuyB,iBACI,GAAI9qC,KAAKonC,UAAY,EAAG,MAAM,IAAI9P,MAAM,QACxC,MAAM/oB,EAAK,IAAIC,EAAaxO,MAC5B,MAAOuO,EAAGE,MAAOF,EAAGzC,OACpB,OAAOyC,EAAGG,UAGdnP,YAAYyT,EAAY,IAAI+mC,EAAU/kB,GAAkB,GACpD,MAAMzc,EAAIvY,KAAKk7C,eAEf,IAAIrS,EACAC,EACJ,OAHA9oC,KAAKonC,YAGGpnC,KAAKonC,WACT,KAAK,EACDyB,EAAK7oC,KAAKwP,UAAU,GACpBs5B,EAAK,IAAI2C,EAASlzB,GAClBvY,KAAKwP,UAAU1T,KAAKgtC,GACpB9oC,KAAKy7C,aAAa5S,EAAI,EAAGC,EAAI,GAC7BvwB,EAAE8L,SAAWykB,EACb,MAEJ,KAAK,EACL,KAAK,EAAG,CACJ,MAAM4S,EAAyB,GACzBlsC,EAAYxP,KAAKwP,UAAUvQ,MAAM,EAAGe,KAAKwP,UAAU5T,QACzD,IAAK,MAAM0/C,KAAQ9rC,EAAW,CAC1B,MAAMmsC,GAAO,IAAIlQ,GAAW5/B,KAAKyvC,GACjCt7C,KAAKwP,UAAU1T,KAAK6/C,GACpBL,EAAKxsC,SAAS9O,KAAKonC,WAAa7uB,EAChCojC,EAAK7sC,SAAS9O,KAAKonC,WAAap0B,EAChChT,KAAKy7C,aAAaH,EAAMt7C,KAAKonC,UAAWuU,EAAM37C,KAAKonC,WAC/CkU,EAAKxsC,SAASzF,SAAS2J,IAAI0oC,EAAW5/C,KAAK6/C,GAEnD,IAAK,MAAML,KAAQ9rC,EAAW,CAC1B,MAAMosC,EAAYN,EAAK72B,WAAWzkB,KAAKonC,WACvC,IAAK,IAAIxqC,EAAI,EAAGA,EAAIoD,KAAKonC,YAAaxqC,EAClCg/C,EAAWn3B,WAAW7nB,GAAK0+C,EAAK72B,WAAW7nB,GAAI6nB,WAAWzkB,KAAKonC,WAIvE,IAAIyU,EAAO,EACX,GAAuB,IAAnB77C,KAAKonC,UACDpS,GACAxlB,EAAUqsC,GAAMC,WAChBD,IACArsC,EAAUqsC,GAAMp3B,WAAW,GAAIq3B,aAE/BtsC,EAAUqsC,GAAMp3B,WAAW,GAAIq3B,WAC/BD,IACArsC,EAAUqsC,GAAMC,iBAGpB,IAAK,MAAMR,KAAQ9rC,EACXwlB,EAAQsmB,EAAK72B,WAAW,GAAIq3B,WAC3BR,EAAKQ,WAIlB,IAAK,MAAMR,KAAQI,EAAY,CAC3B,IAAI9+C,EAAI,EACJ0+C,EAAKxsC,SAAS,KAAOkE,IAAGpW,EAAI,GAChCisC,EAAKyS,EAAK72B,WAAWzkB,KAAKonC,WAC1B,MAAMT,EAAK3mC,KAAK0lC,YAAY4V,EAAMt7C,KAAKonC,WACvC0B,EAAKwS,EAAK72B,WAAW7nB,GACrB,MAAMgqC,EAAK5mC,KAAK0lC,YAAY4V,EAAM1+C,GAClCoD,KAAKy7C,aAAa5S,EAAIlC,EAAImC,EAAIlC,GAC9B5mC,KAAK+kC,eAAeuW,GAExB/iC,EAAE8L,SAAW7U,EAAU,GACvB,MAEJ,QACI,MAAM,IAAI8nB,MAAM,qBAGxB,OAAO/e,EAGXhZ,YAAYpB,EAAazC,GACrB,GAAoB,IAAhByC,EAAEipC,UAAiB,CACnB,MAAMxqC,EAAIuB,EAAEsmB,WAAW/oB,GAAIk5B,OAAOz2B,EAAE2Q,SAAe,IAANpT,EAAU,EAAI,IAC3D,OAAa,IAANkB,EAAU,EAAI,EAEzB,OAAO4P,EAAAuC,IAAI5Q,EAAEsmB,WAAW/oB,GAAIk5B,OAAOz2B,EAAE2Q,SAAStC,EAAAuC,IAAIrT,MAGtD6D,aAAapB,GACT,MAAMoa,EAAIvY,KAAKk7C,eACTvV,EAAKxnC,EAAE2Q,SAAS,GAChB82B,EAAKznC,EAAE2Q,SAAS,GAChB+2B,EAAK1nC,EAAE2Q,SAAS,GAChBu2B,EAAKlnC,EAAEsmB,WAAW,GAClB6gB,EAAKnnC,EAAEsmB,WAAW,GAClBokB,EAAK7oC,KAAK+lC,eAAeJ,EAAIptB,EAAGstB,EAAI1nC,EAAGknC,EAAI,MAC3CyD,EAAK9oC,KAAK+lC,eAAeJ,EAAIC,EAAIrtB,EAAGpa,EAAG,KAAMmnC,GAEnD,GADAtlC,KAAKy7C,aAAa5S,EAAI,EAAGC,EAAI,GAClB,OAAPzD,EAAa,CACb,MAAMsB,EAAK3mC,KAAK0lC,YAAYvnC,EAAG,GAC/BknC,EAAG5gB,WAAWkiB,GAAMkC,EAExB,GAAW,OAAPvD,EAAa,CACb,MAAMsB,EAAK5mC,KAAK0lC,YAAYvnC,EAAG,GAC/BmnC,EAAG7gB,WAAWmiB,GAAMkC,EAOxB,OALA3qC,EAAE2Q,SAAS,GAAKyJ,EAChBpa,EAAEsmB,WAAW,GAAKokB,EAClB1qC,EAAEsmB,WAAW,GAAKqkB,EACdnD,EAAGthB,WAAalmB,IAAGwnC,EAAGthB,SAAWykB,GACrCvwB,EAAE8L,SAAWlmB,EACNoa,EAGXhZ,KAAKpB,EAAazC,GACd,MAAMgD,EAAIP,EAAEsmB,WAAW/oB,GACjBqsC,EAAK/nC,KAAK0lC,YAAYvnC,EAAGzC,GACzBqgD,EAAM59C,EAAE2Q,SAAStC,EAAA0C,GAAGxT,IACpBsgD,EAAO79C,EAAE2Q,SAAStC,EAAAuC,IAAIrT,IACtB4+C,EAAKn8C,EAAEsmB,WAAWjY,EAAAuC,IAAIrT,IACtBugD,EAAMj8C,KAAK0lC,YAAYvnC,EAAGqO,EAAAuC,IAAIrT,IAC9BwgD,EAAKx9C,EAAE+lB,WAAWjY,EAAAuC,IAAIg5B,IACtBoU,EAAMn8C,KAAK0lC,YAAYhnC,EAAG8N,EAAAuC,IAAIg5B,IAEpC5pC,EAAE2Q,SAAStC,EAAA0C,GAAGxT,IAAMgD,EAAEoQ,SAASi5B,GAC/BrpC,EAAEoQ,SAAStC,EAAA0C,GAAG64B,IAAO5pC,EAAE2Q,SAASpT,GAEhCsE,KAAKy7C,aAAat9C,EAAGzC,EAAGwgD,EAAIC,GAC5Bn8C,KAAKy7C,aAAat9C,EAAGqO,EAAAuC,IAAIrT,GAAIgD,EAAG8N,EAAAuC,IAAIg5B,IACpC/nC,KAAKy7C,aAAa/8C,EAAGqpC,EAAIuS,EAAI2B,GAEzBF,EAAI13B,WAAclmB,IAAG49C,EAAI13B,SAAW3lB,GACpCs9C,EAAK33B,WAAc3lB,IAAGs9C,EAAK33B,SAAWlmB,GAG9CoB,aAAapB,EAAazC,GACtB,IAAI6c,EACJ,GAAuB,IAAnBvY,KAAKonC,UAAiB,CACtB7uB,EAAIvY,KAAKk7C,eACT,MAAM5P,EAAKntC,EAAEsmB,WAAW,GAClB23B,EAAKj+C,EAAE2Q,SAAS,GAChButC,EAAIr8C,KAAK+lC,eAAextB,EAAG6jC,EAAI,KAAM9Q,EAAIntC,EAAG,MAClDA,EAAE2Q,SAAS,GAAKyJ,EAChBpa,EAAEsmB,WAAW,GAAK43B,EAClB/Q,EAAG7mB,WAAW,GAAK43B,EACnB9jC,EAAE8L,SAAWg4B,EACbD,EAAG/3B,SAAWinB,MACX,CACH,MAAM5sC,EAAIP,EAAEsmB,WAAW/oB,GACjBqsC,EAAK/nC,KAAK0lC,YAAYvnC,EAAGzC,GAC/B6c,EAAIvY,KAAK0qC,aAAavsC,GACtB6B,KAAKgoC,KAAKtpC,EAAGqpC,GAEjB,OAAOxvB,GAjNfpb,EAAA4mC,MAqNA,MAAaiD,EAKTznC,YAAYV,GACRmB,KAAKs8C,GAAKz9C,EAAE,GACZmB,KAAKu8C,GAAK19C,EAAE,GACZmB,KAAKiY,GAAKpZ,EAAE,GACZmB,KAAKkY,GAAKrZ,EAAE,GAGhBU,OAAOi9C,GACHx8C,KAAKs8C,IAAME,EAAOhwC,EAAA+uB,IAAIv7B,KAAKs8C,IAC3Bt8C,KAAKu8C,IAAMC,EAAOhwC,EAAA+uB,IAAIv7B,KAAKu8C,IAC3Bv8C,KAAKiY,IAAMukC,EAAOhwC,EAAA+uB,IAAIv7B,KAAKiY,IAC3BjY,KAAKkY,IAAMskC,EAAOhwC,EAAA+uB,IAAIv7B,KAAKkY,IAG/B3Y,SAAS00C,GACL,QAAIj0C,KAAKiY,GAAKg8B,EAAMqI,IAAMrI,EAAMh8B,GAAKjY,KAAKs8C,OACtCt8C,KAAKkY,GAAK+7B,EAAMsI,IAAMtI,EAAM/7B,GAAKlY,KAAKu8C,KArBlDp/C,EAAA6pC,oGC7nBA,MAAAn/B,EAAA9K,EAAA,QAEAuP,EAAAvP,EAAA,QACAmC,EAAAnC,EAAA,QAEAqC,EAAArC,EAAA,QACA0/C,EAAA1/C,EAAA,QAmBA,MAAa2/C,EAUTn9C,YAAYke,GAER,GAXJzd,KAAA28C,WAAa,EACb38C,KAAA48C,UAAyB,GAEzB58C,KAAA68C,aAAyB,GAEzB78C,KAAA88C,MAAyB,GAEzB98C,KAAA0iB,OAAS,EAGL1iB,KAAKyd,OAASA,EACa,IAAvBzd,KAAKyd,OAAO7hB,OAGZ,OAFAoE,KAAKuI,KAAO,UACZvI,KAAK88C,MAAQ,IAGjB,IAAK,IAAIphD,EAAI,EAAGA,EAAI+hB,EAAO7hB,OAAQF,IAAK,CACpC,MAAM+b,EAAQnL,EAAAO,aAAaiW,QAAQhlB,IAAI2f,EAAO/hB,IAC9CsE,KAAK48C,UAAU9gD,KAAK,CAChB8V,MAAOlW,EACP+gB,KAAMhF,EAAM/V,iBACZgP,OAAQ,IAAIxR,EAAAsB,aAAaiX,EAAM/G,SAAU,EAAG,KAGpD1Q,KAAKuI,KAAOvI,KAAK+8C,eAAe,EAAGt/B,EAAO7hB,QAC1CoE,KAAKg9C,UAGTz9C,OACI,MAAMkB,EAAM6L,EAAAO,aAAaC,SAAS,QAASrM,IAC3C,IAAK,MAAMw8C,KAAQj9C,KAAK88C,MAAO,CAC3B,MAAMx2B,EAAI22B,EAAKxgC,KACfhc,EAAIic,WAAWtd,EAAAgO,KAAKkZ,EAAE3J,QAAQrc,GAAIlB,EAAAiO,KAAKiZ,EAAE3J,QAAQpc,GAAInB,EAAA4R,KAAKsV,EAAEtT,GAAI5T,EAAA4R,KAAKsV,EAAEpT,KAI/E3T,eAAeoK,EAAeC,GAC1B5J,KAAK28C,aACL,IAAIlgC,EAAOzc,KAAK48C,UAAUjzC,GAAO8S,KACjC,IAAK,IAAI/gB,EAAIiO,EAAQ,EAAGjO,EAAIkO,EAAKlO,IAAK+gB,EAAOA,EAAK6wB,MAAMttC,KAAK48C,UAAUlhD,GAAG+gB,MAC1E,MAAMywB,EAActjC,EAAMD,EAC1B,GAAoB,IAAhBujC,EACA,OAAOltC,KAAKk9C,WAAWvzC,EAAOC,EAAKsjC,EAAazwB,GAC7C,CACH,IAAI0gC,EAAen9C,KAAK48C,UAAUjzC,GAAO+G,OACzC,IAAK,IAAIhV,EAAIiO,EAAOjO,EAAIkO,EAAKlO,IAAKyhD,EAAeA,EAAa7P,MAAMttC,KAAK48C,UAAUlhD,GAAGgV,QACtF,MAAM02B,EAAY+V,EAAaC,eAC/B,GAAID,EAAapJ,SAASj2C,IAAIspC,KAAe+V,EAAaxgC,QAAQ7e,IAAIspC,GAClE,OAAOpnC,KAAKk9C,WAAWvzC,EAAOC,EAAKsjC,EAAazwB,GAGpD,MAAM4gC,EAAO,IAAOF,EAAaxgC,QAAQ7e,IAAIspC,GAAa+V,EAAapJ,SAASj2C,IAAIspC,IAC9EkW,EAAkBz1C,EAAAyrB,UACpBtzB,KAAK48C,UAAU39C,MAAM0K,EAAOC,GAC3BlL,GAAiBA,EAAEgS,OAAOA,SAAS5S,IAAIspC,GAAaiW,GAEnDE,EAA0B,GAAIn9B,OAAO7jB,MAAM,GAAI+gD,GACnB,IAA9BA,EAAgB,GAAG1hD,QAA8C,IAA9B0hD,EAAgB,GAAG1hD,QAAcyT,QAAQC,IAAI,SACpFtP,KAAK48C,UAAU9/C,OAAO6M,EAAO4zC,EAAU3hD,UAAW2hD,GAClD,MAAMhjC,EAAM+iC,EAAgB,GAAG1hD,OAAS+N,EACxC,OAAO,IAAI8yC,EAAApP,aAAajG,EAAWpnC,KAAK+8C,eAAepzC,EAAO4Q,GAAMva,KAAK+8C,eAAexiC,EAAK3Q,KAIrGrK,UAAU2jB,EAAuBs6B,GAC7B,GAA0B,IAAtBx9C,KAAK88C,MAAMlhD,OAAc,MAAO,CAAEskB,KAAK,EAAOsO,UAAWtL,EAAIplB,IAAI,GAAI2/C,KAAM,EAAG5I,KAAM3xB,EAAI2xB,WACrEnsC,IAAnB80C,IAA8BA,GAAiB,GAEnD,IAAIt9B,GAAM,EACNu9B,EAAO,EACP5I,EAAO3xB,EAAI2xB,KAGX6I,EAAa,EACbC,EAAU,EACd,MAAMC,EAAiB,GAGjBx6B,EAASF,EAAIpC,UAAUuC,UACvBC,EAAgB,CAACF,EAAO9iB,EAAI,EAAG8iB,EAAO7iB,EAAI,GAEhD,MAAO,EAAM,CACT,MAAM08C,EAAOj9C,KAAK88C,MAAMa,GAElBjiD,EAAIuhD,EAAKxgC,KAAK8G,WAAWL,EAAKE,EAAQE,GAC5C,GAAI5nB,EAAEwkB,IACF,GAAI+8B,EAAK/P,YAAc,EAAG,CAQtB,GAHAhtB,GAAM,EACNu9B,EAAOv6B,EAAI2xB,KAAOn5C,EAAE0P,IACpBypC,EAAOn5C,EAAEyG,IACU,IAAfu7C,GAAoBF,EAAgB,MACxCG,EAAUC,IAAOF,QAEbp6B,EAAmC25B,EAAM7V,YACzCwW,EAAKF,KAAgBC,EAAU,EAC/BA,EAA+BV,EAAMY,oBAErCD,EAAKF,KAAqCT,EAAMY,kBAChDF,SAGL,CACH,GAAmB,IAAfD,EAAkB,MACtBC,EAAUC,IAAOF,IAGzB,MAAO,CAAEx9B,MAAKsO,UAAWtL,EAAIplB,IAAI2/C,GAAOA,OAAM5I,QAG1Ct1C,UACJS,KAAK0iB,OAAS,EACI,OAAd1iB,KAAKuI,MAAevI,KAAK89C,QAAQ99C,KAAKuI,MAGtChJ,QAAQ09C,GACZ,MAAMrrC,EAAQ5R,KAAK0iB,OACbq7B,EAAW/9C,KAAK0iB,SACtB,GAAyB,IAArBu6B,EAAK/P,YAAmB,CACxBltC,KAAK89C,QAAQb,EAAKz2B,SAAS,IAC3B,MAAMw3B,EAAeh+C,KAAK89C,QAAQb,EAAKz2B,SAAS,IAChDxmB,KAAK88C,MAAMlrC,GAA6B,CACpC6K,KAAMwgC,EAAKxgC,KACX2qB,UAA0B6V,EAAM7V,UAChC8F,YAAa,EACb2Q,kBAAmBG,QAGvBh+C,KAAK88C,MAAMlrC,GAAyB,CAChC6K,KAAMwgC,EAAKxgC,KACXwhC,iBAA6BhB,EAAM7P,gBACnCF,YAAa+P,EAAK/P,aAG1B,OAAO6Q,EAGHx+C,WAAWoK,EAAeC,EAAasjC,EAAqBzwB,GAChE,MAAMzR,EAAOhL,KAAK68C,aAAajhD,OAC/B,IAAK,IAAIF,EAAIiO,EAAOjO,EAAIkO,EAAKlO,IAAKsE,KAAK68C,aAAa/gD,KAAKkE,KAAKyd,OAAOzd,KAAK48C,UAAUlhD,GAAGkW,QACvF,OAAO,IAAI6qC,EAAAtP,SAASniC,EAAMkiC,EAAazwB,IAhJ/Ctf,EAAAu/C,sDCzBA,IAAAwB,EAAAnhD,EAAA,QAAAohD,EAAAphD,EAAA2B,EAAAw/C,GAAsgBC,EAAG,wFCEzgB,MAAAt2C,EAAA9K,EAAA,QACAkiB,EAAAliB,EAAA,QAGAuP,EAAAvP,EAAA,QACAmiB,EAAAniB,EAAA,QACA6K,EAAA7K,EAAA,QACAqhD,EAAArhD,EAAA,QACAqC,EAAArC,EAAA,QAEA,MAAashD,EAAb9+C,cACIS,KAAAs+C,aAAuB,EAEvBt+C,KAAAmwC,kBAAoB,IAAIiO,EAAApsC,kBAExBzS,SAASkY,GACL,IAAKnL,EAAAO,aAAa2F,SAASiF,EAAMlF,OAE7B,YADAlD,QAAQC,gCAAgCmI,EAAMlF,4BAGlD,MAAMA,EAAQjG,EAAAO,aAAaC,SAAS2K,EAAMlF,OACpCmF,EAAKwH,EAAA1H,oBAAoBC,QACpB/O,IAAPgP,GAIJnF,EAAMG,SAASgF,GAAI,GACnBnF,EAAMY,YAAW,IAJb9D,QAAQC,+BAA+BmI,EAAME,4BAOrDpY,YAAYnE,GACR,IAAKkR,EAAAO,aAAa2F,SAASpX,EAAKqc,MAAMlF,OAElC,YADAlD,QAAQC,gCAAgClU,EAAKqc,MAAMlF,4BAGvD,MAAMmF,EAAKwH,EAAA1H,oBAAoBpc,EAAKqc,OACpC,QAAW/O,IAAPgP,EAEA,YADArI,QAAQC,+BAA+BlU,EAAKqc,MAAME,4BAGtD,MAAM4mC,EAAWjyC,EAAAO,aAAaiW,QAAQhlB,IAAI1C,EAAKqc,MAAM3X,MACrD,QAAiB4I,IAAb61C,EAEA,YADAlvC,QAAQC,IAAI,8CAGhB,MAAMkvC,EAAmB9mC,EAAGwE,SAAWqiC,EAASriC,OAC1CzE,EAAQ1b,OAAOmE,OAAOq+C,EAAU7mC,GACtCD,EAAMgnC,qBACNhnC,EAAMinC,iBAAiBjnC,EAAM+B,qBAC7B/B,EAAMknC,WAAWlnC,EAAMgC,SACnBre,EAAK8lB,SACLtZ,EAAA0J,UAAU0J,kBAAkB5f,EAAK+lB,WACjC7U,EAAAO,aAAaC,SAAS1R,EAAKqc,MAAMlF,OAAQY,YAAW,GAChDsE,EAAM+B,qBAAqB5R,EAAA0J,UAAUqK,oBAAoBvgB,EAAK+lB,YAElEq9B,GAAkB32C,EAAA0Y,OAAmB,cAAcxJ,eAG3DxX,kBAAkBC,GACd,MAAMo/C,EAAWx/C,EAAA0B,IAAItB,GACrBoI,EAAA0J,UAAU8gB,cAAcrzB,OAAO6G,WAAa,EAAIg5C,EAASt+C,GAAKsH,EAAA0J,UAAU2B,YACxErL,EAAA0J,UAAU+gB,cAActzB,OAAO+G,YAAc,EAAI84C,EAASr+C,GAAKqH,EAAA0J,UAAU2B,YACzE3G,EAAAO,aAAasG,aACb8L,EAAAyG,qBArDRvoB,EAAAkhD,cAyDalhD,EAAA+yC,YAAc,IAAImO,EACzBt/C,OAAQmxC,YAAc/yC,EAAA+yC,iDCtE5B,IAAA2O,EAAA9hD,EAAA,QAAA+hD,EAAA/hD,EAAA2B,EAAAmgD,GAA0gBC,EAAG,uCCA7gB/hD,EAAAgB,EAAAgF,GAAA,IAAAg8C,EAAAhiD,EAAA,QAAAiiD,EAAAjiD,EAAA,gBAAAmG,KAAA87C,EAAA,YAAA97C,GAAA,SAAA1E,GAAAzB,EAAAS,EAAAuF,EAAAvE,EAAA,kBAAAwgD,EAAAxgD,KAAA,CAAA0E,GAAAnG,EAAA,YAAAoG,EAAApG,EAAA,QAQAqG,EAAgBrH,OAAAoH,EAAA,KAAApH,CACdijD,EAAA,WACAD,EAAA,KACAA,EAAA,MACF,EACA,KACA,WACA,MAIA37C,EAAAC,QAAAC,OAAA,aACeP,EAAA,WAAAK,6CCpBf,IAAAwQ,EAAA,WAA0B,IAAAC,EAAA7T,KAAa8T,EAAAD,EAAAE,eAA0BC,EAAAH,EAAAI,MAAAD,IAAAF,EAAwB,OAAAE,EAAA,SAAmBE,MAAA,CAAO7C,QAAAwC,EAAAxC,QAAA8C,MAAA,GAAmCC,GAAA,CAAKC,MAAA,SAAAC,GAAyBT,EAAAxC,SAAA,IAAqBkD,YAAAV,EAAAW,GAAA,EAAsBhW,IAAA,SAAAiW,GAAA,SAAAnX,GAA4B,OAAA0W,EAAA,OAAiBU,YAAA,eAAAR,MAAA,CAAkCS,UAAA,QAAmBP,GAAA,CAAKQ,UAAAtX,EAAAuX,UAAAC,QAAAxX,EAAAyX,UAA6C,CAAAf,EAAA,OAAAH,EAAAmB,GAAA,gBAAAhB,EAAA,OAA6CU,YAAA,eAAAN,GAAA,CAA+B1J,MAAA,SAAA4J,GAAyBT,EAAAxC,SAAA,KAAsB,CAAA2C,EAAA,KAAUU,YAAA,iCAA4C,CAAAV,EAAA,OAAYU,YAAA,cAAyB,CAAAV,EAAA,aAAkBE,MAAA,CAAOwC,GAAA,kBAAArT,QAAA,CAAkC2G,QAAA6J,EAAAorC,YAAAj6C,UAAA6O,EAAA4+B,OAAAC,MAAAC,KAAAphC,QAAkE6C,GAAA,CAAKoK,OAAA3K,EAAAqrC,aAAyBjzB,MAAA,CAAQ/tB,MAAA2V,EAAA,KAAAqY,SAAA,SAAAC,GAA0CtY,EAAAzY,KAAA+wB,GAAa7W,WAAA,SAAoB,CAAAzB,EAAAgC,GAAAhC,EAAA,cAAAsrC,GAAoC,OAAAnrC,EAAA,OAAkBxV,IAAA2gD,EAAAr/C,KAAAoV,YAAA,CAA4B5Q,QAAA,OAAA86C,iBAAA,SAAAC,cAAA,aAAqE,CAAArrC,EAAA,OAAYU,YAAA,mBAAA0B,MAAA,CAAsCkpC,sBAAAzrC,EAAA0rC,eAAAJ,EAAAr/C,MAAuDwW,MAAA,CAASiL,OAAA1N,EAAA4+B,OAAAC,MAAAC,KAAAphC,OAAA,QAAgD6C,GAAA,CAAMorC,WAAA,SAAAlrC,GAA8BT,EAAA4rC,gBAAAN,GAAA,IAAiCh1B,WAAA,SAAA7V,GAA+BT,EAAA4rC,gBAAAN,GAAA,MAAoC,CAAAA,EAAA,SAAAnrC,EAAA,OAA6BE,MAAA,CAAOyE,IAAAwmC,EAAA1tC,OAAAxP,MAAA,OAAA6Q,OAAA,WAAmD,CAAAkB,EAAA,QAAekB,YAAA,CAAajT,MAAA,SAAgB,CAAA4R,EAAAmB,GAAAnB,EAAAqC,GAAAipC,EAAA1tC,YAAAuC,EAAA,SAA8CoB,WAAA,EAAa3X,KAAA,QAAA4X,QAAA,sBAAAnX,MAAAihD,EAAA,WAAA7pC,WAAA,mBAAAqB,UAAA,CAA6Gi8B,MAAA,EAAApiB,QAAA,KAA2Bpa,MAAA,CAASspC,YAAA7rC,EAAA8rC,KAAAR,IAA+BjrC,MAAA,CAAQjU,KAAA,OAAAuV,YAAA,QAAAxQ,UAAA6O,EAAA8rC,KAAAR,IAAgE1pC,SAAA,CAAWvX,MAAAihD,EAAA,YAA2B/qC,GAAA,CAAKoK,OAAA,UAAAlK,GAA2BT,EAAA6K,KAAAygC,EAAA,aAAAtrC,EAAA4c,GAAAnc,EAAAlL,OAAAlL,SAA2D,SAAAoW,GAAkBT,EAAA+rC,eAAAT,KAA0BroC,KAAA,SAAAxC,GAA0BT,EAAAkD,mBAAqB/C,EAAA,OAAYU,YAAA,0BAAA0B,MAAA,CAA6CspC,YAAA7rC,EAAA8rC,KAAAR,IAA+BjqC,YAAA,CAAcoa,QAAA,OAAgBlb,GAAA,CAAK1J,MAAA,SAAA4J,GAAyBT,EAAAgsC,aAAAV,EAAAtrC,EAAAisC,oBAAA,MAAwD,CAAA9rC,EAAA,KAAUU,YAAA,qBAA+ByqC,EAAA,SAAAtrC,EAAAmB,GAAAnB,EAAAqC,GAAAipC,EAAAxtC,QAAA/V,UAAA,CAAAiY,EAAAmB,GAAA,UAAAhB,EAAA,OAAqFoC,MAAA,CAAOspC,YAAA7rC,EAAA8rC,KAAAR,IAA+B7oC,MAAA,CAASgZ,QAAA6vB,EAAA9tC,QAAA,aAAyC+C,GAAA,CAAM1J,MAAA,SAAA4J,GAAyBT,EAAAksC,aAAAZ,EAAA,cAAqC,CAAAnrC,EAAA,KAAUU,YAAA,iBAAyBV,EAAA,OAAcoC,MAAA,CAAOspC,YAAA7rC,EAAA8rC,KAAAR,IAA+B7oC,MAAA,CAASgZ,QAAA6vB,EAAA3tC,MAAA,aAAuC4C,GAAA,CAAM1J,MAAA,SAAA4J,GAAyBT,EAAAksC,aAAAZ,EAAA,YAAmC,CAAAnrC,EAAA,KAAUU,YAAA,mBAA2BV,EAAA,OAAcoC,MAAA,CAAOspC,YAAA7rC,EAAA8rC,KAAAR,IAA+B7oC,MAAA,CAASgZ,QAAAzb,EAAA8rC,KAAAR,GAAA,aAA2C/qC,GAAA,CAAM1J,MAAA,SAAA4J,GAAyBT,EAAAmsC,iBAAAb,EAAAr/C,MAAA,SAA+C,CAAAkU,EAAA,KAAUU,YAAA,wBAA+B,GAAAyqC,EAAA,QAAAnrC,EAAA,OAAkCU,YAAA,qBAAgCb,EAAAgC,GAAAspC,EAAA,iBAAAc,GAAyC,OAAAjsC,EAAA,OAAiBxV,IAAAyhD,EAAAngD,MAAgB,CAAAkU,EAAA,SAAcoB,WAAA,EAAa3X,KAAA,QAAA4X,QAAA,UAAAnX,MAAA+hD,EAAA,KAAA3qC,WAAA,gBAA4EpB,MAAA,CAASjU,KAAA,OAAA+K,KAAAi1C,EAAAxiD,KAAA7B,QAAA,GAA6C6Z,SAAA,CAAWvX,MAAA+hD,EAAA,MAAsB7rC,GAAA,CAAKoK,OAAA,SAAAlK,GAA0BT,EAAAqsC,aAAAf,EAAAr/C,KAAAmgD,GAAA,IAA2CvqC,MAAA,SAAApB,GAA0BA,EAAAlL,OAAAuM,WAAsC9B,EAAA6K,KAAAuhC,EAAA,OAAA3rC,EAAAlL,OAAAlL,WAAgD8V,EAAA,SAAcoB,WAAA,EAAa3X,KAAA,QAAA4X,QAAA,UAAAnX,MAAA+hD,EAAA,MAAA3qC,WAAA,iBAA8EpB,MAAA,CAASjU,KAAA,OAAA+K,KAAAi1C,EAAAE,MAAAztB,WAAA92B,QAAA,GAAyD6Z,SAAA,CAAWvX,MAAA+hD,EAAA,OAAuB7rC,GAAA,CAAKoK,OAAA,SAAAlK,GAA0BT,EAAAqsC,aAAAf,EAAAr/C,KAAAmgD,GAAA,IAA2CvqC,MAAA,SAAApB,GAA0BA,EAAAlL,OAAAuM,WAAsC9B,EAAA6K,KAAAuhC,EAAA,QAAA3rC,EAAAlL,OAAAlL,gBAAqD2V,EAAAsC,WAAe,GAAAnC,EAAA,OAAgBE,MAAA,CAAOwC,GAAA,mBAAuB,CAAA1C,EAAA,OAAYE,MAAA,CAAOwC,GAAA,qBAAyB,CAAA7C,EAAAmB,GAAA,SAAAnB,EAAAqC,GAAArC,EAAAusC,iBAAApsC,EAAA,OAAwDkB,YAAA,CAAa5Q,QAAA,UAAkB0P,EAAA,OAAYU,YAAA,wBAAA4B,MAAAzC,EAAAwsC,WAAA,+BAAAjsC,GAAA,CAAkG1J,MAAAmJ,EAAAysC,mBAA8B,CAAAtsC,EAAA,KAAUU,YAAA,iBAAyBV,EAAA,OAAcU,YAAA,wBAAA4B,MAAAzC,EAAA0sC,WAAA,+BAAAnsC,GAAA,CAAkG1J,MAAA,SAAA4J,GAAyBT,EAAA0sC,YAAA1sC,EAAA0sC,cAAmC,CAAAvsC,EAAA,KAAUU,YAAA,mBAA2BV,EAAA,OAAcU,YAAA,wBAAA0B,MAAA,CAA2CspC,YAAA7rC,EAAA4+B,OAAAC,MAAAC,KAAAphC,OAA2C6C,GAAA,CAAK1J,MAAA,SAAA4J,GAAyBT,EAAA2sC,SAAA,MAAsB3sC,EAAA4sC,WAAA5sC,EAAAzY,KAAA,GAAA0E,MAAA,MAA0C,CAAAkU,EAAA,KAAUU,YAAA,sBAA8BV,EAAA,OAAcU,YAAA,wBAAA0B,MAAA,CAA2CspC,YAAA7rC,EAAA4+B,OAAAC,MAAAC,KAAAphC,OAA2C6C,GAAA,CAAK1J,MAAAmJ,EAAA6sC,WAAsB,CAAA1sC,EAAA,KAAUU,YAAA,8BAAmC,MACnqJwC,EAAA,GCDAna,EAAAS,EAAAuF,EAAA,sBAAA6Q,IAAA7W,EAAAS,EAAAuF,EAAA,sBAAAmU,0GCMAlT,EAAAF,EAAAC,gBAAAhH,EAAA,SACAkH,EAAAH,EAAAC,gBAAAhH,EAAA,SAGA,IAAqB4jD,EAArB,cAA2C38C,EAAAK,QAD3C9E,kCAEIS,KAAA4zC,QAAU,eADO+M,EAAa78C,EAAAiC,WAAA,CADjC9B,EAAAI,SACoBs8C,kDCVrB,IAAA/sC,EAAA,WAA0B,IAAAC,EAAA7T,KAAa8T,EAAAD,EAAAE,eAA0BC,EAAAH,EAAAI,MAAAD,IAAAF,EAAwB,cAAAD,EAAA4D,MAAAzD,EAAA,OAAAA,EAAA,OAAgDE,MAAA,CAAOwC,GAAA,mBAAuB,CAAA1C,EAAA,OAAYE,MAAA,CAAOwC,GAAA,yBAA6BtC,GAAA,CAAK1J,MAAAmJ,EAAA+sC,iBAA4B,CAAA5sC,EAAA,KAAUU,YAAA,kBAA0BV,EAAA,OAAcE,MAAA,CAAOwC,GAAA,mBAAuB,CAAA7C,EAAAmB,GAAAnB,EAAAqC,GAAArC,EAAA4D,MAAAha,SAAAuW,EAAA,OAA6CE,MAAA,CAAOwC,GAAA,uBAA2B,CAAA7C,EAAAgC,GAAAhC,EAAA4D,MAAA,kBAAA8Y,GAAgD,WAAAA,EAAA9yB,MAAA,IAAA8yB,EAAAryB,MAAA,CAAA8V,EAAA,OAA+DxV,IAAA,QAAA+xB,EAAAzwB,MAA2B,CAAA+T,EAAAmB,GAAAnB,EAAAqC,GAAAqa,EAAA9yB,SAAAuW,EAAA,OAA2CxV,IAAA,SAAA+xB,EAAAzwB,KAAA4U,YAAA,0BAAAN,GAAA,CAAsE1J,MAAA,SAAA4J,GAAyBT,EAAAgtC,YAAAtwB,GAAA,MAAkC,KAAAA,EAAAuwB,SAAA,CAAAjtC,EAAAmB,GAAAnB,EAAAqC,GAAAqa,EAAAryB,SAAA,CAAA2V,EAAAmB,GAAAnB,EAAAqC,GAAAqa,EAAAryB,OAAA,MAAA2V,EAAAqC,GAAAqa,EAAAuwB,aAAA,IAAAjtC,EAAAsC,QAAwI,GAAAnC,EAAA,OAAgBE,MAAA,CAAOwC,GAAA,oBAAwB,CAAA7C,EAAAgC,GAAAhC,EAAA4D,MAAA,eAAA6D,GAA0C,WAAAA,EAAA7d,MAAA,IAAA6d,EAAApd,MAAA,CAAA8V,EAAA,OAAyDxV,IAAA,QAAA8c,EAAAxb,MAAwB,CAAA+T,EAAAmB,GAAAnB,EAAAqC,GAAAoF,EAAA7d,SAAAuW,EAAA,OAAwCxV,IAAA,SAAA8c,EAAAxb,KAAA4U,YAAA,0BAAAN,GAAA,CAAmE1J,MAAA,SAAA4J,GAAyBT,EAAAgtC,YAAAvlC,GAAA,MAA8B,KAAAA,EAAAsB,IAAA,CAAA/I,EAAAmB,GAAAnB,EAAAqC,GAAAoF,EAAApd,SAAA,CAAA2V,EAAAmB,GAAAnB,EAAAqC,GAAAoF,EAAApd,OAAA,MAAA2V,EAAAqC,GAAAoF,EAAAsB,QAAA,IAAA/I,EAAAsC,QAAkH,KAAAnC,EAAA,eAA0BuB,IAAA,aAAArB,MAAA,CAAwBuD,MAAA5D,EAAA4D,UAAmB,GAAA5D,EAAAsC,MACx1Ce,EAAA,GCDAna,EAAAS,EAAAuF,EAAA,sBAAA6Q,IAAA7W,EAAAS,EAAAuF,EAAA,sBAAAmU,8DCAA,IAAAtD,EAAA,WAA0B,IAAAC,EAAA7T,KAAa8T,EAAAD,EAAAE,eAA0BC,EAAAH,EAAAI,MAAAD,IAAAF,EAAwB,YAAApL,IAAAmL,EAAAuU,iBAAApU,EAAA,eAA8DE,MAAA,CAAO7C,QAAAwC,EAAAxC,QAAA9M,KAAAsP,EAAAvT,EAAA,KAAAkE,IAAAqP,EAAAtT,EAAA,MAA6D6T,GAAA,CAAKC,MAAAR,EAAAQ,QAAmB,CAAAR,EAAAktC,YAAAnlD,OAAA,EAAAoY,EAAA,MAAAH,EAAAmB,GAAA,mBAAAhB,EAAA,KAAAH,EAAAgC,GAAAhC,EAAAktC,YAAA,SAAAxuC,GAAmH,OAAAyB,EAAA,MAAgBxV,IAAA+T,EAAA9U,KAAA6Y,MAAA,CAAAzC,EAAAuU,iBAAA3qB,OAAA8U,EAAA9U,KAAA,CAAmEquB,mBAAA,WAA6B,IAAI1X,GAAA,CAAO1J,MAAA,SAAA4J,GAAyBT,EAAAmtC,SAAAzuC,EAAA9U,SAA2B,CAAAoW,EAAAmB,GAAAnB,EAAAqC,GAAA3D,EAAA9U,cAA+BoW,EAAAsC,KAAAnC,EAAA,MAAuBI,GAAA,CAAI1J,MAAAmJ,EAAAotC,aAAwB,CAAAptC,EAAAmB,GAAA,kBAAAhB,EAAA,MAAoCI,GAAA,CAAI1J,MAAAmJ,EAAAqtC,cAAyB,CAAArtC,EAAAmB,GAAA,mBAAAhB,EAAA,MAAqCI,GAAA,CAAI1J,MAAAmJ,EAAA0U,gBAA2B,CAAA1U,EAAAmB,GAAAnB,EAAAqC,GAAArC,EAAAstC,qBAAA,iBAAAntC,EAAA,MAAmEI,GAAA,CAAI1J,MAAAmJ,EAAA+sC,iBAA4B,CAAA/sC,EAAAmB,GAAA,uBAAAnB,EAAAsC,MAC/0Be,EAAA,GCDAna,EAAAS,EAAAuF,EAAA,sBAAA6Q,IAAA7W,EAAAS,EAAAuF,EAAA,sBAAAmU,+KCsDAkqB,EAAAt9B,EAAAC,gBAAAhH,EAAA,SACAiH,EAAAF,EAAAC,gBAAAhH,EAAA,SACAkH,EAAAH,EAAAC,gBAAAhH,EAAA,SAGA6K,EAAA7K,EAAA,QAEAkH,EAAAI,QAAU+8C,cAAc,CAAC,qBAGzB,IAAqBC,EAArB,cAAuCr9C,EAAAK,QADvC9E,kCAEIS,KAAAovB,MAAQ,GACRpvB,KAAA+0C,OAAS,GACT/0C,KAAA+iC,MAAQ,GAER/iC,KAAAk1C,eAAiB,GAEjB31C,iBAAiBqM,EAAWC,EAAaC,GACrCs1B,EAAA/8B,QACKvG,IAAI,cACJqiC,KAAMuC,IACH52B,EAAMw1C,IACFA,EAAGlyB,MAAQsT,EAAStnC,KAAKg0B,MACzBkyB,EAAGvM,OAASrS,EAAStnC,KAAK25C,WAGjCjS,MAAOye,IACJz1C,EAAMw1C,IACFA,EAAGve,MAAQwe,EAAI3N,YAK/Br0C,WAAWiK,GACP43B,EAAA/8B,QACKm9C,KAAK,aAAc,CAChB/jD,KAAMuC,KAAKk1C,iBAEd/U,KAAMuC,IACH1iC,KAAKyhD,QAAQ3lD,cAAc8L,EAAAy6B,UAAU1kB,YAAY3d,KAAKk1C,oBAEzDpS,MAAOye,IACJvhD,KAAK+iC,MAAQwe,EAAI3N,YAhCZyN,EAASv9C,EAAAiC,WAAA,CAD7B9B,EAAAI,SACoBg9C,kDChErBtkD,EAAAgB,EAAAgF,GAAA,IAAA2+C,EAAA3kD,EAAA,QAAA4kD,EAAA5kD,EAAA,gBAAAmG,KAAAy+C,EAAA,YAAAz+C,GAAA,SAAA1E,GAAAzB,EAAAS,EAAAuF,EAAAvE,EAAA,kBAAAmjD,EAAAnjD,KAAA,CAAA0E,GAAAnG,EAAA,YAAAoG,EAAApG,EAAA,QAQAqG,EAAgBrH,OAAAoH,EAAA,KAAApH,CACd4lD,EAAA,WACAD,EAAA,KACAA,EAAA,MACF,EACA,KACA,WACA,MAIAt+C,EAAAC,QAAAC,OAAA,cACeP,EAAA,WAAAK,6CCpBfrG,EAAAgB,EAAAgF,GAAA,IAAA6+C,EAAA7kD,EAAA,QAAA8kD,EAAA9kD,EAAA2B,EAAAkjD,GAAA,QAAA1+C,KAAA0+C,EAAA,YAAA1+C,GAAA,SAAA1E,GAAAzB,EAAAS,EAAAuF,EAAAvE,EAAA,kBAAAojD,EAAApjD,KAAA,CAAA0E,GAAwXH,EAAA,WAAA8+C,EAAG,qCCA3X,IAAAjuC,EAAA,WAA0B,IAAAC,EAAA7T,KAAa8T,EAAAD,EAAAE,eAA0BC,EAAAH,EAAAI,MAAAD,IAAAF,EAAwB,OAAAE,EAAA,eAAyBE,MAAA,CAAO7C,QAAAwC,EAAAxC,QAAA9M,KAAAsP,EAAAtP,KAAA,KAAAC,IAAAqP,EAAArP,IAAA,MAAkE4P,GAAA,CAAKC,MAAAR,EAAAQ,QAAmB,CAAAL,EAAA,MAAWI,GAAA,CAAI1J,MAAAmJ,EAAAiuC,SAAoB,CAAAjuC,EAAAmB,GAAA,YAAAhB,EAAA,MAA8BI,GAAA,CAAI1J,MAAAmJ,EAAAxJ,SAAoB,CAAAwJ,EAAAmB,GAAA,eAC5SkC,EAAA,GCDAna,EAAAS,EAAAuF,EAAA,sBAAA6Q,IAAA7W,EAAAS,EAAAuF,EAAA,sBAAAmU,uCCAA,IAAA6qC,EAAAhlD,EAAA,QAAAilD,EAAAjlD,EAAA2B,EAAAqjD,GAAogBC,EAAG,4DCAvgBjlD,EAAAgB,EAAAgF,GAAA,IAAAk/C,EAAAllD,EAAA,QAAAmlD,EAAAnlD,EAAA2B,EAAAujD,GAAA,QAAA/+C,KAAA++C,EAAA,YAAA/+C,GAAA,SAAA1E,GAAAzB,EAAAS,EAAAuF,EAAAvE,EAAA,kBAAAyjD,EAAAzjD,KAAA,CAAA0E,GAAqVH,EAAA,WAAAm/C,EAAG,wGCAxVl+C,EAAAF,EAAAC,gBAAAhH,EAAA,SACaI,EAAAsrB,SAAW,IAAIzkB,EAAAK,2CCD5BtH,EAAAgB,EAAAgF,GAAA,IAAAo/C,EAAAplD,EAAA,QAAAqlD,EAAArlD,EAAA2B,EAAAyjD,GAAA,QAAAj/C,KAAAi/C,EAAA,YAAAj/C,GAAA,SAAA1E,GAAAzB,EAAAS,EAAAuF,EAAAvE,EAAA,kBAAA2jD,EAAA3jD,KAAA,CAAA0E,GAAkVH,EAAA,WAAAq/C,EAAG,6GCCrV,MAAA7wB,EAAAx0B,EAAA,QACA6K,EAAA7K,EAAA,QACAqC,EAAArC,EAAA,QACA8K,EAAA9K,EAAA,QAEA,MAAauV,UAAaif,EAAAM,SAEtBtyB,YAAYskC,EAAsB7wB,EAAWE,EAAWtT,EAAqBC,EAAuBC,GAChGC,MAAM8jC,EAAS7wB,EAAGE,EAAGtT,EAAYC,EAAcC,GAFnDE,KAAAC,KAAO,OAIPV,SACI,OAAOQ,MAAMI,cAEjBZ,KAAKkB,GACDV,MAAMW,KAAKD,GACa,QAApBT,KAAKJ,WAAsBa,EAAIE,UAAYkH,EAAAinB,eAC1CruB,EAAIE,UAAYX,KAAKJ,WAC1B,MAAMk4C,EAAIlwC,EAAA0J,UAAU2B,WACd4J,EAAMzd,EAAA0B,IAAId,KAAKK,UACrBI,EAAIsuB,SAASlS,EAAIvc,EAAGuc,EAAItc,EAAGP,KAAKgT,EAAI8kC,EAAG93C,KAAKkT,EAAI4kC,GACtB,qBAAtB93C,KAAKH,eACLY,EAAIwM,YAAcjN,KAAKH,aACvBY,EAAI4oB,UAAY,EAChB5oB,EAAIic,WAAWG,EAAIvc,EAAGuc,EAAItc,EAAGP,KAAKgT,EAAI8kC,EAAG93C,KAAKkT,EAAI4kC,KAlB9D36C,EAAAmV,iECNA,IAAA+vC,EAAAtlD,EAAA,QAAAulD,EAAAvlD,EAAA2B,EAAA2jD,GAAgeC,EAAG,qCCAnevlD,EAAAgB,EAAAgF,GAAA,IAAAw/C,EAAAxlD,EAAA,QAAAylD,EAAAzlD,EAAA2B,EAAA6jD,GAAA,QAAAr/C,KAAAq/C,EAAA,YAAAr/C,GAAA,SAAA1E,GAAAzB,EAAAS,EAAAuF,EAAAvE,EAAA,kBAAA+jD,EAAA/jD,KAAA,CAAA0E,GAAkXH,EAAA,WAAAy/C,EAAG,qCCArXzlD,EAAAgB,EAAAgF,GAAA,IAAA0/C,EAAA1lD,EAAA,QAAA2lD,EAAA3lD,EAAA2B,EAAA+jD,GAAA,QAAAv/C,KAAAu/C,EAAA,YAAAv/C,GAAA,SAAA1E,GAAAzB,EAAAS,EAAAuF,EAAAvE,EAAA,kBAAAikD,EAAAjkD,KAAA,CAAA0E,GAAyXH,EAAA,WAAA2/C,EAAG,sFCA5X,MAAA7wC,EAAA9U,EAAA,QACA8rB,EAAA9rB,EAAA,QACAuP,EAAAvP,EAAA,QACAqvB,EAAArvB,EAAA,QACA6K,EAAA7K,EAAA,QACAqC,EAAArC,EAAA,QACAsvB,EAAAtvB,EAAA,QAEA,MAAa4lD,UAAwB95B,EAAAE,MAArCxpB,kCACIS,KAAAusB,eAAyB,EAEzBhtB,OACI,IAAKS,KAAKyO,MAAO,CAEb,MAAMhO,EAAMT,KAAKS,IAEjB,IAAKmH,EAAA0J,UAAUqd,QAAUvC,EAAAW,SAAS61B,cAG9B,OAFAniD,EAAI6N,UAAU,EAAG,EAAGtO,KAAKyB,OAAOQ,MAAOjC,KAAKyB,OAAOqR,aACnD9S,KAAKyO,OAAQ,GAIjBhO,EAAI6N,UAAU,EAAG,EAAGtO,KAAKyB,OAAOQ,MAAOjC,KAAKyB,OAAOqR,QAEnD,MAAMma,EAAoBxsB,EAAImZ,yBAE9BnZ,EAAIE,UAAY,mBAIXiH,EAAA0J,UAAUC,OAAOxR,MAAMW,MAAMkH,EAAA0J,UAAU+b,SAG5C,MAAMw1B,EAAYpiD,EAAIgB,OAAOQ,MAAQxB,EAAIgB,OAAOqR,OAEhD,IAAK,MAAMgwC,KAAWl7C,EAAA0J,UAAUuM,aAAc,CAC1C,MAAM9F,EAAQzL,EAAAO,aAAaiW,QAAQhlB,IAAIglD,GACvC,QAAcp6C,IAAVqP,EAAqB,SACzB,MAAMrH,EAASqH,EAAMrH,SACf6c,EAAUnuB,EAAA0B,IAAI4P,GACpB,GAA6B,QAAzB9I,EAAA0J,UAAUiR,WAAsB,CAChC9hB,EAAIuM,YACJ,IAAI8gB,GAAgB,EAEpB,IAAK,IAAInuB,EAAQ,EAAGA,EAAQ,EAAIuC,KAAK0N,GAAIjQ,GAAUysB,EAAAW,SAASkB,WAAa,EAAI,IAAO/rB,KAAK0N,GAAI,CACzF,MAAMue,EAAMjsB,KAAKisB,IAAIxuB,GACfyuB,EAAMlsB,KAAKksB,IAAIzuB,GAEf0uB,EAAW,IAAIxc,EAAA6N,IAAIhP,EAAQ,IAAImB,EAAA8N,OAAOwO,EAAKC,IAC3CE,EAAY1mB,EAAA0J,UAAUid,GAAGC,UAAUH,GAGpCC,EAAUpO,MAWO,IAAlB4N,IACArtB,EAAIkP,IAAI4d,EAAQjtB,EAAGitB,EAAQhtB,EAAGsiD,EAAW/0B,EAAcnuB,GACvDmuB,GAAgB,GAEpBrtB,EAAI6M,OAAOlO,EAAAgO,KAAKkhB,EAAUE,UAAUluB,GAAIlB,EAAAiO,KAAKihB,EAAUE,UAAUjuB,MAbvC,IAAlButB,IAEArtB,EAAI6M,OAAOigB,EAAQjtB,EAAIuiD,EAAY10B,EAAKZ,EAAQhtB,EAAIsiD,EAAYz0B,GAEhEN,EAAenuB,IAaL,IAAlBmuB,EAAqBrtB,EAAIkP,IAAI4d,EAAQjtB,EAAGitB,EAAQhtB,EAAGsiD,EAAW/0B,EAAc,EAAI5rB,KAAK0N,IACpFnP,EAAI8M,YACT9M,EAAIoP,WACD,CACO,CAEN,MAAMmN,EAAWvc,EAAIwc,qBACjBsQ,EAAQjtB,EACRitB,EAAQhtB,EACRnB,EAAA2d,KAAKnV,EAAA0J,UAAUuhC,gBACftlB,EAAQjtB,EACRitB,EAAQhtB,EACRnB,EAAA2d,KAAKnV,EAAA0J,UAAUwhC,iBAEnB91B,EAASG,aAAa,EAAG,oBACzBH,EAASG,aAAa,EAAG,oBACzB1c,EAAIE,UAAYqc,EAIpB,IACI,MAAMtQ,EAAU2f,EAAAoC,kBAAkB1W,EAAMrH,SAAU,UAClDjQ,EAAIuM,YACJvM,EAAI0M,OAAO/N,EAAAgO,KAAKV,EAAQ,GAAG,IAAKtN,EAAAiO,KAAKX,EAAQ,GAAG,KAChD,IAAK,MAAMnL,KAASmL,EAASjM,EAAI6M,OAAOlO,EAAAgO,KAAK7L,EAAM,IAAKnC,EAAAiO,KAAK9L,EAAM,KACnEd,EAAI8M,YACJ9M,EAAIoP,OACN,MAAAkzC,MAMNn7C,EAAA0J,UAAUC,OAAOxR,MAAMW,MAAMkH,EAAA0J,UAAU+b,SAE3C5sB,EAAImZ,yBAA2BqT,IAlG3C9vB,EAAAwlD,sGCRA,MAAAh7C,EAAA5K,EAAA,QAEA4qB,EAAA5qB,EAAA,QACAuP,EAAAvP,EAAA,QAEA8K,EAAA9K,EAAA,QACA6K,EAAA7K,EAAA,QACAqC,EAAArC,EAAA,QAEA,MAAagsB,EAwBTxpB,YAAYkC,EAA2BhE,GAjBvCuC,KAAAioB,YAAsB,EACtBjoB,KAAAkoB,gBAA0B,EAC1BloB,KAAAusB,eAAyB,EAGzBvsB,KAAAyO,OAAiB,EAGjBzO,KAAAyd,OAAkB,GAGlBzd,KAAAmgB,UAAqB,GAGrBngB,KAAAgjD,eAAiB,UACjBhjD,KAAAijD,eAAiB,EAGbjjD,KAAKyB,OAASA,EACdzB,KAAKvC,KAAOA,EACZuC,KAAKiC,MAAQR,EAAOQ,MACpBjC,KAAK8S,OAASrR,EAAOqR,OACrB9S,KAAKS,IAAMgB,EAAOmrB,WAAW,MAGjCrtB,WAAWmb,GACP1a,KAAKyO,OAAQ,EACRiM,GACDpO,EAAAO,aAAaq2C,kBAIrB3jD,SAASkY,EAAc6F,EAAe6D,EAAqBhO,GAAa,QAClDzK,IAAdyY,IAAyBA,GAAY,GACzC1J,EAAMlF,MAAQvS,KAAKvC,KACnBuC,KAAKyd,OAAO3hB,KAAK2b,GACjBnL,EAAAO,aAAaiW,QAAQka,IAAIvlB,EAAM3X,KAAM2X,GACrCA,EAAMgnC,mBAAmBtrC,GACzBsE,EAAMinC,iBAAiBjnC,EAAM+B,oBAAqBrG,GAC9CsE,EAAMmE,QAAQhU,EAAA0J,UAAUqM,WAAalG,EAAMgC,SAAS7R,EAAA0J,UAAUuK,YAAY/f,KAAK2b,EAAM3X,MACrF2X,EAAMkC,WAAW/d,QAAQgM,EAAA0J,UAAU2+B,YAAYn0C,KAAK2b,EAAM3X,MAC1Dwd,GAAM3V,EAAAf,OAAOqC,KAAK,YAAa,CAAEwO,MAAOA,EAAMwJ,SAAUE,cACxDhO,GAAYnT,KAAKmT,YAAYmK,GAGrC/d,UAAUke,GACN,IAAK,MAAM0lC,KAAe1lC,EAAQ,CAC9B,MAAMhG,EAAQ5P,EAAA2P,oBAAoB2rC,GAClC,QAAcz6C,IAAV+O,EAEA,YADApI,QAAQC,+BAA+B6zC,EAAYxrC,4BAGvD3X,KAAK0S,SAAS+E,GAAO,GAAO,GAAO,GAEvCzX,KAAKwhB,iBACLxhB,KAAKmT,YAAW,GAGpB5T,YAAYkY,EAAc6F,EAAe6D,QACnBzY,IAAdyY,IAAyBA,GAAY,GACzCnhB,KAAKyd,OAAO3gB,OAAOkD,KAAKyd,OAAOnU,QAAQmO,GAAQ,GAE3C6F,GAAM3V,EAAAf,OAAOqC,KAAK,eAAgB,CAAEwO,MAAOA,EAAMwJ,SAAUE,cAC/D,MAAMiiC,EAAMx7C,EAAA0J,UAAU8J,cAAcC,UAAUF,GAAMA,EAAG1D,QAAUA,EAAM3X,MACjEujD,EAAMz7C,EAAA0J,UAAUwJ,eAAeO,UAAUF,GAAMA,IAAO1D,EAAM3X,MAE5DwjD,EAAM17C,EAAA0J,UAAUoK,iBAAiBL,UAAUF,GAAMA,IAAO1D,EAAM3X,MAC9DyjD,EAAM37C,EAAA0J,UAAU2+B,YAAY50B,UAAUF,GAAMA,IAAO1D,EAAM3X,MAC3DsjD,GAAO,GAAGx7C,EAAA0J,UAAU8J,cAActe,OAAOsmD,EAAK,GAC9CC,GAAO,GAAGz7C,EAAA0J,UAAUwJ,eAAehe,OAAOumD,EAAK,GAC/CC,GAAO,GAAG17C,EAAA0J,UAAUoK,iBAAiB5e,OAAOwmD,EAAK,GACjDC,GAAO,GAAG37C,EAAA0J,UAAU2+B,YAAYnzC,OAAOymD,EAAK,GAEhD,MAAMC,EAAkB57C,EAAA0J,UAAU2+B,YAAY3mC,QAAQmO,EAAM3X,MACxD0jD,GAAmB,GAAG57C,EAAA0J,UAAU2+B,YAAYnzC,OAAO0mD,EAAiB,GAExE,MAAMC,EAAa77C,EAAA0J,UAAUuK,YAAYvS,QAAQmO,EAAM3X,MACnD2jD,GAAc,GAAG77C,EAAA0J,UAAUuK,YAAY/e,OAAO2mD,EAAY,GAE9Dn3C,EAAAO,aAAaiW,QAAQvZ,OAAOkO,EAAM3X,MAElC,MAAM8R,EAAQ5R,KAAKmgB,UAAU7W,QAAQmO,GACjC7F,GAAS,GAAG5R,KAAKmgB,UAAUrjB,OAAO8U,EAAO,GACzCyxC,GAAO,GAAGz7C,EAAA0J,UAAU0J,oBACpBsoC,GAAO,GAAG17C,EAAA0J,UAAUqK,sBACxB3b,KAAKmT,YAAYmK,GAGrB/d,QACIS,KAAKS,IAAI6N,UAAU,EAAG,EAAGtO,KAAKiC,MAAOjC,KAAK8S,QAG9CvT,iBACIS,KAAKmgB,UAAY,GACjBwH,EAAAc,SAASljB,MAAM,0BAA2B,MAG9ChG,KAAKypB,GACD,IAAKhpB,KAAKyO,MAAO,CACb,MAAMhO,EAAMT,KAAKS,IACXijD,EAAOjjD,EAAImZ,yBACjBoP,OAAsBtgB,IAAZsgB,GAA+BA,EAErCA,GAAShpB,KAAKmO,QAElB,MAAMukC,EAAQ1yC,KA8Bd,GAxBAA,KAAKyd,OAAOxC,QAAQxD,IACZA,EAAMpU,QAAQwpB,IAAI,aAAepV,EAAMpU,QAAQvF,IAAI,kBACvB4K,IAA5B4D,EAAAO,aAAaC,YACZ2K,EAAM9V,gBAAgB+wC,EAAMjxC,UACd,QAAfixC,EAAMj1C,MAAkBga,EAAM8B,mBAAqBjN,EAAAO,aAAaC,WAAYrP,OAASi1C,EAAMj1C,MAE/Fga,EAAMksC,UAAUljD,MAEpBT,KAAKyd,OAAOxC,QAAQxD,IACZA,EAAMpU,QAAQwpB,IAAI,aAAepV,EAAMpU,QAAQvF,IAAI,aAC3B,IAAxB2Z,EAAM1B,OAAOna,QAAgBgM,EAAA0J,UAAUsyC,eAEvCnsC,EAAM1B,OAAOna,QACbgM,EAAA0J,UAAUisB,aAAa3hC,SACtB6b,EAAM1B,OAAOyF,KAAKne,GAAKuK,EAAA0J,UAAUisB,aAAal0B,SAAShM,EAAEyC,aAG9B4I,IAA5B4D,EAAAO,aAAaC,YACZ2K,EAAM9V,gBAAgB+wC,EAAMjxC,UACd,QAAfixC,EAAMj1C,MAAkBga,EAAM8B,mBAAqBjN,EAAAO,aAAaC,WAAYrP,OAASi1C,EAAMj1C,MAE/Fga,EAAM/W,KAAKD,MAGO,MAAlBT,KAAKmgB,UAAmB,CACxB1f,EAAIE,UAAYX,KAAKgjD,eACrBviD,EAAIwM,YAAcjN,KAAKgjD,eACvBviD,EAAI4oB,UAAYrpB,KAAKijD,eACrB,MAAMnL,EAAIlwC,EAAA0J,UAAU2B,WACpBjT,KAAKmgB,UAAUlF,QAAQrS,IACnBnI,EAAImZ,yBAA2BhR,EAAIgR,yBACnC,MAAM0T,EAAK1kB,EAAIlH,iBAEfjB,EAAIic,WAAWtd,EAAAgO,KAAKkgB,EAAG3Q,QAAQrc,GAAIlB,EAAAiO,KAAKigB,EAAG3Q,QAAQpc,GAAI+sB,EAAGta,EAAI8kC,EAAGxqB,EAAGpa,EAAI4kC,GAExE,IAAK,MAAMj5C,KAAK+J,EAAIxI,OAChBK,EAAIuM,YACJvM,EAAIkP,IAAIvQ,EAAAgO,KAAKvO,EAAE,IAAKO,EAAAiO,KAAKxO,EAAE,IAAK,EAAG,EAAG,EAAIqD,KAAK0N,IAC/CnP,EAAIoP,OAERpP,EAAIuM,YACJvM,EAAI0M,OAAO/N,EAAAgO,KAAKxE,EAAIxI,OAAO,GAAG,IAAKhB,EAAAiO,KAAKzE,EAAIxI,OAAO,GAAG,KACtD,IAAK,IAAI1E,EAAI,EAAGA,GAAKkN,EAAIxI,OAAOxE,OAAQF,IAAK,CACzC,MAAMk+C,EAAShxC,EAAIxI,OAAO1E,EAAIkN,EAAIxI,OAAOxE,QACzC6E,EAAI6M,OAAOlO,EAAAgO,KAAKwsC,EAAO,IAAKx6C,EAAAiO,KAAKusC,EAAO,KAE5Cn5C,EAAI+M,WAGZ/M,EAAImZ,yBAA2B8pC,EAC/B1jD,KAAKyO,OAAQ,GAIrBlP,eAAekY,EAAcosC,EAA0BvmC,GACnD,MAAMwmC,EAAS9jD,KAAKyd,OAAOnU,QAAQmO,GAC/BqsC,IAAWD,IACf7jD,KAAKyd,OAAO3gB,OAAOgnD,EAAQ,GAC3B9jD,KAAKyd,OAAO3gB,OAAO+mD,EAAkB,EAAGpsC,GACpC6F,GAAM3V,EAAAf,OAAOqC,KAAK,kBAAmB,CAAEwO,MAAOA,EAAMwJ,SAAUrP,MAAOiyC,IACzE7jD,KAAKmT,YAAW,KAlLxBhW,EAAA4rB,4FCTA,MAAAnhB,EAAA7K,EAAA,QACAqC,EAAArC,EAAA,QACA8K,EAAA9K,EAAA,QAEA,SAAgBg6C,EAAWzrC,GACvB,IAAKA,EAAElC,SAAyBkC,EAAElC,OAAQymC,SAA+C,WAAtBvkC,EAAElC,OAAQymC,QAAsB,OACnG,IAAI91B,EACJA,GAA+B,EAAvB7X,KAAK43C,KAAKxuC,EAAEy4C,QACpBn8C,EAAA0J,UAAUklC,WAAW,CAAEC,eAAgB7uC,EAAA0J,UAAUma,YAAc,GAAM1R,EAAO28B,aAAct3C,EAAAuT,IAAI9K,EAAAkY,SAASzU,MAJ3GnO,EAAA45C,gDCJAh6C,EAAAgB,EAAAgF,GAAA,IAAAihD,EAAAjnD,EAAA,QAAAknD,EAAAlnD,EAAA,gBAAAmG,KAAA+gD,EAAA,YAAA/gD,GAAA,SAAA1E,GAAAzB,EAAAS,EAAAuF,EAAAvE,EAAA,kBAAAylD,EAAAzlD,KAAA,CAAA0E,GAAAnG,EAAA,QAAAA,EAAA,YAAAyJ,EAAAzJ,EAAA,QASAqG,EAAgBrH,OAAAyK,EAAA,KAAAzK,CACdkoD,EAAA,WACAD,EAAA,KACAA,EAAA,MACF,EACA,KACA,WACA,MAIA5gD,EAAAC,QAAAC,OAAA,aACeP,EAAA,WAAAK,8FCrBf,MAAAyO,EAAA9U,EAAA,QACAmC,EAAAnC,EAAA,QACAoC,EAAApC,EAAA,QACA6K,EAAA7K,EAAA,QACA8K,EAAA9K,EAAA,QACAqC,EAAArC,EAAA,QAEA,MAAsB80B,UAAiB1yB,EAAAG,MAGnCC,YAAYskC,EAAsB7wB,EAAWE,EAAWtT,EAAqBC,EAAuBC,GAChGC,MAAM8jC,EAASjkC,EAAYC,EAAcC,GACzCE,KAAKgT,EAAIA,EACThT,KAAKkT,EAAIA,EAEb3T,cACI,OAAOxD,OAAOmE,OAAOH,MAAMI,cAAe,CACtC8B,MAAOjC,KAAKgT,EACZF,OAAQ9S,KAAKkT,IAGrB3T,iBACI,OAAO,IAAIL,EAAAsB,aAAaR,KAAKK,SAAUL,KAAKgT,EAAGhT,KAAKkT,GAGxD9S,aACI,GAAe,IAAXJ,KAAKgT,GAAsB,IAAXhT,KAAKkT,EAAS,MAAO,CAAC,CAAClT,KAAKK,SAASC,EAAGN,KAAKK,SAASE,IAE1E,MAAM2jD,EAAWlkD,KAAKK,SAAS+J,IAAI,IAAIyH,EAAA8N,OAAO,EAAG3f,KAAKkT,IAChDohC,EAAWt0C,KAAKK,SAAS+J,IAAI,IAAIyH,EAAA8N,OAAO3f,KAAKgT,EAAGhT,KAAKkT,IACrDixC,EAAUnkD,KAAKK,SAAS+J,IAAI,IAAIyH,EAAA8N,OAAO3f,KAAKgT,EAAG,IACrD,MAAO,CACH,CAAChT,KAAKK,SAASC,EAAGN,KAAKK,SAASE,GAChC,CAAC2jD,EAAS5jD,EAAG4jD,EAAS3jD,GACtB,CAAC+zC,EAASh0C,EAAGg0C,EAAS/zC,GACtB,CAAC4jD,EAAQ7jD,EAAG6jD,EAAQ5jD,IAI5BhB,SAASgC,GACL,OACIvB,KAAKK,SAASC,GAAKiB,EAAMjB,GACzBN,KAAKK,SAASC,EAAIN,KAAKgT,GAAKzR,EAAMjB,GAClCN,KAAKK,SAASE,GAAKgB,EAAMhB,GACzBP,KAAKK,SAASE,EAAIP,KAAKkT,GAAK3R,EAAMhB,EAK1ChB,OAAOiC,GACH,QAAoBkH,IAAhBlH,EAA2B,OAAOxB,KAAKK,SAAS+J,IAAI,IAAIyH,EAAA8N,OAAO3f,KAAKgT,EAAI,EAAGhT,KAAKkT,EAAI,IACxFlT,KAAKK,SAAW,IAAIwR,EAAAM,YAAY3Q,EAAYlB,EAAIN,KAAKgT,EAAI,EAAGxR,EAAYjB,EAAIP,KAAKkT,EAAI,GAGzF3T,gBAAgBkC,GACZ,GAAI1B,MAAM4B,gBAAgBF,GAAS,OAAO,EAC1C,MAAMqzC,IACF11C,EAAAgO,KAAKpN,KAAKK,SAASC,GAAKmB,EAAOQ,OAC/B7C,EAAAiO,KAAKrN,KAAKK,SAASE,GAAKkB,EAAOqR,QAC/B1T,EAAAgO,KAAKpN,KAAKK,SAASC,EAAIN,KAAKgT,GAAK,GACjC5T,EAAAiO,KAAKrN,KAAKK,SAASE,EAAIP,KAAKkT,GAAK,GAErC,QAAI4hC,EAGRv1C,aACI,MAAM2pB,EAAKthB,EAAA0J,UAAU6X,SACfzY,EAAS1Q,KAAK0Q,SACd0zC,EAAK1zC,EAAOpQ,EACZ+jD,EAAK3zC,EAAOnQ,EAElB,IAAI2wB,EACAC,EAGAD,EADClxB,KAAKgT,EAAIkW,EAAM,IAAM,EACZhnB,KAAKkvB,MAAMgzB,EAAKl7B,GAAMA,EAAKlpB,KAAKgT,EAAI,GAEnC9Q,KAAKkvB,OAAOgzB,EAAKl7B,EAAK,GAAKA,GAAM,IAASA,EAAKlpB,KAAKgT,EAAI,EAGnEme,EADCnxB,KAAKkT,EAAIgW,EAAM,IAAM,EACZhnB,KAAKkvB,MAAMizB,EAAKn7B,GAAMA,EAAKlpB,KAAKkT,EAAI,GAEnChR,KAAKkvB,OAAOizB,EAAKn7B,EAAK,GAAKA,GAAM,IAASA,EAAKlpB,KAAKkT,EAAI,EAGvE,MAAM6G,EAAQlS,EAAAmZ,eAAe,IAAInP,EAAA8N,OAAOuR,EAAUlxB,KAAKK,SAASC,EAAG6wB,EAAUnxB,KAAKK,SAASE,GAAIP,MAC/FA,KAAKK,SAAWL,KAAKK,SAAS+J,IAAI2P,GAElC/Z,KAAKmT,YAAW,GAEpB5T,eACI,MAAM2pB,EAAKthB,EAAA0J,UAAU6X,SACrBnpB,KAAKK,SAAW,IAAIwR,EAAAM,YAAYjQ,KAAKkvB,MAAMpxB,KAAKK,SAASC,EAAI4oB,GAAMA,EAAIhnB,KAAKkvB,MAAMpxB,KAAKK,SAASE,EAAI2oB,GAAMA,GAC1GlpB,KAAKgT,EAAI9Q,KAAKC,IAAID,KAAKkvB,MAAMpxB,KAAKgT,EAAIkW,GAAMA,EAAIA,GAChDlpB,KAAKkT,EAAIhR,KAAKC,IAAID,KAAKkvB,MAAMpxB,KAAKkT,EAAIgW,GAAMA,EAAIA,GAChDlpB,KAAKmT,YAAW,GAEpB5T,OAAOqC,EAAqBL,GACxB,MAAMu2C,EAAIlwC,EAAA0J,UAAU2B,WACpB,OAAQrR,GACJ,KAAK,EACD5B,KAAKgT,EAAI5T,EAAAgO,KAAKpN,KAAKK,SAASC,GAAKN,KAAKgT,EAAI8kC,EAAIv2C,EAAMjB,EACpDN,KAAKkT,EAAI9T,EAAAiO,KAAKrN,KAAKK,SAASE,GAAKP,KAAKkT,EAAI4kC,EAAIv2C,EAAMhB,EACpDP,KAAKK,SAAWjB,EAAAuT,IAAIpR,GACpB,MAEJ,KAAK,EACDvB,KAAKgT,EAAI5T,EAAAgO,KAAKpN,KAAKK,SAASC,GAAKN,KAAKgT,EAAI8kC,EAAIv2C,EAAMjB,EACpDN,KAAKkT,EAAI3R,EAAMhB,EAAInB,EAAAiO,KAAKrN,KAAKK,SAASE,GACtCP,KAAKK,SAAW,IAAIwR,EAAAM,YAAY/S,EAAAstC,KAAKnrC,EAAMjB,GAAIN,KAAKK,SAASE,GAC7D,MAEJ,KAAK,EACDP,KAAKgT,EAAIzR,EAAMjB,EAAIlB,EAAAgO,KAAKpN,KAAKK,SAASC,GACtCN,KAAKkT,EAAI3R,EAAMhB,EAAInB,EAAAiO,KAAKrN,KAAKK,SAASE,GACtC,MAEJ,KAAK,EACDP,KAAKgT,EAAIzR,EAAMjB,EAAIlB,EAAAgO,KAAKpN,KAAKK,SAASC,GACtCN,KAAKkT,EAAI9T,EAAAiO,KAAKrN,KAAKK,SAASE,GAAKP,KAAKkT,EAAI4kC,EAAIv2C,EAAMhB,EACpDP,KAAKK,SAAW,IAAIwR,EAAAM,YAAYnS,KAAKK,SAASC,EAAGlB,EAAAutC,KAAKprC,EAAMhB,IAC5D,MAIRP,KAAKgT,GAAK8kC,EACV93C,KAAKkT,GAAK4kC,EAEN93C,KAAKgT,EAAI,IACThT,KAAKK,SAAWL,KAAKK,SAAS+J,IAAI,IAAIyH,EAAA8N,OAAO3f,KAAKgT,EAAG,IACrDhT,KAAKgT,EAAI9Q,KAAKgY,IAAIla,KAAKgT,IAEvBhT,KAAKkT,EAAI,IACTlT,KAAKK,SAAWL,KAAKK,SAAS+J,IAAI,IAAIyH,EAAA8N,OAAO,EAAG3f,KAAKkT,IACrDlT,KAAKkT,EAAIhR,KAAKgY,IAAIla,KAAKkT,KA/HnC/V,EAAA00B,8CCPA90B,EAAAgB,EAAAgF,GAAA,IAAAuhD,EAAAvnD,EAAA,QAAAwnD,EAAAxnD,EAAA,gBAAAmG,KAAAqhD,EAAA,YAAArhD,GAAA,SAAA1E,GAAAzB,EAAAS,EAAAuF,EAAAvE,EAAA,kBAAA+lD,EAAA/lD,KAAA,CAAA0E,GAAA,IAAA8uB,EAAAj1B,EAAA,QAOAqG,EAAgBrH,OAAAi2B,EAAA,KAAAj2B,CACdwoD,EAAA,WACAD,EAAA,KACAA,EAAA,MACF,EACA,KACA,KACA,MAIAlhD,EAAAC,QAAAC,OAAA,aACeP,EAAA,WAAAK,2FCnBfrG,EAAAgB,EAAAgF,GAAA,IAAAyhD,EAAAznD,EAAA,QAAA0nD,EAAA1nD,EAAA,gBAAAmG,KAAAuhD,EAAA,YAAAvhD,GAAA,SAAA1E,GAAAzB,EAAAS,EAAAuF,EAAAvE,EAAA,kBAAAimD,EAAAjmD,KAAA,CAAA0E,GAAAnG,EAAA,YAAAoG,EAAApG,EAAA,QAQAqG,EAAgBrH,OAAAoH,EAAA,KAAApH,CACd0oD,EAAA,WACAD,EAAA,KACAA,EAAA,MACF,EACA,KACA,WACA,MAIAphD,EAAAC,QAAAC,OAAA,WACeP,EAAA,WAAAK,6CCpBf,IAAAshD,EAAA3nD,EAAA,QAAA4nD,EAAA5nD,EAAA2B,EAAAgmD,GAAihBC,EAAG,qCCAphB,IAAA/wC,EAAA,WAA0B,IAAAC,EAAA7T,KAAa8T,EAAAD,EAAAE,eAA0BC,EAAAH,EAAAI,MAAAD,IAAAF,EAAwB,OAAAE,EAAA,OAAiBE,MAAA,CAAOwC,GAAA,iBAAqB,CAAA1C,EAAA,OAAYE,MAAA,CAAOwC,GAAA,aAAiB,CAAA7C,EAAAmB,GAAA,mBAAAhB,EAAA,OAAsCE,MAAA,CAAOwC,GAAA,SAAa,CAAA1C,EAAA,OAAYE,MAAA,CAAOwC,GAAA,UAActC,GAAA,CAAKwW,SAAA,SAAAtW,GAAoD,OAAxBA,EAAAqW,iBAAwB9W,EAAA+wC,SAAAtwC,IAA4BuW,KAAA,SAAAvW,GAAyBA,EAAAqW,iBAAwBrW,EAAAiC,kBAAyB1C,EAAAgxC,SAAAvwC,EAAAT,EAAAvL,kBAA0C,CAAA0L,EAAA,OAAYE,MAAA,CAAOwC,GAAA,gBAAoB,CAAA1C,EAAA,OAAAH,EAAAmB,GAAA,OAAAnB,EAAAgC,GAAAhC,EAAA,cAAA0mC,GAA0D,OAAAvmC,EAAA,OAAiBxV,IAAA+7C,GAAQ,CAAA1mC,EAAAmB,GAAAnB,EAAAqC,GAAArC,EAAAxL,MAAAvK,IAAAy8C,GAAA98C,YAA4C,GAAAuW,EAAA,OAAgBE,MAAA,CAAOwC,GAAA,cAAkB,CAAA1C,EAAA,SAAcE,MAAA,CAAOwC,GAAA,QAAAzW,KAAA,OAAA6kD,SAAA,GAAAC,OAAA,IAAqD3wC,GAAA,CAAKoK,OAAA,SAAAlK,GAA0BT,EAAAtJ,aAAeyJ,EAAA,OAAYE,MAAA,CAAOe,MAAA,iBAAwBb,GAAA,CAAK1J,MAAAmJ,EAAAmxC,kBAA6B,CAAAhxC,EAAA,KAAUU,YAAA,yBAAiCV,EAAA,OAAcE,MAAA,CAAOe,MAAA,gBAAuBb,GAAA,CAAK1J,MAAAmJ,EAAAoxC,gBAA2B,CAAAjxC,EAAA,KAAUU,YAAA,sBAA4BV,EAAA,OAAgBE,MAAA,CAAOwC,GAAA,aAAiB,CAAA7C,EAAA9L,KAAA,OAAAiM,EAAA,OAA8BU,YAAA,eAAAN,GAAA,CAA+B8wC,SAAA,SAAA5wC,GAA4BT,EAAAsxC,iBAAA,IAAwBv6B,SAAA,SAAAtW,GAAqD,OAAxBA,EAAAqW,iBAAwB9W,EAAA+wC,SAAAtwC,IAA4B8wC,UAAA,SAAA9wC,GAAsD,OAAxBA,EAAAqW,iBAAwB9W,EAAAwxC,UAAA/wC,IAA6BuW,KAAA,SAAAvW,GAAyBA,EAAAqW,iBAAwBrW,EAAAiC,kBAAyB1C,EAAAgxC,SAAAvwC,EAAAT,EAAArL,iBAAyC,CAAAwL,EAAA,KAAUU,YAAA,gBAAAQ,YAAA,CAAyCqJ,YAAA,UAAoBvK,EAAA,OAAYU,YAAA,SAAoB,CAAAb,EAAAmB,GAAA,UAAAnB,EAAAsC,KAAAtC,EAAAgC,GAAAhC,EAAA,iBAAArV,GAA+D,OAAAwV,EAAA,OAAiBxV,MAAAkW,YAAA,eAAA0B,MAAA,CAA0CkvC,iBAAAzxC,EAAAzL,SAAAiB,SAAA7K,IAA6C0V,MAAA,CAAQS,UAAA,QAAmBP,GAAA,CAAK1J,MAAA,SAAA4J,GAAyBT,EAAAyK,OAAAhK,EAAA9V,IAAwB0mD,SAAA,SAAA5wC,GAA6BT,EAAAsxC,gBAAA3mD,IAAyBksB,YAAA,SAAApW,GAAgCA,EAAAqW,iBAAwB9W,EAAAnP,MAAA6gD,GAAAtjC,KAAA3N,EAAA9V,IAA+BoW,UAAA,SAAAN,GAA8BT,EAAA2xC,UAAAlxC,EAAA9V,IAA2BosB,SAAA,SAAAtW,GAAqD,OAAxBA,EAAAqW,iBAAwB9W,EAAA+wC,SAAAtwC,IAA4B8wC,UAAA,SAAA9wC,GAAsD,OAAxBA,EAAAqW,iBAAwB9W,EAAAwxC,UAAA/wC,IAA6BuW,KAAA,SAAAvW,GAAyBA,EAAAqW,iBAAwBrW,EAAAiC,kBAAyB1C,EAAAgxC,SAAAvwC,EAAA9V,MAA4B,CAAAwV,EAAA,KAAUU,YAAA,gBAAAQ,YAAA,CAAyCqJ,YAAA,UAAoBvK,EAAA,OAAYU,YAAA,SAAoB,CAAAb,EAAAmB,GAAAnB,EAAAqC,GAAArC,EAAAxL,MAAAvK,IAAAU,GAAAf,aAA8CoW,EAAAgC,GAAAhC,EAAA,eAAA/J,GAAoC,OAAAkK,EAAA,OAAiBxV,IAAAsL,EAAA4K,YAAA,aAAA0B,MAAA,CAAyCkvC,iBAAAzxC,EAAAzL,SAAAiB,SAAAS,IAA8CoK,MAAA,CAAQS,UAAA,QAAmBP,GAAA,CAAK1J,MAAA,SAAA4J,GAAyBT,EAAAyK,OAAAhK,EAAAxK,IAAyB4gB,YAAA,SAAApW,GAAgCA,EAAAqW,iBAAwB9W,EAAAnP,MAAA6gD,GAAAtjC,KAAA3N,EAAAxK,IAAgC8K,UAAA,SAAAN,GAA8BT,EAAA2xC,UAAAlxC,EAAAxK,MAA8B,CAAAkK,EAAA,OAAYE,MAAA,CAAOyE,IAAA,kBAAA9E,EAAAxL,MAAAvK,IAAAgM,GAAAjB,UAAA5G,MAAA,QAAsE+R,EAAA,OAAYU,YAAA,SAAoB,CAAAb,EAAAmB,GAAAnB,EAAAqC,GAAArC,EAAAxL,MAAAvK,IAAAgM,GAAArM,cAA+C,KAAAoW,EAAA,kBAAAG,EAAA,OAA0CE,MAAA,CAAOwC,GAAA,kBAAsB,CAAA1C,EAAA,OAAYE,MAAA,CAAOwC,GAAA,uBAA2B,CAAA7C,EAAAmB,GAAAnB,EAAAqC,GAAArC,EAAAlL,kBAAAlL,SAAAuW,EAAA,OAAyDE,MAAA,CAAOyE,IAAA,kBAAA9E,EAAAlL,kBAAAE,eAA2DgL,EAAAsC,OAAAnC,EAAA,oBAAsCuB,IAAA,OAASvB,EAAA,UAAeuB,IAAA,WAAavB,EAAA,iBAAsBuB,IAAA,aAAc,IAC5uG2B,EAAA,GCDAna,EAAAS,EAAAuF,EAAA,sBAAA6Q,IAAA7W,EAAAS,EAAAuF,EAAA,sBAAAmU,0GCSAlT,EAAAF,EAAAC,gBAAAhH,EAAA,SACAkH,EAAAH,EAAAC,gBAAAhH,EAAA,SAEA2qB,EAAA5jB,EAAAC,gBAAAhH,EAAA,SAEA4K,EAAA5K,EAAA,QACA4qB,EAAA5qB,EAAA,QACA6K,EAAA7K,EAAA,QACAqC,EAAArC,EAAA,QAOA,IAAqBqlB,EAArB,cAA2Cpe,EAAAK,QAL3C9E,kCAMIS,KAAAqR,SAAU,EACVrR,KAAAM,EAAI,EACJN,KAAAO,EAAI,EAEJgR,YACI,OAAO3J,EAAA0J,UAAUC,MAGrBhS,KAAKiK,GACDxJ,KAAKqR,SAAU,EACfrR,KAAKM,EAAIkJ,EAAMse,MACf9nB,KAAKO,EAAIiJ,EAAMue,MACf/nB,KAAKiF,UAAU,IAAMjF,KAAKkF,UAAU,GAAGC,IAAIC,SAE/C7F,QACIS,KAAKqR,SAAU,EAEnB9R,eACSqI,EAAA0J,UAAUC,QACf5J,EAAAf,OAAOqC,KAAK,gBAAiB,CAAE3I,EAAGlB,EAAAstC,KAAK1sC,KAAKM,GAAIC,EAAGnB,EAAAutC,KAAK3sC,KAAKO,KAC7DP,KAAKqU,SAET9U,cACUS,KAAK+hB,QAAQA,QAAQrd,MAAM+gD,kBAAmBxjC,KAAKjiB,KAAKM,EAAGN,KAAKO,GACtEP,KAAKqU,QAET9U,iBACIooB,EAAAc,SAASljB,MAAM,mBACfvF,KAAKqU,UA7BQ+N,EAAate,EAAAiC,WAAA,CALjC9B,EAAAI,QAAU,CACP8B,WAAY,CACRuiB,YAAAhB,EAAArjB,YAGa+d,qHCxBrBgf,EAAAt9B,EAAAC,gBAAAhH,EAAA,SACAiH,EAAAF,EAAAC,gBAAAhH,EAAA,SACAkH,EAAAH,EAAAC,gBAAAhH,EAAA,SAGA6K,EAAA7K,EAAA,QAEAkH,EAAAI,QAAU+8C,cAAc,CAAC,qBAGzB,IAAqBsE,EAArB,cAAoC1hD,EAAAK,QAChC9E,iBAAiBqM,EAAWC,EAAaC,GACrCs1B,EAAA/8B,QAAMm9C,KAAK,eAAerhB,KAAK,KAC3Bv4B,EAAAy6B,UAAUM,kBAAiB,GAC3B/6B,EAAAy6B,UAAUO,YAAY,IACtB92B,EAAK,CAAE/D,KAAM,oBALJ29C,EAAM5hD,EAAAiC,WAAA,CAD1B9B,EAAAI,QAAU,KACUqhD,qHCVrB5+B,EAAA/pB,EAAA,QAEA6K,EAAA7K,EAAA,QASA,IAAM4oD,EAAN,cAAwB7+B,EAAAE,WADxBznB,kCAEIS,KAAAyiC,eAAgB,EAChBziC,KAAAsiC,aAAc,EACdtiC,KAAA2d,SAAW,GAGXpe,iBAAiB2iC,GACbliC,KAAKyiC,cAAgBP,EAIzB3iC,eAAeqmD,GACX5lD,KAAKsiC,YAAcsjB,EAIvBrmD,YAAYoe,GACR3d,KAAK2d,SAAWA,IAXpB7Z,EAAAiC,WAAA,CADC+gB,EAAAG,+CAMDnjB,EAAAiC,WAAA,CADC+gB,EAAAG,6CAMDnjB,EAAAiC,WAAA,CADC+gB,EAAAG,0CAfC0+B,EAAS7hD,EAAAiC,WAAA,CADd+gB,EAAAI,OAAO,CAAEC,SAAS,EAAMC,MAAOxf,EAAAyf,UAAW5pB,KAAM,UAC3CkoD,GAqBOxoD,EAAAklC,UAAYvb,EAAAS,UAAUo+B,yGChCnC3hD,EAAAF,EAAAC,gBAAAhH,EAAA,SAEA8oD,EAAA/hD,EAAAC,gBAAAhH,EAAA,SACA+oD,EAAA/oD,EAAA,QACA6K,EAAA7K,EAAA,QAEAiH,EAAAK,QAAI0hD,OAAOC,eAAgB,EAC3BhiD,EAAAK,QAAI0hD,OAAOE,UAAW,EACtBjiD,EAAAK,QAAI0hD,OAAOG,aAAc,EAEZ/oD,EAAAD,IAAM,IAAI8G,EAAAK,QAAI,CACvBw9B,OAAAikB,EAAAjkB,OACAza,MAAOxf,EAAAyf,UACPzT,OAAQV,GAAKA,EAAE2yC,EAAAxhD,WAChB8hD,OAAO,QAEJpnD,OAAQ7B,IAAMC,EAAAD,iICDpB8G,EAAAF,EAAAC,gBAAAhH,EAAA,SACAkH,EAAAH,EAAAC,gBAAAhH,EAAA,SAKA,IAAqB2rB,EAArB,cAAyC1kB,EAAAK,UAApBqkB,EAAW5kB,EAAAiC,WAAA,CAH/B9B,EAAAI,QAAU,CACP+hD,MAAO,CAAC,UAAW,OAAQ,UAEV19B,qHCrBrB0Y,EAAAt9B,EAAAC,gBAAAhH,EAAA,SACAiH,EAAAF,EAAAC,gBAAAhH,EAAA,SACAkH,EAAAH,EAAAC,gBAAAhH,EAAA,SAIA,IAAqBspD,EAArB,cAAwCriD,EAAAK,QACpC9E,iBAAiBqM,EAAWC,EAAaC,GACrCs1B,EAAA/8B,QAAMm9C,KAAK,cAAe,CACtB8E,KAAM16C,EAAG5E,OAAOs/C,OAEfnmB,KAAMuC,IACH52B,EAAK,CAAE/D,KAAM26B,EAAStnC,KAAKmrD,eAE9BzjB,MAAOC,IACJ1zB,QAAQ0zB,MAAM,yCACdj3B,EAAK,CAAE/D,KAAM,mBAVRs+C,EAAUviD,EAAAiC,WAAA,CAD9B9B,EAAAI,QAAU,CAAE89B,SAAU,MACFkkB,kDCNrBtpD,EAAAgB,EAAAgF,GAAA,IAAAyjD,EAAAzpD,EAAA,QAAA0pD,EAAA1pD,EAAA,gBAAAmG,KAAAujD,EAAA,YAAAvjD,GAAA,SAAA1E,GAAAzB,EAAAS,EAAAuF,EAAAvE,EAAA,kBAAAioD,EAAAjoD,KAAA,CAAA0E,GAAAnG,EAAA,YAAAoG,EAAApG,EAAA,QAQAqG,EAAgBrH,OAAAoH,EAAA,KAAApH,CACd0qD,EAAA,WACAD,EAAA,KACAA,EAAA,MACF,EACA,KACA,WACA,MAIApjD,EAAAC,QAAAC,OAAA,aACeP,EAAA,WAAAK,8FCnBf,MAAAwE,EAAA7K,EAAA,QAGA2pD,EAAA3pD,EAAA,QACAslB,EAAAtlB,EAAA,QACAwP,EAAAxP,EAAA,QACAyP,EAAAzP,EAAA,QAEA,SAAgB0xB,EAAkB0G,EAAgB/rB,EAA+Bu9C,QAC/Dj+C,IAAVi+C,IAAqBA,EAAQ/+C,EAAA0J,UAAUs1C,eAE3C,MAAMC,EAAW,CAAC1xB,EAAE70B,EAAG60B,EAAE50B,GACnBumD,EAAwB,GACxBziC,EAAWhC,EAAA2B,OAAO5a,GAAQ8a,OAAO2iC,EAAG,MAAMhqC,IAChD,OAAiB,OAAbwH,GACAhV,QAAQ0zB,MAAM,sBACP,KAGX+jB,EAAUhrD,KAAKuoB,EAASvV,SAAS,GAAIvN,OAChC8iB,EAASS,cAAc,IACxBiiC,EAAWF,EAAGxiC,EAASvV,SAAS,GAAIvN,MAAQ8iB,EAASvV,SAAS,GAAIvN,MAAQ8iB,EAAU,EAAGyiC,GAC3FA,EAAUhrD,KAAKuoB,EAASvV,SAAS,GAAIvN,OAChC8iB,EAASS,cAAc,IACxBiiC,EAAWF,EAAGxiC,EAASvV,SAAS,GAAIvN,MAAQ8iB,EAASvV,SAAS,GAAIvN,MAAQ8iB,EAAU,EAAGyiC,GAC3FA,EAAUhrD,KAAKuoB,EAASvV,SAAS,GAAIvN,OAChC8iB,EAASS,cAAc,IACxBiiC,EAAWF,EAAGxiC,EAASvV,SAAS,GAAIvN,MAAQ8iB,EAASvV,SAAS,GAAIvN,MAAQ8iB,EAAU,EAAGyiC,GAGvFH,GAAOD,EAAAj6C,YAAYq6C,EAAW,OAE3BA,GAGX,SAASC,EACL5xB,EACA5wB,EACAoB,EACAqhD,EACAp1C,EACAk1C,GAGA,MAAMG,EAAMD,EAAGviC,WAAW7S,GAEpBs1C,EAASD,EAAI1gB,OAAOygB,GACpBG,EAAS36C,EAAAuC,IAAIm4C,GACbE,EAAS56C,EAAA0C,GAAGg4C,GACZG,EAAMJ,EAAIn4C,SAASo4C,GACnBI,EAAML,EAAIn4C,SAASs4C,GACnBG,EAAMN,EAAIn4C,SAASq4C,GAEnBK,EAAW,CAACP,EAAKE,GACjBM,EAAW,CAACR,EAAKG,GAEjBM,EAAKl7C,EAAAuY,YAAYoQ,EAAGxvB,EAAO0hD,EAAI9lD,OAC/BomD,EAAKn7C,EAAAuY,YAAYoQ,EAAG5wB,EAAM8iD,EAAI9lD,OAmBpC,GAAImmD,IAAOn7C,EAAAyY,KAAK+lB,iBACZ,GAAIyc,EAAG,GAAG1iC,cAAc0iC,EAAG,IAEnB7hD,IAAU2hD,EAAI/lD,OAAQulD,EAAUhrD,KAAK8rD,EAAmBzyB,EAAGxvB,EAAO0hD,EAAI9lD,MAAQ+lD,EAAI/lD,QAClFomD,IAAOp7C,EAAAyY,KAAK+lB,kBAAkB+b,EAAUhrD,KAAK8rD,EAAmBzyB,EAAG5wB,EAAM8iD,EAAI9lD,MAAQ+lD,EAAI/lD,YAC1F,CACH,GAAIomD,IAAOp7C,EAAAyY,KAAK+lB,iBAAkB,OAAOgc,EAAW5xB,EAAG5wB,EAAMoB,EAAOshD,EAAKE,EAAQL,GAC5EC,EAAW5xB,EAAGkyB,EAAI9lD,MAAQoE,EAAOshD,EAAKE,EAAQL,GAQ3D,GAJIY,IAAOn7C,EAAAyY,KAAK6iC,WAAaF,IAAOp7C,EAAAyY,KAAK+lB,kBACrC+b,EAAUhrD,KAAKurD,EAAI9lD,OAGnBomD,IAAOp7C,EAAAyY,KAAK6iC,UACZ,OAAIJ,EAAG,GAAG3iC,cAAc2iC,EAAG,KACnBC,IAAOn7C,EAAAyY,KAAK6iC,WACZf,EAAUhrD,KAAK8rD,EAAmBzyB,EAAGxvB,EAAO0hD,EAAI9lD,MAAQgmD,EAAIhmD,aAE5DgD,IAASgjD,EAAIhmD,OACbulD,EAAUhrD,KAAK8rD,EAAmBzyB,EAAG5wB,EAAM8iD,EAAI9lD,MAAQgmD,EAAIhmD,UAI3DmmD,IAAOn7C,EAAAyY,KAAK6iC,UACLd,EAAW5xB,EAAG5wB,EAAMoB,EAAOshD,EAAKG,EAAQN,GAExCC,EAAW5xB,EAAG5wB,EAAM8iD,EAAI9lD,MAAQ0lD,EAAKG,EAAQN,GAMpE,SAASc,EAAmBzyB,EAAU7O,EAAUtpB,EAAUmB,GACtD,MAAM2pD,GAAe3pD,EAAE,GAAKnB,EAAE,KAAOspB,EAAE,GAAK6O,EAAE,KAAOh3B,EAAE,GAAKnB,EAAE,KAAOspB,EAAE,GAAK6O,EAAE,IACxE4yB,IAAO5pD,EAAE,GAAKnB,EAAE,KAAOm4B,EAAE,GAAKn4B,EAAE,KAAOmB,EAAE,GAAKnB,EAAE,KAAOm4B,EAAE,GAAKn4B,EAAE,KAAO8qD,EAEvExnD,EAAI60B,EAAE,GAAK4yB,GAAMzhC,EAAE,GAAK6O,EAAE,IAC1B50B,EAAI40B,EAAE,GAAK4yB,GAAMzhC,EAAE,GAAK6O,EAAE,IAEhC,MAAO,CAAC70B,EAAGC,GA7GfpD,EAAAsxB,uDCTA,IAAA7a,EAAA,WAA0B,IAAAC,EAAA7T,KAAa8T,EAAAD,EAAAE,eAA0BC,EAAAH,EAAAI,MAAAD,IAAAF,EAAwB,OAAAD,EAAA,SAAAG,EAAA,OAAgCU,YAAA,cAAA4B,MAAA,CAAkC8nB,gBAAAvqB,EAAAwqB,YAAAC,gBAAAzqB,EAAA0qB,cAAqE,CAAAvqB,EAAA,OAAAH,EAAAmB,GAAA,QAAAhB,EAAA,SAAuCoB,WAAA,EAAa3X,KAAA,QAAA4X,QAAA,UAAAnX,MAAA2V,EAAA,OAAAyB,WAAA,WAAsEpB,MAAA,CAASjU,KAAA,QAAcwV,SAAA,CAAWvX,MAAA2V,EAAA,QAAqBO,GAAA,CAAKsB,MAAA,SAAApB,GAAyBA,EAAAlL,OAAAuM,YAAsC9B,EAAA4d,OAAAnd,EAAAlL,OAAAlL,WAAiC8V,EAAA,OAAAH,EAAAmB,GAAA,QAAAhB,EAAA,SAAuCoB,WAAA,EAAa3X,KAAA,QAAA4X,QAAA,UAAAnX,MAAA2V,EAAA,OAAAyB,WAAA,WAAsEpB,MAAA,CAASjU,KAAA,QAAcwV,SAAA,CAAWvX,MAAA2V,EAAA,QAAqBO,GAAA,CAAKsB,MAAA,SAAApB,GAAyBA,EAAAlL,OAAAuM,YAAsC9B,EAAA6d,OAAApd,EAAAlL,OAAAlL,aAAiC2V,EAAAsC,MAC5wBe,EAAA,GCDAna,EAAAS,EAAAuF,EAAA,sBAAA6Q,IAAA7W,EAAAS,EAAAuF,EAAA,sBAAAmU,uCCAAna,EAAAgB,EAAAgF,GAAA,IAAAilD,EAAAjrD,EAAA,QAAAkrD,EAAAlrD,EAAA,gBAAAmG,KAAA+kD,EAAA,YAAA/kD,GAAA,SAAA1E,GAAAzB,EAAAS,EAAAuF,EAAAvE,EAAA,kBAAAypD,EAAAzpD,KAAA,CAAA0E,GAAAnG,EAAA,YAAAoG,EAAApG,EAAA,QAQAqG,EAAgBrH,OAAAoH,EAAA,KAAApH,CACdksD,EAAA,WACAD,EAAA,KACAA,EAAA,MACF,EACA,KACA,WACA,MAIA5kD,EAAAC,QAAAC,OAAA,kBACeP,EAAA,WAAAK,8FCpBf,MAAa2pB,GACFA,EAAAkB,WAAa,EACblB,EAAAI,gBAAiB,EACjBJ,EAAAK,mBAAoB,EACpBL,EAAA61B,eAAgB,EAChB71B,EAAAC,cAAe,EAEfD,EAAAm7B,SAAmB,MAP9B/qD,EAAA4vB,iHCqDAqU,EAAAt9B,EAAAC,gBAAAhH,EAAA,SACAiH,EAAAF,EAAAC,gBAAAhH,EAAA,SACAkH,EAAAH,EAAAC,gBAAAhH,EAAA,SAEA6K,EAAA7K,EAAA,QAGA,IAAqBorD,EAArB,cAAmCnkD,EAAAK,QADnC9E,kCAEIS,KAAA2d,SAAW,GACX3d,KAAAooD,SAAW,GACXpoD,KAAA+iC,MAAQ,GAERxjC,QACI6hC,EAAA/8B,QACKm9C,KAAK,aAAc,CAChB7jC,SAAU3d,KAAK2d,SACfyqC,SAAUpoD,KAAKooD,WAElBjoB,KAAMuC,IACH96B,EAAAy6B,UAAUO,YAAY5iC,KAAK2d,UAC3B/V,EAAAy6B,UAAUM,kBAAiB,GAC3B3iC,KAAKyhD,QAAQ3lD,KAAakE,KAAKqoD,OAAOthD,MAAMi7B,UAAY,OAE3Dc,MAAOC,IACAA,EAAML,SAAU1iC,KAAK+iC,MAAQA,EAAML,SAAS4lB,WAC3CtoD,KAAK+iC,MAAQ,0BAI9BxjC,WACI6hC,EAAA/8B,QACKm9C,KAAK,gBAAiB,CACnB7jC,SAAU3d,KAAK2d,SACfyqC,SAAUpoD,KAAKooD,WAElBjoB,KAAMuC,IACH96B,EAAAy6B,UAAUO,YAAY5iC,KAAK2d,UAC3B/V,EAAAy6B,UAAUM,kBAAiB,GAC3B3iC,KAAKyhD,QAAQ3lD,KAAakE,KAAKqoD,OAAOthD,MAAMi7B,UAAY,OAE3Dc,MAAOC,IACAA,EAAML,SAAU1iC,KAAK+iC,MAAQA,EAAML,SAAS4lB,WAC3CtoD,KAAK+iC,MAAQ,0BAI9BxjC,QAAQiK,GACJ,GAAIA,EAAMJ,QAAUI,EAAMJ,OAAO0vC,mBAAoB,CACjD,MAAMyP,EAAO/+C,EAAMJ,OAAO0vC,mBAC1ByP,EAAKjyC,MAAMgZ,QAAU,KAI7B/vB,SAASiK,GACL,GAAIA,EAAMJ,QAAUI,EAAMJ,OAAO0vC,mBAAoB,CACjD,MAAMyP,EAAO/+C,EAAMJ,OAAO0vC,mBAC1ByP,EAAKjyC,MAAMgZ,QAAU,OAjDZ64B,EAAKrkD,EAAAiC,WAAA,CADzB9B,EAAAI,SACoB8jD,kDC5DrB,IAAAv0C,EAAA,WAA0B,IAAAC,EAAA7T,KAAa8T,EAAAD,EAAAE,eAA0BC,EAAAH,EAAAI,MAAAD,IAAAF,EAAwB,OAAAE,EAAA,SAAmBE,MAAA,CAAO7C,QAAAwC,EAAAxC,SAAsB+C,GAAA,CAAKC,MAAA,SAAAC,GAAyBT,EAAAxC,SAAA,IAAqBkD,YAAAV,EAAAW,GAAA,EAAsBhW,IAAA,SAAAiW,GAAA,SAAAnX,GAA4B,OAAA0W,EAAA,OAAiBU,YAAA,eAAAR,MAAA,CAAkCS,UAAA,QAAmBP,GAAA,CAAKQ,UAAAtX,EAAAuX,UAAAC,QAAAxX,EAAAyX,UAA6C,CAAAlB,EAAAmB,GAAA,6BAAqC,CAAAhB,EAAA,OAAYU,YAAA,cAAyB,CAAAV,EAAA,SAAcE,MAAA,CAAOgb,IAAA,2BAAgC,CAAArb,EAAAmB,GAAA,UAAAhB,EAAA,SAA+BoB,WAAA,EAAa3X,KAAA,QAAA4X,QAAA,UAAAnX,MAAA2V,EAAA,KAAAyB,WAAA,SAAkEpB,MAAA,CAASjU,KAAA,OAAAyW,GAAA,0BAA4CjB,SAAA,CAAWvX,MAAA2V,EAAA,MAAmBO,GAAA,CAAKsB,MAAA,SAAApB,GAAyBA,EAAAlL,OAAAuM,YAAsC9B,EAAApU,KAAA6U,EAAAlL,OAAAlL,WAA+B8V,EAAA,SAAAH,EAAAmB,GAAA,aAAAhB,EAAA,OAA4CU,YAAA,WAAsB,CAAAV,EAAA,QAAAH,EAAAmB,GAAA,WAAAhB,EAAA,gBAAkDE,MAAA,CAAO1O,MAAAqO,EAAAjU,YAAuBwU,GAAA,CAAK+b,eAAA,SAAA7b,GAAgCT,EAAAjU,WAAA0U,MAAwBN,EAAA,QAAAH,EAAAmB,GAAA,aAAAhB,EAAA,gBAAoDE,MAAA,CAAO1O,MAAAqO,EAAA4rB,cAAyBrrB,GAAA,CAAK+b,eAAA,SAAA7b,GAAgCT,EAAA4rB,aAAAnrB,OAA0B,GAAAN,EAAA,UAAmBuB,IAAA,SAAArB,MAAA,CAAoBjS,MAAA,QAAA6Q,OAAA,aAAkCkB,EAAA,OAAcU,YAAA,gBAA2B,CAAAV,EAAA,UAAeI,GAAA,CAAI1J,MAAAmJ,EAAAmhC,SAAoB,CAAAnhC,EAAAmB,GAAA,iBACpwCkC,EAAA,GCDAna,EAAAS,EAAAuF,EAAA,sBAAA6Q,IAAA7W,EAAAS,EAAAuF,EAAA,sBAAAmU,uCCAA,IAAAtD,EAAA,WAA0B,IAAAC,EAAA7T,KAAa8T,EAAAD,EAAAE,eAA0BC,EAAAH,EAAAI,MAAAD,IAAAF,EAAwB,OAAAE,EAAA,QACzFkD,EAAA,GCDAna,EAAAS,EAAAuF,EAAA,sBAAA6Q,IAAA7W,EAAAS,EAAAuF,EAAA,sBAAAmU,uCCAA,IAAAtD,EAAA,WAA0B,IAAAC,EAAA7T,KAAa8T,EAAAD,EAAAE,eAA0BC,EAAAH,EAAAI,MAAAD,IAAAF,EAAwB,OAAAE,EAAA,cAAwBE,MAAA,CAAOzW,KAAA,UAAgB,CAAAuW,EAAA,OAAYoB,WAAA,EAAa3X,KAAA,OAAA4X,QAAA,SAAAnX,MAAA2V,EAAA,QAAAyB,WAAA,YAAsEZ,YAAA,OAAA0B,MAAA,CAA4BoyC,aAAA30C,EAAAM,KAAAs0C,eAAA50C,EAAAM,MAAiDC,GAAA,CAAK1J,MAAAmJ,EAAAQ,MAAAuW,SAAA,SAAAtW,GAAsE,OAAxBA,EAAAqW,iBAAwB9W,EAAA60C,SAAAp0C,MAA8B,CAAAN,EAAA,OAAYuB,IAAA,YAAAb,YAAA,kBAAAN,GAAA,CAAkD1J,MAAA,SAAA4J,GAAyBA,EAAAiC,qBAA4B,CAAA1C,EAAAgT,GAAA,eAAwBhS,UAAAhB,EAAAgB,UAAAE,QAAAlB,EAAAkB,UAA4ClB,EAAAgT,GAAA,oBACplB3P,EAAA,GCDAna,EAAAS,EAAAuF,EAAA,sBAAA6Q,IAAA7W,EAAAS,EAAAuF,EAAA,sBAAAmU,uCCAAna,EAAAgB,EAAAgF,GAAA,IAAA4lD,EAAA5rD,EAAA,QAAA6rD,EAAA7rD,EAAA2B,EAAAiqD,GAAA,QAAAzlD,KAAAylD,EAAA,YAAAzlD,GAAA,SAAA1E,GAAAzB,EAAAS,EAAAuF,EAAAvE,EAAA,kBAAAmqD,EAAAnqD,KAAA,CAAA0E,GAAkVH,EAAA,WAAA6lD,EAAG,wGCArV3kD,EAAAH,EAAAC,gBAAAhH,EAAA,SAEAiiB,EAAAlb,EAAAC,gBAAAhH,EAAA,SAEA4K,EAAA5K,EAAA,QACA8U,EAAA9U,EAAA,QACAuP,EAAAvP,EAAA,QACAsa,EAAAta,EAAA,QACAgV,EAAAhV,EAAA,QACA6K,EAAA7K,EAAA,QACAqC,EAAArC,EAAA,QACA8K,EAAA9K,EAAA,QAGA,IAAa0zC,EAAb,cAA+BzxB,EAAA3a,QAD/B9E,kCAEIS,KAAAvC,KAAO,QACPuC,KAAAsf,QAAS,EACTtf,KAAA2xB,WAAiC,KACjC3xB,KAAAsgC,MAAqB,KACrBtgC,KAAAP,KAAoB,KACpBF,YAAYiK,GACR,MAAM+I,EAAQjG,EAAAO,aAAaC,SAAS,aACtBpE,IAAV6J,GAIJvS,KAAKsf,QAAS,EACdtf,KAAK2xB,WAAavyB,EAAAuT,IAAI9K,EAAAkY,SAASvW,IAC/BxJ,KAAKsgC,MAAQ,IAAIjpB,EAAAW,KAAKhY,KAAK2xB,WAAY3xB,KAAK2xB,WAAY,EAAG/pB,EAAA0J,UAAU2hC,aACrEjzC,KAAKP,KAAO,IAAIsS,EAAA1S,KAAKW,KAAK2xB,WAAWC,QAAS,GAAI,mBAClD5xB,KAAKsgC,MAAMpiB,SAAStW,EAAA0J,UAAUqM,UAC9B3d,KAAKP,KAAKye,SAAStW,EAAA0J,UAAUqM,UAC7BpL,EAAMG,SAAS1S,KAAKsgC,OAAO,GAAM,GACjC/tB,EAAMG,SAAS1S,KAAKP,MAAM,GAAM,IAV5B4P,QAAQC,IAAI,kBAYpB/P,YAAYiK,GACR,IAAKxJ,KAAKsf,QAAyB,OAAftf,KAAKsgC,OAAsC,OAApBtgC,KAAK2xB,YAAqC,OAAd3xB,KAAKP,KAAe,OAE3F,MAAM8S,EAAQjG,EAAAO,aAAaC,SAAS,QACpC,QAAcpE,IAAV6J,EAEA,YADAlD,QAAQC,IAAI,kBAGhB,MAAMsR,EAAWxhB,EAAAuT,IAAI9K,EAAAkY,SAASvW,IAE9BxJ,KAAKsgC,MAAM1f,SAAWA,EACtBjZ,EAAAf,OAAOqC,KAAK,eAAgB,CAAEwO,MAAOzX,KAAKsgC,MAAOrf,SAAUC,QAAQ,EAAMC,WAAW,IAEpF,MAAM0nC,EAAW3mD,KAAK43C,KAAKl5B,EAAStgB,EAAIN,KAAK2xB,WAAWrxB,GAAK4B,KAAK43C,KAAKl5B,EAASrgB,EAAIP,KAAK2xB,WAAWpxB,GAC9FuoD,EAAQ5mD,KAAKgY,IAAI0G,EAAStgB,EAAIN,KAAK2xB,WAAWrxB,GAC9CyoD,EAAQ7mD,KAAKgY,IAAI0G,EAASrgB,EAAIP,KAAK2xB,WAAWpxB,GAC9CyV,EACF9T,KAAKkvB,MAAOlvB,KAAKovB,KAAKpvB,KAAA+uB,IAAA63B,EAAS,GAAI5mD,KAAA+uB,IAAA83B,EAAS,IAAKnhD,EAAA0J,UAAUquB,SAAY/3B,EAAA0J,UAAU6X,UAAY,MAC3FxpB,EAAQuC,KAAKqzC,MAAMsT,EAAWE,EAAOD,GACrCE,EAAO9mD,KAAKkJ,IAAIpL,KAAK2xB,WAAWrxB,EAAGsgB,EAAStgB,GAAKwoD,EAAQ,EACzDG,EAAO/mD,KAAKkJ,IAAIpL,KAAK2xB,WAAWpxB,EAAGqgB,EAASrgB,GAAKwoD,EAAQ,EAC/D/oD,KAAKP,KAAKY,SAAW,IAAIwR,EAAAM,YAAY62C,EAAMC,GAC3CjpD,KAAKP,KAAKA,KAAOuW,EACjBhW,KAAKP,KAAKE,MAAQA,EAClBgI,EAAAf,OAAOqC,KAAK,eAAgB,CAAEwO,MAAOzX,KAAKP,KAAKwhB,SAAUC,QAAQ,EAAMC,WAAW,IAClF5O,EAAMY,YAAW,GAErB5T,UAAUiK,GACN,IAAKxJ,KAAKsf,QAAyB,OAAftf,KAAKsgC,OAAsC,OAApBtgC,KAAK2xB,YAAqC,OAAd3xB,KAAKP,KAAe,OAE3F,MAAM8S,EAAQjG,EAAAO,aAAaC,SAAS,aACtBpE,IAAV6J,GAIJvS,KAAKsf,QAAS,EAEd/M,EAAMua,YAAY9sB,KAAKsgC,OAAO,GAAM,GACpC/tB,EAAMua,YAAY9sB,KAAKP,MAAM,GAAM,GACnC8S,EAAMY,YAAW,GACjBnT,KAAKsgC,MAAQtgC,KAAK2xB,WAAa3xB,KAAKP,KAAO,MARvC4P,QAAQC,IAAI,sBArDXmhC,EAAS3sC,EAAAiC,WAAA,CADrB9B,EAAAI,SACYosC,GAAAtzC,EAAAszC,+CCdb1zC,EAAAgB,EAAAgF,GAAA,IAAAmmD,EAAAnsD,EAAA,QAAAosD,EAAApsD,EAAA,gBAAAmG,KAAAimD,EAAA,YAAAjmD,GAAA,SAAA1E,GAAAzB,EAAAS,EAAAuF,EAAAvE,EAAA,kBAAA2qD,EAAA3qD,KAAA,CAAA0E,GAAAnG,EAAA,YAAAoG,EAAApG,EAAA,QAQAqG,EAAgBrH,OAAAoH,EAAA,KAAApH,CACdotD,EAAA,WACAD,EAAA,KACAA,EAAA,MACF,EACA,KACA,WACA,MAIA9lD,EAAAC,QAAAC,OAAA,YACeP,EAAA,WAAAK,6CCpBfrG,EAAAgB,EAAAgF,GAAA,IAAAqmD,EAAArsD,EAAA,QAAAssD,EAAAtsD,EAAA2B,EAAA0qD,GAAA,QAAAlmD,KAAAkmD,EAAA,YAAAlmD,GAAA,SAAA1E,GAAAzB,EAAAS,EAAAuF,EAAAvE,EAAA,kBAAA4qD,EAAA5qD,KAAA,CAAA0E,GAAsWH,EAAA,WAAAsmD,EAAG,sFCAzW,MAAA/8C,EAAAvP,EAAA,QACA6K,EAAA7K,EAAA,QAEAusD,EAAAvsD,EAAA,QAOA,SAAgBwsD,EAAYngD,EAA+BogD,GAAmB,GAC1E,MAAMC,EAAM,IAAIH,EAAAxlB,IAEhB,IAAIrmB,EACqBA,EAAV,WAAXrU,EAA8BxB,EAAA0J,UAAUwJ,eAC9BlT,EAAA0J,UAAUoK,iBAExB,IAAK,MAAMhE,KAAM+F,EAAQ,CACrB,MAAMhG,EAAQnL,EAAAO,aAAaiW,QAAQhlB,IAAI4Z,GACvC,IAAI8xC,GAAY/xC,EAAM9V,gBAAgB2K,EAAAO,aAAaC,WAAYrL,QAC/D,IAAK,IAAI/F,EAAI,EAAGA,EAAI+b,EAAMrX,OAAOxE,OAAQF,IACrC+tD,EAAIC,iBAAiBjyC,EAAMrX,OAAO1E,GAAI+b,EAAMrX,QAAQ1E,EAAI,GAAK+b,EAAMrX,OAAOxE,SAIlF6tD,EAAIC,iBAAiB,EAAE,KAAM,KAAM,EAAE,IAAK,MAC1CD,EAAIC,iBAAiB,EAAE,IAAK,KAAM,EAAE,KAAM,MAC1CD,EAAIC,iBAAiB,EAAE,KAAM,KAAM,EAAE,MAAO,MAC5CD,EAAIC,iBAAiB,EAAE,MAAO,KAAM,EAAE,KAAM,MAE5CD,EAAIC,iBAAiB,EAAE,KAAM,KAAM,CAAC,KAAM,MAC1CD,EAAIC,iBAAiB,CAAC,KAAM,KAAM,CAAC,KAAM,OACzCD,EAAIC,iBAAiB,CAAC,KAAM,MAAO,EAAE,KAAM,OAC3CD,EAAIC,iBAAiB,EAAE,KAAM,MAAO,EAAE,KAAM,MAE5CD,EAAIC,iBAAiB,CAAC,KAAM,KAAM,CAAC,IAAK,MACxCD,EAAIC,iBAAiB,CAAC,IAAK,KAAM,CAAC,KAAM,MACxCD,EAAIC,iBAAiB,CAAC,KAAM,KAAM,CAAC,MAAO,MAC1CD,EAAIC,iBAAiB,CAAC,MAAO,KAAM,CAAC,KAAM,MAE1CD,EAAIC,iBAAiB,EAAE,IAAK,KAAM,CAAC,IAAK,MACxCD,EAAIC,iBAAiB,CAAC,IAAK,KAAM,CAAC,IAAK,OACvCD,EAAIC,iBAAiB,CAAC,IAAK,MAAO,EAAE,IAAK,OACzCD,EAAIC,iBAAiB,EAAE,IAAK,MAAO,EAAE,IAAK,MAC1CvsD,EAAA6mB,OAAO5a,GAAUqgD,EACX1qD,OAAQ+kC,IAAM3mC,EAAA6mB,OAxCb7mB,EAAA6mB,OAAS,CAChB2lC,OAAQ,IAAIL,EAAAxlB,IACZ7f,SAAU,IAAIqlC,EAAAxlB,KAGlB3mC,EAAAosD,iDCVA,IAAAK,EAAA7sD,EAAA,QAAA8sD,EAAA9sD,EAAA2B,EAAAkrD,GAAqgBC,EAAG,qCCAxgB,IAAAC,EAAA/sD,EAAA,QAAAgtD,EAAAhtD,EAAA2B,EAAAorD,GAAgeC,EAAG,wGCuPne/lD,EAAAF,EAAAC,gBAAAhH,EAAA,SACAkH,EAAAH,EAAAC,gBAAAhH,EAAA,SAEAoH,EAAApH,EAAA,QAEAuiC,EAAAx7B,EAAAC,gBAAAhH,EAAA,SACAwiC,EAAAz7B,EAAAC,gBAAAhH,EAAA,SAEA8K,EAAA9K,EAAA,QACA4K,EAAA5K,EAAA,QACA4qB,EAAA5qB,EAAA,QACAuP,EAAAvP,EAAA,QAEA6K,EAAA7K,EAAA,QAQA,IAAqBitD,EAArB,cAAwChmD,EAAAK,QANxC9E,kCASIS,KAAAqR,SAAU,EAEV+d,YACI,OAAOpvB,KAAKyX,MAAMmE,UAGtBrc,UACIooB,EAAAc,SAASwa,IAAI,kBAAoBxrB,IAC7BzX,KAAKyX,MAAQA,EACbzX,KAAKqR,SAAU,IAEnBsW,EAAAc,SAASwa,IAAI,sBAAwBjtB,IAC7BhW,KAAKqR,UACLrR,KAAKyX,MAAM1B,OAAOja,KAAK8L,EAAA0J,UAAUyE,OAAOC,IACxChW,KAAKqvB,aAAY,MAK7B9vB,gBACIooB,EAAAc,SAASwhC,KAAK,mBACdtiC,EAAAc,SAASwhC,KAAK,uBAGlB1qD,UACIS,KAAKkqD,WAGT3qD,WAC4D,KAApDS,KAAKyX,MAAMyE,OAAOlc,KAAKyX,MAAMyE,OAAOtgB,OAAS,IAAWoE,KAAKyX,MAAMyG,SAAS,IAE3Ele,KAAKyX,MAAM2B,SAASxd,QACwC,KAA7DoE,KAAKyX,MAAM2B,SAASpZ,KAAKyX,MAAM2B,SAASxd,OAAS,GAAG6B,MACU,IAA9DuC,KAAKyX,MAAM2B,SAASpZ,KAAKyX,MAAM2B,SAASxd,OAAS,GAAGsC,OAEpD8B,KAAKyX,MAAM2B,SAAStd,KAAK,CAAEgE,KAAM+H,EAAAgD,SAAUpN,KAAM,GAAIS,MAAO,EAAG4iD,SAAU,EAAGzvC,SAAS,IAEpFrR,KAAKyX,MAAM4B,MAAMzd,QACqC,KAAvDoE,KAAKyX,MAAM4B,MAAMrZ,KAAKyX,MAAM4B,MAAMzd,OAAS,GAAG6B,MACU,IAAxDuC,KAAKyX,MAAM4B,MAAMrZ,KAAKyX,MAAM4B,MAAMzd,OAAS,GAAGsC,OAE9C8B,KAAKyX,MAAM4B,MAAMvd,KAAK,CAClBgE,KAAM+H,EAAAgD,SACNpN,KAAM,GACNS,MAAO,EACP0e,IAAK,EACLrB,cAAc,EACd5O,OAAQ,gBACR0E,SAAS,IAGrB9R,YAAY2hB,EAAiBC,GAAY,GAChCnhB,KAAKovB,QACVznB,EAAAf,OAAOqC,KAAK,eAAgB,CAAEwO,MAAOzX,KAAKyX,MAAMwJ,SAAUC,SAAQC,cAC9DD,GAAQ5U,EAAAO,aAAasG,aACzBnT,KAAKkqD,YAET3qD,SAASiK,GACAxJ,KAAKovB,QACVpvB,KAAKyX,MAAMknC,WAAWn1C,EAAMJ,OAAOomB,SACnCxvB,KAAKqvB,aAAY,IAErB9vB,iBAAiBiK,GACRxJ,KAAKovB,QACVpvB,KAAKyX,MAAMgnC,qBACXz+C,KAAKqvB,aAAY,IAErB9vB,mBAAmBiK,GACVxJ,KAAKovB,QACVpvB,KAAKyX,MAAMinC,iBAAiBl1C,EAAMJ,OAAOomB,SACzCxvB,KAAKqvB,aAAY,IAErB9vB,iBAAiBiK,GACb,IAAKxJ,KAAKovB,MAAO,OACjB,MAAM+6B,EAA0C,KAA1BnqD,KAAKyX,MAAMkC,WACjC3Z,KAAKyX,MAAMkC,WAAanQ,EAAMJ,OAAOlL,MACP,KAA1B8B,KAAKyX,MAAMkC,YAAsBwwC,EAGA,KAA1BnqD,KAAKyX,MAAMkC,YAAqBwwC,IACvCviD,EAAA0J,UAAU2+B,YAAYnzC,OAAO8K,EAAA0J,UAAU2+B,YAAY50B,UAAU+uC,GAAMA,IAAOpqD,KAAKyX,MAAM3X,OACjFwM,EAAAO,aAAa2F,SAAS,SAASlG,EAAAO,aAAaC,SAAS,QAASqG,YAAW,KAJ7EvL,EAAA0J,UAAU2+B,YAAYn0C,KAAKkE,KAAKyX,MAAM3X,MAClCwM,EAAAO,aAAa2F,SAAS,SAASlG,EAAAO,aAAaC,SAAS,QAASqG,YAAW,IAKjFnT,KAAKqvB,aAAY,GAErB9vB,YAAYiK,EAAqCuU,GACxC/d,KAAKovB,QACVpvB,KAAKyX,MAAM2Y,YAAYrS,EAAUvU,EAAMJ,OAAOlL,OAC9C8B,KAAKqvB,YAAYznB,EAAA0J,UAAUqd,SAE/BpvB,YAAYrB,GACH8B,KAAKovB,QACVpvB,KAAKyX,MAAM6Y,YAAYpyB,GACvB8B,KAAKqvB,YAAYznB,EAAA0J,UAAUqd,SAE/BpvB,cAAcO,GACLE,KAAKovB,QACVpvB,KAAKyX,MAAM2B,SAAWpZ,KAAKyX,MAAM2B,SAAS6M,OAAOq0B,GAAMA,EAAGx6C,OAASA,GACnEE,KAAKqvB,aAAY,IAErB9vB,WAAWO,GACFE,KAAKovB,QACVpvB,KAAKyX,MAAM4B,MAAQrZ,KAAKyX,MAAM4B,MAAM4M,OAAO/K,GAAMA,EAAGpb,OAASA,GAC7DE,KAAKyX,MAAMgnC,qBACXz+C,KAAKqvB,aAAY,IAErB9vB,uBAAuB+b,GACnB,IAAKtb,KAAKovB,MAAO,OACjB9T,EAAKC,cAAgBD,EAAKC,aAC1B,MAAM7f,EAAIkM,EAAA0J,UAAU8J,cAAcC,UAAUF,GAAMA,EAAGG,OAASA,EAAKxb,MAC/Dwb,EAAKC,eAAuB,IAAP7f,EAAUkM,EAAA0J,UAAU8J,cAActf,KAAK,CAAE2b,MAAOzX,KAAKyX,MAAM3X,KAAMwb,KAAMA,EAAKxb,QAC3Fwb,EAAKC,cAAgB7f,GAAK,GAAGkM,EAAA0J,UAAU8J,cAActe,OAAOpB,EAAG,GACzEsE,KAAKqvB,aAAY,GAErB9vB,iBAAiB+b,EAAY3O,GACzB,IAAK3M,KAAKovB,MAAO,OACjB,MAAM7c,EAAQjG,EAAAO,aAAaC,SAAS9M,KAAKyX,MAAMlF,YACjC7J,IAAV6J,GACJA,EAAMY,YAAYmI,EAAKC,cAE3Bhc,mBACIooB,EAAAc,SAASljB,MAAM,qBAEnBhG,YAAYO,GACJE,KAAKovB,QACTpvB,KAAKyX,MAAM1B,OAAS/V,KAAKyX,MAAM1B,OAAOkQ,OAAO5oB,GAAKA,EAAEyC,OAASA,GAC7DE,KAAKqvB,aAAY,MAhIbvrB,EAAAiC,WAAA,CAAP5B,EAAA6B,oCADgBgkD,EAAUlmD,EAAAiC,WAAA,CAN9B9B,EAAAI,QAAU,CACP8B,WAAY,CACR21B,MAAAyD,EAAAl7B,QACAw7B,eAAgBP,EAAAj7B,YAGH2lD,qHC1PrBhmD,EAAAF,EAAAC,gBAAAhH,EAAA,SACAkH,EAAAH,EAAAC,gBAAAhH,EAAA,SAEAwiC,EAAAz7B,EAAAC,gBAAAhH,EAAA,SAOA,IAAqB2O,EAArB,cAA2C1H,EAAAK,QAL3C9E,kCAUIS,KAAAqR,SAAU,EACVrR,KAAAqqD,IAAM,MACNrqD,KAAAsqD,GAAK,KACLtqD,KAAAiV,MAAQ,GAERjV,KAAAuzC,QAAU,CAACgX,OACXvqD,KAAAwzC,OAAS,SAETj0C,UACIS,KAAKuzC,SAAQ,GACbvzC,KAAKqU,QAET9U,OACIS,KAAKuzC,SAAQ,GACbvzC,KAAKqU,QAET9U,QACIS,KAAKwzC,SACLxzC,KAAKqR,SAAU,EACfrR,KAAKiV,MAAQ,GAEjB1V,KAAK0V,EAAeo1C,EAAM,MAAOC,EAAK,MAUlC,OATAtqD,KAAKqqD,IAAMA,EACXrqD,KAAKsqD,GAAKA,EACVtqD,KAAKiV,MAAQA,EAEbjV,KAAKqR,SAAU,EACfrR,KAAKiF,UAAU,KACXjF,KAAK0E,MAAMwyC,QAAQ9xC,UAGhB,IAAIquC,QAAQ,CAACF,EAASC,KACzBxzC,KAAKuzC,QAAUA,EACfvzC,KAAKwzC,OAASA,MAtCL9nC,EAAa5H,EAAAiC,WAAA,CALjC9B,EAAAI,QAAU,CACP8B,WAAY,CACR21B,MAAAyD,EAAAl7B,YAGaqH,yEC5BrB3O,EAAAgB,EAAAgF,GAAA,IAAAynD,EAAAztD,EAAA,QAAA0tD,EAAA1tD,EAAA,gBAAAmG,KAAAunD,EAAA,YAAAvnD,GAAA,SAAA1E,GAAAzB,EAAAS,EAAAuF,EAAAvE,EAAA,kBAAAisD,EAAAjsD,KAAA,CAAA0E,GAAA,IAAA8uB,EAAAj1B,EAAA,QAOAqG,EAAgBrH,OAAAi2B,EAAA,KAAAj2B,CACd0uD,EAAA,WACAD,EAAA,KACAA,EAAA,MACF,EACA,KACA,KACA,MAIApnD,EAAAC,QAAAC,OAAA,UACeP,EAAA,WAAAK,6CCnBf,IAAAwQ,EAAA,WAA0B,IAAAC,EAAA7T,KAAa8T,EAAAD,EAAAE,eAA0BC,EAAAH,EAAAI,MAAAD,IAAAF,EAAwB,OAAAE,EAAA,OAAiBU,YAAA,aAAwB,CAAAV,EAAA,OAAYE,MAAA,CAAOwC,GAAA,UAActC,GAAA,CAAK1J,MAAA,SAAA4J,GAAiD,OAAxBA,EAAAqW,iBAAwB9W,EAAA62C,cAAAp2C,MAAmC,CAAAN,EAAA,SAAcuB,IAAA,UAAArB,MAAA,CAAqBjU,KAAA,YAAkBmU,GAAA,CAAK1J,MAAA,SAAA4J,GAAkD,OAAzBA,EAAAiC,kBAAyB1C,EAAA82C,eAAAr2C,OAAoCN,EAAA,UAAAH,EAAAmB,GAAAnB,EAAAqC,GAAArC,EAAAoB,UAAApB,EAAA,WAAAG,EAAA,QAAuEoB,WAAA,EAAa3X,KAAA,OAAA4X,QAAA,SAAAnX,MAAA2V,EAAA+2C,YAAA/2C,EAAAyL,OAAAhK,WAAA,yBAAoGZ,YAAA,cAA2B,CAAAb,EAAAmB,GAAA,OAAAhB,EAAA,QAA2BoB,WAAA,EAAa3X,KAAA,OAAA4X,QAAA,SAAAnX,MAAA2V,EAAA+2C,WAAA/2C,EAAAyL,OAAAhK,WAAA,wBAAkGZ,YAAA,YAAyB,CAAAb,EAAAmB,GAAA,QAAAnB,EAAAsC,MAAA,GAAAnC,EAAA,OAAwCoB,WAAA,EAAa3X,KAAA,OAAA4X,QAAA,SAAAnX,MAAA2V,EAAA,OAAAyB,WAAA,WAAoEpB,MAAA,CAASwC,GAAA,SAAa7C,EAAAgC,GAAAhC,EAAA,eAAAsqB,GAAmC,OAAAnqB,EAAA,OAAiBxV,IAAA2/B,EAAA,GAAAzpB,YAAA,OAAAN,GAAA,CAAmC1J,MAAA,SAAA4J,GAAyBT,EAAAg3C,gBAAA1sB,EAAA,OAA+B,CAAAnqB,EAAA,SAAcE,MAAA,CAAOjU,KAAA,YAAkBwV,SAAA,CAAW+Z,QAAA3b,EAAAzL,SAAAiB,SAAA80B,EAAA,KAAyC/pB,GAAA,CAAK1J,MAAA,SAAA4J,GAAyBA,EAAAqW,qBAA2B9W,EAAAmB,GAAA,IAAAnB,EAAAqC,GAAAioB,EAAA,wBACprCjnB,EAAA,GCDAna,EAAAS,EAAAuF,EAAA,sBAAA6Q,IAAA7W,EAAAS,EAAAuF,EAAA,sBAAAmU,uCCAA,IAAAtD,EAAA,WAA0B,IAAAC,EAAA7T,KAAa8T,EAAAD,EAAAE,eAA0BC,EAAAH,EAAAI,MAAAD,IAAAF,EAAwB,OAAAE,EAAA,SAAmBE,MAAA,CAAO7C,QAAAwC,EAAAxC,SAAsB+C,GAAA,CAAKC,MAAAR,EAAAQ,OAAkBE,YAAAV,EAAAW,GAAA,EAAsBhW,IAAA,SAAAiW,GAAA,SAAAnX,GAA4B,OAAA0W,EAAA,OAAiBU,YAAA,eAAAR,MAAA,CAAkCS,UAAA,QAAmBP,GAAA,CAAKQ,UAAAtX,EAAAuX,UAAAC,QAAAxX,EAAAyX,UAA6C,CAAAlB,EAAAmB,GAAAnB,EAAAqC,GAAArC,EAAAoB,eAAkC,CAAAjB,EAAA,OAAYU,YAAA,cAAyB,CAAAV,EAAA,UAAeuB,IAAA,UAAAnB,GAAA,CAAkB1J,MAAAmJ,EAAAqjC,UAAqB,CAAArjC,EAAAmB,GAAAnB,EAAAqC,GAAArC,EAAAw2C,QAAAx2C,EAAAy2C,GAAAt2C,EAAA,UAAoDI,GAAA,CAAI1J,MAAAmJ,EAAAi3C,OAAkB,CAAAj3C,EAAAmB,GAAAnB,EAAAqC,GAAArC,EAAAy2C,OAAAz2C,EAAAsC,UACjhBe,EAAA,GCDAna,EAAAS,EAAAuF,EAAA,sBAAA6Q,IAAA7W,EAAAS,EAAAuF,EAAA,sBAAAmU,0GCQAlT,EAAAF,EAAAC,gBAAAhH,EAAA,SAEAkH,EAAAH,EAAAC,gBAAAhH,EAAA,SAEA2qB,EAAA5jB,EAAAC,gBAAAhH,EAAA,SAIA4K,EAAA5K,EAAA,QACA6K,EAAA7K,EAAA,QACA8K,EAAA9K,EAAA,QAOA,IAAqB4O,EAArB,cAA8C3H,EAAAK,QAL9C9E,kCAMIS,KAAAqR,SAAU,EACVrR,KAAAuE,KAAO,EACPvE,KAAAwE,IAAM,EACNjF,KAAKiK,EAAmBL,GACfvB,EAAAM,WAAWE,SAASiB,SAASF,IAAQtB,EAAAqsB,eAAoB5V,OAAO9U,EAAOL,GAE5EnJ,KAAKqR,SAAU,EACfrR,KAAKuE,KAAOiF,EAAMse,MAClB9nB,KAAKwE,IAAMgF,EAAMue,MACjB/nB,KAAKiF,UAAU,KACXjF,KAAKkF,UAAU,GAAGC,IAAIC,UAG9B7F,QACIS,KAAKqR,SAAU,EAEnB9R,SACI,GAAmC,IAA/BqI,EAAAM,WAAWE,SAASxM,OAAc,OACtC,MAAM4c,EAAQ5Q,EAAAM,WAAWG,MAAMvK,IAAI8J,EAAAM,WAAWE,SAAS,IAEvDP,EAAA0Y,OAAe,UACVrX,OAAO,wBAAyBsP,EAAM/a,QACtC0iC,KACI1iC,IACGkK,EAAAf,OAAOqC,KAAK,eAAgB,CACxBuP,MAAOA,EAAM9B,GACbjZ,SAEJ+a,EAAM/a,KAAOA,EACboK,EAAAqsB,eAAend,gBAEnB,QAER/W,KAAKqU,QAET9U,SACuC,IAA/BqI,EAAAM,WAAWE,SAASxM,SACxBiM,EAAA0Y,OAAsB,WACjB0B,KAAK,yCACLke,KACI1jC,IACG,GAAIA,EAAQ,CACR,IAAK,MAAMmM,KAAOhB,EAAAM,WAAWE,SACzBT,EAAAf,OAAOqC,KAAK,eAAgBL,GACxBhB,EAAAM,WAAWC,MAAMkB,SAAST,GAC1BhB,EAAAM,WAAWC,MAAMrL,OAAO8K,EAAAM,WAAWC,MAAMmB,QAAQV,GAAM,GACtDhB,EAAAM,WAAWD,QAAQnL,OAAO8K,EAAAM,WAAWD,QAAQqB,QAAQV,GAAM,GAEpEhB,EAAAM,WAAWc,kBAGnB,QAERhJ,KAAKqU,WAtDQ1I,EAAgB7H,EAAAiC,WAAA,CALpC9B,EAAAI,QAAU,CACP8B,WAAY,CACRuiB,YAAAhB,EAAArjB,YAGasH,kDCzBrB5O,EAAAgB,EAAAgF,GAAA,IAAAgoD,EAAAhuD,EAAA,QAAAiuD,EAAAjuD,EAAA2B,EAAAqsD,GAAA,QAAA7nD,KAAA6nD,EAAA,YAAA7nD,GAAA,SAAA1E,GAAAzB,EAAAS,EAAAuF,EAAAvE,EAAA,kBAAAusD,EAAAvsD,KAAA,CAAA0E,GAAkXH,EAAA,WAAAioD,EAAG,qCCArX,IAAAC,EAAAluD,EAAA,QAAAmuD,EAAAnuD,EAAA2B,EAAAusD,GAA8eC,EAAG,wGC0EjflnD,EAAAF,EAAAC,gBAAAhH,EAAA,SACAkH,EAAAH,EAAAC,gBAAAhH,EAAA,SAEAwiC,EAAAz7B,EAAAC,gBAAAhH,EAAA,SAEA8K,EAAA9K,EAAA,QACA4K,EAAA5K,EAAA,QACA4qB,EAAA5qB,EAAA,QACA6K,EAAA7K,EAAA,QAOA,IAAqBouD,EAArB,cAA0CnnD,EAAAK,QAL1C9E,kCAMIS,KAAAqR,SAAU,EACVrR,KAAA6W,YAAc,GACd7W,KAAAgX,QAAU,GACVhX,KAAA4V,OAAS,GAETrW,UACIooB,EAAAc,SAASwa,IAAI,oBAAqB,KAC9BjjC,KAAKqR,SAAU,EACfrR,KAAK6W,YAAc,GACnB7W,KAAKgX,QAAU,GACfhX,KAAKiF,UAAU,IAAyBjF,KAAK0E,MAAMkR,OAAQxQ,WAInE7F,gBACIooB,EAAAc,SAASwhC,KAAK,qBAGlBl0C,aACI,MAAMonB,EAAqC,CAACC,GAAI,IAChD,IAAK,MAAMt9B,KAAQ/D,OAAOiqB,KAAKpe,EAAA0J,UAAUyE,QAAS,CAC9C,MAAMC,EAAQpO,EAAA0J,UAAUyE,OAAOjW,GAC3BE,KAAK4V,OAAOha,WAAaoa,EAAMF,SAASyQ,gBAAgBvQ,EAAMvY,KAAK8oB,gBAAgB3Q,OAAO5V,KAAK4V,OAAO2Q,eAAiB,GACvHvQ,EAAMo1C,OAASxjD,EAAA0J,UAAUqM,WACxB3H,EAAMF,UAEDE,EAAMF,YAAYqnB,IAAMA,EAAInnB,EAAMF,UAAY,IACpDqnB,EAAInnB,EAAMF,UAAUha,KAAKka,GACzBmnB,EAAInnB,EAAMF,UAAUqQ,KAAK,CAACrhB,EAAGwhB,IAAMxhB,EAAErH,KAAK4/B,cAAc/W,EAAE7oB,QAJzC0/B,EAAI,IAAIrhC,KAAKka,IAOtC,OAAOmnB,EAGXM,iBACI,OAAO1hC,OAAOiqB,KAAKhmB,KAAK+V,QAAQoQ,OAGpC5mB,YAAYyW,GACR2R,EAAAc,SAASljB,MAAM,sBAAuByQ,GACtChW,KAAKqR,SAAU,EAGnB9R,iBAAiByW,GACbA,EAAM3E,SAAW2E,EAAM3E,QACvB1J,EAAAf,OAAOqC,KAAK,uBAAwB,CAAEnJ,KAAMkW,EAAMlW,KAAMuR,QAAS2E,EAAM3E,UAG3E9R,WACI,GAAqB,KAAjBS,KAAKgX,QAAgB,OACzB,MAAMhB,EAAQ,CACVlW,KAAM+H,EAAAgD,SACNiL,SAAU9V,KAAK6W,YACfpZ,KAAMuC,KAAKgX,QACX3F,SAAS,EACT+5C,KAAMxjD,EAAA0J,UAAUqM,UAEpB/V,EAAA0J,UAAU2F,SAASjB,GACnBrO,EAAAf,OAAOqC,KAAK,YAAa+M,GACzBhW,KAAK6W,YAAc,GACnB7W,KAAKgX,QAAU,GAGnBzX,YAAYO,GACR8H,EAAA0J,UAAUmF,YAAY,CAAE3W,OAAMsrD,KAAMxjD,EAAA0J,UAAUqM,WAC9ChW,EAAAf,OAAOqC,KAAK,eAAgBnJ,KAlEfqrD,EAAYrnD,EAAAiC,WAAA,CALhC9B,EAAAI,QAAU,CACP8B,WAAY,CACR21B,MAAAyD,EAAAl7B,YAGa8mD,mGCxFrB,MAAAt5C,EAAA9U,EAAA,QACAqC,EAAArC,EAAA,QACA8K,EAAA9K,EAAA,QACAmC,EAAAnC,EAAA,QACAoC,EAAApC,EAAA,QAEA,MAAaub,UAAgBnZ,EAAAG,MAIzBC,YACIoyB,EACA7iB,EAA0B,GAC1BlP,EACAC,EACAC,GAEAC,MAAM4xB,EAAY/xB,EAAYC,EAAcC,GAVhDE,KAAAC,KAAO,UACPD,KAAAghC,UAA2B,GAUvBhhC,KAAKghC,UAAYlyB,EAGrBzO,eACI,OAAOL,KAAK8Z,UAEhBzZ,aAAakB,GACT,MAAMwY,EAAQxY,EAAM+Y,SAASta,KAAK8Z,WAClC9Z,KAAK8Z,UAAYvY,EACjB,IAAK,IAAI7F,EAAI,EAAGA,EAAIsE,KAAKghC,UAAUplC,OAAQF,IAAKsE,KAAKghC,UAAUtlC,GAAKsE,KAAKghC,UAAUtlC,GAAG0O,IAAI2P,GAG9FjL,eACI,MAAO,CAAC9O,KAAK8Z,aAAc9Z,KAAKghC,WAGpCzhC,SACI,OAAOxD,OAAOmE,OAAOF,KAAKG,cAAe,CACrC2O,SAAU9O,KAAKghC,UAAU7/B,IAAItC,IAAK,CAAGyB,EAAGzB,EAAEyB,EAAGC,EAAG1B,EAAE0B,OAI1DhB,SAASnE,GACL2E,MAAM6Q,SAASxV,GACf4E,KAAKghC,UAAY5lC,EAAK0T,SAAS3N,IAAIoX,GAAK,IAAI1G,EAAAM,YAAYoG,EAAEjY,EAAGiY,EAAEhY,IAGnEH,aACI,OAAOJ,KAAK8O,SAAS3N,IAAII,GAAS,CAACA,EAAMjB,EAAGiB,EAAMhB,IAGtDhB,KAAKkB,GACDV,MAAMW,KAAKD,GACXA,EAAIq+B,QAAU,QACdr+B,EAAIsM,SAAW,QAEW,QAAtB/M,KAAKH,aAAwBY,EAAIwM,YAAcpF,EAAAinB,eACjB,IAAzB9uB,KAAK8O,SAASlT,OAAc6E,EAAIwM,YAAcjN,KAAKJ,WACvDa,EAAIwM,YAAcjN,KAAKH,aACJ,QAApBG,KAAKJ,WAAsBa,EAAIE,UAAYkH,EAAAinB,eAC1CruB,EAAIE,UAAYX,KAAKJ,WAC1Ba,EAAI4oB,UAAYjqB,EAAA4R,KAAK,GAErBvQ,EAAIuM,YACJvM,EAAI0M,OAAO/N,EAAAgO,KAAKpN,KAAK8O,SAAS,GAAGxO,GAAIlB,EAAAiO,KAAKrN,KAAK8O,SAAS,GAAGvO,IAC3D,IAAK,IAAI7E,EAAI,EAAGA,GAAKsE,KAAK8O,SAASlT,OAAQF,IAAK,CAC5C,MAAMk+C,EAAS55C,KAAK8O,SAASpT,EAAIsE,KAAK8O,SAASlT,QAC/C6E,EAAI6M,OAAOlO,EAAAgO,KAAKwsC,EAAOt5C,GAAIlB,EAAAiO,KAAKusC,EAAOr5C,IAE3CE,EAAIoP,OACJpP,EAAI+M,SAGRjO,SAASgC,GACL,OAAOvB,KAAK0B,iBAAiByI,SAAS5I,GAK1ChC,OAAOiC,GACH,OAAOxB,KAAK0B,iBAAiBgP,SAEjCnR,gBAAgBkC,GACZ,OAAOzB,KAAK0B,iBAAiBC,gBAAgBF,GAEjDlC,cACAA,gBACAA,OAAOqC,EAAqBL,GACJ,IAAhBK,EAAmB5B,KAAK8Z,UAAY1a,EAAAuT,IAAIpR,GACvCvB,KAAKghC,UAAUp/B,EAAc,GAAKxC,EAAAuT,IAAIpR,GAE/ChC,iBACI,IAAIq/B,EAAe5+B,KAAKK,SAASC,EAC7Bs4B,EAAe54B,KAAKK,SAASC,EAC7Bu+B,EAAe7+B,KAAKK,SAASE,EAC7Bs4B,EAAe74B,KAAKK,SAASE,EACjC,IAAK,MAAM1B,KAAKmB,KAAKghC,UACbniC,EAAEyB,EAAIs+B,IAAMA,EAAO//B,EAAEyB,GACrBzB,EAAEyB,EAAIs4B,IAAMA,EAAO/5B,EAAEyB,GACrBzB,EAAE0B,EAAIs+B,IAAMA,EAAOhgC,EAAE0B,GACrB1B,EAAE0B,EAAIs4B,IAAMA,EAAOh6B,EAAE0B,GAE7B,OAAO,IAAIrB,EAAAsB,aAAa,IAAIqR,EAAAM,YAAYysB,EAAMC,GAAOjG,EAAOgG,EAAM/F,EAAOgG,IA9FjF1hC,EAAAmb,6CCPA,IAAA1E,EAAA,WAA0B,IAAAC,EAAA7T,KAAa8T,EAAAD,EAAAE,eAA0BC,EAAAH,EAAAI,MAAAD,IAAAF,EAAwB,OAAAD,EAAA,SAAAG,EAAA,OAAgCU,YAAA,cAAA4B,MAAA,CAAkC8nB,gBAAAvqB,EAAAwqB,YAAAC,gBAAAzqB,EAAA0qB,cAAqE,CAAAvqB,EAAA,OAAYoB,WAAA,EAAa3X,KAAA,OAAA4X,QAAA,SAAAnX,MAAA2V,EAAA,MAAAyB,WAAA,WAAoE,CAAAzB,EAAAmB,GAAA,UAAAhB,EAAA,OAA6BoB,WAAA,EAAa3X,KAAA,OAAA4X,QAAA,SAAAnX,MAAA2V,EAAA,MAAAyB,WAAA,UAAkEZ,YAAA,eAA4Bb,EAAAgC,GAAAhC,EAAA,eAAAzV,GAAmC,OAAA4V,EAAA,OAAiBxV,IAAAJ,EAAAsW,YAAA,SAAA0B,MAAA,CAAqCi1C,kBAAAx3C,EAAA2sB,aAAApiC,GAA2CgW,GAAA,CAAK1J,MAAA,SAAA4J,GAAyBT,EAAA2sB,WAAApiC,KAAwB,CAAAyV,EAAAmB,GAAAnB,EAAAqC,GAAA9X,SAAyB4V,EAAA,OAAAH,EAAAmB,GAAA,WAAAhB,EAAA,OAAyCU,YAAA,eAA0Bb,EAAAgC,GAAAhC,EAAA,gBAAA4D,GAAqC,OAAAzD,EAAA,OAAiBxV,IAAAiZ,EAAA/C,YAAA,SAAA0B,MAAA,CAAsCi1C,kBAAAx3C,EAAA0sB,cAAA9oB,GAA6CrD,GAAA,CAAK1J,MAAA,SAAA4J,GAAyBT,EAAA0sB,YAAA9oB,KAA0B,CAAAzD,EAAA,KAAUU,YAAA,MAAA0B,MAAA,MAAAqB,SAA0CzD,EAAA,OAAAH,EAAAmB,GAAA,aAAAhB,EAAA,OAA2CU,YAAA,eAA0B,CAAAV,EAAA,gBAAqBU,YAAA,SAAAR,MAAA,CAA4B1O,MAAAqO,EAAAjU,YAAuBwU,GAAA,CAAK+b,eAAA,SAAA7b,GAAgCT,EAAAjU,WAAA0U,MAAwBN,EAAA,gBAAqBU,YAAA,SAAAR,MAAA,CAA4B1O,MAAAqO,EAAA4rB,cAAyBrrB,GAAA,CAAK+b,eAAA,SAAA7b,GAAgCT,EAAA4rB,aAAAnrB,OAA0B,GAAAN,EAAA,OAAgBoB,WAAA,EAAa3X,KAAA,OAAA4X,QAAA,SAAAnX,MAAA,gBAAA2V,EAAA0sB,YAAAjrB,WAAA,mCAAoH,CAAAzB,EAAAmB,GAAA,gBAAAhB,EAAA,SAAqCoB,WAAA,EAAa3X,KAAA,QAAA4X,QAAA,UAAAnX,MAAA2V,EAAA,UAAAyB,WAAA,aAA4E,CAAE7X,KAAA,OAAA4X,QAAA,SAAAnX,MAAA,gBAAA2V,EAAA0sB,YAAAjrB,WAAA,kCAAkHJ,YAAA,CAAeo2C,YAAA,SAAoBp3C,MAAA,CAAQjU,KAAA,QAAcwV,SAAA,CAAWvX,MAAA2V,EAAA,WAAwBO,GAAA,CAAKsB,MAAA,SAAApB,GAAyBA,EAAAlL,OAAAuM,YAAsC9B,EAAA6sB,UAAApsB,EAAAlL,OAAAlL,aAAoC2V,EAAAsC,MAC12De,EAAA,GCDAna,EAAAS,EAAAuF,EAAA,sBAAA6Q,IAAA7W,EAAAS,EAAAuF,EAAA,sBAAAmU,8DCAA,IAAAtD,EAAA,WAA0B,IAAAC,EAAA7T,KAAa8T,EAAAD,EAAAE,eAA0BC,EAAAH,EAAAI,MAAAD,IAAAF,EAAwB,OAAAE,EAAA,OAAiBU,YAAA,QAAAN,GAAA,CAAwB1J,MAAA,SAAA4J,GAAyB,OAAAA,EAAAlL,SAAAkL,EAAAi3C,cAA2C,KAAe13C,EAAAoO,KAAA3N,MAA0B,CAAAN,EAAA,OAAYU,YAAA,gBAAA4B,MAAAzC,EAAApP,YAAA,gKAA2F,oBAAAoP,EAAArO,MAAA4O,GAAA,CAAiK1J,MAAA,SAAA4J,GAAyB,OAAAA,EAAAlL,SAAAkL,EAAAi3C,cAA2C,KAAe13C,EAAAoO,KAAA3N,OAA0BN,EAAA,OAAYoB,WAAA,EAAa3X,KAAA,OAAA4X,QAAA,SAAAnX,MAAA2V,EAAA,QAAAyB,WAAA,YAAsEZ,YAAA,OAAAN,GAAA,CAAyB1J,MAAA,SAAA4J,GAAyB,OAAAA,EAAAlL,SAAAkL,EAAAi3C,cAA2C,KAAe13C,EAAA23C,YAAAl3C,OAAiCN,EAAA,iBAAsBoB,WAAA,EAAa3X,KAAA,OAAA4X,QAAA,SAAAnX,MAAA2V,EAAA,QAAAyB,WAAA,YAAsEC,IAAA,eAAAe,MAAA,CAA6B9W,SAAA,QAAA+E,KAAAsP,EAAAtP,KAAA,KAAAC,IAAAqP,EAAArP,IAAA,KAAAinD,UAAA,MAA6Ev3C,MAAA,CAAShW,MAAA2V,EAAArO,MAAAohB,SAAA,MAAkCxS,GAAA,CAAKsB,MAAA7B,EAAA63C,gBAAyB,IAC5mCx0C,EAAA,GCDAna,EAAAS,EAAAuF,EAAA,sBAAA6Q,IAAA7W,EAAAS,EAAAuF,EAAA,sBAAAmU,uCCAA,IAAAtD,EAAA,WAA0B,IAAAC,EAAA7T,KAAa8T,EAAAD,EAAAE,eAA0BC,EAAAH,EAAAI,MAAAD,IAAAF,EAAwB,OAAAD,EAAA,SAAAG,EAAA,OAAgCU,YAAA,cAAA4B,MAAA,CAAkC8nB,gBAAAvqB,EAAAwqB,YAAAC,gBAAAzqB,EAAA0qB,cAAqE,CAAAvqB,EAAA,OAAYE,MAAA,CAAOwC,GAAA,wBAA4B7C,EAAAgC,GAAAhC,EAAA,oBAAAiC,GAA4C,OAAA9B,EAAA,aAAuBxV,IAAAsX,EAAA5B,MAAA,CAAoBe,MAAA,KAAAa,EAAA,cAAAA,EAAA80C,WAAA,EAAA3sB,MAAApqB,EAAAkC,OAAAD,GAAAgoB,cAAAjqB,EAAAypB,aAAAxnB,IAA6I1B,GAAA,CAAKu3C,gBAAA93C,EAAA+3C,wBAAyC/3C,EAAAsC,MACjiBe,EAAA,GCDAna,EAAAS,EAAAuF,EAAA,sBAAA6Q,IAAA7W,EAAAS,EAAAuF,EAAA,sBAAAmU,uCCAAna,EAAAgB,EAAAgF,GAAA,IAAA8oD,EAAA9uD,EAAA,QAAA+uD,EAAA/uD,EAAA,gBAAAmG,KAAA4oD,EAAA,YAAA5oD,GAAA,SAAA1E,GAAAzB,EAAAS,EAAAuF,EAAAvE,EAAA,kBAAAstD,EAAAttD,KAAA,CAAA0E,GAAAnG,EAAA,YAAAoG,EAAApG,EAAA,QAQAqG,EAAgBrH,OAAAoH,EAAA,KAAApH,CACd+vD,EAAA,WACAD,EAAA,KACAA,EAAA,MACF,EACA,KACA,KACA,MAIAzoD,EAAAC,QAAAC,OAAA,cACeP,EAAA,WAAAK,6CCpBfrG,EAAAgB,EAAAgF,GAAA,IAAAgpD,EAAAhvD,EAAA,QAAAivD,EAAAjvD,EAAA2B,EAAAqtD,GAAA,QAAA7oD,KAAA6oD,EAAA,YAAA7oD,GAAA,SAAA1E,GAAAzB,EAAAS,EAAAuF,EAAAvE,EAAA,kBAAAutD,EAAAvtD,KAAA,CAAA0E,GAAiXH,EAAA,WAAAipD,EAAG,qCCApXjvD,EAAAgB,EAAAgF,GAAA,IAAAkpD,EAAAlvD,EAAA,QAAAmvD,EAAAnvD,EAAA,gBAAAmG,KAAAgpD,EAAA,YAAAhpD,GAAA,SAAA1E,GAAAzB,EAAAS,EAAAuF,EAAAvE,EAAA,kBAAA0tD,EAAA1tD,KAAA,CAAA0E,GAAAnG,EAAA,YAAAoG,EAAApG,EAAA,QAQAqG,EAAgBrH,OAAAoH,EAAA,KAAApH,CACdmwD,EAAA,WACAD,EAAA,KACAA,EAAA,MACF,EACA,KACA,KACA,MAIA7oD,EAAAC,QAAAC,OAAA,WACeP,EAAA,WAAAK,6CCpBf,IAAA+oD,EAAApvD,EAAA,QAAAqvD,EAAArvD,EAAA2B,EAAAytD,GAAwfC,EAAG,qCCA3f,IAAAx4C,EAAA,WAA0B,IAAAC,EAAA7T,KAAa8T,EAAAD,EAAAE,eAA0BC,EAAAH,EAAAI,MAAAD,IAAAF,EAAwB,OAAAE,EAAA,SAAmBE,MAAA,CAAO7C,QAAAwC,EAAAxC,SAAsB+C,GAAA,CAAKC,MAAAR,EAAAQ,OAAkBE,YAAAV,EAAAW,GAAA,EAAsBhW,IAAA,SAAAiW,GAAA,SAAAnX,GAA4B,OAAA0W,EAAA,OAAiBU,YAAA,eAAAR,MAAA,CAAkCS,UAAA,QAAmBP,GAAA,CAAKQ,UAAAtX,EAAAuX,UAAAC,QAAAxX,EAAAyX,UAA6C,CAAAlB,EAAAmB,GAAAnB,EAAAqC,GAAArC,EAAAoB,eAAkC,CAAAjB,EAAA,OAAYU,YAAA,cAAyB,CAAAb,EAAAmB,GAAA,SAAAnB,EAAAqC,GAAArC,EAAAw/B,UAAA,UAAAr/B,EAAA,SAA6DoB,WAAA,EAAa3X,KAAA,QAAA4X,QAAA,UAAAnX,MAAA2V,EAAA,OAAAyB,WAAA,WAAsEC,IAAA,SAAArB,MAAA,CAAsBjU,KAAA,QAAcwV,SAAA,CAAWvX,MAAA2V,EAAA,QAAqBO,GAAA,CAAKi4C,MAAA,SAAA/3C,GAAyB,iBAAAA,IAAAT,EAAAy4C,GAAAh4C,EAAAy5B,QAAA,WAAAz5B,EAAA9V,IAAA,SAA+FqV,EAAAmhC,OAAA1gC,GAAf,MAAyCoB,MAAA,SAAApB,GAA0BA,EAAAlL,OAAAuM,YAAsC9B,EAAAy/B,OAAAh/B,EAAAlL,OAAAlL,aAAiC8V,EAAA,OAAcU,YAAA,gBAA2B,CAAAV,EAAA,UAAeI,GAAA,CAAI1J,MAAAmJ,EAAAmhC,SAAoB,CAAAnhC,EAAAmB,GAAA,iBAC76BkC,EAAA,GCDAna,EAAAS,EAAAuF,EAAA,sBAAA6Q,IAAA7W,EAAAS,EAAAuF,EAAA,sBAAAmU,0GCwIAlT,EAAAF,EAAAC,gBAAAhH,EAAA,SACAkH,EAAAH,EAAAC,gBAAAhH,EAAA,SACAwvD,EAAAzoD,EAAAC,gBAAAhH,EAAA,SACAiH,EAAAK,QAAIjB,UAAU,YAAampD,EAAAloD,SAE3B,MAAAk7B,EAAAz7B,EAAAC,gBAAAhH,EAAA,SAEA8K,EAAA9K,EAAA,QACA4K,EAAA5K,EAAA,QAEA4qB,EAAA5qB,EAAA,QACAuP,EAAAvP,EAAA,QACA6K,EAAA7K,EAAA,QACAsyC,EAAAtyC,EAAA,QAQA,IAAqBspD,EAArB,cAAwCriD,EAAAK,QANxC9E,kCAOIS,KAAAqR,SAAU,EACVrR,KAAA5E,KAAyB,GACzB4E,KAAAu/C,aAA8B,KAC9Bv/C,KAAAogD,aAAe,EACfpgD,KAAAqgD,YAAa,EACbrgD,KAAAugD,YAAa,EACbvgD,KAAAwsD,cAA0B,GAE1BjtD,UACIooB,EAAAc,SAASwa,IAAI,mBAAoBjjC,KAAKmO,OACtCwZ,EAAAc,SAASwa,IAAI,oBAAsB7nC,GAAiB4E,KAAKggD,iBAAiB5kD,IAC1EusB,EAAAc,SAASwa,IAAI,kBAAmB,IAAOjjC,KAAKqR,SAAU,GAEtD1J,EAAAf,OAAOwN,GAAG,iBAAmBhZ,IACzB4E,KAAK5E,KAAOA,IAEhBuM,EAAAf,OAAOwN,GAAG,sBAAwBhZ,GAAiB4E,KAAKysD,QAAQrxD,IAChEuM,EAAAf,OAAOwN,GAAG,yBAA2BhZ,GAAiB4E,KAAKygD,WAAWrlD,GAAM,IAC5EuM,EAAAf,OAAOwN,GAAG,0BAA4BhZ,GAAiB4E,KAAKwgD,SAASplD,GAAM,IAC3EuM,EAAAf,OAAOwN,GAAG,wBAA0BhZ,IAChC,MAAM+jD,EAAQn/C,KAAK0sD,SAAStxD,EAAK+jD,YACnBz2C,IAAVy2C,GACJn/C,KAAK6/C,aAAaV,EAAO/jD,EAAK6kD,QAAQ,KAE1Ct4C,EAAAf,OAAOwN,GAAG,2BAA6BhZ,GACnC4E,KAAKkgD,aAAa9kD,EAAK+jD,MAAO/jD,EAAK6kD,QAAQ,IAInD1gD,gBACIooB,EAAAc,SAASwhC,KAAK,oBACdtiC,EAAAc,SAASwhC,KAAK,qBACdtiC,EAAAc,SAASwhC,KAAK,mBAIlB1qD,QACIS,KAAK5E,KAAO,GACZ4E,KAAKu/C,aAAe,KAExBhgD,SAASotD,GACL,OAAO3sD,KAAK5E,KAAKsyB,KAAK5oB,GAAKA,EAAEhF,OAAS6sD,GAE1CptD,SAASO,GACL,OAAOE,KAAK5E,KAAKogB,KAAKhe,GAAKA,EAAEsC,OAASA,GAE1CP,KAAK4/C,GACD,GAAIv3C,EAAA0J,UAAUC,MAAO,OAAO,EAC5B,MAAMkG,EAAQnL,EAAAO,aAAaiW,QAAQhlB,IAAIqhD,EAAMr/C,MAE7C,YAAc4I,IAAV+O,GACGA,EAAMyE,OAAO7S,SAASzB,EAAA0J,UAAUqM,UAE3Cpe,mBACI,MAAO,CAAEO,KAAM+H,EAAAgD,SAAUpN,KAAM,aAAc0iD,MAAO,IAExD5gD,YAAYwK,GACRA,EAAaC,QAAQ,OAAQ,IAEjCzK,eAAenE,GACXuM,EAAAf,OAAOqC,KAAK,oBAAqB7N,GAGrCmE,cAAcnE,GACV,MAAMoC,EAAIwC,KAAK5E,KAAKigB,UAAUvW,GAAKA,EAAEhF,OAAS1E,EAAK0E,MAC/CtC,GAAK,SACekL,IAApBtN,EAAKktB,aAA0BltB,EAAKktB,WAAa,GACrDtoB,KAAK4/C,eAAexkD,IAExBmE,iBAAiBO,GACb,MAAMtC,EAAIwC,KAAK5E,KAAKigB,UAAUvW,GAAKA,EAAEhF,OAASA,GAC9C,GAAItC,EAAI,GAAKwC,KAAK5E,KAAKoC,GAAGgU,MAAO,OACjCxR,KAAK4/C,eAAe,CAAE9/C,SAEtB,MAAM2X,EAAQnL,EAAAO,aAAaiW,QAAQhlB,IAAIgC,QACzB4I,IAAV+O,GACAA,EAAMiC,gBACNjC,EAAMiC,eAAgB,EACtBpN,EAAAO,aAAaC,SAAS2K,EAAMlF,OAAQY,YAAW,IAGvD5T,cACSqI,EAAA0J,UAAUC,OACf5J,EAAAf,OAAOqC,KAAK,iBAAkBjJ,KAAK5E,KAAK+F,IAAI3D,GAAKA,EAAEsC,OAEvDP,WAAWotD,EAAwBrvC,GAC/B,IAAK1V,EAAA0J,UAAUC,OAAS+L,EAAM,OAC9Btd,KAAKu/C,aAAeoN,EACpB,MAAMxN,EAAQn/C,KAAK5E,KAAKsyB,KAAK5oB,GAAKA,EAAEhF,OAAS6sD,GAC7C,QAAcjkD,IAAVy2C,EAAJ,CACA,GAAIA,EAAMxtC,QACN,IAAK,IAAIrG,EAAI6zC,EAAMxtC,QAAQ/V,OAAS,EAAG0P,GAAK,EAAGA,IACvC6zC,EAAMxtC,QAAQrG,GAAG60C,OAAS,EAAGhB,EAAMxtC,QAAQ7U,OAAOwO,EAAG,GACpD6zC,EAAMxtC,QAAQrG,GAAG60C,QAO9B,GAJIngD,KAAKqgD,aACW,OAAZsM,GAAoB/kD,EAAA0J,UAAUuK,YAAYxS,SAASsjD,GAAU/kD,EAAA0J,UAAUs7C,gBAAgB,CAACD,IACvF/kD,EAAA0J,UAAUs7C,gBAAgB,KAE/B5sD,KAAKugD,YACW,OAAZoM,EAAkB,CAClB,MAAMl1C,EAAQnL,EAAAO,aAAaiW,QAAQhlB,IAAI6uD,QACzBjkD,IAAV+O,GAAuBA,EAAMmE,WAC7ByzB,EAAAa,YAAY2c,kBAAkBp1C,EAAM/G,UAI5C4M,GAAM3V,EAAAf,OAAOqC,KAAK,yBAA0B0jD,IAEpDptD,SAAS6xB,EAAe9T,IACf1V,EAAA0J,UAAUC,OAAS+L,IACxBtd,KAAKogD,aAAehvB,EAChB9T,GAAM3V,EAAAf,OAAOqC,KAAK,0BAA2BmoB,IAErD7xB,QAAQotD,GACJ3sD,KAAKu/C,aAAeoN,EAExBptD,WACI,IAAKqI,EAAA0J,UAAUC,MAAO,OACtB,MAAMu7C,EAAQ9sD,KAAK5E,KACb0Q,EAAOghD,GAAOA,EAAMzxC,UAAUvW,GAAKA,EAAEhF,OAASE,KAAKu/C,cAAgB,GAAKuN,EAAMlxD,QAChFoE,KAAK5E,KAAK,GAAG0E,OAASgM,EAAKhM,MAAME,KAAKwgD,SAASxgD,KAAKogD,aAAe,GAAG,GAC1EpgD,KAAKygD,WAAW30C,EAAKhM,MAAM,GAE/BP,gBAAgB4/C,EAAuB4N,GACnC,MAAMt1C,EAAQnL,EAAAO,aAAaiW,QAAQhlB,IAAIqhD,EAAMr/C,WAC/B4I,IAAV+O,IACJA,EAAMiC,cAAgBqzC,EACtBzgD,EAAAO,aAAaC,SAAS2K,EAAMlF,OAAQY,YAAW,IAEnD5T,aAAa4/C,EAAuB6N,GAC3BhtD,KAAK2/C,KAAKR,KACfA,EAAM6N,IAAW7N,EAAM6N,GACvBhtD,KAAK4/C,eAAeT,IAExB5/C,aAAa4/C,EAAuBc,EAA0B3iC,GACrDtd,KAAK2/C,KAAKR,KACfA,EAAMxtC,QAAQ7V,KAAKmkD,GACf3iC,GAAM3V,EAAAf,OAAOqC,KAAK,wBAAyB,CAAEk2C,MAAOA,EAAMr/C,KAAMmgD,YAExE1gD,WAAW4/C,EAAuBc,GACzBjgD,KAAK2/C,KAAKR,IACfx3C,EAAAf,OAAOqC,KAAK,2BAA4B,CAAEk2C,MAAOA,EAAMr/C,KAAMmgD,WAEjE1gD,aAAaotD,EAAiB1M,EAA0B3iC,GACpD,MAAM6hC,EAAQn/C,KAAK5E,KAAKsyB,KAAK5oB,GAAKA,EAAEhF,OAAS6sD,GAC7C,QAAcjkD,IAAVy2C,EAAqB,OACzB,MAAM8N,EAAc9N,EAAMxtC,QAAQ0J,UAAU/P,GAAKA,EAAExL,OAASmgD,EAAOngD,WAC/C4I,IAAhBukD,IACJ9N,EAAMxtC,QAAQs7C,GAAehN,EACzB3iC,EAAMtd,KAAKktD,WAAW/N,EAAOc,GAC5BjgD,KAAK+W,gBAEdxX,mBACIS,KAAKqgD,YAAcrgD,KAAKqgD,WACpBrgD,KAAKqgD,YACLrgD,KAAKwsD,cAAgB,IAAI5kD,EAAA0J,UAAUk7C,eACT,OAAtBxsD,KAAKu/C,cAAyB33C,EAAA0J,UAAUuK,YAAYxS,SAASrJ,KAAKu/C,eAAe33C,EAAA0J,UAAUs7C,gBAAgB,CAAC5sD,KAAKu/C,gBAErH33C,EAAA0J,UAAUs7C,gBAAgB5sD,KAAKwsD,iBAjKtBnG,EAAUviD,EAAAiC,WAAA,CAN9B9B,EAAAI,QAAU,CACP8B,WAAY,CACR21B,MAAAyD,EAAAl7B,QACAsQ,UAAA43C,EAAAloD,YAGagiD,yEC7JrBtpD,EAAAgB,EAAAgF,GAAA,IAAAoqD,EAAApwD,EAAA,QAAAqwD,EAAArwD,EAAA,gBAAAmG,KAAAkqD,EAAA,YAAAlqD,GAAA,SAAA1E,GAAAzB,EAAAS,EAAAuF,EAAAvE,EAAA,kBAAA4uD,EAAA5uD,KAAA,CAAA0E,GAAAnG,EAAA,YAAAoG,EAAApG,EAAA,QAQAqG,EAAgBrH,OAAAoH,EAAA,KAAApH,CACdqxD,EAAA,WACAD,EAAA,KACAA,EAAA,MACF,EACA,KACA,WACA,MAIA/pD,EAAAC,QAAAC,OAAA,qBACeP,EAAA,WAAAK,gHCpBfY,EAAAF,EAAAC,gBAAAhH,EAAA,SAEA+pB,EAAA/pB,EAAA,QAGA4K,EAAA5K,EAAA,QACA8K,EAAA9K,EAAA,QAIAuP,EAAAvP,EAAA,QACAqC,EAAArC,EAAA,QACAkiB,EAAAliB,EAAA,QACAswD,EAAAtwD,EAAA,QACAslB,EAAAtlB,EAAA,QACA6K,EAAA7K,EAAA,QAOA,IAAMuwD,EAAN,cAAwBxmC,EAAAE,WADxBznB,kCAIIS,KAAAgoB,OAAmB,GACnBhoB,KAAAutD,oBAAsB,EACtBvtD,KAAAwtD,kBAAmB,EAEnBxtD,KAAAyxC,UAAsB,GAEtBzxC,KAAAkyC,OAAoB,GAEpBlyC,KAAAqyC,MAAgB,GAEhBryC,KAAAuR,OAAQ,EACRvR,KAAA4d,aAAc,EACd5d,KAAAmpB,SAAW,GACXnpB,KAAA2d,SAAW,GACX3d,KAAAytD,SAAW,GACXztD,KAAA0tD,YAAc,GACd1tD,KAAAgzC,eAAiB,GAEjBhzC,KAAAopB,WAAa,mBACbppB,KAAAk/B,UAAY,mBACZl/B,KAAAizC,YAAc,qBACdjzC,KAAA4lB,KAAO,EACP5lB,KAAA6lB,KAAO,EAEP7lB,KAAAyrB,YAAc,GAGdzrB,KAAA2/B,SAAW,EACX3/B,KAAA2hB,SAAU,EACV3hB,KAAAqtB,SAAU,EACVrtB,KAAAm/B,WAAa,GACbn/B,KAAA2uB,QAAS,EACT3uB,KAAA2tD,aAAe,GAEf3tD,KAAAob,cAAmD,GACnDpb,KAAA8a,eAA2B,GAC3B9a,KAAAiwC,YAAwB,GACxBjwC,KAAA0b,iBAA6B,GAC7B1b,KAAA6b,YAAwB,GACxB7b,KAAAwsD,cAA0B,GAE1BxsD,KAAAuuB,GAAKxyB,OAAO2hB,OAAO,IAAI2vC,EAAA3Q,eAAe,KAEtC18C,KAAAuiB,WAAiC,MACjCviB,KAAA4mD,eAAgB,EAChB5mD,KAAA6yC,eAAiB,KACjB7yC,KAAA8yC,eAAiB,KAEjB9yC,KAAAkuC,UAA2B,GAG3BluC,KAAA+V,OAAoC,GAEpC/V,KAAA4jD,eAAgB,EAChB5jD,KAAAu9B,aAAyB,GAEzBv9B,KAAA8qB,QAAS,EAETE,oBACI,OAAOhrB,KAAKgoB,OAAOhoB,KAAKutD,oBAG5Bt6C,iBACI,OAAOgM,EAAAmgB,UAAUp/B,KAAKyrB,aAG1B5N,mBACI,OAAkC,IAA9B7d,KAAKwsD,cAAc5wD,OAAqBoE,KAAK6b,YAC1C7b,KAAKwsD,cAIhBjtD,cAAcrB,GACV8B,KAAK4d,YAAc1f,EACnB8B,KAAKuR,OAASrT,EACdoO,EAAAO,aAAasG,aAIjB5T,eAAe8qB,GACPA,IAASrqB,KAAKyrB,cACdpB,EAAO,IAAGA,EAAO,GACjBA,EAAO,IAAGA,EAAO,GACrBrqB,KAAKyrB,YAAcpB,EACnB/d,EAAAO,aAAasG,cAIjB5T,cAAcnE,GACV4E,KAAKuiB,WAAannB,EAAKgD,KACnBhD,EAAKkiB,MAAM3V,EAAAf,OAAOqC,KAAK,uBAAwB,CAAE2kD,YAAaxyD,EAAKgD,OAI3EmB,oBAAoBiuD,GAChBxtD,KAAKwtD,iBAAmBA,EAI5BjuD,wBACIS,KAAK4jD,eAAiB5jD,KAAK4jD,cAI/BrkD,SAASyW,GACLhS,EAAAK,QAAI24B,IAAIh9B,KAAK+V,OAAQC,EAAMlW,KAAMkW,GAIrCzW,gBAAgBsuD,GACZ7tD,KAAKu9B,aAAeswB,EAIxBtuD,mBAAmBnE,GACTA,EAAK0E,QAAQE,KAAK+V,SACxB/V,KAAK+V,OAAO3a,EAAK0E,MAAMuR,QAAUjW,EAAKiW,SAI1C9R,YAAYnE,GACR,KAAMA,EAAK0E,QAAQE,KAAK+V,QAAS,OACjC,MAAMC,EAAQhW,KAAK+V,OAAO3a,EAAK0E,MACzBguD,EAA6B,IAAIC,IACvC,IAAK,MAAMt2C,KAASnL,EAAAO,aAAaiW,QAAQmR,SAAU,CAC/C,MAAMv4B,EAAI+b,EAAM1B,OAAOzM,QAAQ0M,GAC3Bta,GAAK,IACL+b,EAAM1B,OAAOjZ,OAAOpB,EAAG,GACvBoyD,EAAc1jD,IAAIqN,EAAMlF,QAGhC,IAAK,MAAMA,KAASu7C,EAAexhD,EAAAO,aAAaC,SAASyF,GAAQY,YAAW,GAC5EnP,EAAAK,QAAIkF,OAAOvJ,KAAK+V,OAAQ3a,EAAK0E,MAIjCP,MAAMyuD,GACFhuD,KAAKuR,MAAQy8C,EAIjBzuD,YAAYoe,GACR3d,KAAK2d,SAAWA,EAIpBpe,YAAY9B,GACRuC,KAAKytD,SAAWhwD,EAIpB8B,eAAe9B,GACXuC,KAAK0tD,YAAcjwD,EAIvB8B,kBAAkB+mD,GACdtmD,KAAKgzC,eAAiBsT,EAI1B/mD,SAAS9B,GACLuC,KAAKgoB,OAAOlsB,KAAK2B,IACgB,IAA7BuC,KAAKutD,qBAA2BvtD,KAAKutD,mBAAqBvtD,KAAKgoB,OAAO1e,QAAQ7L,IAItF8B,YAAYnE,GACR,MAAMwW,EAAQ5R,KAAKgoB,OAAO1e,QAAQlO,EAAKqC,MACnCmU,GAAS,IAAG5R,KAAKutD,mBAAqB37C,GACtCxW,EAAKkiB,MAAM3V,EAAAf,OAAOqC,KAAK,yBAA0B7N,EAAKqC,MAI9D8B,QAAQnE,GACJ4E,KAAKqyC,MAAMv2C,KAAKV,EAAKijB,MACjBjjB,EAAKkiB,MAAM3V,EAAAf,OAAOqC,KAAK,WAAY7N,EAAKijB,MAIhD9e,UAAU2yC,GACNlyC,KAAKkyC,OAASA,EAIlB3yC,aAAakyC,GACTzxC,KAAKyxC,UAAYA,EAIrBlyC,iBACIS,KAAKgoB,OAAS,GACdhoB,KAAKutD,oBAAsB,EAI/BhuD,kBAAkBiqD,GAAU,GACpBxpD,KAAKwtD,mBACmB,aAApBxtD,KAAKuiB,WAA2BF,EAAAknC,YAAY,SAAUC,GACrDxpD,KAAKuuB,GAAKxyB,OAAO2hB,OAAO,IAAI2vC,EAAA3Q,eAAe18C,KAAK8a,kBAK7Dvb,oBAAoBiqD,GAAU,GACtBxpD,KAAKwtD,kBAAwC,aAApBxtD,KAAKuiB,YAA2BF,EAAAknC,YAAY,WAAYC,GAIzFjqD,WAAWnE,GACP,GAAIA,EAAKq7C,iBAAmBz2C,KAAKyrB,YAAa,OAC1CrwB,EAAKq7C,eAAiB,IAAGr7C,EAAKq7C,eAAiB,GAC/Cr7C,EAAKq7C,eAAiB,IAAGr7C,EAAKq7C,eAAiB,GACnD,MAAMwX,EAAS7uD,EAAA0B,IAAI1F,EAAKs7C,cACxB12C,KAAKyrB,YAAcrwB,EAAKq7C,eACxB,MAAMyX,EAAS9uD,EAAAuT,IAAIs7C,GAEb58B,EAAO68B,EAAO5zC,SAASlf,EAAKs7C,cAClC12C,KAAK4lB,MAAQyL,EAAK/wB,EAClBN,KAAK6lB,MAAQwL,EAAK9wB,EAClB+L,EAAAO,aAAasG,aACbtL,EAAA6d,oBAIJnmB,cAAcnE,GACV4E,KAAKopB,WAAahuB,EAAKuR,OACvBL,EAAAO,aAAashD,eAAgBllC,WACzB7tB,EAAKkiB,MAAM3V,EAAAf,OAAOqC,KAAK,qBAAsB,CAAEmgB,WAAYhuB,EAAKuR,SAIxEpN,aAAanE,GACT4E,KAAKk/B,UAAY9jC,EAAKuR,OACtBL,EAAAO,aAAasG,aACT/X,EAAKkiB,MAAM3V,EAAAf,OAAOqC,KAAK,qBAAsB,CAAEi2B,UAAW9jC,EAAKuR,SAIvEpN,eAAenE,GACX4E,KAAKizC,YAAc73C,EAAKuR,OACpBvR,EAAKkiB,MAAM3V,EAAAf,OAAOqC,KAAK,qBAAsB,CAAEgqC,YAAa73C,EAAKuR,SAIzEpN,QAAQe,GACJN,KAAK4lB,KAAOtlB,EAIhBf,QAAQgB,GACJP,KAAK6lB,KAAOtlB,EAIhBhB,aAAa6uD,GACTpuD,KAAK4lB,MAAQwoC,EAIjB7uD,aAAa6uD,GACTpuD,KAAK6lB,MAAQuoC,EAIjB7uD,YAAYnE,GACJ4E,KAAK2/B,WAAavkC,EAAKukC,UAAYvkC,EAAKukC,SAAW,GAAKvkC,EAAKukC,SAAWxwB,MACxEnP,KAAK2/B,SAAWvkC,EAAKukC,SACrBrzB,EAAAO,aAAasG,aACT/X,EAAKkiB,MAAM3V,EAAAf,OAAOqC,KAAK,uBAAwB,CAAEolD,UAAWjzD,EAAKukC,YAK7EpgC,WAAWnE,GACP,GAAI4E,KAAK2hB,UAAYvmB,EAAKumB,QAAS,CAC/B3hB,KAAK2hB,QAAUvmB,EAAKumB,QACpB,MAAM2sC,EAAYhiD,EAAAO,aAAashD,eAC3B/yD,EAAKumB,QAAS2sC,EAAU7sD,OAAO6U,MAAMhS,QAAU,QAC9CgqD,EAAU7sD,OAAO6U,MAAMhS,QAAU,OAClClJ,EAAKkiB,MAAM3V,EAAAf,OAAOqC,KAAK,uBAAwB,CAAEslD,SAAUnzD,EAAKumB,WAK5EpiB,YAAYnE,GACR,GAAI4E,KAAKmpB,WAAa/tB,EAAK+tB,UAAY/tB,EAAK+tB,SAAW,EAAG,CACtDnpB,KAAKmpB,SAAW/tB,EAAK+tB,SACrB,MAAMmlC,EAAYhiD,EAAAO,aAAashD,oBACbzlD,IAAd4lD,GAAyBA,EAAUrlC,WACnC7tB,EAAKkiB,MAAM3V,EAAAf,OAAOqC,KAAK,eAAgB7N,EAAK+tB,WAKxD5pB,kBAAkBnE,GACd4E,KAAK6yC,eAAiBz3C,EAAK8C,MAC3BoO,EAAAO,aAAaq2C,kBACT9nD,EAAKkiB,MAAM3V,EAAAf,OAAOqC,KAAK,uBAAwB,CAAEulD,iBAAkBpzD,EAAK8C,QAIhFqB,kBAAkBnE,GACd4E,KAAK8yC,eAAiB5wC,KAAKC,IAAI/G,EAAK8C,MAAO8B,KAAK6yC,gBAChDvmC,EAAAO,aAAaq2C,kBACT9nD,EAAKkiB,MAAM3V,EAAAf,OAAOqC,KAAK,uBAAwB,CAAEwlD,iBAAkBzuD,KAAK8yC,iBAIhFvzC,WAAWnE,GACH4E,KAAKqtB,UAAYjyB,EAAKiyB,UACtBrtB,KAAKqtB,QAAUjyB,EAAKiyB,QACpB/gB,EAAAO,aAAaq2C,kBACT9nD,EAAKkiB,MAAM3V,EAAAf,OAAOqC,KAAK,uBAAwB,CAAEylD,SAAUtzD,EAAKiyB,WAK5E9tB,cAAcnE,GACV4E,KAAKm/B,WAAa/jC,EAAK+jC,WACvB7yB,EAAAO,aAAaq2C,kBACT9nD,EAAKkiB,MAAM3V,EAAAf,OAAOqC,KAAK,uBAAwB,CAAE0lD,YAAavzD,EAAK+jC,aAI3E5/B,eAAenE,GACP4E,KAAK2uB,SAAWvzB,EAAKuzB,SACrB3uB,KAAK2uB,OAASvzB,EAAKuzB,OACnBriB,EAAAO,aAAasG,aACT/X,EAAKkiB,MAAM3V,EAAAf,OAAOqC,KAAK,uBAAwB,CAAE2lD,QAASxzD,EAAKuzB,UAK3EpvB,gBAAgB9B,GACZuC,KAAK2tD,aAAelwD,EAIxB8B,WAAWnE,GACP,MAAMyzD,EAAa7uD,KAAKqyC,MAAM3kB,KAAKhvB,GAAKA,EAAEoB,OAAS1E,EAAKijB,KAAKve,WAC1C4I,IAAfmmD,IACJA,EAAW55C,MAAQ7Z,EAAKijB,KAAKpJ,MAC7B45C,EAAWpvD,KAAOrE,EAAKijB,KAAK5e,KACxBrE,EAAKkiB,MAAM3V,EAAAf,OAAOqC,KAAK,cAAe4lD,IAI9CtvD,WAAWnE,GACP4E,KAAKqyC,MAAQryC,KAAKqyC,MAAMpsB,OAAOvnB,GAAKA,EAAEoB,OAAS1E,EAAKijB,KAAKve,MACrD1E,EAAKkiB,MAAM3V,EAAAf,OAAOqC,KAAK,cAAe7N,EAAKijB,KAAKve,MAIxDP,WACIS,KAAK8qB,QAAU9qB,KAAK8qB,OAIxBvrB,aAAa2uC,GACTluC,KAAKkuC,UAAYA,EAIrB3uC,gBAAgBqqB,GACZ5pB,KAAKwsD,cAAgB5iC,EACrBtd,EAAAO,aAAaq2C,kBAIjB3jD,eAAewY,GACX/X,KAAKwsD,cAAc1wD,KAAKic,GACxBzL,EAAAO,aAAaq2C,kBAIjB3jD,kBAAkBwY,GACoB,IAA9B/X,KAAKwsD,cAAc5wD,SACnBoE,KAAKwsD,cAAgB,IAAIxsD,KAAK6b,cAElC7b,KAAKwsD,cAAc1vD,OAAOkD,KAAKwsD,cAAcljD,QAAQyO,GAAQ,GAC7DzL,EAAAO,aAAaq2C,kBAIjB3jD,QACUS,KAAK8uD,QAAQpc,MAAOt3B,cAAgB,GACpCpb,KAAK8uD,QAAQpc,MAAO53B,eAAiB,GACrC9a,KAAK8uD,QAAQpc,MAAO72B,YAAc,GAClC7b,KAAK8uD,QAAQpc,MAAOzC,YAAc,GAClCjwC,KAAK8uD,QAAQpc,MAAOh3B,iBAAmB,GACvC1b,KAAK8uD,QAAQpc,MAAOL,MAAQ,GAClCryC,KAAK8uD,QAAQC,OAAO,qBACpB/uD,KAAK8uD,QAAQC,OAAO,yBAjUxBjrD,EAAAiC,WAAA,CADC+gB,EAAAG,4CAQDnjB,EAAAiC,WAAA,CADC+gB,EAAAG,6CAUDnjB,EAAAiC,WAAA,CADC+gB,EAAAG,4CAODnjB,EAAAiC,WAAA,CADC+gB,EAAAG,kDAMDnjB,EAAAiC,WAAA,CADC+gB,EAAAG,oDAMDnjB,EAAAiC,WAAA,CADC+gB,EAAAG,uCAMDnjB,EAAAiC,WAAA,CADC+gB,EAAAG,8CAMDnjB,EAAAiC,WAAA,CADC+gB,EAAAG,iDAODnjB,EAAAiC,WAAA,CADC+gB,EAAAG,0CAiBDnjB,EAAAiC,WAAA,CADC+gB,EAAAG,oCAMDnjB,EAAAiC,WAAA,CADC+gB,EAAAG,0CAMDnjB,EAAAiC,WAAA,CADC+gB,EAAAG,0CAMDnjB,EAAAiC,WAAA,CADC+gB,EAAAG,6CAMDnjB,EAAAiC,WAAA,CADC+gB,EAAAG,gDAMDnjB,EAAAiC,WAAA,CADC+gB,EAAAG,uCAODnjB,EAAAiC,WAAA,CADC+gB,EAAAG,0CAQDnjB,EAAAiC,WAAA,CADC+gB,EAAAG,sCAODnjB,EAAAiC,WAAA,CADC+gB,EAAAG,wCAMDnjB,EAAAiC,WAAA,CADC+gB,EAAAG,2CAMDnjB,EAAAiC,WAAA,CADC+gB,EAAAG,6CAODnjB,EAAAiC,WAAA,CADC+gB,EAAAG,gDASDnjB,EAAAiC,WAAA,CADC+gB,EAAAG,kDAMDnjB,EAAAiC,WAAA,CADC+gB,EAAAG,yCAiBDnjB,EAAAiC,WAAA,CADC+gB,EAAAG,4CAQDnjB,EAAAiC,WAAA,CADC+gB,EAAAG,2CAQDnjB,EAAAiC,WAAA,CADC+gB,EAAAG,6CAODnjB,EAAAiC,WAAA,CADC+gB,EAAAG,sCAMDnjB,EAAAiC,WAAA,CADC+gB,EAAAG,sCAMDnjB,EAAAiC,WAAA,CADC+gB,EAAAG,2CAMDnjB,EAAAiC,WAAA,CADC+gB,EAAAG,2CAMDnjB,EAAAiC,WAAA,CADC+gB,EAAAG,0CAUDnjB,EAAAiC,WAAA,CADC+gB,EAAAG,yCAYDnjB,EAAAiC,WAAA,CADC+gB,EAAAG,0CAWDnjB,EAAAiC,WAAA,CADC+gB,EAAAG,gDAQDnjB,EAAAiC,WAAA,CADC+gB,EAAAG,gDAQDnjB,EAAAiC,WAAA,CADC+gB,EAAAG,yCAUDnjB,EAAAiC,WAAA,CADC+gB,EAAAG,4CAQDnjB,EAAAiC,WAAA,CADC+gB,EAAAG,6CAUDnjB,EAAAiC,WAAA,CADC+gB,EAAAG,8CAMDnjB,EAAAiC,WAAA,CADC+gB,EAAAG,yCAUDnjB,EAAAiC,WAAA,CADC+gB,EAAAG,yCAODnjB,EAAAiC,WAAA,CADC+gB,EAAAG,uCAMDnjB,EAAAiC,WAAA,CADC+gB,EAAAG,2CAMDnjB,EAAAiC,WAAA,CADC+gB,EAAAG,8CAODnjB,EAAAiC,WAAA,CADC+gB,EAAAG,6CAODnjB,EAAAiC,WAAA,CADC+gB,EAAAG,gDAUDnjB,EAAAiC,WAAA,CADC+gB,EAAAkoC,kCAnYC1B,EAASxpD,EAAAiC,WAAA,CADd+gB,EAAAI,OAAO,CAAEC,SAAS,EAAMC,MAAOxf,EAAAyf,UAAW5pB,KAAM,OAAQ6pB,YAAY,KAC/DgmC,GAgZOnwD,EAAAmU,UAAYwV,EAAAS,UAAU+lC,sCCtanC,IAAA2B,EAAAlyD,EAAA,QAAAmyD,EAAAnyD,EAAA2B,EAAAuwD,GAAyfC,EAAG,4DCA5fnyD,EAAAgB,EAAAgF,GAAA,IAAAosD,EAAApyD,EAAA,QAAAqyD,EAAAryD,EAAA2B,EAAAywD,GAAA,QAAAjsD,KAAAisD,EAAA,YAAAjsD,GAAA,SAAA1E,GAAAzB,EAAAS,EAAAuF,EAAAvE,EAAA,kBAAA2wD,EAAA3wD,KAAA,CAAA0E,GAAmXH,EAAA,WAAAqsD,EAAG,sFCEzWjyD,EAAAof,gBAAkB,CAAClD,IAC5B,MAAM5c,EAAS,GACf,IAAK,MAAM6e,KAAQjC,EACf5c,EAAOX,KAAK,CACRgE,KAAMwb,EAAKxb,KACXyb,aAAcD,EAAK+zC,cACnBh+C,QAASiK,EAAKjK,QACd5T,KAAM6d,EAAK7d,KACXS,MAAOod,EAAKpd,MACZ0e,IAAKtB,EAAKsB,IACVjQ,OAAQ2O,EAAK3O,SAGrB,OAAOlQ,IAGEU,EAAA8e,cAAgB,CAAC5C,IAC1B,MAAM5c,EAAS,GACf,IAAK,MAAM6e,KAAQjC,EACf5c,EAAOX,KAAK,CACRgE,KAAMwb,EAAKxb,KACXuvD,cAAe/zC,EAAKC,aACpBlK,QAASiK,EAAKjK,QACd5T,KAAM6d,EAAK7d,KACXS,MAAOod,EAAKpd,MACZ0e,IAAKtB,EAAKsB,IACVjQ,OAAQ2O,EAAK3O,SAGrB,OAAOlQ,uCC/BXM,EAAAgB,EAAAgF,GAAA,IAAAusD,EAAAvyD,EAAA,QAAAwyD,EAAAxyD,EAAA2B,EAAA4wD,GAAA,QAAApsD,KAAAosD,EAAA,YAAApsD,GAAA,SAAA1E,GAAAzB,EAAAS,EAAAuF,EAAAvE,EAAA,kBAAA8wD,EAAA9wD,KAAA,CAAA0E,GAAyVH,EAAA,WAAAwsD,EAAG,qCCA5VxyD,EAAAgB,EAAAgF,GAAA,IAAAysD,EAAAzyD,EAAA,QAAA0yD,EAAA1yD,EAAA,gBAAAmG,KAAAusD,EAAA,YAAAvsD,GAAA,SAAA1E,GAAAzB,EAAAS,EAAAuF,EAAAvE,EAAA,kBAAAixD,EAAAjxD,KAAA,CAAA0E,GAAAnG,EAAA,YAAAoG,EAAApG,EAAA,QAQAqG,EAAgBrH,OAAAoH,EAAA,KAAApH,CACd0zD,EAAA,WACAD,EAAA,KACAA,EAAA,MACF,EACA,KACA,WACA,MAIApsD,EAAAC,QAAAC,OAAA,WACeP,EAAA,WAAAK,6CCpBfrG,EAAAgB,EAAAgF,GAAA,IAAA2sD,EAAA3yD,EAAA,QAAA4yD,EAAA5yD,EAAA,gBAAAmG,KAAAysD,EAAA,YAAAzsD,GAAA,SAAA1E,GAAAzB,EAAAS,EAAAuF,EAAAvE,EAAA,kBAAAmxD,EAAAnxD,KAAA,CAAA0E,GAAAnG,EAAA,YAAAoG,EAAApG,EAAA,QAQAqG,EAAgBrH,OAAAoH,EAAA,KAAApH,CACd4zD,EAAA,WACAD,EAAA,KACAA,EAAA,MACF,EACA,KACA,WACA,MAIAtsD,EAAAC,QAAAC,OAAA,iBACeP,EAAA,WAAAK,8FCnBf,MAAAwsD,EAAA7yD,EAAA,QACA8yD,EAAA9yD,EAAA,QACA+yD,EAAA/yD,EAAA,QACA8rB,EAAA9rB,EAAA,QACAuP,EAAAvP,EAAA,QACA6K,EAAA7K,EAAA,QAEA,SAAgBgzD,EAAYC,GAExB,MAAMvuD,EAAS+I,SAASkiB,cAAc,UAMtC,IAAIna,EALJ9Q,EAAO6U,MAAM25C,OAAS3jD,EAAAO,aAAamb,OAAOpsB,OAAO82B,WACjDjxB,EAAOQ,MAAQlD,OAAO6G,WACtBnE,EAAOqR,OAAS/T,OAAO+G,YAISyM,EAAR,SAApBy9C,EAAUr4C,MAA0B,IAAIm4C,EAAAhnC,UAAUrnB,EAAQuuD,EAAUvyD,MAC3C,QAApBuyD,EAAUr4C,MAAyB,IAAIi4C,EAAAtjC,SAAS7qB,EAAQuuD,EAAUvyD,MAC9C,gBAApBuyD,EAAUr4C,MAAiC,IAAIk4C,EAAAlN,gBAAgBlhD,EAAQuuD,EAAUvyD,MAC7E,IAAIorB,EAAAE,MAAMtnB,EAAQuuD,EAAUvyD,MACzC8U,EAAM0V,WAAa+nC,EAAU/nC,WAC7B1V,EAAM2V,eAAiB8nC,EAAUE,gBACjC5jD,EAAAO,aAAaw/B,SAAS95B,GAGtB,MAAMyV,EAASxd,SAASC,eAAe,UACxB,OAAXud,GAImB,gBAAnBgoC,EAAUvyD,MAAwBuqB,EAAOqL,YAAY5xB,GAEjC,SAApBuuD,EAAUr4C,OAAoBq4C,EAAUhlD,MAAMpD,EAAA0J,UAAUknC,YAAY,CAAErvB,SAAU6mC,EAAUhlD,KAAMsS,MAAM,IAE1G/K,EAAM49C,UAAUH,EAAUvyC,SAPtBpO,QAAQoD,KAAK,8EApBrBtV,EAAA4yD,iDCRAhzD,EAAAgB,EAAAgF,GAAA,IAAAqtD,EAAArzD,EAAA,QAAAszD,EAAAtzD,EAAA,gBAAAmG,KAAAmtD,EAAA,YAAAntD,GAAA,SAAA1E,GAAAzB,EAAAS,EAAAuF,EAAAvE,EAAA,kBAAA6xD,EAAA7xD,KAAA,CAAA0E,GAAAnG,EAAA,YAAAoG,EAAApG,EAAA,QAQAqG,EAAgBrH,OAAAoH,EAAA,KAAApH,CACds0D,EAAA,WACAD,EAAA,KACAA,EAAA,MACF,EACA,KACA,WACA,MAIAhtD,EAAAC,QAAAC,OAAA,aACeP,EAAA,WAAAK,6CCpBfrG,EAAAgB,EAAAgF,GAAA,IAAAutD,EAAAvzD,EAAA,QAAAwzD,EAAAxzD,EAAA2B,EAAA4xD,GAAA,QAAAptD,KAAAotD,EAAA,YAAAptD,GAAA,SAAA1E,GAAAzB,EAAAS,EAAAuF,EAAAvE,EAAA,kBAAA8xD,EAAA9xD,KAAA,CAAA0E,GAAuXH,EAAA,WAAAwtD,EAAG,qCCA1X,IAAA38C,EAAA,WAA0B,IAAAC,EAAA7T,KAAa8T,EAAAD,EAAAE,eAA0BC,EAAAH,EAAAI,MAAAD,IAAAF,EAAwB,OAAAE,EAAA,OAAAA,EAAA,OAA2BE,MAAA,CAAOwC,GAAA,eAAmB,CAAA1C,EAAA,KAAAH,EAAAgC,GAAAhC,EAAA,sBAAAqvB,GAAmD,OAAAlvB,EAAA,MAAgBoB,WAAA,EAAa3X,KAAA,OAAA4X,QAAA,SAAAnX,MAAA2V,EAAA28C,YAAAttB,GAAA5tB,WAAA,sBAA0F9W,IAAA0kC,EAAA3tB,IAAA2tB,EAAA,YAAAutB,UAAA,EAAAr6C,MAAA,CAAuDs6C,gBAAA78C,EAAA27B,cAAAtM,GAA0C9uB,GAAA,CAAKmW,UAAA,SAAAjW,GAA6BT,EAAA27B,YAAAtM,KAAyB,CAAAlvB,EAAA,KAAUE,MAAA,CAAOgX,KAAA,MAAY,CAAArX,EAAAmB,GAAAnB,EAAAqC,GAAAgtB,aAA2BlvB,EAAA,QAAAA,EAAA,eAAkCoB,WAAA,EAAa3X,KAAA,OAAA4X,QAAA,SAAAnX,MAAA,WAAA2V,EAAA27B,YAAAl6B,WAAA,6BAAwGC,IAAA,eAAmBvB,EAAA,YAAiBoB,WAAA,EAAa3X,KAAA,OAAA4X,QAAA,SAAAnX,MAAA,QAAA2V,EAAA27B,YAAAl6B,WAAA,4BAAoGtB,EAAA,cAAAA,EAAA,aAAmCoB,WAAA,EAAa3X,KAAA,OAAA4X,QAAA,SAAAnX,MAAA,SAAA2V,EAAA27B,YAAAl6B,WAAA,8BAAsG,GAAAtB,EAAA,cAAuBoB,WAAA,EAAa3X,KAAA,OAAA4X,QAAA,SAAAnX,MAAA,UAAA2V,EAAA27B,YAAAl6B,WAAA,8BAAwGtB,EAAA,YAAiBoB,WAAA,EAAa3X,KAAA,OAAA4X,QAAA,SAAAnX,MAAA,QAAA2V,EAAA27B,YAAAl6B,WAAA,4BAAoGtB,EAAA,eAAoBoB,WAAA,EAAa3X,KAAA,OAAA4X,QAAA,SAAAnX,MAAA,WAAA2V,EAAA27B,YAAAl6B,WAAA,+BAA0GtB,EAAA,eAAoBoB,WAAA,EAAa3X,KAAA,OAAA4X,QAAA,SAAAnX,MAAA,WAAA2V,EAAA27B,YAAAl6B,WAAA,+BAA0GtB,EAAA,cAAmBuB,IAAA,iBAAmBvB,EAAA,sBAA2BuB,IAAA,wBAAwB,MAC3kD2B,EAAA,GCDAna,EAAAS,EAAAuF,EAAA,sBAAA6Q,IAAA7W,EAAAS,EAAAuF,EAAA,sBAAAmU,uCCAA,IAAAtD,EAAA,WAA0B,IAAAC,EAAA7T,KAAa8T,EAAAD,EAAAE,eAA0BC,EAAAH,EAAAI,MAAAD,IAAAF,EAAwB,OAAAE,EAAA,QAAkBI,GAAA,CAAIu8C,QAAA98C,EAAA88C,QAAAC,SAAA/8C,EAAA+8C,SAAA5b,OAAA,SAAA1gC,GAAgG,OAAxBA,EAAAqW,iBAAwB9W,EAAAg9C,MAAAv8C,MAA2B,CAAAN,EAAA,YAAAA,EAAA,UAA8BU,YAAA,UAAqB,CAAAb,EAAAmB,GAAA,gBAAAhB,EAAA,OAAmCU,YAAA,SAAoB,CAAAV,EAAA,SAAcoB,WAAA,EAAa3X,KAAA,QAAA4X,QAAA,UAAAnX,MAAA2V,EAAA,SAAAyB,WAAA,aAA0EpB,MAAA,CAASjU,KAAA,OAAAxC,KAAA,WAAA+X,YAAA,WAAAs7C,aAAA,WAAAC,SAAA,IAAiGt7C,SAAA,CAAWvX,MAAA2V,EAAA,UAAuBO,GAAA,CAAKsB,MAAA,SAAApB,GAAyBA,EAAAlL,OAAAuM,YAAsC9B,EAAA8J,SAAArJ,EAAAlL,OAAAlL,WAAmC2V,EAAA89B,GAAA,KAAA39B,EAAA,OAAwBU,YAAA,SAAoB,CAAAV,EAAA,SAAcoB,WAAA,EAAa3X,KAAA,QAAA4X,QAAA,UAAAnX,MAAA2V,EAAA,SAAAyB,WAAA,aAA0EpB,MAAA,CAASjU,KAAA,WAAAxC,KAAA,WAAA+X,YAAA,WAAAs7C,aAAA,mBAAAC,SAAA,IAA6Gt7C,SAAA,CAAWvX,MAAA2V,EAAA,UAAuBO,GAAA,CAAKsB,MAAA,SAAApB,GAAyBA,EAAAlL,OAAAuM,YAAsC9B,EAAAu0C,SAAA9zC,EAAAlL,OAAAlL,WAAmC2V,EAAA89B,GAAA,KAAA39B,EAAA,OAAwBkB,YAAA,CAAa5Q,QAAA,SAAkB,CAAA0P,EAAA,UAAekB,YAAA,CAAa87C,WAAA,SAAA1sD,QAAA,QAAuC4P,MAAA,CAAQjU,KAAA,SAAAxC,KAAA,WAAgCuW,EAAA,UAAeU,YAAA,SAAAR,MAAA,CAA4BjU,KAAA,SAAAxC,KAAA,WAAAwX,MAAA,YAAqDb,GAAA,CAAK1J,MAAAmJ,EAAAo9C,WAAsB,CAAAj9C,EAAA,KAAUU,YAAA,kBAA0Bb,EAAA89B,GAAA,OAAA99B,EAAA,MAAAG,EAAA,OAAwCU,YAAA,YAAuB,CAAAV,EAAA,KAAUU,YAAA,SAAoB,CAAAV,EAAA,UAAAH,EAAAmB,GAAA,YAAAnB,EAAAmB,GAAA,WAAAnB,EAAAqC,GAAArC,EAAAkvB,OAAA,cAAAlvB,EAAAsC,QAC19Ce,EAAA,YAAoC,IAAArD,EAAA7T,KAAa8T,EAAAD,EAAAE,eAA0BC,EAAAH,EAAAI,MAAAD,IAAAF,EAAwB,OAAAE,EAAA,QAAAA,EAAA,KAA0BU,YAAA,0BAAqC,WAAc,IAAAb,EAAA7T,KAAa8T,EAAAD,EAAAE,eAA0BC,EAAAH,EAAAI,MAAAD,IAAAF,EAAwB,OAAAE,EAAA,QAAAA,EAAA,KAA0BU,YAAA,mBAA8B,WAAc,IAAAb,EAAA7T,KAAa8T,EAAAD,EAAAE,eAA0BC,EAAAH,EAAAI,MAAAD,IAAAF,EAAwB,OAAAE,EAAA,UAAoBU,YAAA,SAAAR,MAAA,CAA4BjU,KAAA,SAAAxC,KAAA,QAAAwX,MAAA,UAAgD,CAAAjB,EAAA,KAAUU,YAAA,2BCD9d3X,EAAAS,EAAAuF,EAAA,sBAAA6Q,IAAA7W,EAAAS,EAAAuF,EAAA,sBAAAmU,0GC0CAlT,EAAAF,EAAAC,gBAAAhH,EAAA,SACAkH,EAAAH,EAAAC,gBAAAhH,EAAA,SAGAm0D,EAAAptD,EAAAC,gBAAAhH,EAAA,SAEA8K,EAAA9K,EAAA,QACA4K,EAAA5K,EAAA,QACA4qB,EAAA5qB,EAAA,QACAuP,EAAAvP,EAAA,QAQA,IAAqBo0D,EAArB,cAA2CntD,EAAAK,QAL3C9E,kCAMIS,KAAAyX,MAAsB,KAEtBlY,UACIooB,EAAAc,SAASwa,IAAI,0BAA4BxrB,IACrCzX,KAAKyX,MAAQA,IAIrBlY,gBACIooB,EAAAc,SAASwhC,KAAK,2BAGlB1qD,iBACUS,KAAK0E,MAAM0sD,WAAY//C,SAAU,EAE3C9R,YAAYZ,EAAwBuiB,GACb,OAAflhB,KAAKyX,OACT5P,EAAA0Y,OAAe,UACVrX,eAAevK,EAAOlB,0BAA2BkB,EAAOlB,QACxD0iC,KACIjiC,IACG,GAAmB,OAAf8B,KAAKyX,MAAgB,OACzB,MAAM45C,EAAU1yD,EAAOT,MACN,MAAbA,EAAM,IAA2B,MAAbA,EAAM,GAAYS,EAAOT,OAASy+B,SAASz+B,EAAO,IACrES,EAAOT,MAAQy+B,SAASz+B,EAAO,IAChCozD,MAAM3yD,EAAOT,SAAQS,EAAOT,MAAQmzD,GACxC1pD,EAAAf,OAAOqC,KAAK,eAAgB,CAAEwO,MAAOzX,KAAKyX,MAAMwJ,SAAUC,SAAQC,WAAW,IACzED,GAAQ5U,EAAAO,aAAasG,cAE7B,UA9BKg+C,EAAartD,EAAAiC,WAAA,CALjC9B,EAAAI,QAAU,CACP8B,WAAY,CACRorD,cAAeL,EAAA7sD,YAGF8sD,iJC1DrB,MAAAxpD,EAAA5K,EAAA,QAGA4qB,EAAA5qB,EAAA,QACA8U,EAAA9U,EAAA,QACAuP,EAAAvP,EAAA,QACA8K,EAAA9K,EAAA,QACAsyC,EAAAtyC,EAAA,QACA6K,EAAA7K,EAAA,QACA+oD,EAAA/oD,EAAA,QACAkiB,EAAAliB,EAAA,QAEA4K,EAAAf,OAAOwN,GAAG,UAAW,KACjB/E,QAAQC,IAAI,eAEhB3H,EAAAf,OAAOwN,GAAG,aAAc,KACpB/E,QAAQC,IAAI,kBAEhB3H,EAAAf,OAAOwN,GAAG,gBAAkB2uB,IACxB1zB,QAAQ0zB,MAAM,sCACd+iB,EAAAjkB,OAAO/lC,KAAK,gBAEhB6L,EAAAf,OAAOwN,GAAG,QAAU2uB,IAChB1zB,QAAQ0zB,MAAM,gCACd+iB,EAAAjkB,OAAO/lC,KAAK,gBAEhB6L,EAAAf,OAAOwN,GAAG,WAAawoB,IACnBvtB,QAAQC,IAAI,eACZw2C,EAAAjkB,OAAO/lC,KAAK8gC,KAEhBj1B,EAAAf,OAAOwN,GAAG,gBAAkBhZ,IACxBwM,EAAA0J,UAAUkgD,YAAYp2D,EAAKqC,MAC3BmK,EAAA0J,UAAUmgD,eAAer2D,EAAK6L,SAC9BW,EAAA0J,UAAUogD,kBAAkBt2D,EAAK43C,kBAErCrrC,EAAAf,OAAOwN,GAAG,eAAiBuJ,IACvB/V,EAAA0J,UAAUsxB,YAAYjlB,GACtB/V,EAAA0J,UAAUqgD,MAAMh0C,IAAa5e,OAAOqI,SAAS0R,SAAS1W,MAAM,KAAK,MAErEuF,EAAAf,OAAOwN,GAAG,qBAAuB/Q,IAC7BuE,EAAA0J,UAAUmnC,cAAc,CAAE9rC,OAAQtJ,EAAQuuD,YAAat0C,MAAM,IAC7D1V,EAAA0J,UAAUonC,aAAa,CAAE/rC,OAAQtJ,EAAQwuD,WAAYv0C,MAAM,IAC3D1V,EAAA0J,UAAUqnC,eAAe,CAAEhsC,OAAQtJ,EAAQyuD,aAAcx0C,MAAM,IAC/D1V,EAAA0J,UAAUygD,QAAQ1uD,EAAQ2uD,OAC1BpqD,EAAA0J,UAAU2gD,QAAQ5uD,EAAQ6uD,OAC1BtqD,EAAA0J,UAAU6gD,eAAelzC,EAAAwM,YAAYpoB,EAAQ+uD,cAEzC/uD,EAAQgvD,cAAc/lD,EAAAO,aAAaoe,YAAY5nB,EAAQgvD,cAAc,QACrC3pD,IAAhC4D,EAAAO,aAAashD,gBAA8B7hD,EAAAO,aAAashD,eAAgBh7C,eAEhFxL,EAAAf,OAAOwN,GAAG,eAAiBhZ,SACLsN,IAAdtN,EAAKqC,MAAoBmK,EAAA0J,UAAUghD,gBAAgBl3D,EAAKqC,WACrCiL,IAAnBtN,EAAKizD,WAAyBzmD,EAAA0J,UAAUinC,YAAY,CAAE5Y,SAAUvkC,EAAKizD,UAAW/wC,MAAM,SACpE5U,IAAlBtN,EAAKmzD,UAAwB3mD,EAAA0J,UAAU6mC,WAAW,CAAEx2B,QAASvmB,EAAKmzD,SAAUjxC,MAAM,SAChE5U,IAAlBtN,EAAKszD,UAAwB9mD,EAAA0J,UAAU8mC,WAAW,CAAE/qB,QAASjyB,EAAKszD,SAAUpxC,MAAM,SAC7D5U,IAArBtN,EAAKuzD,aAA2B/mD,EAAA0J,UAAU+mC,cAAc,CAAElZ,WAAY/jC,EAAKuzD,YAAarxC,MAAM,SAC7E5U,IAAjBtN,EAAKwzD,SAAuBhnD,EAAA0J,UAAUgnC,eAAe,CAAE3pB,OAAQvzB,EAAKwzD,QAAStxC,MAAM,SACzD5U,IAA1BtN,EAAKozD,kBAAgC5mD,EAAA0J,UAAUsnC,kBAAkB,CAAE16C,MAAO9C,EAAKozD,iBAAkBlxC,MAAM,SAC7E5U,IAA1BtN,EAAKqzD,kBAAgC7mD,EAAA0J,UAAUunC,kBAAkB,CAAE36C,MAAO9C,EAAKqzD,iBAAkBnxC,MAAM,SAClF5U,IAArBtN,EAAKwyD,cACLhmD,EAAA0J,UAAU0nC,cAAc,CAAE56C,KAAMhD,EAAKwyD,YAAatwC,MAAM,IACxD1V,EAAA0J,UAAU0J,oBACVpT,EAAA0J,UAAUqK,yBAGlBhU,EAAAf,OAAOwN,GAAG,eAAiBhZ,IACvBi0C,EAAAa,YAAY2c,kBAAkB,IAAIh7C,EAAAM,YAAY/W,EAAKkF,EAAGlF,EAAKmF,MAE/DoH,EAAAf,OAAOwN,GAAG,YAAci+B,IACpB,IAAK,MAAMh0B,KAAQg0B,EAAOzqC,EAAA0J,UAAUynC,QAAQ,CAAE16B,OAAMf,MAAM,MAE9D3V,EAAAf,OAAOwN,GAAG,iBAAmB89B,IACzBtqC,EAAA0J,UAAUihD,UAAUrgB,KAExBvqC,EAAAf,OAAOwN,GAAG,YAAco+C,IACpB5qD,EAAA0J,UAAUnD,QACVvG,EAAA0J,UAAUmhD,aAAaD,EAAa/gB,WACpCjnC,SAASC,eAAe,UAAWioD,UAAY,GAC/C9qD,EAAA0J,UAAUqhD,iBACVrmD,EAAAO,aAAa+lD,QACb,IAAK,MAAMrgD,KAASigD,EAAaxqC,OAAQngB,EAAAkoD,YAAYx9C,GAErDjG,EAAAO,aAAaoe,YAAY3e,EAAAO,aAAaC,WAAYrP,MAAM,GACxDkqB,EAAAc,SAASljB,MAAM,oBACfqC,EAAA0J,UAAU0J,oBACVpT,EAAA0J,UAAUqK,sBACV/T,EAAA0J,UAAUuhD,qBAAoB,KAElClrD,EAAAf,OAAOwN,GAAG,eAAiB+U,IACvBvhB,EAAA0J,UAAUknC,YAAY,CAAErvB,WAAU7L,MAAM,MAE5C3V,EAAAf,OAAOwN,GAAG,YAAcqD,IACpB43B,EAAAa,YAAYx9B,SAAS+E,KAEzB9P,EAAAf,OAAOwN,GAAG,eAAiBqD,IACvB,IAAKnL,EAAAO,aAAaiW,QAAQ+J,IAAIpV,EAAM3X,MAEhC,YADAuP,QAAQC,IAAI,wCAGhB,IAAKhD,EAAAO,aAAa2F,SAASiF,EAAMlF,OAE7B,YADAlD,QAAQC,uDAAuDmI,EAAMlF,SAGzE,MAAMA,EAAQjG,EAAAO,aAAaC,SAAS2K,EAAMlF,OAC1CA,EAAMua,YAAYxgB,EAAAO,aAAaiW,QAAQhlB,IAAI2Z,EAAM3X,OAAQ,GACzDyS,EAAMY,YAAW,KAErBxL,EAAAf,OAAOwN,GAAG,kBAAoBhZ,IAC1B,IAAKkR,EAAAO,aAAaiW,QAAQ+J,IAAIzxB,EAAKqc,MAAM3X,MAErC,YADAuP,QAAQC,IAAI,yDAGhB,IAAKhD,EAAAO,aAAa2F,SAASpX,EAAKqc,MAAMlF,OAElC,YADAlD,QAAQC,uDAAuDlU,EAAKqc,MAAMlF,SAG9E,MAAMkF,EAAQnL,EAAAO,aAAaiW,QAAQhlB,IAAI1C,EAAKqc,MAAM3X,MAC5CyS,EAAQjG,EAAAO,aAAaC,SAAS2K,EAAMlF,OAC1CA,EAAM8V,eAAe5Q,EAAOrc,EAAKwW,OAAO,KAE5CjK,EAAAf,OAAOwN,GAAG,qBAAuBhZ,IAC7B,MAAMqc,EAAQnL,EAAAO,aAAaiW,QAAQhlB,IAAI1C,EAAK0E,WAC9B4I,IAAV+O,GACJA,EAAM0Q,UAAU/sB,EAAKmX,OAAO,KAEhC5K,EAAAf,OAAOwN,GAAG,eAAiBhZ,IACvBi0C,EAAAa,YAAY7gB,YAAYj0B,KAE5BuM,EAAAf,OAAOwN,GAAG,aAAeqJ,IACrBA,EAAOxC,QAAQxD,IACX,IAAKnL,EAAAO,aAAaiW,QAAQ+J,IAAIpV,EAAM3X,MAEhC,YADAuP,QAAQC,IAAI,kDAGhB,IAAKhD,EAAAO,aAAa2F,SAASiF,EAAMlF,OAE7B,YADAlD,QAAQC,uDAAuDmI,EAAMlF,SAGzE,MAAMugD,EAAYxmD,EAAAO,aAAaiW,QAAQhlB,IAAI2Z,EAAM3X,MACjDwM,EAAAO,aAAaC,SAAS2K,EAAMlF,OAAQua,YAAYgmC,GAAW,OAGnEnrD,EAAAf,OAAOwN,GAAG,aAAe2B,IACrB,IAAK,MAAMC,KAASD,EAAQnO,EAAA0J,UAAU2F,SAASjB,KAEnDrO,EAAAf,OAAOwN,GAAG,uBAAyBhZ,IAC/BwM,EAAA0J,UAAUyhD,mBAAmB33D,KAEjCuM,EAAAf,OAAOwN,GAAG,YAAchZ,IACpBwM,EAAA0J,UAAU2F,SAAS7b,KAEvBuM,EAAAf,OAAOwN,GAAG,eAAiBhZ,IACvBwM,EAAA0J,UAAUmF,YAAYrb,KAE1BuM,EAAAf,OAAOwN,GAAG,oBAAsBtU,IAC5B8H,EAAA0J,UAAUisB,aAAazhC,KAAKgE,GAC5BwM,EAAAO,aAAasG,eAEjBxL,EAAAf,OAAOwN,GAAG,uBAAyBtU,IAC/B,MAAMka,EAAMpS,EAAA0J,UAAUisB,aAAaj0B,QAAQxJ,GACvCka,GAAO,IACPpS,EAAA0J,UAAUisB,aAAazgC,OAAOkd,EAAK,GACnC1N,EAAAO,aAAasG,gBAGrBxL,EAAAf,OAAOwN,GAAG,qBAAuBy5C,IAC7BjmD,EAAA0J,UAAU0hD,gBAAgBnF","file":"static/js/app.b2080500.js","sourcesContent":[" \t// install a JSONP callback for chunk loading\n \tfunction webpackJsonpCallback(data) {\n \t\tvar chunkIds = data[0];\n \t\tvar moreModules = data[1];\n \t\tvar executeModules = data[2];\n\n \t\t// add \"moreModules\" to the modules object,\n \t\t// then flag all \"chunkIds\" as loaded and fire callback\n \t\tvar moduleId, chunkId, i = 0, resolves = [];\n \t\tfor(;i < chunkIds.length; i++) {\n \t\t\tchunkId = chunkIds[i];\n \t\t\tif(installedChunks[chunkId]) {\n \t\t\t\tresolves.push(installedChunks[chunkId][0]);\n \t\t\t}\n \t\t\tinstalledChunks[chunkId] = 0;\n \t\t}\n \t\tfor(moduleId in moreModules) {\n \t\t\tif(Object.prototype.hasOwnProperty.call(moreModules, moduleId)) {\n \t\t\t\tmodules[moduleId] = moreModules[moduleId];\n \t\t\t}\n \t\t}\n \t\tif(parentJsonpFunction) parentJsonpFunction(data);\n\n \t\twhile(resolves.length) {\n \t\t\tresolves.shift()();\n \t\t}\n\n \t\t// add entry modules from loaded chunk to deferred list\n \t\tdeferredModules.push.apply(deferredModules, executeModules || []);\n\n \t\t// run deferred modules when all chunks ready\n \t\treturn checkDeferredModules();\n \t};\n \tfunction checkDeferredModules() {\n \t\tvar result;\n \t\tfor(var i = 0; i < deferredModules.length; i++) {\n \t\t\tvar deferredModule = deferredModules[i];\n \t\t\tvar fulfilled = true;\n \t\t\tfor(var j = 1; j < deferredModule.length; j++) {\n \t\t\t\tvar depId = deferredModule[j];\n \t\t\t\tif(installedChunks[depId] !== 0) fulfilled = false;\n \t\t\t}\n \t\t\tif(fulfilled) {\n \t\t\t\tdeferredModules.splice(i--, 1);\n \t\t\t\tresult = __webpack_require__(__webpack_require__.s = deferredModule[0]);\n \t\t\t}\n \t\t}\n \t\treturn result;\n \t}\n\n \t// The module cache\n \tvar installedModules = {};\n\n \t// object to store loaded and loading chunks\n \t// undefined = chunk not loaded, null = chunk preloaded/prefetched\n \t// Promise = chunk loading, 0 = chunk loaded\n \tvar installedChunks = {\n \t\t\"app\": 0\n \t};\n\n \tvar deferredModules = [];\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"/\";\n\n \tvar jsonpArray = window[\"webpackJsonp\"] = window[\"webpackJsonp\"] || [];\n \tvar oldJsonpFunction = jsonpArray.push.bind(jsonpArray);\n \tjsonpArray.push = webpackJsonpCallback;\n \tjsonpArray = jsonpArray.slice();\n \tfor(var i = 0; i < jsonpArray.length; i++) webpackJsonpCallback(jsonpArray[i]);\n \tvar parentJsonpFunction = oldJsonpFunction;\n\n\n \t// add entry module to deferred list\n \tdeferredModules.push([0,\"chunk-vendors\"]);\n \t// run deferred modules when ready\n \treturn checkDeferredModules();\n","import { GlobalPoint, LocalPoint } from \"@/game/geom\";\nimport { BoundingRect } from \"@/game/shapes/boundingrect\";\nimport { Shape } from \"@/game/shapes/shape\";\nimport { g2l } from \"@/game/units\";\n\nexport class Text extends Shape {\n type = \"text\";\n text: string;\n font: string;\n angle: number;\n constructor(\n position: GlobalPoint,\n text: string,\n font: string,\n angle?: number,\n fillColour?: string,\n strokeColour?: string,\n uuid?: string,\n ) {\n super(position, fillColour, strokeColour, uuid);\n this.text = text;\n this.font = font;\n this.angle = angle || 0;\n }\n asDict() {\n return Object.assign(this.getBaseDict(), {\n text: this.text,\n font: this.font,\n angle: this.angle,\n });\n }\n get points() {\n return [[this.refPoint.x, this.refPoint.y]];\n }\n getBoundingBox(): BoundingRect {\n return new BoundingRect(this.refPoint, 5, 5); // TODO: fix this bounding box\n }\n draw(ctx: CanvasRenderingContext2D) {\n super.draw(ctx);\n ctx.font = this.font;\n ctx.fillStyle = this.fillColour;\n ctx.save();\n const dest = g2l(this.refPoint);\n ctx.translate(dest.x, dest.y);\n ctx.rotate(this.angle);\n ctx.textAlign = \"center\";\n this.getLines(ctx).map(line => ctx.fillText(line.text, line.x, line.y));\n ctx.restore();\n }\n contains(point: GlobalPoint): boolean {\n return false; // TODO\n }\n\n center(): GlobalPoint;\n center(centerPoint: GlobalPoint): void;\n center(centerPoint?: GlobalPoint): GlobalPoint | void {} // TODO\n visibleInCanvas(canvas: HTMLCanvasElement): boolean {\n return this.getBoundingBox().visibleInCanvas(canvas);\n } // TODO\n snapToGrid(): void {}\n resizeToGrid(): void {}\n resize(resizePoint: number, point: LocalPoint): void {}\n\n getMaxHeight(ctx: CanvasRenderingContext2D) {\n const lines = this.getLines(ctx);\n const lineHeight = 30;\n return lineHeight * lines.length;\n }\n\n getMaxWidth(ctx: CanvasRenderingContext2D) {\n const lines = this.getLines(ctx);\n const widths = lines.map(line => ctx.measureText(line.text).width);\n return Math.max(...widths);\n }\n\n private getLines(ctx: CanvasRenderingContext2D) {\n const lines = this.text.split(\"\\n\");\n const allLines: { text: string; x: number; y: number }[] = [];\n const maxWidth = ctx.canvas.width;\n const lineHeight = 30;\n const x = 0; // this.refPoint.x;\n let y = 0; // this.refPoint.y;\n\n for (const line of lines) {\n let targetLine = \"\";\n const words = line.split(\" \");\n for (const word of words) {\n const testLine = targetLine + word + \" \";\n const metrics = ctx.measureText(testLine);\n const testWidth = metrics.width;\n if (testWidth > maxWidth) {\n ctx.fillText(targetLine, x, y);\n allLines.push({ text: targetLine, x, y });\n targetLine = word + \" \";\n y += lineHeight;\n } else {\n targetLine = testLine;\n }\n }\n allLines.push({ text: targetLine, x, y });\n y += lineHeight;\n }\n return allLines;\n }\n}\n","import mod from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./selection_info.vue?vue&type=style&index=0&id=674cf937&scoped=true&lang=css&\"; export default mod; export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./selection_info.vue?vue&type=style&index=0&id=674cf937&scoped=true&lang=css&\"","import { render, staticRenderFns } from \"./shapecontext.vue?vue&type=template&id=759e5a8a&scoped=true&\"\nimport script from \"./shapecontext.vue?vue&type=script&lang=ts&\"\nexport * from \"./shapecontext.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./shapecontext.vue?vue&type=style&index=0&id=759e5a8a&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"759e5a8a\",\n null\n \n)\n\ncomponent.options.__file = \"shapecontext.vue\"\nexport default component.exports","import mod from \"-!../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../node_modules/cache-loader/dist/cjs.js??ref--0-0!../node_modules/vue-loader/lib/index.js??vue-loader-options!./App.vue?vue&type=style&index=0&lang=css&\"; export default mod; export * from \"-!../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../node_modules/cache-loader/dist/cjs.js??ref--0-0!../node_modules/vue-loader/lib/index.js??vue-loader-options!./App.vue?vue&type=style&index=0&lang=css&\"","import mod from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./menu.vue?vue&type=style&index=0&id=13f3fb33&scoped=true&lang=css&\"; export default mod; export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./menu.vue?vue&type=style&index=0&id=13f3fb33&scoped=true&lang=css&\"","import mod from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./prompt.vue?vue&type=style&index=0&id=0602c2e6&scoped=true&lang=css&\"; export default mod; export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./prompt.vue?vue&type=style&index=0&id=0602c2e6&scoped=true&lang=css&\"","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nimport tinycolor from \"tinycolor2\";\nimport Vue from \"vue\";\nimport Component from \"vue-class-component\";\n\nimport { Chrome } from \"vue-color\";\nimport { Prop } from \"vue-property-decorator\";\n\n@Component({\n components: {\n \"chrome-picker\": Chrome,\n },\n})\nexport default class ColorPicker extends Vue {\n @Prop(String) color!: string;\n @Prop(Boolean) disabled!: boolean;\n\n display = false;\n left = 0;\n top = 0;\n transparent = false;\n\n mounted() {\n this.transparent = (this.$refs.chromePicker).val.rgba.a === 0;\n this.setPosition();\n }\n\n open() {\n if (this.display || this.disabled) return; // click on the picker itself\n this.setPosition();\n this.display = true;\n this.$nextTick(() => this.$children[0].$el.focus());\n }\n updateColor(value: { rgba: { r: number; g: number; b: number; a: number } }) {\n this.transparent = value.rgba.a === 0;\n const newColor = tinycolor(value.rgba).toRgbString();\n this.$emit(\"update:color\", newColor);\n this.$emit(\"input\", newColor);\n }\n closePicker() {\n this.display = false;\n this.$emit(\"change\", this.color);\n }\n setPosition() {\n const rect = this.$el.getBoundingClientRect();\n // 224 is the width of the picker, 242 the height\n if (rect.right + 224 > window.innerWidth) this.left = rect.left - 224;\n else this.left = rect.right;\n if (rect.bottom + 242 > window.innerHeight) this.top = rect.top - 242;\n else this.top = rect.bottom;\n }\n}\n","import { render, staticRenderFns } from \"./game.vue?vue&type=template&id=05b88da7&scoped=true&\"\nimport script from \"./game.vue?vue&type=script&lang=ts&\"\nexport * from \"./game.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./game.vue?vue&type=style&index=0&lang=css&\"\nimport style1 from \"./game.vue?vue&type=style&index=1&id=05b88da7&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"05b88da7\",\n null\n \n)\n\ncomponent.options.__file = \"game.vue\"\nexport default component.exports","import io from \"socket.io-client\";\nimport { Route } from \"vue-router\";\n\nexport const socket = io(location.protocol + \"//\" + location.host + \"/planarally\", { autoConnect: false });\n\nexport function createConnection(route: Route) {\n socket.io.opts.query = `user=${route.params.creator}&room=${route.params.room}`;\n socket.connect();\n}\n","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nimport Vue from \"vue\";\nimport Component from \"vue-class-component\";\n\nimport AssetContextMenu from \"@/assetManager/contextMenu.vue\";\nimport ConfirmDialog from \"@/core/components/modals/confirm.vue\";\nimport Prompt from \"@/core/components/modals/prompt.vue\";\n\nimport { socket } from \"@/assetManager/socket\";\nimport { assetStore } from \"@/assetManager/store\";\nimport { Asset } from \"@/core/comm/types\";\nimport { uuidv4 } from \"@/core/utils\";\n\n@Component({\n components: {\n Prompt,\n ConfirmDialog,\n AssetContextMenu,\n },\n beforeRouteEnter(to, from, next) {\n socket.connect();\n next();\n },\n beforeRouteLeave(to, from, next) {\n socket.disconnect();\n next();\n },\n})\nexport default class AssetManager extends Vue {\n path: number[] = [];\n draggingSelection = false;\n\n get folders(): number[] {\n return assetStore.folders;\n }\n\n get files(): number[] {\n return assetStore.files;\n }\n\n get selected(): number[] {\n return assetStore.selected;\n }\n\n get idMap() {\n return assetStore.idMap;\n }\n\n get currentFolder(): number {\n if (this.path.length) return this.path[this.path.length - 1];\n return assetStore.root;\n }\n get parentFolder(): number {\n let parent = this.path[this.path.length - 2];\n if (parent === undefined) parent = assetStore.root;\n return parent;\n }\n get firstSelectedFile(): Asset | null {\n for (const sel of assetStore.selected) {\n if (assetStore.idMap.get(sel)!.file_hash) {\n return assetStore.idMap.get(sel)!;\n }\n }\n return null;\n }\n changeDirectory(nextFolder: number) {\n if (nextFolder < 0) this.path.pop();\n else this.path.push(nextFolder);\n assetStore.clearSelected();\n socket.emit(\"Folder.Get\", this.currentFolder);\n }\n createDirectory() {\n const name = window.prompt(\"New folder name\");\n if (name !== null) {\n socket.emit(\"Folder.Create\", { name, parent: this.currentFolder });\n }\n }\n moveInode(inode: number, target: number) {\n if (assetStore.files.includes(inode)) assetStore.files.splice(assetStore.files.indexOf(inode), 1);\n else assetStore.folders.splice(assetStore.folders.indexOf(inode), 1);\n assetStore.idMap.delete(inode);\n socket.emit(\"Inode.Move\", { inode, target });\n }\n select(event: MouseEvent, inode: number) {\n if (event.shiftKey && assetStore.selected.length > 0) {\n const inodes = [...assetStore.files, ...assetStore.folders];\n const start = inodes.indexOf(assetStore.selected[assetStore.selected.length - 1]);\n const end = inodes.indexOf(inode);\n for (let i = start; i !== end; start < end ? i++ : i--) {\n if (i === start) continue;\n assetStore.selected.push(inodes[i]);\n }\n assetStore.selected.push(inodes[end]);\n } else {\n if (!event.ctrlKey) {\n assetStore.clearSelected();\n }\n assetStore.selected.push(inode);\n }\n }\n startDrag(event: DragEvent, file: number) {\n if (event.dataTransfer === null) return;\n event.dataTransfer.setData(\"Hack\", \"ittyHack\");\n event.dataTransfer.dropEffect = \"move\";\n if (!assetStore.selected.includes(file)) assetStore.selected.push(file);\n this.draggingSelection = true;\n }\n moveDrag(event: DragEvent) {\n if ((event.target).classList.contains(\"folder\"))\n (event.target).classList.add(\"inode-selected\");\n }\n leaveDrag(event: DragEvent) {\n if ((event.target).classList.contains(\"folder\"))\n (event.target).classList.remove(\"inode-selected\");\n }\n stopDrag(event: DragEvent, target: number) {\n (event.target).classList.remove(\"inode-selected\");\n if (this.draggingSelection) {\n if (\n (target === assetStore.root || assetStore.folders.includes(target)) &&\n !assetStore.selected.includes(target)\n ) {\n for (const inode of assetStore.selected) {\n this.moveInode(inode, target);\n }\n }\n assetStore.clearSelected();\n } else if (event.dataTransfer && event.dataTransfer.files.length > 0) {\n this.upload(event.dataTransfer.files, target);\n }\n this.draggingSelection = false;\n }\n prepareUpload() {\n document.getElementById(\"files\")!.click();\n }\n upload(fls?: FileList, target?: number) {\n const files = (document.getElementById(\"files\")!).files;\n if (fls === undefined) {\n if (files) fls = files;\n else return;\n }\n if (target === undefined) target = this.currentFolder;\n const CHUNK_SIZE = 100000;\n for (const file of fls) {\n const uuid = uuidv4();\n const slices = Math.ceil(file.size / CHUNK_SIZE);\n for (let slice = 0; slice < slices; slice++) {\n const fr = new FileReader();\n fr.readAsArrayBuffer(\n file.slice(\n slice * CHUNK_SIZE,\n slice * CHUNK_SIZE + Math.min(CHUNK_SIZE, file.size - slice * CHUNK_SIZE),\n ),\n );\n fr.onload = e => {\n socket.emit(\"Asset.Upload\", {\n name: file.name,\n directory: target,\n data: fr.result,\n slice,\n totalSlices: slices,\n uuid,\n });\n };\n }\n }\n }\n}\n","import { render, staticRenderFns } from \"./asset_node.vue?vue&type=template&id=6d718094&scoped=true&\"\nimport script from \"./asset_node.vue?vue&type=script&lang=ts&\"\nexport * from \"./asset_node.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./asset_node.vue?vue&type=style&index=0&id=6d718094&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"6d718094\",\n null\n \n)\n\ncomponent.options.__file = \"asset_node.vue\"\nexport default component.exports","import mod from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./selectcontext.vue?vue&type=style&index=0&id=44a31e42&scoped=true&lang=css&\"; export default mod; export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./selectcontext.vue?vue&type=style&index=0&id=44a31e42&scoped=true&lang=css&\"","import { render, staticRenderFns } from \"./login.vue?vue&type=template&id=bc30fc14&scoped=true&\"\nimport script from \"./login.vue?vue&type=script&lang=ts&\"\nexport * from \"./login.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./login.vue?vue&type=style&index=0&id=bc30fc14&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"bc30fc14\",\n null\n \n)\n\ncomponent.options.__file = \"login.vue\"\nexport default component.exports","import { layerManager } from \"@/game/layers/manager\";\nimport { g2lx, g2ly } from \"@/game/units\";\nimport { EdgeIterator, TDS } from \"./tds\";\nimport { ccw, cw } from \"./triag\";\n\nexport function drawPolygon(polygon: number[][], colour?: string) {\n const dl = layerManager.getLayer(\"draw\");\n if (dl === undefined) return;\n const ctx = dl.ctx;\n ctx.lineJoin = \"round\";\n // ctx.clearRect(0, 0, window.innerWidth, window.innerHeight);\n ctx.lineJoin = \"round\";\n ctx.beginPath();\n ctx.strokeStyle =\n colour === undefined ? `rgb(${Math.random() * 255}, ${Math.random() * 255}, ${Math.random() * 255})` : colour;\n ctx.moveTo(g2lx(polygon[0][0]), g2ly(polygon[0][1]));\n for (const point of polygon) {\n ctx.lineTo(g2lx(point[0]), g2ly(point[1]));\n }\n ctx.closePath();\n ctx.stroke();\n}\n\nexport function drawPolygonL(polygon: number[][], colour?: string) {\n const dl = layerManager.getLayer(\"draw\");\n if (dl === undefined) return;\n const ctx = dl.ctx;\n ctx.lineJoin = \"round\";\n // ctx.clearRect(0, 0, window.innerWidth, window.innerHeight);\n ctx.lineJoin = \"round\";\n ctx.beginPath();\n ctx.strokeStyle =\n colour === undefined ? `rgb(${Math.random() * 255}, ${Math.random() * 255}, ${Math.random() * 255})` : colour;\n ctx.moveTo(polygon[0][0], polygon[0][1]);\n for (const point of polygon) {\n ctx.lineTo(point[0], point[1]);\n }\n ctx.closePath();\n ctx.stroke();\n}\n\nfunction x(xx: number, local: boolean) {\n if (local) return xx;\n else return g2lx(xx);\n}\n\nfunction y(yy: number, local: boolean) {\n if (local) return yy;\n else return g2ly(yy);\n}\n\nlet I = 0;\nlet J = 0;\n\nfunction drl(ctx: CanvasRenderingContext2D, from: number[], to: number[], constrained: boolean, local: boolean) {\n // J++;\n // if (constrained) {\n // I++;\n // console.log(\"*\", from, to);\n // } else {\n // console.log(\" \", from, to);\n // }\n ctx.beginPath();\n ctx.strokeStyle = constrained ? \"rgba(255, 0, 0, 0.30)\" : \"rgba(0, 0, 0, 0.30)\";\n ctx.moveTo(x(from[0], local), y(from[1], local));\n ctx.lineTo(x(to[0], local), y(to[1], local));\n ctx.closePath();\n ctx.stroke();\n}\n\nfunction drawPolygonT(tds: TDS, local = true, clear = true, logs: 0 | 1 | 2 = 0) {\n I = 0;\n J = 0;\n let T = 0;\n const dl = layerManager.getLayer(\"draw\");\n if (dl === undefined) return;\n const ctx = dl.ctx;\n if (clear) ctx.clearRect(0, 0, 2000, 1000);\n ctx.lineJoin = \"round\";\n // ctx.clearRect(0, 0, window.innerWidth, window.innerHeight);\n ctx.lineJoin = \"round\";\n const ei = new EdgeIterator(tds);\n while (ei.valid) {\n ei.next();\n ei.collect();\n }\n ei.collect();\n do {\n const fromP = ei.edge.first!.vertices[ccw(ei.edge.second)]!.point!;\n const toP = ei.edge.first!.vertices[cw(ei.edge.second)]!.point!;\n if (logs > 0) {\n if (fromP[0] === -Infinity || toP[0] === -Infinity) {\n ei.next();\n continue;\n }\n J++;\n if (ei.edge.first!.constraints[ei.edge.second]) {\n I++;\n if (logs === 2) console.log(`Edge: (*) ${fromP} > ${toP}`);\n } else if (logs === 2) console.log(`Edge: ${fromP} > ${toP}`);\n }\n do {\n ei.next();\n ei.collect();\n } while (ei.valid);\n } while (ei.pos !== null);\n for (const t of tds.triangles) {\n if (t.isInfinite()) continue;\n T++;\n const po = [];\n ctx.fillStyle = \"red\";\n if (t.vertices[0] !== undefined) {\n po.push(t.vertices[0]!.point);\n ctx.beginPath();\n ctx.arc(x(t.vertices[0]!.point![0], local), y(t.vertices[0]!.point![1], local), 5, 0, 2 * Math.PI);\n ctx.closePath();\n ctx.fill();\n }\n if (t.vertices[1] !== undefined) {\n po.push(t.vertices[1]!.point);\n ctx.arc(x(t.vertices[1]!.point![0], local), y(t.vertices[1]!.point![1], local), 5, 0, 2 * Math.PI);\n ctx.closePath();\n ctx.fill();\n }\n if (t.vertices[2] !== undefined) {\n po.push(t.vertices[2]!.point);\n ctx.arc(x(t.vertices[2]!.point![0], local), y(t.vertices[2]!.point![1], local), 5, 0, 2 * Math.PI);\n ctx.closePath();\n ctx.fill();\n }\n if (logs === 2) console.log(\"[T] \", ...po, t.constraints);\n\n ctx.moveTo(x(t.vertices[0]!.point![0], local), y(t.vertices[0]!.point![1], local));\n if (t.vertices[0] !== undefined && t.vertices[1] !== undefined)\n drl(ctx, t.vertices[0]!.point!, t.vertices[1]!.point!, t.constraints[2], local);\n if (t.vertices[1] !== undefined && t.vertices[2] !== undefined)\n drl(ctx, t.vertices[1]!.point!, t.vertices[2]!.point!, t.constraints[0], local);\n if (t.vertices[2] !== undefined && t.vertices[0] !== undefined)\n drl(ctx, t.vertices[2]!.point!, t.vertices[0]!.point!, t.constraints[1], local);\n }\n if (logs > 0) {\n console.log(`Edges: ${I}/${J}`);\n console.log(`Faces: ${T}`);\n }\n}\n\n(window).DP = drawPolygon;\n(window).DPL = drawPolygonL;\n(window).DPT = drawPolygonT;\n","import { render, staticRenderFns } from \"./accordion.vue?vue&type=template&id=0bf2b7ba&scoped=true&\"\nimport script from \"./accordion.vue?vue&type=script&lang=ts&\"\nexport * from \"./accordion.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./accordion.vue?vue&type=style&index=0&id=0bf2b7ba&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"0bf2b7ba\",\n null\n \n)\n\ncomponent.options.__file = \"accordion.vue\"\nexport default component.exports","import mod from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./tool.vue?vue&type=style&index=0&lang=css&\"; export default mod; export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./tool.vue?vue&type=style&index=0&lang=css&\"","import * as tinycolor from \"tinycolor2\";\n\nimport { calcFontScale } from \"@/core/utils\";\nimport { InitiativeData } from \"@/game/comm/types/general\";\nimport { ServerCircularToken } from \"@/game/comm/types/shapes\";\nimport { GlobalPoint } from \"@/game/geom\";\nimport { Circle } from \"@/game/shapes/circle\";\nimport { gameStore } from \"@/game/store\";\nimport { g2l, g2lz } from \"@/game/units\";\n\nexport class CircularToken extends Circle {\n type = \"circulartoken\";\n text: string;\n font: string;\n constructor(\n center: GlobalPoint,\n r: number,\n text: string,\n font: string,\n fillColour?: string,\n strokeColour?: string,\n uuid?: string,\n ) {\n super(center, r, fillColour, strokeColour, uuid);\n this.text = text;\n this.font = font;\n }\n asDict(): ServerCircularToken {\n return Object.assign(this.getBaseDict(), {\n radius: this.r,\n text: this.text,\n font: this.font,\n });\n }\n fromDict(data: ServerCircularToken) {\n super.fromDict(data);\n this.r = data.radius;\n this.text = data.text;\n this.font = data.font;\n }\n draw(ctx: CanvasRenderingContext2D) {\n super.draw(ctx);\n ctx.font = this.font;\n ctx.save();\n const dest = g2l(this.center());\n ctx.textAlign = \"center\";\n ctx.textBaseline = \"middle\";\n const xs = calcFontScale(ctx, this.text, g2lz(this.r), g2lz(this.r));\n const ys = 0;\n ctx.transform(xs, ys, -ys, xs, dest.x, dest.y);\n ctx.fillStyle = tinycolor.mostReadable(this.fillColour, [\"#000\", \"#fff\"]).toHexString();\n ctx.fillText(this.text, 0, 0);\n ctx.restore();\n }\n getInitiativeRepr(): InitiativeData {\n return {\n uuid: this.uuid,\n visible: !gameStore.IS_DM,\n group: false,\n source: this.name === \"\" || this.name === \"Unknown shape\" ? this.text : this.name,\n has_img: false,\n effects: [],\n index: Infinity,\n };\n }\n}\n","import { GlobalPoint, LocalPoint } from \"@/game/geom\";\nimport { Layer } from \"@/game/layers/layer\";\nimport { layerManager } from \"@/game/layers/manager\";\nimport { Rect } from \"@/game/shapes/rect\";\nimport { Text } from \"@/game/shapes/text\";\nimport { gameStore } from \"@/game/store\";\nimport { l2g } from \"@/game/units\";\n\nexport class AnnotationManager {\n annotationText: Text;\n annotationRect: Rect;\n layer: Layer | undefined;\n shown: boolean = false;\n\n constructor() {\n const origin = new GlobalPoint(0, 0);\n this.annotationText = new Text(origin, \"\", \"bold 20px serif\", 0, \"rgba(230, 230, 230, 1)\");\n this.annotationRect = new Rect(origin, 0, 0, \"rgba(0, 0, 0, 0.6)\");\n }\n\n setActiveText(text: string) {\n if (this.layer === undefined) {\n if (layerManager.hasLayer(\"draw\")) {\n this.layer = layerManager.getLayer(\"draw\")!;\n this.layer.addShape(this.annotationRect, false);\n this.layer.addShape(this.annotationText, false);\n } else {\n console.warn(\"There is no draw layer to draw annotations on!\");\n return;\n }\n }\n this.shown = text !== \"\";\n this.annotationText.refPoint = l2g(new LocalPoint(this.layer.canvas.width / 2, 50));\n this.annotationText.text = text;\n const width = this.shown ? this.annotationText.getMaxWidth(this.layer.ctx) + 10 : 0;\n const height = this.shown ? this.annotationText.getMaxHeight(this.layer.ctx) + 10 : 0;\n this.annotationRect.refPoint = l2g(new LocalPoint(this.layer.canvas.width / 2 - width / 2, 30));\n this.annotationRect.w = width / gameStore.zoomFactor;\n this.annotationRect.h = height / gameStore.zoomFactor;\n this.layer.invalidate(true);\n }\n}\n","import { render, staticRenderFns } from \"./menu.vue?vue&type=template&id=13f3fb33&scoped=true&\"\nimport script from \"./menu.vue?vue&type=script&lang=ts&\"\nexport * from \"./menu.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./menu.vue?vue&type=style&index=0&id=13f3fb33&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"13f3fb33\",\n null\n \n)\n\ncomponent.options.__file = \"menu.vue\"\nexport default component.exports","import { render, staticRenderFns } from \"./contextmenu.vue?vue&type=template&id=256dde9c&\"\nimport script from \"./contextmenu.vue?vue&type=script&lang=ts&\"\nexport * from \"./contextmenu.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./contextmenu.vue?vue&type=style&index=0&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\ncomponent.options.__file = \"contextmenu.vue\"\nexport default component.exports","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/ts-loader/index.js??ref--12-2!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./note.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/ts-loader/index.js??ref--12-2!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./note.vue?vue&type=script&lang=ts&\"","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/ts-loader/index.js??ref--12-2!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./login.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/ts-loader/index.js??ref--12-2!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./login.vue?vue&type=script&lang=ts&\"","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('Modal',{attrs:{\"visible\":_vm.visible,\"mask\":false},on:{\"close\":function($event){_vm.visible = false}},scopedSlots:_vm._u([{key:\"header\",fn:function(m){return _c('div',{staticClass:\"modal-header\",attrs:{\"draggable\":\"true\"},on:{\"dragstart\":m.dragStart,\"dragend\":m.dragEnd}},[_c('div',[_vm._v(\"Label manager\")]),_c('div',{staticClass:\"header-close\",on:{\"click\":function($event){_vm.visible = false}}},[_c('i',{staticClass:\"far fa-window-close\"})])])}}])},[_c('div',{staticClass:\"modal-body\"},[_c('div',{staticClass:\"grid\"},[_c('div',{staticClass:\"header\"},[_c('abbr',{attrs:{\"title\":\"Category\"}},[_vm._v(\"Cat.\")])]),_c('div',{staticClass:\"header name\"},[_vm._v(\"Name\")]),_c('div',{staticClass:\"header\"},[_c('abbr',{attrs:{\"title\":\"Visible\"}},[_vm._v(\"Vis.\")])]),_c('div',{staticClass:\"header\"},[_c('abbr',{attrs:{\"title\":\"Delete\"}},[_vm._v(\"Del.\")])]),_c('div',{staticClass:\"separator spanrow\",staticStyle:{\"margin\":\"0 0 7px\"}}),_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.search),expression:\"search\"}],ref:\"search\",staticClass:\"spanrow\",attrs:{\"type\":\"text\",\"placeholder\":\"search\"},domProps:{\"value\":(_vm.search)},on:{\"input\":function($event){if($event.target.composing){ return; }_vm.search=$event.target.value}}})]),_c('div',{staticClass:\"grid scroll\"},[_vm._l((_vm.categories),function(category){return [_vm._l((_vm.labels[category]),function(label){return [_c('div',{key:'row-'+label.uuid,staticClass:\"row\",on:{\"click\":function($event){_vm.selectLabel(label.uuid)}}},[(label.category)?[_c('div',{key:'cat-'+label.uuid},[_vm._v(_vm._s(label.category))]),_c('div',{key:'name-'+label.uuid,staticClass:\"name\"},[_vm._v(_vm._s(label.name))])]:_vm._e(),(!label.category)?[_c('div',{key:'cat-'+label.uuid}),_c('div',{key:'name-'+label.uuid,staticClass:\"name\"},[_vm._v(_vm._s(label.name))])]:_vm._e(),_c('div',{key:'visible-'+label.uuid,class:{'lower-opacity': !label.visible},style:({textAlign: 'center'}),on:{\"click\":function($event){$event.stopPropagation();_vm.toggleVisibility(label)}}},[_c('i',{staticClass:\"fas fa-eye\"})]),_c('div',{key:'delete-'+label.uuid,on:{\"click\":function($event){$event.stopPropagation();_vm.deleteLabel(label.uuid)}}},[_c('i',{staticClass:\"fas fa-trash-alt\"})])],2)]})]}),(_vm.labels.length === 0)?[_c('div',{attrs:{\"id\":\"no-labels\"}},[_vm._v(\"No labels exist yet\")])]:_vm._e()],2),_c('div',{staticClass:\"grid\"},[_c('div',{staticClass:\"separator spanrow\"}),_c('input',{directives:[{name:\"model\",rawName:\"v-model.trim\",value:(_vm.newCategory),expression:\"newCategory\",modifiers:{\"trim\":true}}],attrs:{\"type\":\"text\"},domProps:{\"value\":(_vm.newCategory)},on:{\"input\":function($event){if($event.target.composing){ return; }_vm.newCategory=$event.target.value.trim()},\"blur\":function($event){_vm.$forceUpdate()}}}),_c('input',{directives:[{name:\"model\",rawName:\"v-model.trim\",value:(_vm.newName),expression:\"newName\",modifiers:{\"trim\":true}}],attrs:{\"type\":\"text\"},domProps:{\"value\":(_vm.newName)},on:{\"input\":function($event){if($event.target.composing){ return; }_vm.newName=$event.target.value.trim()},\"blur\":function($event){_vm.$forceUpdate()}}}),_c('button',{attrs:{\"id\":\"addLabelButton\"},on:{\"click\":function($event){$event.stopPropagation();return _vm.addLabel($event)}}},[_vm._v(\"Add\")])])])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","export * from \"-!cache-loader?{\\\"cacheDirectory\\\":\\\"node_modules/.cache/vue-loader\\\",\\\"cacheIdentifier\\\":\\\"74f43d04-vue-loader-template\\\"}!../../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./labels.vue?vue&type=template&id=e477c214&scoped=true&\"","import {\n ServerAsset,\n ServerCircle,\n ServerCircularToken,\n ServerLine,\n ServerMultiLine,\n ServerPolygon,\n ServerRect,\n ServerShape,\n ServerText,\n} from \"@/game/comm/types/shapes\";\nimport { GlobalPoint } from \"@/game/geom\";\nimport { layerManager } from \"@/game/layers/manager\";\nimport { Asset } from \"@/game/shapes/asset\";\nimport { Circle } from \"@/game/shapes/circle\";\nimport { CircularToken } from \"@/game/shapes/circulartoken\";\nimport { Line } from \"@/game/shapes/line\";\nimport { MultiLine } from \"@/game/shapes/multiline\";\nimport { Rect } from \"@/game/shapes/rect\";\nimport { Shape } from \"@/game/shapes/shape\";\nimport { Text } from \"@/game/shapes/text\";\nimport { Polygon } from \"./polygon\";\n\nexport function createShapeFromDict(shape: ServerShape) {\n let sh: Shape;\n\n // A fromJSON and toJSON on Shape would be cleaner but ts does not allow for static abstracts so yeah.\n\n // Shape Type specifics\n\n const refPoint = new GlobalPoint(shape.x, shape.y);\n if (shape.type_ === \"rect\") {\n const rect = shape;\n sh = new Rect(refPoint, rect.width, rect.height, rect.fill_colour, rect.stroke_colour, rect.uuid);\n } else if (shape.type_ === \"circle\") {\n const circ = shape;\n sh = new Circle(refPoint, circ.radius, circ.fill_colour, circ.stroke_colour, circ.uuid);\n } else if (shape.type_ === \"circulartoken\") {\n const token = shape;\n sh = new CircularToken(\n refPoint,\n token.radius,\n token.text,\n token.font,\n token.fill_colour,\n token.stroke_colour,\n token.uuid,\n );\n } else if (shape.type_ === \"line\") {\n const line = shape;\n sh = new Line(refPoint, new GlobalPoint(line.x2, line.y2), line.line_width, line.stroke_colour, line.uuid);\n } else if (shape.type_ === \"multiline\") {\n const multiline = shape;\n sh = new MultiLine(\n refPoint,\n multiline.points.map(p => new GlobalPoint(p.x, p.y)),\n multiline.line_width,\n multiline.stroke_colour,\n multiline.uuid,\n );\n } else if (shape.type_ === \"polygon\") {\n const polygon = shape;\n sh = new Polygon(\n refPoint,\n polygon.vertices.map(v => new GlobalPoint(v.x, v.y)),\n polygon.fill_colour,\n polygon.stroke_colour,\n polygon.uuid,\n );\n } else if (shape.type_ === \"text\") {\n const text = shape;\n sh = new Text(refPoint, text.text, text.font, text.angle, text.fill_colour, text.stroke_colour, text.uuid);\n } else if (shape.type_ === \"assetrect\") {\n const asset = shape;\n const img = new Image(asset.width, asset.height);\n if (asset.src.startsWith(\"http\")) img.src = new URL(asset.src).pathname;\n else img.src = asset.src;\n sh = new Asset(img, refPoint, asset.width, asset.height, asset.uuid);\n img.onload = () => {\n layerManager.getLayer(shape.layer)!.invalidate(false);\n };\n } else {\n return undefined;\n }\n sh.fromDict(shape);\n return sh;\n}\n","import mod from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./confirm.vue?vue&type=style&index=0&id=1883e207&scoped=true&lang=css&\"; export default mod; export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./confirm.vue?vue&type=style&index=0&id=1883e207&scoped=true&lang=css&\"","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('SelectContext',{ref:\"selectcontext\"})}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","export * from \"-!cache-loader?{\\\"cacheDirectory\\\":\\\"node_modules/.cache/vue-loader\\\",\\\"cacheIdentifier\\\":\\\"74f43d04-vue-loader-template\\\"}!../../../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./select.vue?vue&type=template&id=048b3482&\"","import tinycolor from \"tinycolor2\";\n\nimport { uuidv4 } from \"@/core/utils\";\nimport { socket } from \"@/game/api/socket\";\nimport { aurasFromServer, aurasToServer } from \"@/game/comm/conversion/aura\";\nimport { InitiativeData } from \"@/game/comm/types/general\";\nimport { ServerShape } from \"@/game/comm/types/shapes\";\nimport { GlobalPoint, LocalPoint, Vector } from \"@/game/geom\";\nimport { layerManager } from \"@/game/layers/manager\";\nimport { BoundingRect } from \"@/game/shapes/boundingrect\";\nimport { gameStore } from \"@/game/store\";\nimport { g2l, g2lr, g2lx, g2ly, g2lz } from \"@/game/units\";\n\nexport abstract class Shape {\n // Used to create class instance from server shape data\n abstract readonly type: string;\n // The unique ID of this shape\n readonly uuid: string;\n // The layer the shape is currently on\n layer!: string;\n\n // A reference point regarding that specific shape's structure\n protected _refPoint: GlobalPoint;\n\n // Fill colour of the shape\n fillColour: string = \"#000\";\n strokeColour: string = \"rgba(0,0,0,0)\";\n // The optional name associated with the shape\n name = \"Unknown shape\";\n nameVisible = true;\n\n // Associated trackers/auras/owners\n trackers: Tracker[] = [];\n auras: Aura[] = [];\n labels: Label[] = [];\n protected _owners: string[] = [];\n\n // Block light sources\n visionObstruction = false;\n // Prevent shapes from overlapping with this shape\n movementObstruction = false;\n // Does this shape represent a playable token\n isToken = false;\n // Show a highlight box\n showHighlight = false;\n\n // Mouseover annotation\n annotation: string = \"\";\n\n // Draw modus to use\n globalCompositeOperation: string = \"source-over\";\n\n // Additional options for specialized uses\n options: Map = new Map();\n\n constructor(refPoint: GlobalPoint, fillColour?: string, strokeColour?: string, uuid?: string) {\n this._refPoint = refPoint;\n this.uuid = uuid || uuidv4();\n if (fillColour !== undefined) this.fillColour = fillColour;\n if (strokeColour !== undefined) this.strokeColour = strokeColour;\n }\n\n get refPoint() {\n return this._refPoint;\n }\n set refPoint(point: GlobalPoint) {\n this._refPoint = point;\n }\n\n abstract getBoundingBox(): BoundingRect;\n\n // If inWorldCoord is\n abstract contains(point: GlobalPoint): boolean;\n\n abstract center(): GlobalPoint;\n abstract center(centerPoint: GlobalPoint): void;\n visibleInCanvas(canvas: HTMLCanvasElement): boolean {\n // for (const aura of this.auras) {\n // if (aura.value > 0) {\n // const auraCircle = new Circle(this.center(), aura.value);\n // if (auraCircle.visibleInCanvas(canvas)) return true;\n // }\n // }\n return false;\n }\n\n // Code to snap a shape to the grid\n // This is shape dependent as the shape refPoints are shape specific in\n abstract snapToGrid(): void;\n abstract resizeToGrid(): void;\n abstract resize(resizePoint: number, point: LocalPoint): void;\n\n abstract get points(): number[][];\n\n getPointIndex(p: GlobalPoint, delta = 0): number {\n for (const [idx, point] of this.points.entries()) {\n if (Math.abs(p.x - point[0]) <= delta && Math.abs(p.y - point[1]) <= delta) return idx;\n }\n return -1;\n }\n\n getPointOrientation(i: number): Vector {\n const prev = GlobalPoint.fromArray(this.points[(this.points.length + i - 1) % this.points.length]);\n const point = GlobalPoint.fromArray(this.points[i]);\n const next = GlobalPoint.fromArray(this.points[(i + 1) % this.points.length]);\n const vec = next.subtract(prev);\n const mid = prev.add(vec.multiply(0.5));\n return point.subtract(mid).normalize();\n }\n\n invalidate(skipLightUpdate: boolean) {\n const l = layerManager.getLayer(this.layer);\n if (l) l.invalidate(skipLightUpdate);\n }\n\n checkVisionSources(recalculate = true) {\n const self = this;\n const obstructionIndex = gameStore.visionBlockers.indexOf(this.uuid);\n let update = false;\n if (this.visionObstruction && obstructionIndex === -1) {\n gameStore.visionBlockers.push(this.uuid);\n update = true;\n } else if (!this.visionObstruction && obstructionIndex >= 0) {\n gameStore.visionBlockers.splice(obstructionIndex, 1);\n update = true;\n }\n if (update && recalculate) gameStore.recalculateVision();\n\n // Check if the visionsource auras are in the gameManager\n this.auras.forEach(au => {\n const ls = gameStore.visionSources;\n const i = ls.findIndex(o => o.aura === au.uuid);\n if (au.visionSource && i === -1) {\n ls.push({ shape: self.uuid, aura: au.uuid });\n } else if (!au.visionSource && i >= 0) {\n ls.splice(i, 1);\n }\n });\n // Check if anything in the gameManager referencing this shape is in fact still a visionsource\n for (let i = gameStore.visionSources.length - 1; i >= 0; i--) {\n const ls = gameStore.visionSources[i];\n if (ls.shape === self.uuid) {\n if (!self.auras.some(a => a.uuid === ls.aura && a.visionSource)) gameStore.visionSources.splice(i, 1);\n }\n }\n }\n\n setMovementBlock(blocksMovement: boolean, recalculate = true) {\n this.movementObstruction = blocksMovement || false;\n const obstructionIndex = gameStore.movementblockers.indexOf(this.uuid);\n let update = false;\n if (this.movementObstruction && obstructionIndex === -1) {\n gameStore.movementblockers.push(this.uuid);\n update = true;\n } else if (!this.movementObstruction && obstructionIndex >= 0) {\n gameStore.movementblockers.splice(obstructionIndex, 1);\n update = true;\n }\n if (update && recalculate) gameStore.recalculateMovement();\n }\n\n setIsToken(isToken: boolean) {\n this.isToken = isToken;\n if (this.ownedBy()) {\n const i = gameStore.ownedtokens.indexOf(this.uuid);\n if (this.isToken && i === -1) gameStore.ownedtokens.push(this.uuid);\n else if (!this.isToken && i >= 0) gameStore.ownedtokens.splice(i, 1);\n }\n }\n\n abstract asDict(): ServerShape;\n getBaseDict(): ServerShape {\n return {\n type_: this.type,\n uuid: this.uuid,\n x: this.refPoint.x,\n y: this.refPoint.y,\n layer: this.layer,\n draw_operator: this.globalCompositeOperation,\n movement_obstruction: this.movementObstruction,\n vision_obstruction: this.visionObstruction,\n auras: aurasToServer(this.auras),\n trackers: this.trackers,\n labels: this.labels,\n owners: this._owners,\n fill_colour: this.fillColour,\n stroke_colour: this.strokeColour,\n name: this.name,\n name_visible: this.nameVisible,\n annotation: this.annotation,\n is_token: this.isToken,\n options: JSON.stringify([...this.options]),\n };\n }\n fromDict(data: ServerShape) {\n this.layer = data.layer;\n this.globalCompositeOperation = data.draw_operator;\n this.movementObstruction = data.movement_obstruction;\n this.visionObstruction = data.vision_obstruction;\n this.auras = aurasFromServer(data.auras);\n this.trackers = data.trackers;\n this.labels = data.labels;\n this._owners = data.owners;\n this.isToken = data.is_token;\n this.nameVisible = data.name_visible;\n if (data.annotation) this.annotation = data.annotation;\n if (data.name) this.name = data.name;\n if (data.options) this.options = new Map(JSON.parse(data.options));\n }\n\n draw(ctx: CanvasRenderingContext2D) {\n if (this.globalCompositeOperation !== undefined) ctx.globalCompositeOperation = this.globalCompositeOperation;\n else ctx.globalCompositeOperation = \"source-over\";\n if (this.showHighlight) {\n const bbox = this.getBoundingBox();\n ctx.strokeStyle = \"red\";\n ctx.strokeRect(g2lx(bbox.topLeft.x) - 5, g2ly(bbox.topLeft.y) - 5, g2lz(bbox.w) + 10, g2lz(bbox.h) + 10);\n }\n }\n\n drawAuras(ctx: CanvasRenderingContext2D) {\n for (const aura of this.auras) {\n if (aura.value === 0 && aura.dim === 0) return;\n ctx.beginPath();\n\n const loc = g2l(this.center());\n const innerRange = g2lr(aura.value + aura.dim);\n\n if (aura.dim === 0) ctx.fillStyle = aura.colour;\n else {\n const gradient = ctx.createRadialGradient(\n loc.x,\n loc.y,\n g2lr(aura.value),\n loc.x,\n loc.y,\n g2lr(aura.value + aura.dim),\n );\n const tc = tinycolor(aura.colour);\n ctx.fillStyle = gradient;\n gradient.addColorStop(0, aura.colour);\n gradient.addColorStop(1, tc.setAlpha(0).toRgbString());\n }\n if (!aura.visionSource || aura.lastPath === undefined) {\n ctx.arc(loc.x, loc.y, innerRange, 0, 2 * Math.PI);\n ctx.fill();\n } else {\n try {\n ctx.fill(aura.lastPath);\n } catch (e) {\n ctx.arc(loc.x, loc.y, innerRange, 0, 2 * Math.PI);\n ctx.fill();\n console.warn(e);\n }\n }\n }\n }\n\n getInitiativeRepr(): InitiativeData {\n return {\n uuid: this.uuid,\n visible: !gameStore.IS_DM,\n group: false,\n source: this.name,\n has_img: false,\n effects: [],\n index: Infinity,\n };\n }\n\n moveLayer(layer: string, sync: boolean) {\n const oldLayer = layerManager.getLayer(this.layer);\n const newLayer = layerManager.getLayer(layer);\n if (oldLayer === undefined || newLayer === undefined) return;\n this.layer = layer;\n // Update layer shapes\n oldLayer.shapes.splice(oldLayer.shapes.indexOf(this), 1);\n newLayer.shapes.push(this);\n // Revalidate layers (light should at most be redone once)\n oldLayer.invalidate(true);\n newLayer.invalidate(false);\n // Sync!\n if (sync) socket.emit(\"Shape.Layer.Change\", { uuid: this.uuid, layer });\n }\n\n get owners() {\n return Object.freeze(this._owners.slice());\n }\n\n ownedBy(username?: string) {\n if (username === undefined) username = gameStore.username;\n return gameStore.IS_DM || this._owners.includes(username) || (gameStore.FAKE_PLAYER && gameStore.activeTokens.includes(this.uuid));\n }\n\n addOwner(owner: string) {\n if (!this._owners.includes(owner)) this._owners.push(owner);\n }\n\n updateOwner(oldValue: string, newValue: string) {\n const ownerIndex = this._owners.findIndex(o => o === oldValue);\n if (ownerIndex >= 0) this._owners.splice(ownerIndex, 1, newValue);\n else this.addOwner(newValue);\n }\n\n removeOwner(owner: string) {\n const ownerIndex = this._owners.findIndex(o => o === owner);\n this._owners.splice(ownerIndex, 1);\n }\n}\n","import mod from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/ts-loader/index.js??ref--12-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./prompt.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/ts-loader/index.js??ref--12-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./prompt.vue?vue&type=script&lang=ts&\"","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return (_vm.note !== null)?_c('modal',{attrs:{\"visible\":_vm.visible,\"mask\":false},on:{\"close\":function($event){_vm.visible = false}},scopedSlots:_vm._u([{key:\"header\",fn:function(m){return _c('div',{staticClass:\"modal-header\",attrs:{\"draggable\":\"true\"},on:{\"dragstart\":m.dragStart,\"dragend\":m.dragEnd}},[_c('span',{on:{\"click\":function($event){_vm.$refs.title.select()}}},[_c('i',{staticClass:\"fas fa-pencil-alt\",staticStyle:{\"font-size\":\"15px\"}})]),_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.note.title),expression:\"note.title\"}],ref:\"title\",domProps:{\"value\":(_vm.note.title)},on:{\"change\":_vm.updateNote,\"input\":function($event){if($event.target.composing){ return; }_vm.$set(_vm.note, \"title\", $event.target.value)}}}),_c('div',{staticClass:\"header-close\",on:{\"click\":function($event){_vm.visible = false}}},[_c('i',{staticClass:\"far fa-window-close\"})])])}}])},[_c('div',{staticClass:\"modal-body\"},[_c('textarea',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.note.text),expression:\"note.text\"}],ref:\"textarea\",style:({'height': _vm.calcHeight()}),domProps:{\"value\":(_vm.note.text)},on:{\"change\":_vm.updateNote,\"input\":function($event){if($event.target.composing){ return; }_vm.$set(_vm.note, \"text\", $event.target.value)}}})]),_c('div',{staticClass:\"modal-footer\"},[_c('button',{on:{\"click\":_vm.removeNote}},[_c('i',{staticClass:\"far fa-trash-alt\"}),_vm._v(\" Remove\\n \")])])]):_vm._e()}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","export * from \"-!cache-loader?{\\\"cacheDirectory\\\":\\\"node_modules/.cache/vue-loader\\\",\\\"cacheIdentifier\\\":\\\"74f43d04-vue-loader-template\\\"}!../../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./note.vue?vue&type=template&id=7a3669fd&scoped=true&\"","import mod from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./modal.vue?vue&type=style&index=0&id=12ed61ba&scoped=true&lang=css&\"; export default mod; export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./modal.vue?vue&type=style&index=0&id=12ed61ba&scoped=true&lang=css&\"","\n\n\n\n\nimport Component from \"vue-class-component\";\n\nimport SelectContext from \"@/game/ui/tools/selectcontext.vue\";\nimport Tool from \"@/game/ui/tools/tool.vue\";\nimport SelectionInfo from \"../selection/selection_info.vue\";\n\nimport { getRef } from \"@/core/utils\";\nimport { socket } from \"@/game/api/socket\";\nimport { GlobalPoint, LocalPoint, Ray, Vector } from \"@/game/geom\";\nimport { Layer } from \"@/game/layers/layer\";\nimport { layerManager } from \"@/game/layers/manager\";\nimport { Rect } from \"@/game/shapes/rect\";\nimport { gameStore } from \"@/game/store\";\nimport { calculateDelta } from \"@/game/ui/tools/utils\";\nimport { g2l, g2lr, g2lx, g2ly, g2lz, l2g, l2gz } from \"@/game/units\";\nimport { getMouse } from \"@/game/utils\";\n\nexport enum SelectOperations {\n Noop,\n Resize,\n Drag,\n GroupSelect,\n}\n\nconst start = new GlobalPoint(-1000, -1000);\n\n@Component({\n components: {\n SelectContext,\n },\n})\nexport default class SelectTool extends Tool {\n name = \"Select\";\n showContextMenu = false;\n active = false;\n\n mode = SelectOperations.Noop;\n resizePoint = 0;\n deltaChanged = false;\n // Because we never drag from the asset's (0, 0) coord and want a smoother drag experience\n // we keep track of the actual offset within the asset.\n dragRay = new Ray(new LocalPoint(0, 0), new Vector(0, 0));\n selectionStartPoint = start;\n selectionHelper = new Rect(start, 0, 0);\n created() {\n this.selectionHelper.globalCompositeOperation = \"source-over\";\n }\n onMouseDown(event: MouseEvent) {\n const layer = layerManager.getLayer();\n if (layer === undefined) {\n console.log(\"No active layer!\");\n return;\n }\n\n if (!this.selectionHelper.owners.includes(gameStore.username)) {\n this.selectionHelper.addOwner(gameStore.username);\n }\n\n const mouse = getMouse(event);\n const globalMouse = l2g(mouse);\n\n let hit = false;\n // The selectionStack allows for lower positioned objects that are selected to have precedence during overlap.\n let selectionStack;\n if (!layer.selection.length) selectionStack = layer.shapes;\n else selectionStack = layer.shapes.concat(layer.selection);\n for (let i = selectionStack.length - 1; i >= 0; i--) {\n const shape = selectionStack[i];\n\n this.resizePoint = shape.getPointIndex(globalMouse, l2gz(3));\n\n // Resize case, a corner is selected\n if (this.resizePoint >= 0) {\n layer.selection = [shape];\n getRef(\"selectionInfo\").shape = shape;\n this.mode = SelectOperations.Resize;\n layer.invalidate(true);\n hit = true;\n break;\n\n // Drag case, a shape is selected\n } else if (shape.contains(globalMouse)) {\n const selection = shape;\n if (layer.selection.indexOf(selection) === -1) {\n layer.selection = [selection];\n getRef(\"selectionInfo\").shape = selection;\n }\n this.mode = SelectOperations.Drag;\n const localRefPoint = g2l(selection.refPoint);\n this.dragRay = new Ray(localRefPoint, mouse.subtract(localRefPoint));\n layer.invalidate(true);\n hit = true;\n break;\n }\n }\n\n // GroupSelect case, draw a selection box to select multiple shapes\n if (!hit) {\n this.mode = SelectOperations.GroupSelect;\n for (const selection of layer.selection) getRef(\"selectionInfo\").shape = selection;\n\n this.selectionStartPoint = globalMouse;\n\n this.selectionHelper.refPoint = this.selectionStartPoint;\n this.selectionHelper.w = 0;\n this.selectionHelper.h = 0;\n\n layer.selection = [this.selectionHelper];\n layer.invalidate(true);\n }\n this.active = true;\n }\n onMouseMove(event: MouseEvent) {\n // if (!this.active) return; we require mousemove for the resize cursor\n const layer = layerManager.getLayer();\n if (layer === undefined) {\n console.log(\"No active layer!\");\n return;\n }\n const mouse = getMouse(event);\n const globalMouse = l2g(mouse);\n this.deltaChanged = false;\n\n if (this.mode === SelectOperations.GroupSelect) {\n // Currently draw on active layer\n const endPoint = globalMouse;\n\n this.selectionHelper.w = Math.abs(endPoint.x - this.selectionStartPoint.x);\n this.selectionHelper.h = Math.abs(endPoint.y - this.selectionStartPoint.y);\n this.selectionHelper.refPoint = new GlobalPoint(\n Math.min(this.selectionStartPoint.x, endPoint.x),\n Math.min(this.selectionStartPoint.y, endPoint.y),\n );\n layer.invalidate(true);\n } else if (layer.selection.length) {\n const og = g2l(layer.selection[layer.selection.length - 1].refPoint);\n const origin = og.add(this.dragRay.direction);\n let delta = mouse.subtract(origin).multiply(1 / gameStore.zoomFactor);\n const ogDelta = delta;\n if (this.mode === SelectOperations.Drag) {\n // If we are on the tokens layer do a movement block check.\n if (layer.name === \"tokens\" && !(event.shiftKey && gameStore.IS_DM)) {\n for (const sel of layer.selection) {\n if (!sel.ownedBy()) continue;\n if (sel.uuid === this.selectionHelper.uuid) continue; // the selection helper should not be treated as a real shape.\n delta = calculateDelta(delta, sel);\n if (delta !== ogDelta) this.deltaChanged = true;\n }\n }\n // Actually apply the delta on all shapes\n for (const sel of layer.selection) {\n if (!sel.ownedBy()) continue;\n sel.refPoint = sel.refPoint.add(delta);\n if (sel !== this.selectionHelper) {\n if (sel.visionObstruction) gameStore.recalculateVision(true);\n socket.emit(\"Shape.Update\", { shape: sel.asDict(), redraw: true, temporary: true });\n }\n }\n layer.invalidate(false);\n } else if (this.mode === SelectOperations.Resize) {\n for (const sel of layer.selection) {\n if (!sel.ownedBy()) continue;\n sel.resize(this.resizePoint, mouse);\n if (sel !== this.selectionHelper) {\n if (sel.visionObstruction) gameStore.recalculateVision(true);\n socket.emit(\"Shape.Update\", { shape: sel.asDict(), redraw: true, temporary: true });\n }\n layer.invalidate(false);\n this.updateCursor(layer, globalMouse);\n }\n } else {\n this.updateCursor(layer, globalMouse);\n }\n } else {\n document.body.style.cursor = \"default\";\n }\n }\n onMouseUp(e: MouseEvent): void {\n if (!this.active) return;\n if (layerManager.getLayer() === undefined) {\n console.log(\"No active layer!\");\n return;\n }\n const layer = layerManager.getLayer()!;\n\n if (this.mode === SelectOperations.GroupSelect) {\n layer.clearSelection();\n layer.shapes.forEach(shape => {\n if (!shape.ownedBy()) return;\n if (shape === this.selectionHelper) return;\n const bbox = shape.getBoundingBox();\n if (!shape.ownedBy()) return;\n if (\n this.selectionHelper!.refPoint.x <= bbox.topRight.x &&\n this.selectionHelper!.refPoint.x + this.selectionHelper!.w >= bbox.topLeft.x &&\n this.selectionHelper!.refPoint.y <= bbox.botLeft.y &&\n this.selectionHelper!.refPoint.y + this.selectionHelper!.h >= bbox.topLeft.y\n ) {\n layer.selection.push(shape);\n }\n });\n\n // Push the selection helper as the last element of the selection\n // This makes sure that it will be the first one to be hit in the hit detection onMouseDown\n if (layer.selection.length > 0) layer.selection.push(this.selectionHelper);\n\n layer.invalidate(true);\n } else if (layer.selection.length) {\n layer.selection.forEach(sel => {\n if (!sel.ownedBy()) return;\n if (this.mode === SelectOperations.Drag) {\n if (\n this.dragRay.origin!.x === g2lx(sel.refPoint.x) &&\n this.dragRay.origin!.y === g2ly(sel.refPoint.y)\n )\n return;\n\n if (gameStore.useGrid && !e.altKey && !this.deltaChanged) {\n sel.snapToGrid();\n }\n\n if (sel !== this.selectionHelper) {\n if (sel.visionObstruction) gameStore.recalculateVision();\n if (sel.movementObstruction) gameStore.recalculateMovement();\n socket.emit(\"Shape.Update\", { shape: sel.asDict(), redraw: true, temporary: false });\n }\n layer.invalidate(false);\n }\n if (this.mode === SelectOperations.Resize) {\n if (gameStore.useGrid && !e.altKey) {\n sel.resizeToGrid();\n }\n if (sel !== this.selectionHelper) {\n if (sel.visionObstruction) gameStore.recalculateVision();\n if (sel.movementObstruction) gameStore.recalculateMovement();\n socket.emit(\"Shape.Update\", { shape: sel.asDict(), redraw: true, temporary: false });\n }\n layer.invalidate(false);\n }\n });\n }\n this.mode = SelectOperations.Noop;\n this.active = false;\n }\n onContextMenu(event: MouseEvent) {\n if (layerManager.getLayer() === undefined) {\n console.log(\"No active layer!\");\n return;\n }\n const layer = layerManager.getLayer()!;\n const mouse = getMouse(event);\n const globalMouse = l2g(mouse);\n\n for (const shape of layer.selection) {\n if (shape.contains(globalMouse) && shape !== this.selectionHelper) {\n layer.selection = [shape];\n getRef(\"selectionInfo\").shape = shape;\n layer.invalidate(true);\n (this.$parent.$refs.shapecontext).open(event, shape);\n return;\n }\n }\n (this.$refs.selectcontext).open(event);\n }\n updateCursor(layer: Layer, globalMouse: GlobalPoint) {\n for (const sel of layer.selection) {\n const resizePoint = sel.getPointIndex(globalMouse, l2gz(3));\n if (resizePoint < 0) document.body.style.cursor = \"default\";\n else {\n let angle = sel.getPointOrientation(resizePoint).angle();\n if (angle < 0) angle += 360;\n const d = 45 / 2;\n if (angle >= 315 + d || angle < d || (angle >= 135 + d && angle < 225 - d))\n document.body.style.cursor = \"ew-resize\";\n if ((angle >= 45 + d && angle < 135 - d) || (angle >= 225 + d && angle < 315 - d))\n document.body.style.cursor = \"ns-resize\";\n if ((angle >= d && angle < 90 - d) || (angle >= 180 + d && angle < 270 - d))\n document.body.style.cursor = \"nwse-resize\";\n if ((angle >= 90 + d && angle < 180 - d) || (angle >= 270 + d && angle < 360 - d))\n document.body.style.cursor = \"nesw-resize\";\n }\n }\n }\n}\n","import { GlobalPoint, Ray, Vector } from \"@/game/geom\";\nimport { layerManager } from \"@/game/layers/manager\";\nimport { Shape } from \"@/game/shapes/shape\";\nimport { gameStore } from \"@/game/store\";\nimport { PA_CDT } from \"@/game/visibility/te/pa\";\nimport { Point, Sign, Triangle } from \"@/game/visibility/te/tds\";\nimport { ccw, cw, intersection, orientation } from \"@/game/visibility/te/triag\";\n\n// First go through each shape in the selection and see if the delta has to be truncated due to movement blockers\n\n// This is definitely super convoluted and inefficient but I was tired and really wanted the smooth wall sliding collision stuff to work\n// And it does now, so hey ¯\\_(ツ)_/¯\nexport function calculateDelta(delta: Vector, sel: Shape, done?: string[]) {\n if (delta.x === 0 && delta.y === 0) return delta;\n if (gameStore.visionMode === \"bvh\") {\n if (done === undefined) done = [];\n const ogSelBBox = sel.getBoundingBox();\n const newSelBBox = ogSelBBox.offset(delta);\n let refine = false;\n for (const movementBlocker of gameStore.movementblockers) {\n if (done.includes(movementBlocker)) continue;\n const blocker = layerManager.UUIDMap.get(movementBlocker)!;\n const blockerBBox = blocker.getBoundingBox();\n let found = blockerBBox.intersectsWithInner(newSelBBox);\n if (!found) {\n // This is an edge case, precalculating the rays is not worth in this case.\n const ray = Ray.fromPoints(ogSelBBox.topLeft.add(delta.normalize()), newSelBBox.topLeft);\n const invDir = ray.direction.inverse();\n const dirIsNegative = [invDir.x < 0, invDir.y < 0];\n found = blockerBBox.intersectP(ray, invDir, dirIsNegative).hit;\n }\n // Check if the bounding box of our destination would intersect with the bounding box of the movementblocker\n if (found) {\n const bCenter = blockerBBox.center();\n const sCenter = ogSelBBox.center();\n\n const d = sCenter.subtract(bCenter);\n const ux = new Vector(1, 0);\n const uy = new Vector(0, 1);\n let dx = d.dot(ux);\n let dy = d.dot(uy);\n if (dx > blockerBBox.w / 2) dx = blockerBBox.w / 2;\n if (dx < -blockerBBox.w / 2) dx = -blockerBBox.w / 2;\n if (dy > blockerBBox.h / 2) dy = blockerBBox.h / 2;\n if (dy < -blockerBBox.h / 2) dy = -blockerBBox.h / 2;\n\n // Closest point / intersection point between the two bboxes. Not the delta intersect!\n const p = bCenter.add(ux.multiply(dx)).add(uy.multiply(dy));\n\n if (p.x === ogSelBBox.topLeft.x || p.x === ogSelBBox.topRight.x) delta = new Vector(0, delta.y);\n else if (p.y === ogSelBBox.topLeft.y || p.y === ogSelBBox.botLeft.y) delta = new Vector(delta.x, 0);\n else {\n if (p.x < ogSelBBox.topLeft.x) delta = new Vector(p.x - ogSelBBox.topLeft.x, delta.y);\n else if (p.x > ogSelBBox.topRight.x) delta = new Vector(p.x - ogSelBBox.topRight.x, delta.y);\n else if (p.y < ogSelBBox.topLeft.y) delta = new Vector(delta.x, p.y - ogSelBBox.topLeft.y);\n else if (p.y > ogSelBBox.botLeft.y) delta = new Vector(delta.x, p.y - ogSelBBox.botLeft.y);\n }\n refine = true;\n done.push(movementBlocker);\n break;\n }\n }\n if (refine) delta = calculateDelta(delta, sel, done);\n return delta;\n } else {\n const centerTriangle = PA_CDT.movement.locate(sel.center().asArray(), null).loc;\n for (const point of sel.points) {\n const lt = PA_CDT.movement.locate(point, centerTriangle);\n const triangle = lt.loc;\n if (triangle === null) continue;\n delta = checkTriangle(point, triangle, delta);\n }\n return delta;\n }\n}\n\nfunction checkTriangle(point: Point, triangle: Triangle, delta: Vector, skip: Triangle[] = []): Vector {\n const p = new GlobalPoint(point[0], point[1]);\n const endpoint = p.add(delta).asArray();\n if (triangle.contains(endpoint)) return delta;\n skip.push(triangle);\n\n for (let i = 0; i < 3; i++) {\n if (skip.includes(triangle.neighbours[i]!)) continue;\n\n const _cw = triangle.vertices[cw(i)]!.point!;\n const _ccw = triangle.vertices[ccw(i)]!.point!;\n const ix = intersection(point, endpoint, _cw, _ccw);\n\n if (ix === null) continue;\n\n if (!triangle.isConstrained(i)) return checkTriangle(point, triangle.neighbours[i]!, delta, skip);\n\n if (ix[0] === p.x && ix[1] === p.y) {\n const OR = orientation;\n const o = orientation(point, endpoint, _ccw);\n // Remember: canvas y axis is inverted\n if (o === Sign.LEFT_TURN) continue;\n if (o === Sign.ZERO) continue;\n }\n let newDelta = new GlobalPoint(ix[0], ix[1]).subtract(p).multiply(0.8);\n if (newDelta.length() < 1) newDelta = new Vector(0, 0);\n if (newDelta.length() < delta.length()) delta = newDelta;\n }\n return delta;\n}\n","import mod from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./note.vue?vue&type=style&index=0&id=7a3669fd&scoped=true&lang=css&\"; export default mod; export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./note.vue?vue&type=style&index=0&id=7a3669fd&scoped=true&lang=css&\"","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/ts-loader/index.js??ref--12-2!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./labels.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/ts-loader/index.js??ref--12-2!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./labels.vue?vue&type=script&lang=ts&\"","import mod from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/ts-loader/index.js??ref--12-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./vision.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/ts-loader/index.js??ref--12-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./vision.vue?vue&type=script&lang=ts&\"","import { socket } from \"@/game/api/socket\";\nimport { gameStore } from \"@/game/store\";\n\nexport function sendClientOptions() {\n socket.emit(\"Client.Options.Set\", {\n locationOptions: {\n panX: gameStore.panX,\n panY: gameStore.panY,\n zoomFactor: gameStore.zoomFactor,\n },\n });\n}\n","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nimport Vue from \"vue\";\nimport Component from \"vue-class-component\";\nimport { Prop } from \"vue-property-decorator\";\n\nimport { AssetFile, AssetList } from \"@/core/comm/types\";\nimport { alphSort } from \"@/core/utils\";\n\n@Component({\n name: \"asset-node\",\n})\nexport default class AssetNode extends Vue {\n @Prop() asset!: AssetList;\n\n showImage = null;\n get folders(): string[] {\n return Object.keys(this.asset)\n .filter(el => ![\"__files\"].includes(el))\n .sort(alphSort);\n }\n\n get files(): AssetFile[] {\n if (this.asset.__files)\n return (this.asset.__files)\n .concat()\n .sort((a, b) => (a.name.toLowerCase() > b.name.toLowerCase() ? 1 : -1));\n return [];\n }\n\n toggle(event: { target: HTMLElement }) {\n // tslint:disable-next-line:prefer-for-of\n for (let i = 0; i < event.target.children.length; i++) {\n const el = event.target.children[i];\n el.style.display = el.style.display === \"\" ? \"block\" : \"\";\n }\n }\n\n dragStart(event: DragEvent, imageSource: string) {\n this.showImage = null;\n if (event === null || event.dataTransfer === null) return;\n const img = (event.target).querySelector(\".preview\")!;\n event.dataTransfer.setDragImage(img, 0, 0);\n event.dataTransfer.setData(\"text/plain\", imageSource);\n }\n}\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return (_vm.visible)?_c('div',{staticClass:\"ContextMenu\",style:({left:_vm.left, top:_vm.top}),attrs:{\"tabindex\":\"-1\"},on:{\"blur\":function($event){_vm.$emit('close')}}},[_c('ul',[_vm._t(\"default\")],2)]):_vm._e()}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","export * from \"-!cache-loader?{\\\"cacheDirectory\\\":\\\"node_modules/.cache/vue-loader\\\",\\\"cacheIdentifier\\\":\\\"74f43d04-vue-loader-template\\\"}!../../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./contextmenu.vue?vue&type=template&id=256dde9c&\"","// import Vuex from \"vuex\";\nimport { getModule, Module, Mutation, VuexModule } from \"vuex-module-decorators\";\n\nimport { Asset } from \"@/core/comm/types\";\nimport { rootStore } from \"@/store\";\n\nexport interface AssetState {\n root: number;\n files: number[];\n folders: number[];\n idMap: Map;\n selected: number[];\n}\n\n@Module({ dynamic: true, store: rootStore, name: \"assets\", namespaced: true })\nclass AssetStore extends VuexModule {\n root = -1;\n files: number[] = [];\n folders: number[] = [];\n idMap: Map = new Map();\n selected: number[] = [];\n\n @Mutation\n clear() {\n this.folders = [];\n this.files = [];\n }\n\n @Mutation\n clearSelected() {\n console.log(\"Cleared\");\n this.selected = [];\n }\n\n @Mutation\n setRoot(root: number) {\n this.root = root;\n }\n}\n\nexport const assetStore = getModule(AssetStore);\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/ts-loader/index.js??ref--12-2!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./contextmenu.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/ts-loader/index.js??ref--12-2!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./contextmenu.vue?vue&type=script&lang=ts&\"","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nimport Vue from \"vue\";\nimport Component from \"vue-class-component\";\n\nimport ContextMenu from \"@/core/components/contextmenu.vue\";\nimport Initiative from \"@/game/ui/initiative.vue\";\n\nimport { getRef } from \"@/core/utils\";\nimport { EventBus } from \"@/game/event-bus\";\nimport { layerManager } from \"@/game/layers/manager\";\nimport { Shape } from \"@/game/shapes/shape\";\nimport { gameStore } from \"@/game/store\";\n\n@Component({\n components: {\n ContextMenu,\n },\n})\nexport default class ShapeContext extends Vue {\n visible = false;\n x = 0;\n y = 0;\n shape: Shape | null = null;\n get activeLayer(): string {\n const layer = layerManager.getLayer();\n return layer === undefined ? \"\" : layer.name;\n }\n open(event: MouseEvent, shape: Shape) {\n this.visible = true;\n this.x = event.pageX;\n this.y = event.pageY;\n this.shape = shape;\n this.$nextTick(() => this.$children[0].$el.focus());\n }\n close() {\n this.visible = false;\n this.shape = null;\n }\n getLayers() {\n return layerManager.layers.filter(l => l.selectable && (gameStore.IS_DM || l.playerEditable));\n }\n getActiveLayer() {\n return layerManager.getLayer();\n }\n getInitiativeWord() {\n if (this.shape === null) return \"\";\n return getRef(\"initiative\").contains(this.shape.uuid) ? \"Show\" : \"Add\";\n }\n setLayer(newLayer: string) {\n if (this.shape === null) return;\n this.shape.moveLayer(newLayer, true);\n this.close();\n }\n moveToBack() {\n if (this.shape === null) return;\n const layer = this.getActiveLayer()!;\n layer.moveShapeOrder(this.shape, 0, true);\n this.close();\n }\n moveToFront() {\n if (this.shape === null) return;\n const layer = this.getActiveLayer()!;\n layer.moveShapeOrder(this.shape, layer.shapes.length - 1, true);\n this.close();\n }\n addInitiative() {\n if (this.shape === null) return;\n const initiative = getRef(\"initiative\");\n if (!initiative.contains(this.shape.uuid)) initiative.addInitiative(this.shape.getInitiativeRepr());\n initiative.visible = true;\n this.close();\n }\n openEditDialog() {\n EventBus.$emit(\"EditDialog.Open\", this.shape);\n this.close();\n }\n}\n","import mod from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/ts-loader/index.js??ref--12-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./map.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/ts-loader/index.js??ref--12-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./map.vue?vue&type=script&lang=ts&\"","import { Layer } from \"@/game/layers/layer\";\nimport { gameStore } from \"@/game/store\";\n\nexport class GridLayer extends Layer {\n invalidate(): void {\n this.valid = false;\n }\n draw(doClear?: boolean): void {\n if (!this.valid) {\n this.drawGrid();\n }\n }\n drawGrid(): void {\n const ctx = this.ctx;\n this.clear();\n ctx.beginPath();\n\n const gs = gameStore.gridSize;\n\n for (let i = 0; i < this.width; i += gs * gameStore.zoomFactor) {\n ctx.moveTo(i + (gameStore.panX % gs) * gameStore.zoomFactor, 0);\n ctx.lineTo(i + (gameStore.panX % gs) * gameStore.zoomFactor, this.height);\n ctx.moveTo(0, i + (gameStore.panY % gs) * gameStore.zoomFactor);\n ctx.lineTo(this.width, i + (gameStore.panY % gs) * gameStore.zoomFactor);\n }\n\n ctx.strokeStyle = gameStore.gridColour;\n ctx.lineWidth = 1;\n ctx.stroke();\n this.valid = true;\n }\n}\n","import Vue from \"vue\";\nimport Vuex from \"vuex\";\n\nimport { AssetState } from \"@/assetManager/store\";\nimport { CoreState } from \"@/core/store\";\nimport { GameState } from \"@/game/store\";\n\nVue.use(Vuex);\n\nexport interface RootState {\n assets: AssetState;\n core: CoreState;\n game: GameState;\n}\n\nexport const rootStore = new Vuex.Store({});\n","import { render, staticRenderFns } from \"./colorpicker.vue?vue&type=template&id=d32461a4&scoped=true&\"\nimport script from \"./colorpicker.vue?vue&type=script&lang=ts&\"\nexport * from \"./colorpicker.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./colorpicker.vue?vue&type=style&index=0&id=d32461a4&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"d32461a4\",\n null\n \n)\n\ncomponent.options.__file = \"colorpicker.vue\"\nexport default component.exports","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nimport Component from \"vue-class-component\";\n\nimport Tool from \"@/game/ui/tools/tool.vue\";\n\nimport { socket } from \"@/game/api/socket\";\nimport { layerManager } from \"@/game/layers/manager\";\nimport { gameStore } from \"@/game/store\";\nimport { Shape } from \"../../shapes/shape\";\n\n@Component\nexport default class VisionTool extends Tool {\n name = \"Vision\";\n active = false;\n\n get selection(): string[] {\n return gameStore.activeTokens;\n }\n\n get tokens(): Shape[] {\n return gameStore.ownedtokens.map(t => layerManager.UUIDMap.get(t)!);\n }\n\n toggle(uuid: string) {\n if (this.selection.includes(uuid)) gameStore.removeActiveToken(uuid);\n else gameStore.addActiveToken(uuid);\n }\n}\n","import mod from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./login.vue?vue&type=style&index=0&id=bc30fc14&scoped=true&lang=css&\"; export default mod; export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./login.vue?vue&type=style&index=0&id=bc30fc14&scoped=true&lang=css&\"","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{attrs:{\"id\":\"app\"}},[_c('router-view',{ref:\"activeComponent\"})],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","import { render, staticRenderFns } from \"./App.vue?vue&type=template&id=196415f0&\"\nvar script = {}\nimport style0 from \"./App.vue?vue&type=style&index=0&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\ncomponent.options.__file = \"App.vue\"\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{attrs:{\"id\":\"main\"},on:{\"mouseleave\":_vm.mouseleave,\"wheel\":_vm.zoom}},[(_vm.showUI)?_c('menu-bar'):_vm._e(),_c('div',{attrs:{\"id\":\"board\"}},[(_vm.ready.manager)?[_c('tool-bar',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.showUI),expression:\"showUI\"}],ref:\"tools\"})]:_vm._e(),_c('div',{attrs:{\"id\":\"layers\"},on:{\"mousedown\":_vm.mousedown,\"mouseup\":_vm.mouseup,\"mousemove\":_vm.mousemove,\"contextmenu\":function($event){$event.preventDefault();$event.stopPropagation();return _vm.contextmenu($event)},\"dragover\":function($event){$event.preventDefault();},\"drop\":function($event){$event.preventDefault();$event.stopPropagation();return _vm.drop($event)}}}),_c('div',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.showUI && _vm.layers.length>1),expression:\"showUI && layers.length>1\"}],attrs:{\"id\":\"layerselect\"}},[_c('ul',_vm._l((_vm.layers),function(layer){return _c('li',{key:layer.name,class:{ 'layer-selected': layer === _vm.selectedLayer },on:{\"mousedown\":function($event){_vm.selectLayer(layer)}}},[_c('a',{attrs:{\"href\":\"#\"}},[_vm._v(_vm._s(layer))])])}))])],2),_c('selection-info',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.showUI),expression:\"showUI\"}],ref:\"selectionInfo\"}),_c('initiative-dialog',{ref:\"initiative\",attrs:{\"id\":\"initiativedialog\"}}),_c('note-dialog',{ref:\"note\"}),_c('label-dialog',{ref:\"labels\"}),_c('zoom-slider',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.showUI),expression:\"showUI\"}],attrs:{\"id\":\"zoomer\",\"height\":6,\"width\":200,\"min\":0,\"max\":1,\"interval\":0.1,\"dot-width\":8,\"dot-height\":20,\"tooltip-dir\":'bottom',\"tooltip\":'hover',\"formatter\":_vm.zoomDisplay.toFixed(1),\"slider-style\":{'border-radius': '15%'},\"bg-style\":{'background-color': '#fff', 'box-shadow': '0.5px 0.5px 3px 1px rgba(0, 0, 0, .36)'},\"process-style\":{'background-color': '#fff'}},model:{value:(_vm.zoomDisplay),callback:function ($$v) {_vm.zoomDisplay=$$v},expression:\"zoomDisplay\"}}),_c('prompt-dialog',{ref:\"prompt\"}),_c('confirm-dialog',{ref:\"confirm\"})],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","export * from \"-!cache-loader?{\\\"cacheDirectory\\\":\\\"node_modules/.cache/vue-loader\\\",\\\"cacheIdentifier\\\":\\\"74f43d04-vue-loader-template\\\"}!../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./game.vue?vue&type=template&id=05b88da7&scoped=true&\"","import { GlobalPoint, Ray } from \"@/game/geom\";\nimport { Layer } from \"@/game/layers/layer\";\nimport { layerManager } from \"@/game/layers/manager\";\nimport { Settings } from \"@/game/settings\";\nimport { Circle } from \"@/game/shapes/circle\";\nimport { Shape } from \"@/game/shapes/shape\";\nimport { gameStore } from \"@/game/store\";\nimport { g2l, g2lr, g2lx, g2ly, g2lz, getUnitDistance } from \"@/game/units\";\nimport { getFogColour } from \"@/game/utils\";\nimport { computeVisibility } from \"../visibility/te/te\";\n\nexport class FOWLayer extends Layer {\n isVisionLayer: boolean = true;\n preFogShapes: Shape[] = [];\n virtualCanvas: HTMLCanvasElement;\n vCtx: CanvasRenderingContext2D;\n\n constructor(canvas: HTMLCanvasElement, name: string) {\n super(canvas, name);\n this.virtualCanvas = document.createElement(\"canvas\");\n this.virtualCanvas.width = window.innerWidth;\n this.virtualCanvas.height = window.innerHeight;\n this.vCtx = this.virtualCanvas.getContext(\"2d\")!;\n }\n\n addShape(shape: Shape, sync: boolean, temporary?: boolean, invalidate = true): void {\n super.addShape(shape, sync, temporary, invalidate);\n if (shape.options.has(\"preFogShape\") && shape.options.get(\"preFogShape\")) {\n this.preFogShapes.push(shape);\n }\n }\n\n removeShape(shape: Shape, sync: boolean, temporary?: boolean) {\n if (shape.options.has(\"preFogShape\") && shape.options.get(\"preFogShape\")) {\n const idx = this.preFogShapes.findIndex(s => s.uuid === shape.uuid);\n this.preFogShapes.splice(idx, 1);\n }\n super.removeShape(shape, sync, temporary);\n }\n\n draw(): void {\n if (!this.valid) {\n const ctx = this.ctx;\n\n if (Settings.skipLightFOW) {\n ctx.clearRect(0, 0, this.canvas.width, this.canvas.height);\n this.valid = true;\n return;\n }\n\n const originalOperation = ctx.globalCompositeOperation;\n ctx.clearRect(0, 0, this.canvas.width, this.canvas.height);\n\n ctx.fillStyle = \"rgba(0, 0, 0, 1)\";\n\n const dctx = layerManager.getLayer(\"draw\")!.ctx;\n if (Settings.drawAngleLines || Settings.drawFirstLightHit) {\n dctx.clearRect(0, 0, dctx.canvas.width, dctx.canvas.height);\n }\n\n // At all times provide a minimal vision range to prevent losing your tokens in fog.\n if (gameStore.fullFOW && layerManager.hasLayer(\"tokens\")) {\n layerManager.getLayer(\"tokens\")!.shapes.forEach(sh => {\n if (!sh.ownedBy() || !sh.isToken) return;\n const bb = sh.getBoundingBox();\n const lcenter = g2l(sh.center());\n const alm = 0.8 * g2lz(bb.w);\n ctx.beginPath();\n ctx.arc(lcenter.x, lcenter.y, alm, 0, 2 * Math.PI);\n const gradient = ctx.createRadialGradient(lcenter.x, lcenter.y, alm / 2, lcenter.x, lcenter.y, alm);\n gradient.addColorStop(0, \"rgba(0, 0, 0, 1)\");\n gradient.addColorStop(1, \"rgba(0, 0, 0, 0)\");\n ctx.fillStyle = gradient;\n ctx.fill();\n });\n }\n\n this.vCtx.clearRect(0, 0, window.innerWidth, window.innerHeight);\n\n // First cut out all the light sources\n for (const light of gameStore.visionSources) {\n const shape = layerManager.UUIDMap.get(light.shape);\n if (shape === undefined) continue;\n const aura = shape.auras.find(a => a.uuid === light.aura);\n if (aura === undefined) continue;\n\n const auraLength = getUnitDistance(aura.value + aura.dim);\n const center = shape.center();\n const lcenter = g2l(center);\n\n const auraCircle = new Circle(center, auraLength);\n if (!auraCircle.visibleInCanvas(ctx.canvas)) continue;\n\n if (gameStore.visionMode === \"bvh\") {\n let lastArcAngle = -1;\n\n const path = new Path2D();\n path.moveTo(lcenter.x, lcenter.y);\n let firstPoint: GlobalPoint;\n\n for (let angle = 0; angle < 2 * Math.PI; angle += (Settings.angleSteps / 180) * Math.PI) {\n const anglePoint = new GlobalPoint(\n center.x + auraLength * Math.cos(angle),\n center.y + auraLength * Math.sin(angle),\n );\n if (Settings.drawAngleLines) {\n dctx!.beginPath();\n dctx!.moveTo(g2lx(center.x), g2ly(center.y));\n dctx!.lineTo(g2lx(anglePoint.x), g2ly(anglePoint.y));\n dctx!.stroke();\n }\n\n // Check if there is a hit with one of the nearby light blockers.\n const lightRay = Ray.fromPoints(center, anglePoint);\n const hitResult = gameStore.BV.intersect(lightRay);\n\n if (angle === 0) firstPoint = hitResult.hit ? hitResult.intersect : anglePoint;\n\n // We can move on to the next angle if nothing was hit.\n if (!hitResult.hit) {\n // If an earlier hit caused the aura to leave the arc, we need to go back to the arc\n if (lastArcAngle === -1) {\n // Set the start of a new arc beginning at the current angle\n lastArcAngle = angle;\n // Draw a line from the last non arc location back to the arc\n const dest = g2l(anglePoint);\n ctx.lineTo(dest.x, dest.y);\n }\n continue;\n }\n // If hit , first finish any ongoing arc, then move to the intersection point\n if (lastArcAngle !== -1) {\n path.arc(lcenter.x, lcenter.y, g2lr(aura.value + aura.dim), lastArcAngle, angle);\n lastArcAngle = -1;\n }\n path.lineTo(g2lx(hitResult.intersect.x), g2ly(hitResult.intersect.y));\n }\n // Finish the final arc.\n if (lastArcAngle === -1) path.lineTo(g2lx(firstPoint!.x), g2ly(firstPoint!.y));\n else path.arc(lcenter.x, lcenter.y, g2lr(aura.value + aura.dim), lastArcAngle, 2 * Math.PI);\n\n if (gameStore.fullFOW) {\n if (aura.dim > 0) {\n // Fill the light aura with a radial dropoff towards the outside.\n const gradient = ctx.createRadialGradient(\n lcenter.x,\n lcenter.y,\n g2lr(aura.value),\n lcenter.x,\n lcenter.y,\n g2lr(aura.value + aura.dim),\n );\n gradient.addColorStop(0, \"rgba(0, 0, 0, 1)\");\n gradient.addColorStop(1, \"rgba(0, 0, 0, 0)\");\n ctx.fillStyle = gradient;\n } else {\n ctx.fillStyle = \"rgba(0, 0, 0, 1)\";\n }\n ctx.fill(path);\n }\n\n aura.lastPath = path;\n } else {\n this.vCtx.globalCompositeOperation = \"source-over\";\n this.vCtx.fillStyle = \"rgba(0, 0, 0, 1)\";\n const polygon = computeVisibility(center, \"vision\");\n this.vCtx.beginPath();\n this.vCtx.moveTo(g2lx(polygon[0][0]), g2ly(polygon[0][1]));\n for (const point of polygon) this.vCtx.lineTo(g2lx(point[0]), g2ly(point[1]));\n this.vCtx.closePath();\n this.vCtx.fill();\n if (aura.dim > 0) {\n // Fill the light aura with a radial dropoff towards the outside.\n const gradient = this.vCtx.createRadialGradient(\n lcenter.x,\n lcenter.y,\n g2lr(aura.value),\n lcenter.x,\n lcenter.y,\n g2lr(aura.value + aura.dim),\n );\n gradient.addColorStop(0, \"rgba(0, 0, 0, 1)\");\n gradient.addColorStop(1, \"rgba(0, 0, 0, 0)\");\n this.vCtx.fillStyle = gradient;\n } else {\n this.vCtx.fillStyle = \"rgba(0, 0, 0, 1)\";\n }\n this.vCtx.globalCompositeOperation = \"source-in\";\n this.vCtx.beginPath();\n this.vCtx.arc(lcenter.x, lcenter.y, g2lr(aura.value + aura.dim), 0, 2 * Math.PI);\n this.vCtx.fill();\n ctx.drawImage(this.virtualCanvas, 0, 0);\n }\n }\n\n // At the DM Side due to opacity of the two fow layers, it looks strange if we just render them on top of eachother like players.\n if (gameStore.fowLOS) {\n ctx.globalCompositeOperation = \"source-in\";\n ctx.drawImage(layerManager.getLayer(\"fow-players\")!.canvas, 0, 0);\n }\n\n for (const preShape of this.preFogShapes) {\n if (!preShape.visibleInCanvas(this.canvas)) continue;\n const ogComposite = preShape.globalCompositeOperation;\n if (!gameStore.fullFOW) {\n if (preShape.globalCompositeOperation === \"source-over\")\n preShape.globalCompositeOperation = \"destination-out\";\n else if (preShape.globalCompositeOperation === \"destination-out\")\n preShape.globalCompositeOperation = \"source-over\";\n }\n preShape.draw(ctx);\n preShape.globalCompositeOperation = ogComposite;\n }\n\n if (gameStore.fullFOW) {\n ctx.globalCompositeOperation = \"source-out\";\n ctx.fillStyle = getFogColour();\n ctx.fillRect(0, 0, ctx.canvas.width, ctx.canvas.height);\n }\n\n super.draw(false);\n\n ctx.globalCompositeOperation = originalOperation;\n }\n }\n}\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/ts-loader/index.js??ref--12-2!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./load.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/ts-loader/index.js??ref--12-2!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./load.vue?vue&type=script&lang=ts&\"","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('Modal',{attrs:{\"visible\":_vm.visible,\"mask\":false},on:{\"close\":function($event){_vm.visible = false}},scopedSlots:_vm._u([{key:\"header\",fn:function(m){return _c('div',{staticClass:\"modal-header\",attrs:{\"draggable\":\"true\"},on:{\"dragstart\":m.dragStart,\"dragend\":m.dragEnd}},[_c('div',[_vm._v(\"Edit asset\")]),_c('div',{staticClass:\"header-close\",on:{\"click\":function($event){_vm.visible = false}}},[_c('i',{staticClass:\"far fa-window-close\"})])])}}])},[_c('div',{staticClass:\"modal-body\"},[_c('div',{staticClass:\"grid\"},[_c('label',{attrs:{\"for\":\"shapeselectiondialog-name\"}},[_vm._v(\"Name\")]),_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.shape.name),expression:\"shape.name\"}],staticStyle:{\"grid-column\":\"numerator / remove\"},attrs:{\"type\":\"text\",\"id\":\"shapeselectiondialog-name\",\"disabled\":!_vm.owned},domProps:{\"value\":(_vm.shape.name)},on:{\"change\":function($event){_vm.updateShape(false)},\"input\":function($event){if($event.target.composing){ return; }_vm.$set(_vm.shape, \"name\", $event.target.value)}}}),_c('div',{style:({opacity: _vm.shape.nameVisible ? 1.0 : 0.3, textAlign: 'center'}),attrs:{\"disabled\":!_vm.owned},on:{\"click\":function($event){_vm.shape.nameVisible = !_vm.shape.nameVisible;_vm.updateShape(false)}}},[_c('i',{staticClass:\"fas fa-eye\"})]),_c('label',{attrs:{\"for\":\"shapeselectiondialog-istoken\"}},[_vm._v(\"Is a token\")]),_c('input',{staticClass:\"styled-checkbox\",staticStyle:{\"grid-column-start\":\"remove\"},attrs:{\"type\":\"checkbox\",\"id\":\"shapeselectiondialog-istoken\",\"disabled\":!_vm.owned},domProps:{\"checked\":_vm.shape.isToken},on:{\"click\":_vm.setToken}}),_c('label',{attrs:{\"for\":\"shapeselectiondialog-visionblocker\"}},[_vm._v(\"Blocks vision/light\")]),_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.shape.visionObstruction),expression:\"shape.visionObstruction\"}],staticStyle:{\"grid-column-start\":\"remove\"},attrs:{\"type\":\"checkbox\",\"id\":\"shapeselectiondialog-visionblocker\",\"disabled\":!_vm.owned},domProps:{\"checked\":Array.isArray(_vm.shape.visionObstruction)?_vm._i(_vm.shape.visionObstruction,null)>-1:(_vm.shape.visionObstruction)},on:{\"change\":[function($event){var $$a=_vm.shape.visionObstruction,$$el=$event.target,$$c=$$el.checked?(true):(false);if(Array.isArray($$a)){var $$v=null,$$i=_vm._i($$a,$$v);if($$el.checked){$$i<0&&(_vm.$set(_vm.shape, \"visionObstruction\", $$a.concat([$$v])))}else{$$i>-1&&(_vm.$set(_vm.shape, \"visionObstruction\", $$a.slice(0,$$i).concat($$a.slice($$i+1))))}}else{_vm.$set(_vm.shape, \"visionObstruction\", $$c)}},_vm.setVisionBlocker]}}),_c('label',{attrs:{\"for\":\"shapeselectiondialog-moveblocker\"}},[_vm._v(\"Blocks movement\")]),_c('input',{staticStyle:{\"grid-column-start\":\"remove\"},attrs:{\"type\":\"checkbox\",\"id\":\"shapeselectiondialog-moveblocker\",\"disabled\":!_vm.owned},domProps:{\"checked\":_vm.shape.movementObstruction},on:{\"click\":_vm.setMovementBlocker}}),_c('label',{attrs:{\"for\":\"shapeselectiondialog-strokecolour\"}},[_vm._v(\"Border colour\")]),_c('color-picker',{staticStyle:{\"grid-column-start\":\"remove\"},attrs:{\"color\":_vm.shape.strokeColour,\"disabled\":!_vm.owned},on:{\"update:color\":function($event){_vm.$set(_vm.shape, \"strokeColour\", $event)},\"input\":function($event){_vm.updateShape(true, true)},\"change\":function($event){_vm.updateShape(true)}}}),_c('label',{attrs:{\"for\":\"shapeselectiondialog-fillcolour\"}},[_vm._v(\"Fill colour\")]),_c('color-picker',{staticStyle:{\"grid-column-start\":\"remove\"},attrs:{\"color\":_vm.shape.fillColour,\"disabled\":!_vm.owned},on:{\"update:color\":function($event){_vm.$set(_vm.shape, \"fillColour\", $event)},\"input\":function($event){_vm.updateShape(true, true)},\"change\":function($event){_vm.updateShape(true)}}}),_c('div',{staticClass:\"spanrow header\"},[_vm._v(\"Access\")]),_vm._l((_vm.shape.owners),function(owner){return [_c('input',{key:owner,staticStyle:{\"grid-column-start\":\"name\"},attrs:{\"type\":\"text\",\"placeholder\":\"name\",\"disabled\":!_vm.owned},domProps:{\"value\":owner},on:{\"change\":function($event){_vm.updateOwner($event, owner)}}}),(owner !== '')?_c('div',{key:'remove-' + owner,style:({opacity: _vm.owned ? 1.0 : 0.3, textAlign: 'center', gridColumnStart: 'remove'}),attrs:{\"disabled\":!_vm.owned},on:{\"click\":function($event){_vm.removeOwner(owner)}}},[_c('i',{staticClass:\"fas fa-trash-alt\"})]):_vm._e()]}),_c('div',{staticClass:\"spanrow header\"},[_vm._v(\"Trackers\")]),_vm._l((_vm.shape.trackers),function(tracker){return [_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(tracker.name),expression:\"tracker.name\"}],key:'name-'+tracker.uuid,staticStyle:{\"grid-column-start\":\"name\"},attrs:{\"type\":\"text\",\"placeholder\":\"name\",\"disabled\":!_vm.owned},domProps:{\"value\":(tracker.name)},on:{\"change\":function($event){_vm.updateShape(false);},\"input\":function($event){if($event.target.composing){ return; }_vm.$set(tracker, \"name\", $event.target.value)}}}),_c('input',{directives:[{name:\"model\",rawName:\"v-model.number\",value:(tracker.value),expression:\"tracker.value\",modifiers:{\"number\":true}}],key:'value-'+tracker.uuid,attrs:{\"type\":\"text\",\"title\":\"Current value\",\"disabled\":!_vm.owned},domProps:{\"value\":(tracker.value)},on:{\"change\":function($event){_vm.updateShape(false)},\"input\":function($event){if($event.target.composing){ return; }_vm.$set(tracker, \"value\", _vm._n($event.target.value))},\"blur\":function($event){_vm.$forceUpdate()}}}),_c('span',{key:'fspan-'+tracker.uuid},[_vm._v(\"/\")]),_c('input',{directives:[{name:\"model\",rawName:\"v-model.number\",value:(tracker.maxvalue),expression:\"tracker.maxvalue\",modifiers:{\"number\":true}}],key:'maxvalue-'+tracker.uuid,attrs:{\"type\":\"text\",\"title\":\"Current value\",\"disabled\":!_vm.owned},domProps:{\"value\":(tracker.maxvalue)},on:{\"change\":function($event){_vm.updateShape(false)},\"input\":function($event){if($event.target.composing){ return; }_vm.$set(tracker, \"maxvalue\", _vm._n($event.target.value))},\"blur\":function($event){_vm.$forceUpdate()}}}),_c('span',{key:'sspan-'+tracker.uuid}),_c('div',{key:'visibility-'+tracker.uuid,style:({opacity: tracker.visible ? 1.0 : 0.3, textAlign: 'center'}),attrs:{\"disabled\":!_vm.owned},on:{\"click\":function($event){tracker.visible = !tracker.visible;_vm.updateShape(false)}}},[_c('i',{staticClass:\"fas fa-eye\"})]),_c('span',{key:'tspan-'+tracker.uuid}),(tracker.name !== '' || tracker.value !== 0)?_c('div',{key:'remove-'+tracker.uuid,style:({opacity: _vm.owned ? 1.0 : 0.3, textAlign: 'center'}),attrs:{\"disabled\":!_vm.owned},on:{\"click\":function($event){_vm.removeTracker(tracker.uuid)}}},[_c('i',{staticClass:\"fas fa-trash-alt\"})]):_vm._e()]}),_c('div',{staticClass:\"spanrow header\"},[_vm._v(\"Auras\")]),_vm._l((_vm.shape.auras),function(aura){return [_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(aura.name),expression:\"aura.name\"}],key:'name-'+aura.uuid,staticStyle:{\"grid-column-start\":\"name\"},attrs:{\"type\":\"text\",\"placeholder\":\"name\",\"disabled\":!_vm.owned},domProps:{\"value\":(aura.name)},on:{\"change\":function($event){_vm.updateShape(false)},\"input\":function($event){if($event.target.composing){ return; }_vm.$set(aura, \"name\", $event.target.value)}}}),_c('input',{directives:[{name:\"model\",rawName:\"v-model.number\",value:(aura.value),expression:\"aura.value\",modifiers:{\"number\":true}}],key:'value-'+aura.uuid,attrs:{\"type\":\"text\",\"title\":\"Current value\",\"disabled\":!_vm.owned},domProps:{\"value\":(aura.value)},on:{\"change\":function($event){_vm.updateShape(true)},\"input\":function($event){if($event.target.composing){ return; }_vm.$set(aura, \"value\", _vm._n($event.target.value))},\"blur\":function($event){_vm.$forceUpdate()}}}),_c('span',{key:'fspan-'+aura.uuid},[_vm._v(\"/\")]),_c('input',{directives:[{name:\"model\",rawName:\"v-model.number\",value:(aura.dim),expression:\"aura.dim\",modifiers:{\"number\":true}}],key:'dimvalue-'+aura.uuid,attrs:{\"type\":\"text\",\"title\":\"Dim value\",\"disabled\":!_vm.owned},domProps:{\"value\":(aura.dim)},on:{\"change\":function($event){_vm.updateShape(true)},\"input\":function($event){if($event.target.composing){ return; }_vm.$set(aura, \"dim\", _vm._n($event.target.value))},\"blur\":function($event){_vm.$forceUpdate()}}}),_c('color-picker',{key:'colour-'+aura.uuid,attrs:{\"color\":aura.colour,\"disabled\":!_vm.owned},on:{\"update:color\":function($event){_vm.$set(aura, \"colour\", $event)},\"input\":function($event){_vm.updateAuraColour(aura, $event)},\"change\":function($event){_vm.updateShape(true)}}}),_c('div',{key:'visibility-'+aura.uuid,style:({opacity: aura.visible ? 1.0 : 0.3, textAlign: 'center'}),attrs:{\"disabled\":!_vm.owned},on:{\"click\":function($event){aura.visible = !aura.visible;_vm.updateShape(true)}}},[_c('i',{staticClass:\"fas fa-eye\"})]),_c('div',{key:'visionsource-'+aura.uuid,style:({opacity: aura.visionSource ? 1.0 : 0.3, textAlign: 'center'}),attrs:{\"disabled\":!_vm.owned},on:{\"click\":function($event){_vm.updateAuraVisionSource(aura)}}},[_c('i',{staticClass:\"fas fa-lightbulb\"})]),(aura.name !== '' || aura.value !== 0)?_c('div',{key:'remove-'+aura.uuid,style:({opacity: _vm.owned ? 1.0 : 0.3, textAlign: 'center'}),attrs:{\"disabled\":!_vm.owned},on:{\"click\":function($event){_vm.removeAura(aura.uuid)}}},[_c('i',{staticClass:\"fas fa-trash-alt\"})]):_vm._e()]}),_c('div',{staticClass:\"spanrow header\"},[_vm._v(\"Labels\")]),_c('div',{staticClass:\"spanrow\",attrs:{\"id\":\"labels\"}},[_vm._l((_vm.shape.labels),function(label){return _c('div',{key:label.uuid,staticClass:\"label\"},[(label.category)?[_c('div',{staticClass:\"label-user\"},[_vm._v(_vm._s(label.category))]),_c('div',{staticClass:\"label-main\",on:{\"click\":function($event){_vm.removeLabel(label.uuid)}}},[_vm._v(_vm._s(label.name))])]:_vm._e(),(!label.category)?[_c('div',{staticClass:\"label-main\",on:{\"click\":function($event){_vm.removeLabel(label.uuid)}}},[_vm._v(_vm._s(label.name))])]:_vm._e()],2)}),(_vm.owned)?_c('div',{staticClass:\"label\",attrs:{\"id\":\"label-add\"}},[_c('div',{staticClass:\"label-main\",on:{\"click\":_vm.openLabelManager}},[_vm._v(\"+\")])]):_vm._e()],2),_c('div',{staticClass:\"spanrow header\"},[_vm._v(\"Annotation\")]),_c('textarea',{staticClass:\"spanrow\",attrs:{\"disabled\":!_vm.owned},domProps:{\"value\":_vm.shape.annotation},on:{\"change\":_vm.updateAnnotation}})],2)])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","export * from \"-!cache-loader?{\\\"cacheDirectory\\\":\\\"node_modules/.cache/vue-loader\\\",\\\"cacheIdentifier\\\":\\\"74f43d04-vue-loader-template\\\"}!../../../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./edit_dialog.vue?vue&type=template&id=23de098e&scoped=true&\"","import { ServerCircle } from \"@/game/comm/types/shapes\";\nimport { GlobalPoint, LocalPoint, Vector } from \"@/game/geom\";\nimport { BoundingRect } from \"@/game/shapes/boundingrect\";\nimport { Shape } from \"@/game/shapes/shape\";\nimport { gameStore } from \"@/game/store\";\nimport { calculateDelta } from \"@/game/ui/tools/utils\";\nimport { g2l, g2lz, l2g } from \"@/game/units\";\nimport { getFogColour } from \"@/game/utils\";\n\nexport class Circle extends Shape {\n type = \"circle\";\n r: number;\n constructor(center: GlobalPoint, r: number, fillColour?: string, strokeColour?: string, uuid?: string) {\n super(center, fillColour, strokeColour, uuid);\n this.r = r || 1;\n }\n asDict(): ServerCircle {\n // const base = this.getBaseDict();\n // base.r = this.r;\n // base.border = this.border;\n // return base;\n return Object.assign(this.getBaseDict(), {\n radius: this.r,\n });\n }\n fromDict(data: ServerCircle) {\n super.fromDict(data);\n this.r = data.radius;\n }\n getBoundingBox(): BoundingRect {\n return new BoundingRect(\n new GlobalPoint(this.refPoint.x - this.r, this.refPoint.y - this.r),\n this.r * 2,\n this.r * 2,\n );\n }\n\n get points() {\n return this.getBoundingBox().points;\n }\n\n draw(ctx: CanvasRenderingContext2D) {\n super.draw(ctx);\n ctx.beginPath();\n if (this.fillColour === \"fog\") ctx.fillStyle = getFogColour();\n else ctx.fillStyle = this.fillColour;\n const loc = g2l(this.refPoint);\n ctx.arc(loc.x, loc.y, g2lz(this.r), 0, 2 * Math.PI);\n ctx.fill();\n if (this.strokeColour !== \"rgba(0, 0, 0, 0)\") {\n ctx.beginPath();\n ctx.lineWidth = g2lz(5);\n ctx.strokeStyle = this.strokeColour;\n ctx.arc(loc.x, loc.y, g2lz(this.r), 0, 2 * Math.PI);\n ctx.stroke();\n }\n }\n contains(point: GlobalPoint): boolean {\n return (point.x - this.refPoint.x) ** 2 + (point.y - this.refPoint.y) ** 2 < this.r ** 2;\n }\n center(): GlobalPoint;\n center(centerPoint: GlobalPoint): void;\n center(centerPoint?: GlobalPoint): GlobalPoint | void {\n if (centerPoint === undefined) return this.refPoint;\n this.refPoint = centerPoint;\n }\n visibleInCanvas(canvas: HTMLCanvasElement): boolean {\n return this.getBoundingBox().visibleInCanvas(canvas);\n } // TODO\n snapToGrid() {\n const gs = gameStore.gridSize;\n let targetX;\n let targetY;\n if (((2 * this.r) / gs) % 2 === 0) {\n targetX = Math.round(this.refPoint.x / gs) * gs;\n } else {\n targetX = Math.round((this.refPoint.x - gs / 2) / gs) * gs + this.r;\n }\n if (((2 * this.r) / gs) % 2 === 0) {\n targetY = Math.round(this.refPoint.y / gs) * gs;\n } else {\n targetY = Math.round((this.refPoint.y - gs / 2) / gs) * gs + this.r;\n }\n const delta = calculateDelta(new Vector(targetX - this.refPoint.x, targetY - this.refPoint.y), this);\n this.refPoint = this.refPoint.add(delta);\n this.invalidate(false);\n }\n resizeToGrid() {\n const gs = gameStore.gridSize;\n this.r = Math.max(Math.round(this.r / gs) * gs, gs / 2);\n this.invalidate(false);\n }\n resize(resizePoint: number, point: LocalPoint) {\n const z = gameStore.zoomFactor;\n const diff = l2g(point).subtract(this.refPoint);\n this.r = Math.sqrt(Math.pow(diff.length(), 2) / 2);\n }\n}\n","\n\n\n\n\n\n\n\n\n\n\n\n\n\nimport Tool from \"@/game/ui/tools/tool.vue\";\n\nimport { GlobalPoint } from \"@/game/geom\";\nimport { layerManager } from \"@/game/layers/manager\";\nimport { BaseRect } from \"@/game/shapes/baserect\";\nimport { Rect } from \"@/game/shapes/rect\";\nimport { gameStore } from \"@/game/store\";\nimport { l2g } from \"@/game/units\";\nimport { getMouse } from \"@/game/utils\";\nimport Component from \"vue-class-component\";\n\n@Component\nexport default class MapTool extends Tool {\n name = \"Map\";\n active = false;\n xCount = 3;\n yCount = 3;\n startPoint: GlobalPoint | null = null;\n rect: Rect | null = null;\n\n onMouseDown(event: MouseEvent) {\n const layer = layerManager.getLayer();\n if (layer === undefined) {\n console.log(\"No active layer!\");\n return;\n }\n this.active = true;\n\n this.startPoint = l2g(getMouse(event));\n this.rect = new Rect(this.startPoint.clone(), 0, 0, \"rgba(0,0,0,0)\", \"black\");\n layer.addShape(this.rect, false, false);\n }\n onMouseMove(event: MouseEvent) {\n if (!this.active || this.rect === null || this.startPoint === null) return;\n const layer = layerManager.getLayer();\n if (layer === undefined) {\n console.log(\"No active layer!\");\n return;\n }\n\n const endPoint = l2g(getMouse(event));\n\n this.rect.w = Math.abs(endPoint.x - this.startPoint.x);\n this.rect.h = Math.abs(endPoint.y - this.startPoint.y);\n this.rect.refPoint = new GlobalPoint(\n Math.min(this.startPoint.x, endPoint.x),\n Math.min(this.startPoint.y, endPoint.y),\n );\n layer.invalidate(false);\n }\n onMouseUp(event: MouseEvent) {\n if (!this.active || this.rect === null) return;\n const layer = layerManager.getLayer();\n if (layer === undefined) {\n console.log(\"No active layer!\");\n return;\n }\n this.active = false;\n\n if (layer.selection.length !== 1) {\n layer.removeShape(this.rect, false, false);\n return;\n }\n\n const w = this.rect.w;\n const h = this.rect.h;\n const sel = layer.selection[0];\n\n if (sel instanceof BaseRect) {\n sel.w *= (this.xCount * gameStore.gridSize) / w;\n sel.h *= (this.yCount * gameStore.gridSize) / h;\n }\n\n layer.removeShape(this.rect, false, false);\n }\n}\n","import { render, staticRenderFns } from \"./load.vue?vue&type=template&id=ff095222&\"\nimport script from \"./load.vue?vue&type=script&lang=ts&\"\nexport * from \"./load.vue?vue&type=script&lang=ts&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\ncomponent.options.__file = \"load.vue\"\nexport default component.exports","import Tool from \"@/game/ui/tools/tool.vue\";\n\nimport { sendClientOptions } from \"@/game/api/utils\";\nimport { LocalPoint } from \"@/game/geom\";\nimport { layerManager } from \"@/game/layers/manager\";\nimport { gameStore } from \"@/game/store\";\nimport { getMouse } from \"@/game/utils\";\nimport Component from \"vue-class-component\";\n\n@Component\nexport default class PanTool extends Tool {\n name = \"Pan\";\n panStart = new LocalPoint(0, 0);\n active = false;\n\n onMouseDown(event: MouseEvent) {\n this.panStart = getMouse(event);\n this.active = true;\n }\n onMouseMove(event: MouseEvent) {\n if (!this.active) return;\n const mouse = getMouse(event);\n const distance = mouse.subtract(this.panStart).multiply(1 / gameStore.zoomFactor);\n gameStore.increasePanX(Math.round(distance.x));\n gameStore.increasePanY(Math.round(distance.y));\n this.panStart = mouse;\n layerManager.invalidate();\n }\n onMouseUp(event: MouseEvent) {\n this.active = false;\n sendClientOptions();\n }\n}\n","import { render, staticRenderFns } from \"./selectcontext.vue?vue&type=template&id=44a31e42&scoped=true&\"\nimport script from \"./selectcontext.vue?vue&type=script&lang=ts&\"\nexport * from \"./selectcontext.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./selectcontext.vue?vue&type=style&index=0&id=44a31e42&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"44a31e42\",\n null\n \n)\n\ncomponent.options.__file = \"selectcontext.vue\"\nexport default component.exports","import Vue from \"vue\";\n\nimport { app } from \"@/main\";\n\n// Reference: https://stackoverflow.com/questions/105034/create-guid-uuid-in-javascript\nexport function uuidv4() {\n return \"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx\".replace(/[xy]/g, c => {\n const r = (Math.random() * 16) | 0;\n const v = c === \"x\" ? r : (r & 0x3) | 0x8;\n return v.toString(16);\n });\n}\n\nexport function capitalize(text: string) {\n return text.charAt(0).toUpperCase() + text.slice(1);\n}\n\nexport function alphSort(a: string, b: string) {\n if (a.toLowerCase() < b.toLowerCase()) return -1;\n else return 1;\n}\n\nexport function getHTMLFont(element: HTMLElement) {\n let font = element.style.font;\n while (font === null && element.parentElement !== null) {\n element = element.parentElement;\n font = element.style.font;\n }\n if (font === null) font = window.getComputedStyle(document.body).getPropertyValue(\"font\");\n return font;\n}\n\nexport function getHTMLTextWidth(text: string, font: string): number {\n let fakeElement = document.getElementById(\"emptycanvas\");\n if (fakeElement === null) {\n fakeElement = document.createElement(\"canvas\");\n fakeElement.id = \"emptycanvas\";\n fakeElement.style.display = \"\";\n document.body.appendChild(fakeElement);\n }\n const ctx = fakeElement.getContext(\"2d\")!;\n ctx.font = font;\n return Math.ceil(ctx.measureText(text).width);\n}\n\nexport function partition(arr: T[], predicate: (n: T) => boolean) {\n const ret: T[][] = [[], []];\n arr.forEach(n => (predicate(n) ? ret[1].push(n) : ret[0].push(n)));\n return ret;\n}\n\nexport function calcFontScale(ctx: CanvasRenderingContext2D, text: string, width: number, height: number) {\n const points = Number(ctx.font.split(\"px\")[0]) * 0.2;\n const fontWidth = ctx.measureText(text).width;\n return Math.min(width / fontWidth, height / points);\n}\n\nexport function fixedEncodeURIComponent(str: string) {\n return encodeURIComponent(str).replace(/[!'()*]/g, c => {\n return \"%\" + c.charCodeAt(0).toString(16);\n });\n}\n\nexport class OrderedMap {\n keys: K[] = [];\n values: V[] = [];\n\n get length() {\n return this.keys.length;\n }\n\n get(key: K) {\n return this.values[this.keys.indexOf(key)];\n }\n getIndexValue(idx: number) {\n return this.values[idx];\n }\n getIndexKey(idx: number) {\n return this.keys[idx];\n }\n set(key: K, value: V) {\n this.keys.push(key);\n this.values.push(value);\n }\n has(key: K) {\n return this.indexOf(key) >= 0;\n }\n indexOf(element: K) {\n return this.keys.indexOf(element);\n }\n remove(element: K) {\n const idx = this.indexOf(element);\n this.keys.splice(idx, 1);\n this.values.splice(idx, 1);\n }\n}\n\nexport function getComponent(): T {\n return app.$children[0].$refs.activeComponent;\n}\n\nexport function getRef(ref: string): T {\n const active = app.$children[0].$refs.activeComponent;\n return active.$refs[ref];\n}\n","import { render, staticRenderFns } from \"./contextMenu.vue?vue&type=template&id=606797b4&\"\nimport script from \"./contextMenu.vue?vue&type=script&lang=ts&\"\nexport * from \"./contextMenu.vue?vue&type=script&lang=ts&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\ncomponent.options.__file = \"contextMenu.vue\"\nexport default component.exports","import { EdgeCirculator, Point, Sign, Triangle, Vertex } from \"./tds\";\n\ntype Line = number[];\n\nexport function cw(index: number) {\n return (index + 2) % 3;\n}\n\nexport function ccw(index: number) {\n return (index + 1) % 3;\n}\n\nexport function edgeInfo(va: Vertex, vb: Vertex) {\n const ec = new EdgeCirculator(va, null);\n if (ec.valid) {\n do {\n const indv = 3 - ec.t!.indexV(va) - ec.ri;\n const v = ec.t!.vertices[indv]!;\n if (!v.infinite) {\n if (v === vb) {\n return { includes: true, vi: vb, fr: ec.t!, i: ec.ri };\n } else {\n const orient = orientation(va.point!, vb.point!, v.point!);\n if (orient === Sign.COLLINEAR && collinearBetween(va.point!, v.point!, vb.point!)) {\n return { includes: true, vi: v, fr: ec.t!, i: ec.ri };\n }\n }\n }\n } while (ec.next());\n }\n return { includes: false };\n}\n\nexport function collinearBetween(p: Point, q: Point, r: Point): boolean {\n let cPQ: Sign;\n let cQR: Sign;\n if (compare(0, p, r) === Sign.EQUAL) {\n cPQ = compare(1, p, q);\n cQR = compare(1, q, r);\n } else {\n cPQ = compare(0, p, q);\n cQR = compare(0, q, r);\n }\n return (cPQ === Sign.SMALLER && cQR === Sign.SMALLER) || (cPQ === Sign.LARGER && cQR === Sign.LARGER);\n}\n\nfunction compare(index: number, a: Point, b: Point): Sign {\n if (a[index] < b[index]) return Sign.SMALLER;\n if (a[index] > b[index]) return Sign.LARGER;\n return Sign.EQUAL;\n}\n\nexport function orientation(p: Point, q: Point, r: Point) {\n const px = p[0];\n const py = p[1];\n const qx = q[0];\n const qy = q[1];\n const rx = r[0];\n const ry = r[1];\n const pqx = qx - px;\n const pqy = qy - py;\n const prx = rx - px;\n const pry = ry - py;\n const det = determinant(pqx, pqy, prx, pry);\n let maxX = Math.abs(pqx);\n let maxY = Math.abs(pqy);\n const aprX = Math.abs(prx);\n const aprY = Math.abs(pry);\n if (maxX < aprX) maxX = aprX;\n if (maxY < aprY) maxY = aprY;\n if (maxX > maxY) [maxX, maxY] = [maxY, maxX];\n // underflow proection in eps computation?? Math.sqrt(Number.MIN_VALUE, Number.EPSILON)\n if (maxX < 2e-162 && maxX === 0) {\n return Sign.ZERO;\n }\n // overflow protection in det computation\n if (maxY < 1e153) {\n const eps = Number.EPSILON * maxX * maxY;\n if (det > eps) return Sign.POSITIVE;\n if (det < -eps) return Sign.NEGATIVE;\n }\n return Sign.ZERO;\n}\n\nexport function determinant(a00: number, a01: number, a10: number, a11: number) {\n return a00 * a11 - a01 * a10;\n}\n\nexport function hasInexactNegativeOrientation(p: Point, q: Point, r: Point) {\n return determinant(q[0] - p[0], q[1] - p[1], r[0] - p[0], r[1] - p[1]) < 0;\n}\n\nexport function sideOfOrientedCircle(t: Triangle, p: Point, perturb: boolean): Sign {\n if (!t.isInfinite())\n return sideOfOrientedCircleP(t.vertices[0]!.point!, t.vertices[1]!.point!, t.vertices[2]!.point!, p, perturb);\n throw new Error(\"SSS\");\n}\n\nfunction sideOfOrientedCircleP(p0: Point, p1: Point, p2: Point, p: Point, perturb: boolean): Sign {\n const os = getOrientedSide(p0, p1, p2, p);\n if (os !== Sign.ON_ORIENTED_BOUNDARY || !perturb) return os;\n const points = [p0, p1, p2, p];\n points.sort((a, b) => a[0] - b[0] || a[1] - b[1]);\n for (const point of points.reverse()) {\n if (point === p) return Sign.ON_NEGATIVE_SIDE;\n let o = orientation(p0, p1, p);\n if (point === p2 && o !== Sign.COLLINEAR) return o;\n o = orientation(p0, p, p2);\n if (point === p1 && o !== Sign.COLLINEAR) return o;\n o = orientation(p, p1, p2);\n if (point === p0 && o !== Sign.COLLINEAR) return o;\n }\n return Sign.ON_NEGATIVE_SIDE;\n}\n\nexport function xyEqual(p: Point, q: Point) {\n return p[0] === q[0] && p[1] === q[1];\n}\n\nexport function xySmaller(p: Point, q: Point) {\n return p[0] < q[0] || (p[0] === q[0] && p[1] < q[1]);\n}\n\nexport function xyCompare(p: Point, q: Point) {\n if (xySmaller(p, q)) return Sign.SMALLER;\n if (xyEqual(p, q)) return Sign.EQUAL;\n return Sign.LARGER;\n}\n\nfunction getOrientedSide(p: Point, q: Point, r: Point, t: Point): Sign {\n const qpx = q[0] - p[0];\n const qpy = q[1] - p[1];\n const rpx = r[0] - p[0];\n const rpy = r[1] - p[1];\n const tpx = t[0] - p[0];\n const tpy = t[1] - p[1];\n const tqx = t[0] - q[0];\n const tqy = t[1] - q[1];\n const rqx = r[0] - q[0];\n const rqy = r[1] - q[1];\n\n const det = determinant(qpx * tpy - qpy * tpx, tpx * tqx + tpy * tqy, qpx * rpy - qpy * rpx, rpx * rqx + rpy * rqy);\n let maxx = Math.abs(qpx);\n let maxy = Math.abs(qpy);\n const arpx = Math.abs(rpx);\n const arpy = Math.abs(rpy);\n const atqx = Math.abs(tqx);\n const atqy = Math.abs(tqy);\n const atpx = Math.abs(tpx);\n const atpy = Math.abs(tpy);\n const arqx = Math.abs(rqx);\n const arqy = Math.abs(rqy);\n\n if (maxx < arpx) maxx = arpx;\n if (maxx < atpx) maxx = atpx;\n if (maxx < atqx) maxx = atqx;\n if (maxx < arqx) maxx = arqx;\n\n if (maxy < arpy) maxy = arpy;\n if (maxy < atpy) maxy = atpy;\n if (maxy < atqy) maxy = atqy;\n if (maxy < arqy) maxy = arqy;\n\n if (maxx > maxy) [maxx, maxy] = [maxy, maxx];\n\n if (maxx < 1e-73 && maxx === 0) return Sign.ON_ORIENTED_BOUNDARY;\n // sqrt(sqrt(max_double/16\n else if (maxy < 1e76) {\n const eps = Number.EPSILON * maxx * maxy * (maxy * maxy);\n if (det > eps) return Sign.ON_POSITIVE_SIDE;\n if (det < -eps) return Sign.ON_NEGATIVE_SIDE;\n }\n\n return Sign.ZERO;\n}\n\nfunction segSegDoIntersectCrossing(p1: Point, p2: Point, p3: Point, p4: Point): boolean {\n switch (orientation(p1, p2, p3)) {\n case Sign.LEFT_TURN:\n return orientation(p3, p4, p2) !== Sign.RIGHT_TURN;\n case Sign.RIGHT_TURN:\n return orientation(p3, p4, p2) !== Sign.LEFT_TURN;\n case Sign.COLLINEAR:\n return true;\n }\n}\n\nfunction segSegDoIntersectContained(p1: Point, p2: Point, p3: Point, p4: Point): boolean {\n switch (orientation(p1, p2, p3)) {\n case Sign.LEFT_TURN:\n return orientation(p1, p2, p4) !== Sign.LEFT_TURN;\n case Sign.RIGHT_TURN:\n return orientation(p1, p2, p4) !== Sign.RIGHT_TURN;\n case Sign.COLLINEAR:\n return true;\n }\n}\n\nexport function intersection(pa: Point, pb: Point, pc: Point, pd: Point) {\n const i = getIntersectionType(pa, pb, pc, pd);\n switch (i.intersectionType) {\n case IntersectionType.POINT:\n return i.point!;\n case IntersectionType.NO_INTERSECTION:\n return null;\n }\n throw new Error(\"sdfgighowen\");\n}\n\nenum IntersectionType {\n NO_INTERSECTION,\n POINT,\n SEGMENT,\n}\n\nfunction getLine(p0: Point, p1: Point): Line {\n if (p0[0] === p1[0]) return [1, 0, -p0[0]];\n if (p0[1] === p1[1]) return [0, 1, -p0[1]];\n const x = p1[0] - p0[0];\n const y = p1[1] - p0[1];\n return [-y, x, -x * p0[1] + y * p0[0]];\n}\n\nfunction getIntersectionType(pa: Point, pb: Point, pc: Point, pd: Point) {\n if (!doIntersect(pa, pb, pc, pd)) return { intersectionType: IntersectionType.NO_INTERSECTION, point: null };\n const l1 = getLine(pa, pb);\n const l2 = getLine(pc, pd);\n const info = getIntersectionTypeLine(l1, l2);\n switch (info.intersectionType) {\n case IntersectionType.POINT: {\n return info;\n }\n }\n throw new Error(\"gzseuihgpib\");\n}\n\nfunction getIntersectionTypeLine(la: Line, lb: Line) {\n const denom = la[0] * lb[1] - lb[0] * la[1];\n const nom1 = la[1] * lb[2] - lb[1] * la[2];\n const nom2 = lb[0] * la[2] - la[0] * lb[2];\n return {\n intersectionType: IntersectionType.POINT,\n point: [nom1 / denom, nom2 / denom],\n };\n}\n\nfunction doIntersect(A1: Point, A2: Point, B1: Point, B2: Point): boolean {\n if (xySmaller(A1, A2)) {\n if (xySmaller(B1, B2)) {\n if (xySmaller(A2, B1) || xySmaller(B2, A1)) return false;\n } else {\n if (xySmaller(A2, B2) || xySmaller(B1, A1)) return false;\n }\n } else {\n if (xySmaller(B1, B2)) {\n if (xySmaller(A1, B1) || xySmaller(B2, A2)) return false;\n } else {\n if (xySmaller(A1, B2) || xySmaller(B1, A2)) return false;\n }\n }\n if (xySmaller(A1, A2)) {\n if (xySmaller(B1, B2)) {\n switch (xyCompare(A1, B1)) {\n case Sign.SMALLER: {\n switch (xyCompare(A2, B1)) {\n case Sign.SMALLER:\n return false;\n case Sign.EQUAL:\n return true;\n default: {\n switch (xyCompare(A2, B2)) {\n case Sign.SMALLER:\n return segSegDoIntersectCrossing(A1, A2, B1, B2);\n case Sign.EQUAL:\n return true;\n default:\n return segSegDoIntersectContained(A1, A2, B1, B2);\n }\n }\n }\n }\n case Sign.EQUAL:\n return true;\n default:\n switch (xyCompare(B2, A1)) {\n case Sign.SMALLER:\n return false;\n case Sign.EQUAL:\n return true;\n default: {\n switch (xyCompare(B2, A2)) {\n case Sign.SMALLER:\n return segSegDoIntersectCrossing(B1, B2, A1, A2);\n case Sign.EQUAL:\n return true;\n default:\n return segSegDoIntersectContained(B1, B2, A1, A2);\n }\n }\n }\n }\n } else {\n switch (xyCompare(A1, B2)) {\n case Sign.SMALLER: {\n switch (xyCompare(A2, B2)) {\n case Sign.SMALLER:\n return false;\n case Sign.EQUAL:\n return true;\n default: {\n switch (xyCompare(A2, B1)) {\n case Sign.SMALLER:\n return segSegDoIntersectCrossing(A1, A2, B2, B1);\n case Sign.EQUAL:\n return true;\n default:\n return segSegDoIntersectContained(A1, A2, B2, B1);\n }\n }\n }\n }\n case Sign.EQUAL:\n return true;\n default:\n switch (xyCompare(B1, A1)) {\n case Sign.SMALLER:\n return false;\n case Sign.EQUAL:\n return true;\n default: {\n switch (xyCompare(B1, A2)) {\n case Sign.SMALLER:\n return segSegDoIntersectCrossing(B2, B1, A1, A2);\n case Sign.EQUAL:\n return true;\n default:\n return segSegDoIntersectContained(B2, B1, A1, A2);\n }\n }\n }\n }\n }\n } else {\n if (xySmaller(B1, B2)) {\n switch (xyCompare(A2, B1)) {\n case Sign.SMALLER: {\n switch (xyCompare(A1, B1)) {\n case Sign.SMALLER:\n return false;\n case Sign.EQUAL:\n return true;\n default: {\n switch (xyCompare(A1, B2)) {\n case Sign.SMALLER:\n return segSegDoIntersectCrossing(A2, A1, B1, B2);\n case Sign.EQUAL:\n return true;\n default:\n return segSegDoIntersectContained(A2, A1, B1, B2);\n }\n }\n }\n }\n case Sign.EQUAL:\n return true;\n default:\n switch (xyCompare(B2, A2)) {\n case Sign.SMALLER:\n return false;\n case Sign.EQUAL:\n return true;\n default: {\n switch (xyCompare(B2, A1)) {\n case Sign.SMALLER:\n return segSegDoIntersectCrossing(B1, B2, A2, A1);\n case Sign.EQUAL:\n return true;\n default:\n return segSegDoIntersectContained(B1, B2, A2, A1);\n }\n }\n }\n }\n } else {\n switch (xyCompare(A2, B2)) {\n case Sign.SMALLER: {\n switch (xyCompare(A1, B2)) {\n case Sign.SMALLER:\n return false;\n case Sign.EQUAL:\n return true;\n default: {\n switch (xyCompare(A1, B1)) {\n case Sign.SMALLER:\n return segSegDoIntersectCrossing(A2, A1, B2, B1);\n case Sign.EQUAL:\n return true;\n default:\n return segSegDoIntersectContained(A2, A1, B2, B1);\n }\n }\n }\n }\n case Sign.EQUAL:\n return true;\n default:\n switch (xyCompare(B1, A2)) {\n case Sign.SMALLER:\n return false;\n case Sign.EQUAL:\n return true;\n default: {\n switch (xyCompare(B1, A1)) {\n case Sign.SMALLER:\n return segSegDoIntersectCrossing(B2, B1, A2, A1);\n case Sign.EQUAL:\n return true;\n default:\n return segSegDoIntersectContained(B2, B1, A2, A1);\n }\n }\n }\n }\n }\n }\n}\n\nfunction nextUp(x: number) {\n if (x !== x) {\n return x;\n }\n if (x === -1 / 0) {\n return -Number.MAX_VALUE;\n }\n if (x === +1 / 0) {\n return +1 / 0;\n }\n if (x === +Number.MAX_VALUE) {\n return +1 / 0;\n }\n let y = x * (x < 0 ? 1 - Number.EPSILON / 2 : 1 + Number.EPSILON);\n if (y === x) {\n y = Number.MIN_VALUE * Number.EPSILON > 0 ? x + Number.MIN_VALUE * Number.EPSILON : x + Number.MIN_VALUE;\n }\n if (y === +1 / 0) {\n y = +Number.MAX_VALUE;\n }\n const b = x + (y - x) / 2;\n if (x < b && b < y) {\n y = b;\n }\n const c = (y + x) / 2;\n if (x < c && c < y) {\n y = c;\n }\n return y === 0 ? -0 : y;\n}\n\nexport function ulp(x: number) {\n return x < 0 ? nextUp(x) - x : x + nextUp(-x);\n}\n","import mod from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/ts-loader/index.js??ref--12-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./asset_node.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/ts-loader/index.js??ref--12-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./asset_node.vue?vue&type=script&lang=ts&\"","import mod from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./vision.vue?vue&type=style&index=0&id=46baf892&scoped=true&lang=css&\"; export default mod; export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./vision.vue?vue&type=style&index=0&id=46baf892&scoped=true&lang=css&\"","import mod from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./edit_dialog.vue?vue&type=style&index=0&id=23de098e&scoped=true&lang=css&\"; export default mod; export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./edit_dialog.vue?vue&type=style&index=0&id=23de098e&scoped=true&lang=css&\"","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nimport Vue from \"vue\";\nimport Component from \"vue-class-component\";\nimport { Prop } from \"vue-property-decorator\";\n\n@Component\nexport default class Modal extends Vue {\n @Prop(Boolean) visible!: boolean;\n @Prop({ type: Boolean, default: true }) mask!: boolean;\n\n $refs!: {\n container: HTMLElement;\n };\n\n positioned = false;\n offsetX = 0;\n offsetY = 0;\n screenX = 0;\n screenY = 0;\n dragging = false;\n\n // Example of mounted required: opening note\n mounted() {\n this.updatePosition();\n }\n // Example of updated required: opening initiative\n updated() {\n this.updatePosition();\n }\n\n close(event: MouseEvent) {\n this.$emit(\"close\");\n }\n updatePosition() {\n if (!this.positioned) {\n const container = this.$refs.container;\n if (container.offsetWidth === 0 && container.offsetHeight === 0) return;\n this.$refs.container.style.left = (window.innerWidth - container.offsetWidth) / 2 + \"px\";\n this.$refs.container.style.top = (window.innerHeight - container.offsetHeight) / 2 + \"px\";\n this.positioned = true;\n }\n }\n dragStart(event: DragEvent) {\n if (event === null || event.dataTransfer === null) return;\n event.dataTransfer.setData(\"Hack\", \"\");\n // Because the drag event is happening on the header, we have to change the drag image\n // in order to give the impression that the entire modal is dragged.\n event.dataTransfer.setDragImage(this.$refs.container, event.offsetX, event.offsetY);\n this.offsetX = event.offsetX;\n this.offsetY = event.offsetY;\n this.screenX = event.screenX;\n this.screenY = event.screenY;\n this.dragging = true;\n }\n dragEnd(event: DragEvent) {\n this.dragging = false;\n let left = event.clientX - this.offsetX;\n let top = event.clientY - this.offsetY;\n if (event.clientX === 0 && event.clientY === 0 && event.pageX === 0 && event.pageY === 0) {\n left = parseInt(this.$refs.container.style.left!, 10) - (this.screenX - event.screenX);\n top = parseInt(this.$refs.container.style.top!, 10) - (this.screenY - event.screenY);\n }\n if (left < 0) left = 0;\n if (left > window.innerWidth - 100) left = window.innerWidth - 100;\n if (top < 0) top = 0;\n if (top > window.innerHeight - 100) top = window.innerHeight - 100;\n this.$refs.container.style.left = left + \"px\";\n this.$refs.container.style.top = top + \"px\";\n this.$refs.container.style.display = \"block\";\n }\n dragOver(event: DragEvent) {\n if (this.dragging) this.$refs.container.style.display = \"none\";\n }\n}\n","import io from \"socket.io-client\";\n\nimport { Asset } from \"@/core/comm/types\";\nimport { assetStore } from \"./store\";\n\nexport const socket = io(location.protocol + \"//\" + location.host + \"/pa_assetmgmt\", { autoConnect: false });\n\n// export const socket = io.connect(location.protocol + \"//\" + location.host + \"/pa_assetmgmt\");\nsocket.on(\"connect\", () => {\n console.log(\"Connected\");\n});\nsocket.on(\"disconnect\", () => {\n console.log(\"Disconnected\");\n});\nsocket.on(\"redirect\", (destination: string) => {\n console.log(\"redirecting\");\n window.location.href = destination;\n});\nsocket.on(\"Folder.Root.Set\", (root: number) => {\n assetStore.setRoot(root);\n});\nsocket.on(\"Folder.Set\", (folder: Asset) => {\n assetStore.clear();\n if (folder.children) {\n for (const child of folder.children) {\n assetStore.idMap.set(child.id, child);\n if (child.file_hash) {\n assetStore.files.push(child.id);\n } else {\n assetStore.folders.push(child.id);\n }\n }\n }\n});\nsocket.on(\"Folder.Create\", (folder: Asset) => {\n assetStore.folders.push(folder.id);\n assetStore.idMap.set(folder.id, folder);\n});\nsocket.on(\"Asset.Upload.Finish\", (asset: Asset) => {\n assetStore.idMap.set(asset.id, asset);\n assetStore.files.push(asset.id);\n});\n","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nimport Component from \"vue-class-component\";\n\nimport Accordion from \"@/core/components/accordion.vue\";\nimport Tool from \"@/game/ui/tools/tool.vue\";\n\nimport { socket } from \"@/game/api/socket\";\nimport { layerManager } from \"@/game/layers/manager\";\nimport { gameStore } from \"@/game/store\";\n\n@Component({\n components: {\n accordion: Accordion,\n },\n})\nexport default class FilterTool extends Tool {\n name = \"Filter\";\n active = false;\n\n get labels() {\n const cat: { [category: string]: [string, string][] } = {'': []};\n for (const uuid of Object.keys(gameStore.labels)) {\n const label = gameStore.labels[uuid];\n if (!label.category) cat[\"\"].push([label.uuid, label.name]);\n else {\n if (!(label.category in cat)) cat[label.category] = [];\n cat[label.category].push([label.uuid, label.name]);\n cat[label.category].sort((a, b) => a[1].localeCompare(b[1]));\n }\n }\n return cat;\n }\n\n get initalValues() {\n const values: { [category: string]: string[] } = {};\n for (const cat of Object.keys(this.labels)) {\n values[cat] = gameStore.labelFilters.filter(f => this.labels[cat].map(l => l[0]).includes(f));\n }\n return values;\n }\n\n get categories() {\n return Object.keys(this.labels).sort();\n }\n\n isFilter(uuid: string): boolean {\n return gameStore.labelFilters.includes(uuid);\n }\n\n toggleFilter(uuid: string) {\n const i = gameStore.labelFilters.indexOf(uuid);\n if (i >= 0) gameStore.labelFilters.splice(i, 1);\n else gameStore.labelFilters.push(uuid);\n layerManager.invalidate();\n }\n\n toggleUnlabeled() {\n gameStore.toggleUnlabeledFilter();\n layerManager.invalidate();\n }\n\n updateSelection(data: { title: string; selection: string[] }) {\n if (!(data.title in this.labels)) return;\n for (const [uuid, _] of this.labels[data.title]) {\n const idx = gameStore.labelFilters.indexOf(uuid);\n const selected = data.selection.includes(uuid);\n if (idx >= 0 && !selected) {\n gameStore.labelFilters.splice(idx, 1);\n socket.emit(\"Labels.Filter.Remove\", uuid);\n } else if (idx < 0 && selected) {\n gameStore.labelFilters.push(uuid);\n socket.emit(\"Labels.Filter.Add\", uuid);\n }\n }\n layerManager.invalidate();\n }\n}\n","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nimport Vue from \"vue\";\nimport Component from \"vue-class-component\";\n\nimport { Prop } from \"vue-property-decorator\";\nimport { gameStore } from '../../game/store';\n\n@Component\nexport default class Accordion extends Vue {\n @Prop(String) title!: string;\n @Prop({ default: true, type: Boolean }) showArrow!: boolean;\n @Prop({ default: () => []}) items!: [string, string][];\n @Prop({ default: () => []}) initialValues!: string[];\n\n selected: string[] = [];\n\n active = false;\n\n mounted() {\n this.selected = this.initialValues;\n this.updateCategory();\n }\n\n toggleDisplay(event: MouseEvent) {\n this.active = !this.active;\n }\n\n toggleCategory() {\n const overall = this.$refs.overall as HTMLInputElement;\n if (overall.checked) this.selected = this.items.map((i) => i[0]);\n else this.selected = [];\n this.$emit(\"selectionupdate\", {title: this.title, selection: this.selected});\n }\n\n updateCategory() {\n const overall = this.$refs.overall as HTMLInputElement;\n if (this.selected.length === 0) {\n overall.checked = false;\n overall.indeterminate = false;\n } else if(this.selected.length === this.items.length) {\n overall.checked = true;\n overall.indeterminate = false;\n } else {\n overall.checked = false;\n overall.indeterminate = true;\n }\n }\n\n toggleSelection(item: string) {\n const found = this.selected.indexOf(item);\n if (found === -1) this.selected.push(item);\n else this.selected.splice(found, 1);\n this.updateCategory();\n this.$emit(\"selectionupdate\", {title: this.title, selection: this.selected});\n }\n}\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return (_vm.selected)?_c('div',{staticClass:\"tool-detail\",style:({'--detailRight': _vm.detailRight, '--detailArrow': _vm.detailArrow})},_vm._l((_vm.tokens),function(token){return _c('div',{key:token.uuid,staticClass:\"token\",class:{'selected': _vm.selection.includes(token.uuid)},on:{\"click\":function($event){_vm.toggle(token.uuid)}}},[(token.src)?_c('img',{attrs:{\"src\":token.src,\"width\":\"30px\",\"height\":\"30px\"}}):_vm._e(),_c('div',[_vm._v(_vm._s(token.name))])])})):_vm._e()}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","export * from \"-!cache-loader?{\\\"cacheDirectory\\\":\\\"node_modules/.cache/vue-loader\\\",\\\"cacheIdentifier\\\":\\\"74f43d04-vue-loader-template\\\"}!../../../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./vision.vue?vue&type=template&id=46baf892&scoped=true&\"","import mod from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./game.vue?vue&type=style&index=0&lang=css&\"; export default mod; export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./game.vue?vue&type=style&index=0&lang=css&\"","import { GlobalPoint, LocalPoint } from \"@/game/geom\";\nimport { BoundingRect } from \"@/game/shapes/boundingrect\";\nimport { Shape } from \"@/game/shapes/shape\";\nimport { g2lx, g2ly, g2lz, l2g } from \"@/game/units\";\nimport { getFogColour } from \"@/game/utils\";\nimport { ServerMultiLine } from \"../comm/types/shapes\";\n\nexport class MultiLine extends Shape {\n type = \"multiline\";\n _points: GlobalPoint[] = [];\n lineWidth: number;\n constructor(\n startPoint: GlobalPoint,\n points?: GlobalPoint[],\n lineWidth?: number,\n strokeColour?: string,\n uuid?: string,\n ) {\n super(startPoint, \"rgba(0, 0, 0, 0)\", strokeColour || \"#000\", uuid);\n this._points = points || [];\n this.lineWidth = lineWidth || 3;\n }\n\n get refPoint() {\n return this._refPoint;\n }\n set refPoint(point: GlobalPoint) {\n const delta = point.subtract(this._refPoint);\n this._refPoint = point;\n for (let i = 0; i < this._points.length; i++) this._points[i] = this._points[i].add(delta);\n }\n\n asDict() {\n return Object.assign(this.getBaseDict(), {\n line_width: this.lineWidth,\n points: this._points.map(p => ({ x: p.x, y: p.y })),\n });\n }\n fromDict(data: ServerMultiLine) {\n super.fromDict(data);\n this._points = data.points.map(p => new GlobalPoint(p.x, p.y));\n }\n get points() {\n return this._points.map(point => [point.x, point.y]);\n }\n getBoundingBox(): BoundingRect {\n let minx: number = this.refPoint.x;\n let maxx: number = this.refPoint.x;\n let miny: number = this.refPoint.y;\n let maxy: number = this.refPoint.y;\n for (const p of this._points) {\n if (p.x < minx) minx = p.x;\n if (p.x > maxx) maxx = p.x;\n if (p.y < miny) miny = p.y;\n if (p.y > maxy) maxy = p.y;\n }\n return new BoundingRect(new GlobalPoint(minx, miny), maxx - minx, maxy - miny);\n }\n draw(ctx: CanvasRenderingContext2D) {\n super.draw(ctx);\n ctx.beginPath();\n ctx.lineCap = \"round\";\n ctx.lineJoin = \"round\";\n ctx.moveTo(g2lx(this.refPoint.x), g2ly(this.refPoint.y));\n for (const p of this._points) ctx.lineTo(g2lx(p.x), g2ly(p.y));\n if (this.strokeColour === \"fog\") ctx.strokeStyle = getFogColour();\n else ctx.strokeStyle = this.strokeColour;\n ctx.lineWidth = g2lz(this.lineWidth);\n ctx.stroke();\n }\n contains(point: GlobalPoint): boolean {\n return this.getBoundingBox().contains(point);\n }\n\n center(): GlobalPoint;\n center(centerPoint: GlobalPoint): void;\n center(centerPoint?: GlobalPoint): GlobalPoint | void {\n return this.getBoundingBox().center();\n }\n visibleInCanvas(canvas: HTMLCanvasElement): boolean {\n return this.getBoundingBox().visibleInCanvas(canvas);\n } // TODO\n snapToGrid(): void {}\n resizeToGrid(): void {}\n resize(resizePoint: number, point: LocalPoint): void {\n if (resizePoint === 0) this._refPoint = l2g(point);\n else this._points[resizePoint - 1] = l2g(point);\n }\n}\n","import { render, staticRenderFns } from \"./draw.vue?vue&type=template&id=639cd890&scoped=true&\"\nimport script from \"./draw.vue?vue&type=script&lang=ts&\"\nexport * from \"./draw.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./draw.vue?vue&type=style&index=0&id=639cd890&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"639cd890\",\n null\n \n)\n\ncomponent.options.__file = \"draw.vue\"\nexport default component.exports","import tinycolor from \"tinycolor2\";\n\nimport { LocalPoint } from \"@/game/geom\";\nimport { gameStore } from \"@/game/store\";\n\nexport function getMouse(e: MouseEvent): LocalPoint {\n return new LocalPoint(e.pageX, e.pageY);\n}\n\nexport function getFogColour(opposite: boolean = false): string {\n const tc = tinycolor(gameStore.fowColour);\n if (gameStore.IS_DM) tc.setAlpha(opposite ? 1 : gameStore.fowOpacity);\n else tc.setAlpha(1);\n return tc.toRgbString();\n}\n\nexport function zoomValue(display: number) {\n // Powercurve 0.2/3/10\n // Based on https://stackoverflow.com/a/17102320\n return 1 / (-5 / 3 + (28 / 15) * Math.exp(1.83 * display));\n}\n\nexport function zoomDisplay(value: number) {\n return Math.log((1 / value + 5 / 3) * (15 / 28)) / 1.83;\n}\n","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nimport * as tinycolor from \"tinycolor2\";\nimport Vue from \"vue\";\nimport Component from \"vue-class-component\";\n\nimport { mapState } from \"vuex\";\n\nimport ColorPicker from \"@/core/components/colorpicker.vue\";\nimport Modal from \"@/core/components/modals/modal.vue\";\n\nimport { calcFontScale } from \"@/core/utils\";\nimport { LocalPoint } from \"@/game/geom\";\nimport { layerManager } from \"@/game/layers/manager\";\nimport { CircularToken } from \"@/game/shapes/circulartoken\";\nimport { gameStore } from \"@/game/store\";\nimport { getUnitDistance, l2g } from \"@/game/units\";\nimport { Watch } from \"vue-property-decorator\";\n\n@Component({\n components: {\n Modal,\n \"color-picker\": ColorPicker,\n },\n computed: {\n ...mapState(\"game\", [\"unitSize\"]),\n },\n})\nexport default class CreateTokenModal extends Vue {\n x = 0;\n y = 0;\n visible = false;\n text = \"X\";\n fillColour = \"rgba(255, 255, 255, 1)\";\n borderColour = \"rgba(0, 0, 0, 1)\";\n\n mounted() {\n this.updatePreview();\n }\n\n @Watch(\"text\")\n onTextChange(newValue: string, oldValue: string) {\n this.updatePreview();\n }\n @Watch(\"fillColour\")\n onFillChange(newValue: string, oldValue: string) {\n this.updatePreview();\n }\n @Watch(\"borderColour\")\n onBorderChange(newValue: string, oldValue: string) {\n this.updatePreview();\n }\n\n open(x: number, y: number) {\n this.visible = true;\n this.x = x;\n this.y = y;\n }\n submit() {\n const layer = layerManager.getLayer();\n if (layer === undefined) return;\n const token = new CircularToken(\n l2g(new LocalPoint(this.x, this.y)),\n getUnitDistance(gameStore.unitSize / 2),\n this.text,\n \"10px serif\",\n this.fillColour,\n this.borderColour,\n );\n token.addOwner(gameStore.username);\n layer.addShape(token, true);\n layer.invalidate(false);\n this.visible = false;\n }\n updatePreview() {\n const ctx = (this.$refs.canvas).getContext(\"2d\")!;\n ctx.clearRect(0, 0, ctx.canvas.width, ctx.canvas.height);\n ctx.beginPath();\n const dest = { x: ctx.canvas.width / 2, y: ctx.canvas.height / 2 };\n const r = Math.min(dest.x, dest.y) * 0.9;\n\n ctx.fillStyle = this.fillColour;\n\n ctx.arc(dest.x, dest.y, r, 0, 2 * Math.PI);\n ctx.fill();\n if (this.borderColour !== \"rgba(0, 0, 0, 0)\") {\n ctx.beginPath();\n ctx.lineWidth = 5;\n ctx.strokeStyle = this.borderColour;\n ctx.arc(dest.x, dest.y, r, 0, 2 * Math.PI);\n ctx.stroke();\n }\n ctx.save();\n ctx.textAlign = \"center\";\n ctx.textBaseline = \"middle\";\n const xs = calcFontScale(ctx, this.text, r, r);\n const ys = 0;\n ctx.transform(xs, ys, -ys, xs, dest.x, dest.y);\n ctx.fillStyle = tinycolor.mostReadable(this.fillColour, [\"#000\", \"#fff\"]).toHexString();\n ctx.fillText(this.text, 0, 0);\n ctx.restore();\n }\n}\n","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nimport Vue from \"vue\";\nimport Component from \"vue-class-component\";\n\nimport ConfirmDialog from \"@/core/components/modals/confirm.vue\";\nimport Modal from \"@/core/components/modals/modal.vue\";\n\nimport { getRef } from \"@/core/utils\";\nimport { Note } from \"@/game/comm/types/general\";\nimport { gameStore } from \"@/game/store\";\n\n@Component({\n components: {\n Modal,\n },\n})\nexport default class NoteDialog extends Vue {\n visible = false;\n note: Note | null = null;\n\n open(note: Note) {\n this.visible = true;\n this.note = note;\n }\n calcHeight() {\n if (this.$refs.textarea) {\n const el = this.$refs.textarea;\n el.style.height = \"auto\";\n el.style.height = el.scrollHeight + \"px\";\n // Using the return value without the above did not achieve what I want, so hey /shrug\n return el.scrollHeight + \"px\";\n }\n return \"100px\";\n }\n updateNote() {\n if (this.note) gameStore.updateNote({ note: this.note, sync: true });\n }\n removeNote() {\n getRef(\"confirm\")\n .open(\"Are you sure you wish to remove this?\")\n .then(\n (result: boolean) => {\n if (result && this.note) {\n gameStore.removeNote({ note: this.note, sync: true });\n this.visible = false;\n }\n },\n () => {},\n );\n }\n}\n","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nimport Component from \"vue-class-component\";\n\nimport { Watch } from \"vue-property-decorator\";\n\nimport ColorPicker from \"@/core/components/colorpicker.vue\";\nimport Tool from \"@/game/ui/tools/tool.vue\";\n\nimport { socket } from \"@/game/api/socket\";\nimport { GlobalPoint } from \"@/game/geom\";\nimport { layerManager } from \"@/game/layers/manager\";\nimport { Circle } from \"@/game/shapes/circle\";\nimport { Line } from \"@/game/shapes/line\";\nimport { MultiLine } from \"@/game/shapes/multiline\";\nimport { Polygon } from \"@/game/shapes/polygon\";\nimport { Rect } from \"@/game/shapes/rect\";\nimport { Shape } from \"@/game/shapes/shape\";\nimport { gameStore } from \"@/game/store\";\nimport { getUnitDistance, l2g } from \"@/game/units\";\nimport { getMouse } from \"@/game/utils\";\n\n@Component({\n components: {\n \"color-picker\": ColorPicker,\n },\n})\nexport default class DrawTool extends Tool {\n name = \"Draw\";\n active = false;\n\n startPoint: GlobalPoint | null = null;\n shape: Shape | null = null;\n brushHelper: Circle | null = null;\n ruler: Line | null = null;\n\n fillColour = \"rgba(0, 0, 0, 1)\";\n borderColour = \"rgba(255, 255, 255, 0)\";\n\n shapeSelect = \"square\";\n shapes = [\"square\", \"circle\", \"draw-polygon\", \"paint-brush\"];\n modeSelect = \"normal\";\n modes = [\"normal\", \"reveal\", \"hide\"];\n\n brushSize = getUnitDistance(gameStore.unitSize);\n\n get helperSize(): number {\n if (this.shapeSelect === \"paint-brush\") return this.brushSize / 2;\n return getUnitDistance(this.unitSize) / 8;\n }\n get IS_DM(): boolean {\n return gameStore.IS_DM;\n }\n get unitSize(): number {\n return gameStore.unitSize;\n }\n get useGrid(): boolean {\n return gameStore.useGrid;\n }\n\n @Watch(\"fillColour\")\n onFillChange() {\n if (this.brushHelper) this.brushHelper.fillColour = this.fillColour;\n }\n\n @Watch(\"modeSelect\")\n onModeUpdate(newValue: string, oldValue: string) {\n this.onModeChange(newValue, oldValue);\n }\n\n setupBrush() {\n if (this.brushHelper === null) return;\n if (this.modeSelect === \"reveal\" || this.modeSelect === \"hide\") {\n this.brushHelper.options.set(\"preFogShape\", true);\n this.brushHelper.options.set(\"skipDraw\", true);\n this.brushHelper.fillColour = \"rgba(0, 0, 0, 1)\";\n\n if (this.modeSelect === \"reveal\") this.brushHelper.globalCompositeOperation = \"source-over\";\n else if (this.modeSelect === \"hide\") this.brushHelper.globalCompositeOperation = \"destination-out\";\n } else {\n this.brushHelper.options.delete(\"preFogShape\");\n this.brushHelper.options.delete(\"skipDraw\");\n this.brushHelper.globalCompositeOperation = \"source-over\";\n this.brushHelper.fillColour = this.fillColour;\n }\n }\n onModeChange(newValue: string, oldValue: string) {\n if (this.brushHelper === null) return;\n\n const fowLayer = layerManager.getLayer(\"fow\");\n const normalLayer = layerManager.getLayer();\n if (fowLayer === undefined || normalLayer === undefined) return;\n\n this.setupBrush();\n\n if (newValue !== \"normal\" && oldValue === \"normal\") {\n normalLayer.removeShape(this.brushHelper, false);\n fowLayer.addShape(this.brushHelper, false);\n } else if (newValue === \"normal\" && oldValue !== \"normal\") {\n normalLayer.addShape(this.brushHelper, false);\n fowLayer.removeShape(this.brushHelper, false);\n }\n }\n getLayer() {\n if (this.modeSelect === \"normal\") return layerManager.getLayer();\n return layerManager.getLayer(\"fow\");\n }\n onMouseDown(event: MouseEvent) {\n const layer = this.getLayer();\n if (layer === undefined) {\n console.log(\"No active layer!\");\n return;\n }\n if (!this.active) {\n this.startPoint = l2g(getMouse(event));\n this.active = true;\n switch (this.shapeSelect) {\n case \"square\": {\n this.shape = new Rect(this.startPoint.clone(), 0, 0, this.fillColour, this.borderColour);\n break;\n }\n case \"circle\": {\n this.shape = new Circle(\n this.startPoint.clone(),\n this.helperSize,\n this.fillColour,\n this.borderColour,\n );\n break;\n }\n case \"paint-brush\": {\n this.shape = new MultiLine(this.startPoint.clone(), [], this.brushSize);\n this.shape.fillColour = this.fillColour;\n break;\n }\n case \"draw-polygon\": {\n this.shape = new Polygon(this.startPoint.clone(), [], this.fillColour, this.borderColour);\n break;\n }\n default:\n return;\n }\n\n if (this.modeSelect !== \"normal\") {\n this.shape.options.set(\"preFogShape\", true);\n this.shape.options.set(\"skipDraw\", true);\n this.shape.fillColour = \"rgba(0, 0, 0, 1)\";\n }\n if (this.modeSelect === \"reveal\") this.shape.globalCompositeOperation = \"source-over\";\n else if (this.modeSelect === \"hide\") this.shape.globalCompositeOperation = \"destination-out\";\n\n this.shape.addOwner(gameStore.username);\n if (layer.name === \"fow\" && this.modeSelect === \"normal\") {\n this.shape.visionObstruction = true;\n this.shape.movementObstruction = true;\n }\n layer.addShape(this.shape, true, false, false);\n\n // Push brushhelper to back\n this.pushBrushBack();\n } else if (this.shape !== null && this.shape instanceof Polygon) {\n // For polygon draw\n this.shape._vertices.push(l2g(getMouse(event)));\n }\n if (this.shape !== null && this.shape instanceof Polygon) {\n const lastPoint = l2g(getMouse(event));\n if (this.ruler === null) {\n this.ruler = new Line(lastPoint, lastPoint, 3, \"black\");\n layer.addShape(this.ruler, false);\n } else {\n this.ruler.refPoint = lastPoint;\n this.ruler.endPoint = lastPoint;\n }\n if (this.shape.visionObstruction) gameStore.recalculateVision(true);\n layer.invalidate(false);\n socket.emit(\"Shape.Update\", { shape: this.shape!.asDict(), redraw: true, temporary: true });\n }\n }\n onMouseMove(event: MouseEvent) {\n const endPoint = l2g(getMouse(event));\n const layer = this.getLayer();\n if (layer === undefined) {\n console.log(\"No active layer!\");\n return;\n }\n\n if (this.brushHelper !== null) {\n this.brushHelper.r = this.helperSize;\n this.brushHelper.refPoint = endPoint;\n if (!this.active) layer.invalidate(false);\n }\n\n if (!this.active || this.startPoint === null || this.shape === null) return;\n\n switch (this.shapeSelect) {\n case \"square\": {\n (this.shape).w = Math.abs(endPoint.x - this.startPoint.x);\n (this.shape).h = Math.abs(endPoint.y - this.startPoint.y);\n this.shape.refPoint = new GlobalPoint(\n Math.min(this.startPoint.x, endPoint.x),\n Math.min(this.startPoint.y, endPoint.y),\n );\n break;\n }\n case \"circle\": {\n (this.shape).r = endPoint.subtract(this.startPoint).length();\n break;\n }\n case \"paint-brush\": {\n (this.shape)._points.push(endPoint);\n break;\n }\n case \"draw-polygon\": {\n this.ruler!.endPoint = endPoint;\n break;\n }\n }\n\n if (!(this.shape instanceof Polygon)) {\n socket.emit(\"Shape.Update\", { shape: this.shape!.asDict(), redraw: true, temporary: true });\n if (this.shape.visionObstruction) gameStore.recalculateVision(true);\n }\n layer.invalidate(false);\n }\n onMouseUp(event: MouseEvent) {\n if (!this.active || this.shape === null || this.shape instanceof Polygon) return;\n if (!event.altKey && this.useGrid) {\n this.shape.resizeToGrid();\n }\n this.finaliseShape();\n }\n onContextMenu(event: MouseEvent) {\n if (!this.active || this.shape === null || !(this.shape instanceof Polygon)) return;\n const layer = this.getLayer();\n if (layer === undefined) {\n console.log(\"No active layer!\");\n return;\n }\n layer.removeShape(this.ruler!, false);\n this.ruler = null;\n this.finaliseShape();\n }\n\n private finaliseShape() {\n if (this.shape === null) return;\n if (this.shape.visionObstruction) gameStore.recalculateVision();\n if (this.shape.movementObstruction) gameStore.recalculateMovement();\n socket.emit(\"Shape.Update\", { shape: this.shape!.asDict(), redraw: true, temporary: false });\n this.active = false;\n }\n\n onSelect() {\n const layer = this.getLayer();\n if (layer === undefined) return;\n this.brushHelper = new Circle(new GlobalPoint(-1000, -1000), this.brushSize / 2, this.fillColour);\n this.setupBrush();\n layer.addShape(this.brushHelper, false); // during mode change the shape is already added\n }\n onDeselect() {\n const layer = this.getLayer();\n if (this.brushHelper !== null && layer !== undefined) layer.removeShape(this.brushHelper, false);\n if (this.active && layer !== undefined && this.shape !== null) {\n layer.removeShape(this.shape, true, false);\n this.shape = null;\n this.active = false;\n layer.invalidate(false);\n }\n }\n\n private pushBrushBack() {\n const layer = this.getLayer();\n if (layer === undefined) {\n console.log(\"No active layer!\");\n return;\n }\n if (this.brushHelper !== null) layer.removeShape(this.brushHelper, false);\n this.brushHelper = new Circle(new GlobalPoint(-1000, -1000), this.brushSize / 2, this.fillColour);\n this.setupBrush();\n layer.addShape(this.brushHelper, false); // during mode change the shape is already added\n }\n}\n","import { GlobalPoint, LocalPoint } from \"@/game/geom\";\nimport { BoundingRect } from \"@/game/shapes/boundingrect\";\nimport { Shape } from \"@/game/shapes/shape\";\nimport { g2lx, g2ly, l2g } from \"@/game/units\";\n\nexport class Line extends Shape {\n type = \"line\";\n endPoint: GlobalPoint;\n lineWidth: number;\n constructor(\n startPoint: GlobalPoint,\n endPoint: GlobalPoint,\n lineWidth?: number,\n strokeColour?: string,\n uuid?: string,\n ) {\n super(startPoint, \"rgba(0, 0, 0, 0)\", strokeColour || \"#000\", uuid);\n this.endPoint = endPoint;\n this.lineWidth = lineWidth === undefined ? 1 : lineWidth;\n }\n asDict() {\n return Object.assign(this.getBaseDict(), {\n x2: this.endPoint.x,\n y2: this.endPoint.y,\n line_width: this.lineWidth,\n });\n }\n get points() {\n return [[this.refPoint.x, this.refPoint.y], [this.endPoint.x, this.endPoint.y]];\n }\n getBoundingBox(): BoundingRect {\n return new BoundingRect(\n new GlobalPoint(Math.min(this.refPoint.x, this.endPoint.x), Math.min(this.refPoint.y, this.endPoint.y)),\n Math.abs(this.refPoint.x - this.endPoint.x),\n Math.abs(this.refPoint.y - this.endPoint.y),\n );\n }\n draw(ctx: CanvasRenderingContext2D) {\n super.draw(ctx);\n ctx.strokeStyle = this.strokeColour;\n ctx.beginPath();\n ctx.moveTo(g2lx(this.refPoint.x), g2ly(this.refPoint.y));\n ctx.lineTo(g2lx(this.endPoint.x), g2ly(this.endPoint.y));\n ctx.lineWidth = this.lineWidth;\n ctx.stroke();\n }\n contains(point: GlobalPoint): boolean {\n return false; // TODO\n }\n\n center(): GlobalPoint;\n center(centerPoint: GlobalPoint): void;\n center(centerPoint?: GlobalPoint): GlobalPoint | void {} // TODO\n visibleInCanvas(canvas: HTMLCanvasElement): boolean {\n return this.getBoundingBox().visibleInCanvas(canvas);\n } // TODO\n snapToGrid(): void {}\n resizeToGrid(): void {}\n resize(resizePoint: number, point: LocalPoint): void {\n if (resizePoint === 0) this.refPoint = l2g(point);\n else this.endPoint = l2g(point);\n }\n}\n","// import \"./class-component-hooks\";\n\nimport axios, { AxiosResponse } from \"axios\";\nimport Vue from \"vue\";\nimport Router from \"vue-router\";\n\nVue.use(Router);\n\nimport AssetManager from \"@/assetManager/manager.vue\";\nimport Login from \"@/auth/login.vue\";\nimport Logout from \"@/auth/logout\";\nimport LoadComponent from \"@/core/components/load.vue\";\nimport Dashboard from \"@/dashboard/main.vue\";\nimport Game from \"@/game/game.vue\";\nimport Invitation from \"@/invitation/invitation\";\n\nimport { coreStore } from \"@/core/store\";\n// import { AssetManager } from \"./assetManager/assets\";\n// const AssetManager = () => import(\"./assetManager/assets\").then(m => m.AssetManager);\n\nexport const router = new Router({\n mode: \"history\",\n base: process.env.BASE_URL,\n routes: [\n {\n path: \"/\",\n redirect: \"/dashboard\",\n },\n {\n path: \"/_load\",\n name: \"load\",\n component: LoadComponent,\n },\n {\n path: \"/assets\",\n component: AssetManager,\n meta: {\n auth: true,\n },\n },\n {\n path: \"/auth\",\n component: { template: \"\" },\n children: [{ path: \"login\", component: Login }, { path: \"logout\", component: Logout }],\n },\n {\n path: \"/invite/:code\",\n component: Invitation,\n meta: {\n auth: true,\n },\n },\n {\n path: \"/dashboard\",\n component: Dashboard,\n meta: {\n auth: true,\n },\n },\n {\n path: \"/game/:creator/:room\",\n component: Game,\n meta: {\n auth: true,\n },\n },\n ],\n});\n\nrouter.beforeEach((to, from, next) => {\n if (!coreStore.initialized && to.path !== \"/_load\") {\n next({ path: \"/_load\" });\n axios\n .get(\"/api/auth\")\n .then((response: AxiosResponse) => {\n if (response.data.auth) {\n coreStore.setAuthenticated(true);\n coreStore.setUsername(response.data.username);\n }\n coreStore.setInitialized(true);\n router.push(to.path);\n })\n .catch(() => {\n console.error(\"Authentication check could not be fulfilled.\");\n });\n } else if (to.matched.some(record => record.meta.auth) && !coreStore.authenticated) {\n next({ path: \"/auth/login\", query: { redirect: to.path } });\n } else {\n next();\n }\n});\n","\n\n\nimport Vue from \"vue\";\nimport Component from \"vue-class-component\";\n\n@Component\nexport default class Tool extends Vue {\n name = \"\";\n selected = false;\n active = false;\n get detailRight(): string {\n const rect = (this.$parent.$refs[this.name + \"-selector\"])[0].getBoundingClientRect();\n const mid = rect.left + rect.width / 2;\n\n return `${window.innerWidth - Math.min(window.innerWidth - 25, mid + 75)}px`;\n }\n get detailArrow(): string {\n const rect = (this.$parent.$refs[this.name + \"-selector\"])[0].getBoundingClientRect();\n const mid = rect.left + rect.width / 2;\n const right = Math.min(window.innerWidth - 25, mid + 75);\n return `${right - mid - 14}px`; // border width\n }\n created() {\n this.$parent.$on(\"mousedown\", (event: MouseEvent, tool: string) => {\n if (tool === this.name) this.onMouseDown(event);\n });\n this.$parent.$on(\"mouseup\", (event: MouseEvent, tool: string) => {\n if (tool === this.name) this.onMouseUp(event);\n });\n this.$parent.$on(\"mousemove\", (event: MouseEvent, tool: string) => {\n if (tool === this.name) this.onMouseMove(event);\n });\n this.$parent.$on(\"contextmenu\", (event: MouseEvent, tool: string) => {\n if (tool === this.name) this.onContextMenu(event);\n });\n this.$parent.$on(\"tools-select-change\", (newValue: string, oldValue: string) => {\n if (oldValue === this.name) {\n this.selected = false;\n this.onDeselect();\n } else if (newValue === this.name) {\n this.selected = true;\n this.onSelect();\n }\n });\n }\n onSelect() {}\n onDeselect() {}\n onMouseDown(event: MouseEvent) {}\n onMouseUp(event: MouseEvent) {}\n onMouseMove(event: MouseEvent) {}\n onContextMenu(event: MouseEvent) {}\n}\n","import { render, staticRenderFns } from \"./tools.vue?vue&type=template&id=b6e1f51c&scoped=true&\"\nimport script from \"./tools.vue?vue&type=script&lang=ts&\"\nexport * from \"./tools.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./tools.vue?vue&type=style&index=0&id=b6e1f51c&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"b6e1f51c\",\n null\n \n)\n\ncomponent.options.__file = \"tools.vue\"\nexport default component.exports","import mod from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/ts-loader/index.js??ref--12-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./tool.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/ts-loader/index.js??ref--12-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./tool.vue?vue&type=script&lang=ts&\"","import { InitiativeData } from \"@/game/comm/types/general\";\nimport { ServerAsset } from \"@/game/comm/types/shapes\";\nimport { GlobalPoint } from \"@/game/geom\";\nimport { BaseRect } from \"@/game/shapes/baserect\";\nimport { gameStore } from \"@/game/store\";\nimport { g2lx, g2ly, g2lz } from \"@/game/units\";\n\nexport class Asset extends BaseRect {\n type = \"assetrect\";\n img: HTMLImageElement;\n src: string = \"\";\n constructor(img: HTMLImageElement, topleft: GlobalPoint, w: number, h: number, uuid?: string) {\n super(topleft, w, h, undefined, undefined, uuid);\n this.img = img;\n }\n asDict() {\n return Object.assign(this.getBaseDict(), {\n src: this.src,\n });\n }\n fromDict(data: ServerAsset) {\n super.fromDict(data);\n this.src = data.src;\n }\n draw(ctx: CanvasRenderingContext2D) {\n super.draw(ctx);\n try {\n ctx.drawImage(this.img, g2lx(this.refPoint.x), g2ly(this.refPoint.y), g2lz(this.w), g2lz(this.h));\n } catch (error) {\n console.warn(`Shape ${this.uuid} could not load the image ${this.src}`);\n }\n }\n getInitiativeRepr(): InitiativeData {\n return {\n uuid: this.uuid,\n visible: !gameStore.IS_DM,\n group: false,\n source: this.src,\n has_img: true,\n effects: [],\n index: Infinity,\n };\n }\n}\n","import {\n BoundingBox,\n EdgeCirculator,\n FaceCirculator,\n LineFaceCirculator,\n LocateType,\n Point,\n Sign,\n TDS,\n Triangle,\n Vertex,\n} from \"./tds\";\nimport {\n ccw,\n collinearBetween,\n cw,\n edgeInfo,\n hasInexactNegativeOrientation,\n intersection,\n orientation,\n sideOfOrientedCircle,\n xyEqual,\n} from \"./triag\";\n\nexport type Edge = [Triangle, number];\n\nexport class CDT {\n tds: TDS;\n constructor() {\n this.tds = new TDS();\n }\n insertConstraint(a: Point, b: Point) {\n const va = this.insert(a);\n const vb = this.insert(b);\n if (va !== vb) this.insertConstraintV(va, vb);\n }\n\n insertConstraintV(va: Vertex, vb: Vertex) {\n const stack = [[va, vb]];\n while (stack.length > 0) {\n const v = stack.pop()!;\n const info = edgeInfo(v[0], v[1]);\n if (info.includes) {\n this.markConstraint(info.fr!, info.i!);\n if (info.vi! !== v[1]) {\n stack.push([info.vi!, v[1]]);\n }\n continue;\n }\n const intersectionInfo = this.findIntersectedFaces(v[0], v[1]);\n if (intersectionInfo.found) {\n if (intersectionInfo.vi !== v[0] && intersectionInfo.vi !== v[1]) {\n stack.push([v[0], intersectionInfo.vi]);\n stack.push([intersectionInfo.vi, v[1]]);\n } else {\n stack.push(v);\n }\n continue;\n }\n this.triangulateHole(intersectionInfo.intersectedFaces, intersectionInfo.listAB, intersectionInfo.listBA);\n if (intersectionInfo.vi !== v[1]) {\n stack.push([intersectionInfo.vi, v[1]]);\n }\n }\n }\n\n triangulateHole(intersectedFaces: Triangle[], listAB: Edge[], listBA: Edge[]) {\n const edges: Edge[] = [];\n this.triangulateHole2(intersectedFaces, listAB, listBA, edges);\n this.propagatingFlipE(edges);\n }\n\n triangulateHole2(intersectedFaces: Triangle[], listAB: Edge[], listBA: Edge[], edges: Edge[]) {\n if (listAB.length > 0) {\n this.triangulateHalfHole(listAB, edges);\n this.triangulateHalfHole(listBA, edges);\n const fl = listAB[0][0];\n const fr = listBA[0][0];\n fl.neighbours[2] = fr;\n fr.neighbours[2] = fl;\n fl.constraints[2] = true;\n fr.constraints[2] = true;\n\n while (intersectedFaces.length > 0) {\n this.tds.deleteTriangle(intersectedFaces.shift()!);\n }\n }\n }\n\n triangulateHalfHole(conflictBoundaries: Edge[], edges: Edge[]) {\n let iC = 0;\n let iN: number;\n let iT: number;\n const current = () => conflictBoundaries[iC];\n const next = () => conflictBoundaries[iN];\n const tempo = () => conflictBoundaries[iT];\n\n const va = current()[0].vertices[ccw(current()[1])]!;\n iN = iC;\n ++iN;\n\n let n: Triangle;\n let n1: Triangle;\n let n2: Triangle;\n let ind: number;\n let ind1: number;\n let ind2: number;\n do {\n n1 = current()[0];\n ind1 = current()[1];\n if (n1.neighbours[ind1] !== null) {\n n = n1.neighbours[ind1]!;\n ind = cw(n.indexV(n1.vertices[cw(ind1)]!));\n n1 = n.neighbours[ind]!;\n ind1 = this.tds.mirrorIndex(n, ind);\n }\n n2 = next()[0];\n ind2 = next()[1];\n if (n2.neighbours[ind2] !== null) {\n n = n2.neighbours[ind2]!;\n ind = cw(n.indexV(n2.vertices[cw(ind2)]!));\n n2 = n.neighbours[ind]!;\n ind2 = this.tds.mirrorIndex(n, ind);\n }\n const v0 = n1.vertices[ccw(ind1)]!;\n const v1 = n1.vertices[cw(ind1)]!;\n const v2 = n2.vertices[cw(ind2)]!;\n const orient = orientation(v0.point!, v1.point!, v2.point!);\n switch (orient) {\n case Sign.RIGHT_TURN: {\n const newlf = this.tds.createTriangle(v0, v2, v1, null, null, null);\n edges.push([newlf, 2]);\n newlf.neighbours[1] = n1;\n newlf.neighbours[0] = n2;\n n1.neighbours[ind1] = newlf;\n n2.neighbours[ind2] = newlf;\n if (n1.isConstrained(ind1)) newlf.constraints[1] = true;\n if (n2.isConstrained(ind2)) newlf.constraints[0] = true;\n v0.triangle = newlf;\n v1.triangle = newlf;\n v2.triangle = newlf;\n iT = iC + 1;\n conflictBoundaries.splice(iC, 0, [newlf, 2]);\n conflictBoundaries.splice(Math.max(iT, iN), 1);\n conflictBoundaries.splice(Math.min(iT, iN), 1);\n iN = iC;\n if (v0 !== va) --iC;\n else ++iN;\n break;\n }\n case Sign.LEFT_TURN:\n case Sign.COLLINEAR: {\n ++iC;\n ++iN;\n break;\n }\n }\n } while (iN < conflictBoundaries.length);\n }\n\n findIntersectedFaces(vaa: Vertex, vbb: Vertex) {\n const aa = vaa.point!;\n const bb = vbb.point!;\n const listAB: Edge[] = [];\n const listBA: Edge[] = [];\n const intersectedFaces: Triangle[] = [];\n const lfc = new LineFaceCirculator(vaa, this, bb);\n let ind = lfc.pos!.indexV(vaa);\n let vi: Vertex;\n if (lfc.pos!.isConstrained(ind)) {\n vi = this.intersect(lfc.pos!, ind, vaa, vbb);\n return { found: true, vi, listAB, listBA, intersectedFaces };\n }\n let lf = lfc.pos!.neighbours[ccw(ind)]!;\n let rf = lfc.pos!.neighbours[cw(ind)]!;\n listAB.push([lf, lf.indexT(lfc.pos!)]);\n listBA.unshift([rf, rf.indexT(lfc.pos!)]);\n intersectedFaces.unshift(lfc.pos!);\n let previousFace = lfc.pos!;\n lfc.next();\n ind = lfc.pos!.indexT(previousFace);\n let currentVertex = lfc.pos!.vertices[ind]!;\n let done = false;\n while (currentVertex !== vbb && !done) {\n let i1: number;\n let i2: number;\n const orient = orientation(aa, bb, currentVertex.point!);\n switch (orient) {\n case Sign.COLLINEAR: {\n done = true;\n break;\n }\n case Sign.LEFT_TURN:\n case Sign.RIGHT_TURN: {\n if (orient === Sign.LEFT_TURN) {\n i1 = ccw(ind);\n i2 = cw(ind);\n } else {\n i1 = cw(ind);\n i2 = ccw(ind);\n }\n if (lfc.pos!.isConstrained(i1)) {\n vi = this.intersect(lfc.pos!, i1, vaa, vbb);\n return { found: true, vi, listAB, listBA, intersectedFaces };\n } else {\n lf = lfc.pos!.neighbours[i2]!;\n intersectedFaces.unshift(lfc.pos!);\n if (orient === Sign.LEFT_TURN) listAB.push([lf, lf.indexT(lfc.pos!)]);\n else listBA.unshift([lf, lf.indexT(lfc.pos!)]);\n previousFace = lfc.pos!;\n lfc.next();\n ind = lfc.pos!.indexT(previousFace);\n currentVertex = lfc.pos!.vertices[ind]!;\n }\n break;\n }\n }\n }\n vi = currentVertex;\n intersectedFaces.unshift(lfc.pos!);\n lf = lfc.pos!.neighbours[cw(ind)]!;\n listAB.push([lf, lf.indexT(lfc.pos!)]);\n rf = lfc.pos!.neighbours[ccw(ind)]!;\n listBA.unshift([rf, rf.indexT(lfc.pos!)]);\n return { found: false, vi, listAB, listBA, intersectedFaces };\n }\n\n intersect(t: Triangle, i: number, vaa: Vertex, vbb: Vertex): Vertex {\n const vcc = t.vertices[cw(i)]!;\n const vdd = t.vertices[ccw(i)]!;\n const pa = vaa.point!;\n const pb = vbb.point!;\n const pc = vcc.point!;\n const pd = vdd.point!;\n let pi = intersection(pa, pb, pc, pd);\n if (pi !== pa && pi !== pb && pi !== pc && pi !== pd) {\n const bbox = new BoundingBox(pi!);\n bbox.dilate(4);\n if (bbox.overlaps(new BoundingBox(pa))) pi = pa;\n if (bbox.overlaps(new BoundingBox(pb))) pi = pb;\n if (bbox.overlaps(new BoundingBox(pc))) pi = pc;\n if (bbox.overlaps(new BoundingBox(pd))) pi = pd;\n }\n let vi: Vertex;\n if (pi === null) throw new Error(\"what\");\n else {\n this.removeConstrainedEdge(t, i);\n vi = this.insert(pi, t);\n }\n\n if (vi !== vcc && vi !== vdd) {\n this.insertConstraintV(vcc, vi);\n this.insertConstraintV(vi, vdd);\n } else {\n this.insertConstraintV(vcc, vdd);\n }\n return vi;\n }\n\n removeConstrainedEdge(t: Triangle, i: number) {\n t.constraints[i] = false;\n if (this.tds.dimension === 2) t.neighbours[i]!.constraints[this.tds.mirrorIndex(t, i)] = false;\n }\n\n updateConstraintsOpposite(v: Vertex) {\n let t = v.triangle!;\n const start = t;\n let indf: number;\n do {\n indf = t.indexV(v);\n if (t.neighbours[indf]!.constraints[this.tds.mirrorIndex(t, indf)]) t.constraints[indf] = true;\n else t.constraints[indf] = false;\n t = t.neighbours[ccw(indf)]!;\n } while (t !== start);\n }\n\n markConstraint(t: Triangle, i: number) {\n if (this.tds.dimension === 1) t.constraints[2] = true;\n else {\n t.constraints[i] = true;\n t.neighbours[i]!.constraints[this.tds.mirrorIndex(t, i)] = true;\n }\n }\n\n insert(p: Point, start: Triangle | null = null) {\n const locateInfo = this.locate(p, this.iLocate(p, start));\n const va = this.insertb(p, locateInfo.loc, locateInfo.lt, locateInfo.li);\n this.flipAround(va);\n return va;\n }\n\n flipAround(v: Vertex) {\n if (this.tds.dimension <= 1) return;\n let t = v.triangle!;\n let i: number;\n let next: Triangle;\n const start = t;\n do {\n i = t.indexV(v);\n next = t.neighbours[ccw(i)]!;\n this.propagatingFlip(t, i);\n t = next;\n } while (next !== start);\n }\n\n propagatingFlip(t: Triangle, i: number, depth = 0) {\n if (!this.isFlipable(t, i)) return;\n const maxDepth = 100;\n if (depth === maxDepth) {\n throw new Error(\"maxde\");\n return;\n }\n const ni = t.neighbours[i]!;\n this.flip(t, i);\n this.propagatingFlip(t, i, depth + 1);\n i = ni.indexV(t.vertices[i]!);\n this.propagatingFlip(ni, i, depth + 1);\n }\n\n lessEdge(e1: Edge, e2: Edge) {\n const ind1 = e1[1];\n const ind2 = e2[1];\n return e1[0].uid < e2[0].uid || (e1[0].uid === e2[0].uid && ind1 < ind2);\n }\n\n propagatingFlipE(edges: Edge[]) {\n let eI = 0;\n let t: Triangle;\n let i: number;\n let eni: Edge;\n const edgeSet: Edge[] = [];\n while (eI < edges.length) {\n t = edges[eI][0];\n i = edges[eI][1];\n if (this.isFlipable(t, i)) {\n eni = [t.neighbours[i]!, this.tds.mirrorIndex(t, i)];\n if (this.lessEdge(edges[eI], eni)) edgeSet.push(edges[eI]);\n else edgeSet.push(eni);\n }\n ++eI;\n }\n let indf: number;\n let ni: Triangle;\n let indn: number;\n let ei: Edge;\n const e: (Edge | null)[] = [null, null, null, null];\n while (edgeSet.length > 0) {\n t = edgeSet[0][0];\n indf = edgeSet[0][1];\n ni = t.neighbours[indf]!;\n indn = this.tds.mirrorIndex(t, indf);\n ei = [t, indf];\n edgeSet.splice(edgeSet.findIndex(ed => ed[0] === ei[0] && ed[1] === ei[1]), 1);\n e[0] = [t, cw(indf)];\n e[1] = [t, ccw(indf)];\n e[2] = [ni, cw(indn)];\n e[3] = [ni, ccw(indn)];\n\n for (const edge of e) {\n const tt = edge![0];\n const ii = edge![1];\n eni = [tt.neighbours[ii]!, this.tds.mirrorIndex(tt, ii)];\n if (this.lessEdge(edge!, eni))\n edgeSet.splice(edgeSet.findIndex(ed => ed[0] === edge![0] && ed[1] === edge![1]), 1);\n else edgeSet.splice(edgeSet.findIndex(ed => ed[0] === eni[0] && ed[1] === eni[1]), 1);\n }\n\n this.flip(t, indf);\n\n for (const edge of e) {\n const tt = edge![0];\n const ii = edge![1];\n if (this.isFlipable(tt, ii)) {\n eni = [tt.neighbours[ii]!, this.tds.mirrorIndex(tt, ii)];\n if (this.lessEdge(edge!, eni)) edgeSet.push(edge!);\n else edgeSet.push(eni);\n }\n }\n }\n }\n\n flip(t: Triangle, i: number) {\n const u = t.neighbours[i]!;\n const j = this.tds.mirrorIndex(t, i);\n const t1 = t.neighbours[cw(i)]!;\n const i1 = this.tds.mirrorIndex(t, cw(i));\n const t2 = t.neighbours[ccw(i)]!;\n const i2 = this.tds.mirrorIndex(t, ccw(i));\n const t3 = u.neighbours[cw(j)]!;\n const i3 = this.tds.mirrorIndex(u, cw(j));\n const t4 = u.neighbours[ccw(j)]!;\n const i4 = this.tds.mirrorIndex(u, ccw(j));\n this.tds.flip(t, i);\n t.constraints[t.indexT(u)] = false;\n u.constraints[u.indexT(t)] = false;\n t1.neighbours[i1]!.constraints[this.tds.mirrorIndex(t1, i1)] = t1.constraints[i1];\n t2.neighbours[i2]!.constraints[this.tds.mirrorIndex(t2, i2)] = t2.constraints[i2];\n t3.neighbours[i3]!.constraints[this.tds.mirrorIndex(t3, i3)] = t3.constraints[i3];\n t4.neighbours[i4]!.constraints[this.tds.mirrorIndex(t4, i4)] = t4.constraints[i4];\n }\n\n isFlipable(t: Triangle, i: number, perturb = true) {\n const ni = t.neighbours[i]!;\n if (t.isInfinite() || ni.isInfinite()) return false;\n if (t.constraints[i]) return false;\n return sideOfOrientedCircle(ni, t.vertices[i]!.point!, perturb) === Sign.ON_POSITIVE_SIDE;\n }\n\n insertb(a: Point, loc: Triangle | null, lt: LocateType, li: number): Vertex {\n let insertInConstrainedEdge = false;\n let v1: Vertex;\n let v2: Vertex;\n if (lt === LocateType.EDGE && loc!.isConstrained(li)) {\n insertInConstrainedEdge = true;\n v1 = loc!.vertices[ccw(li)]!;\n v2 = loc!.vertices[cw(li)]!;\n }\n const va = this.insertc(a, loc, lt, li);\n if (insertInConstrainedEdge) this.updateConstraintsIncident(va, v1!, v2!);\n else if (lt !== LocateType.VERTEX) this.clearConstraintsIncident(va);\n if (this.tds.dimension === 2) this.updateConstraintsOpposite(va);\n return va;\n }\n\n updateConstraintsIncident(va: Vertex, c1: Vertex, c2: Vertex) {\n if (this.tds.dimension === 0) return;\n if (this.tds.dimension === 1) {\n const ec = new EdgeCirculator(va, null);\n do {\n ec.t!.constraints[2] = true;\n } while (ec.next());\n } else {\n const fc = new FaceCirculator(va, null);\n do {\n const indf = fc.t!.indexV(va);\n const cwi = cw(indf);\n const ccwi = ccw(indf);\n if (fc.t!.vertices[cwi] === c1 || fc.t!.vertices[cwi] === c2) {\n fc.t!.constraints[ccwi] = true;\n fc.t!.constraints[cwi] = false;\n } else {\n fc.t!.constraints[ccwi] = false;\n fc.t!.constraints[cwi] = true;\n }\n } while (fc.next());\n }\n }\n\n clearConstraintsIncident(v: Vertex) {\n const ec = new EdgeCirculator(v, null);\n if (ec.valid) {\n do {\n const t = ec.t!;\n const indf = ec.ri;\n t.constraints[indf] = false;\n if (this.tds.dimension === 2) t.neighbours[indf]!.constraints[this.tds.mirrorIndex(t, indf)] = false;\n } while (ec.next());\n }\n }\n\n insertc(p: Point, loc: Triangle | null, lt: LocateType, li: number): Vertex {\n if (this.tds.vertices.length === 1) {\n return this.insertFirst(p);\n } else if (this.tds.vertices.length === 2) {\n if (lt === LocateType.VERTEX) return this.tds.finiteVertex;\n else return this.insertSecond(p);\n }\n switch (lt) {\n case LocateType.VERTEX: {\n return loc!.vertices[li]!;\n }\n case LocateType.OUTSIDE_AFFINE_HULL: {\n return this.insertOutsideAffineHull(p);\n }\n case LocateType.OUTSIDE_CONVEX_HULL: {\n return this.insertOutsideConvexHull(p, loc!);\n }\n case LocateType.EDGE: {\n return this.insertInEdge(p, loc!, li);\n }\n case LocateType.FACE: {\n return this.insertInFace(p, loc!);\n }\n }\n throw new Error(\"qwe\");\n return new Vertex();\n }\n\n insertInEdge(p: Point, loc: Triangle, li: number): Vertex {\n const v = this.tds.insertInEdge(loc, li);\n v.point = p;\n return v;\n }\n\n insertInFace(p: Point, loc: Triangle): Vertex {\n const v = this.tds.insertInFace(loc);\n v.point = p;\n return v;\n }\n\n insertFirst(p: Point): Vertex {\n const v = this.tds.insertDimUp();\n v.point = p;\n return v;\n }\n\n insertSecond(p: Point): Vertex {\n const v = this.tds.insertDimUp(this.tds._infinite, true);\n v.point = p;\n return v;\n }\n\n insertOutsideAffineHull(p: Point): Vertex {\n let conform = false;\n if (this.tds.dimension === 1) {\n const t = this.tds.finiteEdge.first!;\n const orient = orientation(t.vertices[0]!.point!, t.vertices[1]!.point!, p);\n conform = orient === Sign.COUNTERCLOCKWISE;\n }\n const v = this.tds.insertDimUp(this.tds._infinite, conform);\n v.point = p;\n return v;\n }\n\n insertOutsideConvexHull(p: Point, t: Triangle): Vertex {\n let v: Vertex;\n if (this.tds.dimension === 1) {\n throw new Error(\"sdfasdasd\");\n } else {\n v = this.insertOutsideConvexHull2(p, t);\n }\n v.point = p;\n return v;\n }\n\n insertOutsideConvexHull2(p: Point, t: Triangle): Vertex {\n let li = t.indexV(this.tds._infinite);\n const ccwlist: Triangle[] = [];\n const cwlist: Triangle[] = [];\n let fc = new FaceCirculator(this.tds._infinite, t);\n let done = false;\n while (!done) {\n fc.prev();\n li = fc.t!.indexV(this.tds._infinite);\n const q = fc.t!.vertices[ccw(li)]!.point!;\n const r = fc.t!.vertices[cw(li)]!.point!;\n if (orientation(p, q, r) === Sign.LEFT_TURN) ccwlist.push(fc.t!);\n else done = true;\n }\n fc = new FaceCirculator(this.tds._infinite, t);\n done = false;\n while (!done) {\n fc.next();\n li = fc.t!.indexV(this.tds._infinite);\n const q = fc.t!.vertices[ccw(li)]!.point!;\n const r = fc.t!.vertices[cw(li)]!.point!;\n if (orientation(p, q, r) === Sign.LEFT_TURN) cwlist.push(fc.t!);\n else done = true;\n }\n const v = this.tds.insertInFace(t);\n v.point = p;\n let th;\n while (ccwlist.length > 0) {\n th = ccwlist[0];\n li = ccw(th.indexV(this.tds._infinite));\n this.tds.flip(th, li);\n ccwlist.shift();\n }\n while (cwlist.length > 0) {\n th = cwlist[0];\n li = cw(th.indexV(this.tds._infinite));\n this.tds.flip(th, li);\n cwlist.shift();\n }\n fc = new FaceCirculator(v, null);\n while (!fc.t!.isInfinite()) fc.next();\n this.tds._infinite.triangle = fc.t!;\n return v;\n }\n\n locate(p: Point, start: Triangle | null) {\n let lt = 0;\n let li = 0;\n if (this.tds.dimension < 0) {\n lt = LocateType.OUTSIDE_AFFINE_HULL;\n li = 4;\n return { loc: null, lt, li };\n } else if (this.tds.dimension === 0) {\n if (xyEqual(p, this.tds.finiteVertex.triangle!.vertices[0]!.point!)) {\n lt = LocateType.VERTEX;\n } else {\n lt = LocateType.OUTSIDE_AFFINE_HULL;\n }\n li = 4;\n return { loc: null, lt, li };\n } else if (this.tds.dimension === 1) {\n return this.marchLocate1D(p);\n }\n if (start === null) {\n const t = this.tds._infinite.triangle!;\n start = t.neighbours[t.indexV(this.tds._infinite)]!;\n } else if (start.isInfinite()) {\n start = start.neighbours[start.indexV(this.tds._infinite)]!;\n }\n return this.marchLocate2D(start, p);\n }\n\n marchLocate1D(p: Point) {\n const ff = this.tds._infinite.triangle!;\n const iv = ff.indexV(this.tds._infinite);\n const t = ff.neighbours[iv]!;\n const pqt = orientation(t.vertices[0]!.point!, t.vertices[1]!.point!, p);\n if (pqt === Sign.RIGHT_TURN || pqt === Sign.LEFT_TURN) {\n return { loc: new Triangle(), lt: LocateType.OUTSIDE_AFFINE_HULL, li: 4 };\n }\n const i = t.indexT(ff);\n if (collinearBetween(p, t.vertices[1 - i]!.point!, t.vertices[i]!.point!))\n return { loc: ff, lt: LocateType.OUTSIDE_CONVEX_HULL, li: iv };\n\n if (xyEqual(p, t.vertices[1 - i]!.point!)) return { loc: t, lt: LocateType.VERTEX, li: 1 - i };\n throw new Error(\"sdfsdf\");\n }\n\n marchLocate2D(c: Triangle, p: Point) {\n let prev = null;\n let first = true;\n let lt: LocateType | undefined;\n let li: number | undefined;\n while (true) {\n if (c.isInfinite()) {\n return { loc: c, lt: LocateType.OUTSIDE_CONVEX_HULL, li: c.indexV(this.tds._infinite) };\n }\n const leftFirst = 0; // Math.round(Math.random());\n const p0 = c.vertices[0]!.point!;\n const p1 = c.vertices[1]!.point!;\n const p2 = c.vertices[2]!.point!;\n let o0: Sign;\n let o1: Sign;\n let o2: Sign;\n if (first) {\n prev = c;\n first = false;\n o0 = orientation(p0, p1, p);\n if (o0 === Sign.NEGATIVE) {\n c = c.neighbours[2]!;\n continue;\n }\n o1 = orientation(p1, p2, p);\n if (o1 === Sign.NEGATIVE) {\n c = c.neighbours[0]!;\n continue;\n }\n o2 = orientation(p2, p0, p);\n if (o2 === Sign.NEGATIVE) {\n c = c.neighbours[1]!;\n continue;\n }\n } else if (leftFirst) {\n if (c.neighbours[0]! === prev) {\n prev = c;\n o0 = orientation(p0, p1, p);\n if (o0 === Sign.NEGATIVE) {\n c = c.neighbours[2]!;\n continue;\n }\n o2 = orientation(p2, p0, p);\n if (o2 === Sign.NEGATIVE) {\n c = c.neighbours[1]!;\n continue;\n }\n o1 = Sign.POSITIVE;\n } else if (c.neighbours[1]! === prev) {\n prev = c;\n o1 = orientation(p1, p2, p);\n if (o1 === Sign.NEGATIVE) {\n c = c.neighbours[0]!;\n continue;\n }\n o0 = orientation(p0, p1, p);\n if (o0 === Sign.NEGATIVE) {\n c = c.neighbours[2]!;\n continue;\n }\n o2 = Sign.POSITIVE;\n } else {\n prev = c;\n o2 = orientation(p2, p0, p);\n if (o2 === Sign.NEGATIVE) {\n c = c.neighbours[1]!;\n continue;\n }\n o1 = orientation(p1, p2, p);\n if (o1 === Sign.NEGATIVE) {\n c = c.neighbours[0]!;\n continue;\n }\n o0 = Sign.POSITIVE;\n }\n } else {\n if (c.neighbours[0] === prev) {\n prev = c;\n o2 = orientation(p2, p0, p);\n if (o2 === Sign.NEGATIVE) {\n c = c.neighbours[1]!;\n continue;\n }\n o0 = orientation(p0, p1, p);\n if (o0 === Sign.NEGATIVE) {\n c = c.neighbours[2]!;\n continue;\n }\n o1 = Sign.POSITIVE;\n } else if (c.neighbours[1] === prev) {\n prev = c;\n o0 = orientation(p0, p1, p);\n if (o0 === Sign.NEGATIVE) {\n c = c.neighbours[2]!;\n continue;\n }\n o1 = orientation(p1, p2, p);\n if (o1 === Sign.NEGATIVE) {\n c = c.neighbours[0]!;\n continue;\n }\n o2 = Sign.POSITIVE;\n } else {\n prev = c;\n o1 = orientation(p1, p2, p);\n if (o1 === Sign.NEGATIVE) {\n c = c.neighbours[0]!;\n continue;\n }\n o2 = orientation(p2, p0, p);\n if (o2 === Sign.NEGATIVE) {\n c = c.neighbours[1]!;\n continue;\n }\n o0 = Sign.POSITIVE;\n }\n }\n const sum =\n (o0 === Sign.COLLINEAR ? 1 : 0) + (o1 === Sign.COLLINEAR ? 1 : 0) + (o2 === Sign.COLLINEAR ? 1 : 0);\n switch (sum) {\n case 0: {\n lt = LocateType.FACE;\n li = 4;\n break;\n }\n case 1: {\n lt = LocateType.EDGE;\n li = o0 === Sign.COLLINEAR ? 2 : o1 === Sign.COLLINEAR ? 0 : 1;\n break;\n }\n case 2: {\n lt = LocateType.VERTEX;\n li = o0 !== Sign.COLLINEAR ? 2 : o1 !== Sign.COLLINEAR ? 0 : 1;\n break;\n }\n }\n if (lt === undefined || li === undefined) throw new Error(\"ert\");\n return { loc: c, lt, li };\n }\n }\n\n iLocate(p: Point, start: Triangle | null) {\n if (this.tds.dimension < 2) return start;\n if (start === null) {\n const t = this.tds._infinite.triangle!;\n start = t.neighbours[t.indexV(this.tds._infinite)];\n } else if (start.isInfinite()) {\n start = start.neighbours[start.indexV(this.tds._infinite)];\n }\n let prev = null;\n let c = start!;\n let first = true;\n let nTurns = 2500;\n while (true) {\n if (!nTurns--) return c;\n if (c.isInfinite()) return c;\n const p0 = c.vertices[0]!.point!;\n const p1 = c.vertices[1]!.point!;\n const p2 = c.vertices[2]!.point!;\n if (first) {\n prev = c;\n first = false;\n if (hasInexactNegativeOrientation(p0, p1, p)) {\n c = c.neighbours[2]!;\n continue;\n }\n if (hasInexactNegativeOrientation(p1, p2, p)) {\n c = c.neighbours[0]!;\n continue;\n }\n if (hasInexactNegativeOrientation(p2, p0, p)) {\n c = c.neighbours[1]!;\n continue;\n }\n } else {\n if (c.neighbours[0] === prev) {\n prev = c;\n if (hasInexactNegativeOrientation(p0, p1, p)) {\n c = c.neighbours[2]!;\n continue;\n }\n if (hasInexactNegativeOrientation(p2, p0, p)) {\n c = c.neighbours[1]!;\n continue;\n }\n } else if (c.neighbours[1] === prev) {\n prev = c;\n if (hasInexactNegativeOrientation(p0, p1, p)) {\n c = c.neighbours[2]!;\n continue;\n }\n if (hasInexactNegativeOrientation(p1, p2, p)) {\n c = c.neighbours[0]!;\n continue;\n }\n } else {\n prev = c;\n if (hasInexactNegativeOrientation(p2, p0, p)) {\n c = c.neighbours[1]!;\n continue;\n }\n if (hasInexactNegativeOrientation(p1, p2, p)) {\n c = c.neighbours[0]!;\n continue;\n }\n }\n }\n break;\n }\n return c;\n }\n}\n","import mod from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/ts-loader/index.js??ref--12-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./draw.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/ts-loader/index.js??ref--12-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./draw.vue?vue&type=script&lang=ts&\"","import { GlobalPoint } from \"@/game/geom\";\nimport { GridLayer } from \"@/game/layers/grid\";\nimport { Layer } from \"@/game/layers/layer\";\nimport { Asset } from \"@/game/shapes/asset\";\nimport { Shape } from \"@/game/shapes/shape\";\nimport { gameStore } from \"@/game/store\";\nimport { l2gx, l2gy, l2gz } from \"@/game/units\";\n\nclass LayerManager {\n layers: Layer[] = [];\n width = window.innerWidth;\n height = window.innerHeight;\n\n UUIDMap: Map = new Map();\n\n // Refresh interval and redraw setter.\n interval = 30;\n\n constructor() {\n requestAnimationFrame(this.drawLoop);\n }\n\n reset() {\n this.layers = [];\n this.UUIDMap = new Map();\n }\n\n drawLoop = () => {\n for (let i = this.layers.length - 1; i >= 0; i--) {\n this.layers[i].draw();\n }\n requestAnimationFrame(this.drawLoop);\n };\n\n setWidth(width: number): void {\n this.width = width;\n for (const layer of this.layers) {\n layer.canvas.width = width;\n layer.width = width;\n }\n }\n\n setHeight(height: number): void {\n this.height = height;\n for (const layer of this.layers) {\n layer.canvas.height = height;\n layer.height = height;\n }\n }\n\n addLayer(layer: Layer): void {\n this.layers.push(layer);\n if (!gameStore.IS_DM && !layer.playerEditable) return;\n if (layer.selectable) gameStore.addLayer(layer.name);\n }\n\n hasLayer(name: string): boolean {\n return this.layers.some(l => l.name === name);\n }\n\n getLayer(name?: string) {\n name = name === undefined ? gameStore.selectedLayer : name;\n for (const layer of this.layers) {\n if (layer.name === name) return layer;\n }\n }\n\n selectLayer(name: string, sync: boolean = true): void {\n let found = false;\n for (const layer of this.layers) {\n if (!layer.selectable) continue;\n if (found && layer.name !== \"fow\") layer.ctx.globalAlpha = 0.3;\n else layer.ctx.globalAlpha = 1.0;\n\n if (name === layer.name) {\n gameStore.selectLayer({ name, sync });\n found = true;\n }\n\n layer.clearSelection();\n layer.invalidate(true);\n }\n }\n\n getGridLayer(): GridLayer | undefined {\n return this.getLayer(\"grid\");\n }\n\n hasSelection() {\n const selection = this.getSelection();\n return selection !== undefined && selection.length > 0;\n }\n\n // THIS INCLUDES POTENTIALLY THE SelectTool.SelectionHelper !!!\n getSelection() {\n const layer = this.getLayer();\n if (layer === undefined) return undefined;\n return layer.selection;\n }\n\n invalidate(): void {\n for (let i = this.layers.length - 1; i >= 0; i--) {\n this.layers[i].invalidate(true);\n }\n }\n\n invalidateLight() {\n for (let i = this.layers.length - 1; i >= 0; i--)\n if (this.layers[i].isVisionLayer) this.layers[i].invalidate(true);\n }\n\n dropAsset(event: DragEvent) {\n const layer = this.getLayer();\n if (layer === undefined || event === null || event.dataTransfer === null) return;\n const image = document.createElement(\"img\");\n image.src = event.dataTransfer.getData(\"text/plain\");\n const asset = new Asset(\n image,\n new GlobalPoint(l2gx(event.clientX), l2gy(event.clientY)),\n l2gz(image.width),\n l2gz(image.height),\n );\n asset.src = new URL(image.src).pathname;\n\n if (gameStore.useGrid) {\n const gs = gameStore.gridSize;\n asset.refPoint = new GlobalPoint(\n Math.round(asset.refPoint.x / gs) * gs,\n Math.round(asset.refPoint.y / gs) * gs,\n );\n asset.w = Math.max(Math.round(asset.w / gs) * gs, gs);\n asset.h = Math.max(Math.round(asset.h / gs) * gs, gs);\n }\n\n layer.addShape(asset, true);\n }\n}\n\nexport const layerManager = new LayerManager();\n(window).lm = layerManager;\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/ts-loader/index.js??ref--12-2!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./initiative.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/ts-loader/index.js??ref--12-2!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./initiative.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./createtoken_modal.vue?vue&type=template&id=73816298&scoped=true&\"\nimport script from \"./createtoken_modal.vue?vue&type=script&lang=ts&\"\nexport * from \"./createtoken_modal.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./createtoken_modal.vue?vue&type=style&index=0&id=73816298&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"73816298\",\n null\n \n)\n\ncomponent.options.__file = \"createtoken_modal.vue\"\nexport default component.exports","import { BoundingRect } from \"@/game/shapes/boundingrect\";\n\nexport class BoundingNode {\n bbox: BoundingRect;\n nPrimitives: number;\n children: BoundingNode[] = [];\n constructor(nPrimitives: number, bbox: BoundingRect) {\n this.nPrimitives = nPrimitives;\n this.bbox = bbox;\n }\n}\n\nexport class LeafNode extends BoundingNode {\n firstPrimOffset: number;\n constructor(first: number, n: number, bbox: BoundingRect) {\n super(n, bbox);\n this.firstPrimOffset = first;\n }\n}\n\nexport class InteriorNode extends BoundingNode {\n dimension: number;\n constructor(dimension: number, c1: BoundingNode, c2: BoundingNode) {\n super(0, c1.bbox.union(c2.bbox));\n this.dimension = dimension;\n this.children.push(c1);\n this.children.push(c2);\n }\n}\n","import mod from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/ts-loader/index.js??ref--12-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./createtoken_modal.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/ts-loader/index.js??ref--12-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./createtoken_modal.vue?vue&type=script&lang=ts&\"","import Tools from \"@/game/ui/tools/tools.vue\";\n\nimport { getRef, uuidv4 } from \"@/core/utils\";\nimport { socket } from \"@/game/api/socket\";\nimport { sendClientOptions } from \"@/game/api/utils\";\nimport { ServerAura } from '@/game/comm/types/shapes';\nimport { EventBus } from \"@/game/event-bus\";\nimport { Vector } from \"@/game/geom\";\nimport { layerManager } from \"@/game/layers/manager\";\nimport { createShapeFromDict } from \"@/game/shapes/utils\";\nimport { gameStore } from \"@/game/store\";\nimport { calculateDelta } from \"@/game/ui/tools/utils\";\n\nexport function onKeyUp(event: KeyboardEvent) {\n if (event.target instanceof HTMLInputElement || event.target instanceof HTMLTextAreaElement) {\n } else {\n if (event.key === \"Delete\" || event.key === \"Del\" || event.key === \"Backspace\") {\n if (layerManager.getLayer === undefined) {\n console.log(\"No active layer selected for delete operation\");\n return;\n }\n const l = layerManager.getLayer()!;\n for (let i = l.selection.length - 1; i >= 0; i--) {\n const sel = l.selection[i];\n if ((getRef(\"tools\").$refs.selectTool).selectionHelper.uuid === sel.uuid) {\n l.selection.splice(i, 1);\n continue;\n }\n l.removeShape(sel, true, false);\n EventBus.$emit(\"SelectionInfo.Shape.Set\", null);\n EventBus.$emit(\"Initiative.Remove\", sel.uuid);\n }\n }\n }\n}\n\nexport function onKeyDown(event: KeyboardEvent) {\n if (event.target instanceof HTMLInputElement || event.target instanceof HTMLTextAreaElement) {\n if (event.keyCode === 65 && event.ctrlKey) event.target!.select();\n } else {\n if (event.keyCode >= 37 && event.keyCode <= 40) {\n // todo: this should already be rounded\n const gridSize = Math.round(gameStore.gridSize);\n let offsetX = gridSize * (event.keyCode % 2);\n let offsetY = gridSize * (event.keyCode % 2 ? 0 : 1);\n if (layerManager.hasSelection()) {\n const selection = layerManager.getSelection()!;\n offsetX *= event.keyCode <= 38 ? -1 : 1;\n offsetY *= event.keyCode <= 38 ? -1 : 1;\n let delta = new Vector(offsetX, offsetY);\n if (!event.shiftKey || !gameStore.IS_DM) {\n // First check for collisions. Using the smooth wall slide collision check used on mouse move is overkill here.\n for (const sel of selection) {\n if ((getRef(\"tools\").$refs.selectTool).selectionHelper.uuid === sel.uuid) continue;\n delta = calculateDelta(delta, sel);\n }\n }\n for (const sel of selection) {\n if ((getRef(\"tools\").$refs.selectTool).selectionHelper.uuid === sel.uuid) continue;\n sel.refPoint = sel.refPoint.add(delta);\n // todo: Fix again\n // if (sel.refPoint.x % gridSize !== 0 || sel.refPoint.y % gridSize !== 0) sel.snapToGrid();\n socket.emit(\"Shape.Position.Update\", { shape: sel.asDict(), redraw: true, temporary: false });\n }\n gameStore.recalculateVision();\n layerManager.getLayer()!.invalidate(false);\n } else {\n // The pan offsets should be in the opposite direction to give the correct feel.\n gameStore.increasePanX(offsetX * (event.keyCode <= 38 ? 1 : -1));\n gameStore.increasePanY(offsetY * (event.keyCode <= 38 ? 1 : -1));\n layerManager.invalidate();\n sendClientOptions();\n }\n } else if (event.keyCode === 68) {\n const layer = layerManager.getLayer();\n if (layer) {\n layer.clearSelection();\n layer.invalidate(true);\n }\n } else if (event.key === \"u\" && event.ctrlKey) {\n event.preventDefault();\n event.stopPropagation();\n gameStore.toggleUI();\n } else if (event.key === \"c\" && event.ctrlKey) {\n const layer = layerManager.getLayer();\n if (!layer) return;\n if (!layer.selection) return;\n const clipboard = [];\n for (const shape of layer.selection) {\n if ((getRef(\"tools\").$refs.selectTool).selectionHelper.uuid === shape.uuid) continue;\n clipboard.push(shape.asDict());\n }\n gameStore.setClipboard(clipboard);\n } else if (event.key === \"v\" && event.ctrlKey) {\n const layer = layerManager.getLayer();\n if (!layer) return;\n if (!gameStore.clipboard) return;\n layer.selection = [];\n for (const clip of gameStore.clipboard) {\n clip.x += 10;\n clip.y += 10;\n clip.uuid = uuidv4();\n const oldTrackers = clip.trackers;\n clip.trackers = [];\n for (const tracker of oldTrackers) {\n const newTracker: Tracker = {\n ...tracker,\n uuid: uuidv4()\n }\n clip.trackers.push(newTracker);\n }\n const oldAuras = clip.auras;\n clip.auras = [];\n for (const aura of oldAuras) {\n const newAura: ServerAura = {\n ...aura,\n uuid: uuidv4()\n }\n clip.auras.push(newAura);\n }\n const shape = createShapeFromDict(clip);\n if (shape === undefined) continue;\n layer.addShape(shape, true);\n layer.selection.push(shape);\n }\n if (layer.selection.length === 1) EventBus.$emit(\"SelectionInfo.Shape.Set\", layer.selection[0]);\n else EventBus.$emit(\"SelectionInfo.Shape.Set\", null);\n layer.invalidate(false);\n }\n }\n}\n","import mod from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./manager.vue?vue&type=style&index=0&lang=css&\"; export default mod; export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./manager.vue?vue&type=style&index=0&lang=css&\"","import mod from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./shapecontext.vue?vue&type=style&index=0&id=759e5a8a&scoped=true&lang=css&\"; export default mod; export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./shapecontext.vue?vue&type=style&index=0&id=759e5a8a&scoped=true&lang=css&\"","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nimport Vue from \"vue\";\n\nimport ShapeContext from \"@/game/ui/selection/shapecontext.vue\";\nimport CreateTokenModal from \"@/game/ui/tools/createtoken_modal.vue\";\nimport DrawTool from \"@/game/ui/tools/draw.vue\";\nimport FilterTool from \"@/game/ui/tools/filter.vue\";\nimport MapTool from \"@/game/ui/tools/map.vue\";\nimport PanTool from \"@/game/ui/tools/pan\";\nimport SelectTool from \"@/game/ui/tools/select.vue\";\nimport VisionTool from \"@/game/ui/tools/vision.vue\";\n\nimport { layerManager } from \"@/game/layers/manager\";\nimport { gameManager } from \"@/game/manager\";\nimport { gameStore } from \"@/game/store\";\nimport { RulerTool } from \"@/game/ui/tools/ruler\";\nimport { l2g } from \"@/game/units\";\nimport { getMouse } from \"@/game/utils\";\nimport Component from \"vue-class-component\";\n\n@Component({\n components: {\n \"select-tool\": SelectTool,\n \"pan-tool\": PanTool,\n \"draw-tool\": DrawTool,\n \"ruler-tool\": RulerTool,\n \"map-tool\": MapTool,\n \"filter-tool\": FilterTool,\n \"vision-tool\": VisionTool,\n \"shape-menu\": ShapeContext,\n \"createtoken-dialog\": CreateTokenModal,\n },\n watch: {\n currentTool(newValue, oldValue) {\n this.$emit(\"tools-select-change\", newValue, oldValue);\n },\n },\n})\nexport default class Tools extends Vue {\n $refs!: {\n selectTool: InstanceType;\n };\n\n currentTool = \"Select\";\n tools = [\"Select\", \"Pan\", \"Draw\", \"Ruler\", \"Map\", \"Filter\", \"Vision\"];\n dmTools = [\"Map\"];\n\n get IS_DM(): boolean {\n return gameStore.IS_DM;\n }\n\n get currentToolComponent(): string {\n return `${this.currentTool.toLowerCase()}-tool`;\n }\n\n get visibleTools(): string[] {\n return this.tools.filter(t => (!this.dmTools.includes(t) || this.IS_DM));\n }\n\n toolVisible(tool: string): boolean {\n if (tool === 'Filter') {\n return Object.keys(gameStore.labels).length > 0;\n } else if (tool === 'Vision') {\n return gameStore.ownedtokens.length > 1;\n }\n return true;\n }\n\n mousedown(event: MouseEvent) {\n if ((event.target).tagName !== \"CANVAS\") return;\n\n let targetTool = this.currentTool;\n if (event.button === 1) {\n targetTool = \"Pan\";\n } else if (event.button !== 0) {\n return;\n }\n\n this.$emit(\"mousedown\", event, targetTool);\n }\n mouseup(event: MouseEvent) {\n if ((event.target).tagName !== \"CANVAS\") return;\n\n let targetTool = this.currentTool;\n if (event.button === 1) {\n targetTool = \"Pan\";\n } else if (event.button !== 0) {\n return;\n }\n\n this.$emit(\"mouseup\", event, targetTool);\n }\n mousemove(event: MouseEvent) {\n if ((event.target).tagName !== \"CANVAS\") return;\n\n let targetTool = this.currentTool;\n if ((event.buttons & 4) !== 0) {\n targetTool = \"Pan\";\n } else if ((event.button & 1) > 1) {\n return;\n }\n\n this.$emit(\"mousemove\", event, targetTool);\n\n // Annotation hover\n let found = false;\n for (const uuid of gameStore.annotations) {\n if (layerManager.UUIDMap.has(uuid) && layerManager.hasLayer(\"draw\")) {\n const shape = layerManager.UUIDMap.get(uuid)!;\n if (shape.contains(l2g(getMouse(event)))) {\n found = true;\n gameManager.annotationManager.setActiveText(shape.annotation);\n }\n }\n }\n if (!found && gameManager.annotationManager.shown) {\n gameManager.annotationManager.setActiveText(\"\");\n }\n }\n mouseleave(event: MouseEvent) {\n // When leaving the window while a mouse is pressed down, act as if it was released\n if ((event.buttons & 1) !== 0) {\n this.$emit(\"mouseup\", event, this.currentTool);\n }\n }\n contextmenu(event: MouseEvent) {\n if ((event.target).tagName !== \"CANVAS\") return;\n if (event.button !== 2 || (event.target).tagName !== \"CANVAS\") return;\n this.$emit(\"contextmenu\", event, this.currentTool);\n }\n}\n","import mod from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/ts-loader/index.js??ref--12-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./selection_info.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/ts-loader/index.js??ref--12-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./selection_info.vue?vue&type=script&lang=ts&\"","import mod from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/ts-loader/index.js??ref--12-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./modal.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/ts-loader/index.js??ref--12-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./modal.vue?vue&type=script&lang=ts&\"","import mod from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./labels.vue?vue&type=style&index=0&id=e477c214&scoped=true&lang=css&\"; export default mod; export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./labels.vue?vue&type=style&index=0&id=e477c214&scoped=true&lang=css&\"","import mod from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./contextmenu.vue?vue&type=style&index=0&lang=css&\"; export default mod; export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./contextmenu.vue?vue&type=style&index=0&lang=css&\"","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{attrs:{\"id\":\"menuContainer\"}},[_c('div',{ref:\"rm\",style:({\n left: _vm.visible.settings ? '200px' : '0',\n top: _vm.visible.locations ? '100px' : '0'\n }),attrs:{\"id\":\"radialmenu\"}},[_c('div',{staticClass:\"rm-wrapper\"},[_c('div',{staticClass:\"rm-toggler\"},[_c('ul',{staticClass:\"rm-list\",class:{ 'rm-list-dm': _vm.IS_DM }},[(_vm.IS_DM)?_c('li',{staticClass:\"rm-item\",attrs:{\"id\":\"rm-locations\"},on:{\"click\":function($event){_vm.visible.locations = !_vm.visible.locations}}},[_vm._m(0)]):_vm._e(),_c('li',{staticClass:\"rm-item\",attrs:{\"id\":\"rm-settings\"},on:{\"click\":function($event){_vm.visible.settings = !_vm.visible.settings}}},[_vm._m(1)])])]),_vm._m(2)])]),_c('transition',{attrs:{\"name\":\"settings\"},on:{\"enter\":function($event){_vm.$refs.rm.style.transition = 'left 500ms'}}},[(_vm.visible.settings)?_c('div',{ref:\"settings\",attrs:{\"id\":\"menu\"},on:{\"click\":_vm.settingsClick}},[_c('div',{staticStyle:{\"width\":\"200px\",\"height\":\"90%\",\"overflow-y\":\"auto\",\"overflow-x\":\"hidden\"}},[(_vm.IS_DM)?[_c('button',{staticClass:\"menu-accordion\"},[_vm._v(\"Assets\")]),_c('div',{staticClass:\"menu-accordion-panel\"},[_c('a',{staticClass:\"actionButton\",attrs:{\"href\":\"/assets\",\"target\":\"blank\",\"title\":\"Open asset manager\"}},[_c('i',{staticClass:\"fas fa-external-link-alt\"})]),_c('div',{staticClass:\"directory\",attrs:{\"id\":\"menu-tokens\"}},[_c('asset-node',{attrs:{\"asset\":_vm.assets}}),(!_vm.assets)?_c('div',[_vm._v(\"No assets\")]):_vm._e()],1)]),_c('button',{staticClass:\"menu-accordion\"},[_vm._v(\"Notes\")]),_c('div',{staticClass:\"menu-accordion-panel\"},[_c('div',{staticClass:\"menu-accordion-subpanel\",attrs:{\"id\":\"menu-notes\"}},[_c('a',{staticClass:\"actionButton\",on:{\"click\":_vm.createNote}},[_c('i',{staticClass:\"far fa-plus-square\"})]),_vm._l((_vm.notes),function(note){return _c('div',{key:note.uuid,staticStyle:{\"cursor\":\"pointer\"},on:{\"click\":function($event){_vm.openNote(note)}}},[_vm._v(_vm._s(note.title || \"[?]\"))])}),(!_vm.notes.length)?_c('div',[_vm._v(\"No notes\")]):_vm._e()],2)]),_c('button',{staticClass:\"menu-accordion\"},[_vm._v(\"DM Options\")]),_c('div',{staticClass:\"menu-accordion-panel\"},[_c('div',{staticClass:\"menu-accordion-subpanel\"},[_c('label',{attrs:{\"for\":\"fakePlayerInput\"}},[_vm._v(\"Fake player:\")]),_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.fakePlayer),expression:\"fakePlayer\"}],attrs:{\"id\":\"fakePlayerInput\",\"type\":\"checkbox\",\"checked\":\"checked\"},domProps:{\"checked\":Array.isArray(_vm.fakePlayer)?_vm._i(_vm.fakePlayer,null)>-1:(_vm.fakePlayer)},on:{\"change\":function($event){var $$a=_vm.fakePlayer,$$el=$event.target,$$c=$$el.checked?(true):(false);if(Array.isArray($$a)){var $$v=null,$$i=_vm._i($$a,$$v);if($$el.checked){$$i<0&&(_vm.fakePlayer=$$a.concat([$$v]))}else{$$i>-1&&(_vm.fakePlayer=$$a.slice(0,$$i).concat($$a.slice($$i+1)))}}else{_vm.fakePlayer=$$c}}}}),_c('label',{attrs:{\"for\":\"useGridInput\"}},[_vm._v(\"Use grid:\")]),_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.useGrid),expression:\"useGrid\"}],attrs:{\"id\":\"useGridInput\",\"type\":\"checkbox\",\"checked\":\"checked\"},domProps:{\"checked\":Array.isArray(_vm.useGrid)?_vm._i(_vm.useGrid,null)>-1:(_vm.useGrid)},on:{\"change\":function($event){var $$a=_vm.useGrid,$$el=$event.target,$$c=$$el.checked?(true):(false);if(Array.isArray($$a)){var $$v=null,$$i=_vm._i($$a,$$v);if($$el.checked){$$i<0&&(_vm.useGrid=$$a.concat([$$v]))}else{$$i>-1&&(_vm.useGrid=$$a.slice(0,$$i).concat($$a.slice($$i+1)))}}else{_vm.useGrid=$$c}}}}),_c('label',{attrs:{\"for\":\"useFOWInput\"}},[_vm._v(\"Fill entire canvas with FOW:\")]),_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.fullFOW),expression:\"fullFOW\"}],attrs:{\"id\":\"useFOWInput\",\"type\":\"checkbox\"},domProps:{\"checked\":Array.isArray(_vm.fullFOW)?_vm._i(_vm.fullFOW,null)>-1:(_vm.fullFOW)},on:{\"change\":function($event){var $$a=_vm.fullFOW,$$el=$event.target,$$c=$$el.checked?(true):(false);if(Array.isArray($$a)){var $$v=null,$$i=_vm._i($$a,$$v);if($$el.checked){$$i<0&&(_vm.fullFOW=$$a.concat([$$v]))}else{$$i>-1&&(_vm.fullFOW=$$a.slice(0,$$i).concat($$a.slice($$i+1)))}}else{_vm.fullFOW=$$c}}}}),_c('label',{attrs:{\"for\":\"fowOpacity\"}},[_vm._v(\"FOW opacity:\")]),_c('input',{directives:[{name:\"model\",rawName:\"v-model.number\",value:(_vm.fowOpacity),expression:\"fowOpacity\",modifiers:{\"number\":true}}],attrs:{\"id\":\"fowOpacity\",\"type\":\"number\",\"min\":\"0\",\"max\":\"1\",\"step\":\"0.1\"},domProps:{\"value\":(_vm.fowOpacity)},on:{\"input\":function($event){if($event.target.composing){ return; }_vm.fowOpacity=_vm._n($event.target.value)},\"blur\":function($event){_vm.$forceUpdate()}}}),_c('label',{attrs:{\"for\":\"fowLOS\"}},[_vm._v(\"Only show lights in LoS:\")]),_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.fowLOS),expression:\"fowLOS\"}],attrs:{\"id\":\"fowLOS\",\"type\":\"checkbox\"},domProps:{\"checked\":Array.isArray(_vm.fowLOS)?_vm._i(_vm.fowLOS,null)>-1:(_vm.fowLOS)},on:{\"change\":function($event){var $$a=_vm.fowLOS,$$el=$event.target,$$c=$$el.checked?(true):(false);if(Array.isArray($$a)){var $$v=null,$$i=_vm._i($$a,$$v);if($$el.checked){$$i<0&&(_vm.fowLOS=$$a.concat([$$v]))}else{$$i>-1&&(_vm.fowLOS=$$a.slice(0,$$i).concat($$a.slice($$i+1)))}}else{_vm.fowLOS=$$c}}}}),_c('label',{attrs:{\"for\":\"unitSizeInput\"}},[_vm._v(\"Unit Size (in ft.):\")]),_c('input',{directives:[{name:\"model\",rawName:\"v-model.number\",value:(_vm.unitSize),expression:\"unitSize\",modifiers:{\"number\":true}}],attrs:{\"id\":\"unitSizeInput\",\"type\":\"number\"},domProps:{\"value\":(_vm.unitSize)},on:{\"input\":function($event){if($event.target.composing){ return; }_vm.unitSize=_vm._n($event.target.value)},\"blur\":function($event){_vm.$forceUpdate()}}}),_c('label',{attrs:{\"for\":\"gridSizeInput\"}},[_vm._v(\"Grid Size (in pixels):\")]),_c('input',{directives:[{name:\"model\",rawName:\"v-model.number\",value:(_vm.gridSize),expression:\"gridSize\",modifiers:{\"number\":true}}],attrs:{\"id\":\"gridSizeInput\",\"type\":\"number\",\"min\":\"0\"},domProps:{\"value\":(_vm.gridSize)},on:{\"input\":function($event){if($event.target.composing){ return; }_vm.gridSize=_vm._n($event.target.value)},\"blur\":function($event){_vm.$forceUpdate()}}}),_c('label',{attrs:{\"for\":\"visionMode\"}},[_vm._v(\"Vision Mode:\")]),_c('select',{attrs:{\"id\":\"visionMode\"},on:{\"change\":_vm.changeVisionMode}},[_c('option',{domProps:{\"selected\":_vm.$store.state.game.visionMode === 'bvh'}},[_vm._v(\"BVH\")]),_c('option',{domProps:{\"selected\":_vm.$store.state.game.visionMode === 'triangle'}},[_vm._v(\"Triangle\")])]),_c('label',{attrs:{\"for\":\"vmininp\"}},[_vm._v(\"Minimal full vision (ft):\")]),_c('input',{directives:[{name:\"model\",rawName:\"v-model.lazy.number\",value:(_vm.visionRangeMin),expression:\"visionRangeMin\",modifiers:{\"lazy\":true,\"number\":true}}],attrs:{\"id\":\"vmininp\",\"type\":\"number\",\"min\":\"0\"},domProps:{\"value\":(_vm.visionRangeMin)},on:{\"change\":function($event){_vm.visionRangeMin=_vm._n($event.target.value)},\"blur\":function($event){_vm.$forceUpdate()}}}),_c('label',{attrs:{\"for\":\"vmaxinp\"}},[_vm._v(\"Maximal vision (ft):\")]),_c('input',{directives:[{name:\"model\",rawName:\"v-model.lazy.number\",value:(_vm.visionRangeMax),expression:\"visionRangeMax\",modifiers:{\"lazy\":true,\"number\":true}}],attrs:{\"id\":\"vmaxinp\",\"type\":\"number\",\"min\":\"0\"},domProps:{\"value\":(_vm.visionRangeMax)},on:{\"change\":function($event){_vm.visionRangeMax=_vm._n($event.target.value)},\"blur\":function($event){_vm.$forceUpdate()}}}),_c('label',{attrs:{\"for\":\"invitation\"}},[_vm._v(\"Invitation Code:\")]),_c('input',{attrs:{\"id\":\"invitation\",\"type\":\"text\",\"readonly\":\"readonly\"},domProps:{\"value\":_vm.invitationCode}})])])]:_vm._e(),_c('button',{staticClass:\"menu-accordion\"},[_vm._v(\"Client Options\")]),_c('div',{staticClass:\"menu-accordion-panel\"},[_c('div',{staticClass:\"menu-accordion-subpanel\"},[_c('label',{attrs:{\"for\":\"gridColour\"}},[_vm._v(\"Grid Colour:\")]),_c('color-picker',{attrs:{\"id\":\"gridColour\",\"color\":_vm.gridColour},on:{\"update:color\":function($event){_vm.gridColour=$event}}}),_c('label',{attrs:{\"for\":\"fowColour\"}},[_vm._v(\"FOW Colour:\")]),_c('color-picker',{attrs:{\"id\":\"fowColour\",\"color\":_vm.fowColour},on:{\"update:color\":function($event){_vm.fowColour=$event}}}),_c('label',{attrs:{\"for\":\"rulerColour\"}},[_vm._v(\"Ruler Colour:\")]),_c('color-picker',{attrs:{\"id\":\"rulerColour\",\"color\":_vm.rulerColour},on:{\"update:color\":function($event){_vm.rulerColour=$event}}})],1)])],2),_c('router-link',{staticClass:\"menu-accordion\",staticStyle:{\"text-decoration\":\"none\",\"display\":\"inline-block\",\"position\":\"absolute\",\"bottom\":\"0\"},attrs:{\"to\":\"/dashboard\"}},[_vm._v(\"Exit\")])],1):_vm._e()]),_c('transition',{attrs:{\"name\":\"locations\"},on:{\"enter\":function($event){_vm.$refs.rm.style.transition = 'top 500ms'}}},[(_vm.IS_DM && _vm.visible.locations)?_c('div',{attrs:{\"id\":\"locations-menu\"}},[_c('div',[_vm._l((_vm.locations),function(location){return _c('div',{key:location,on:{\"click\":function($event){_vm.changeLocation(location)}}},[_vm._v(_vm._s(location))])}),_c('div',{on:{\"click\":_vm.createLocation}},[_c('i',{staticClass:\"fas fa-plus\"})])],2)]):_vm._e()]),_c('img',{attrs:{\"id\":\"dragImage\"}})],1)}\nvar staticRenderFns = [function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('a',{attrs:{\"href\":\"#\"}},[_c('i',{staticClass:\"far fa-compass\"})])},function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('a',{attrs:{\"href\":\"#\"}},[_c('i',{staticClass:\"fas fa-cog\"})])},function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('span',{staticClass:\"rm-topper\"},[_c('i',{staticClass:\"icon-share-alt\"})])}]\n\nexport { render, staticRenderFns }","export * from \"-!cache-loader?{\\\"cacheDirectory\\\":\\\"node_modules/.cache/vue-loader\\\",\\\"cacheIdentifier\\\":\\\"74f43d04-vue-loader-template\\\"}!../../../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./menu.vue?vue&type=template&id=13f3fb33&scoped=true&\"","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nimport Vue from \"vue\";\nimport Component from \"vue-class-component\";\n\nimport Modal from \"@/core/components/modals/modal.vue\";\n\n@Component({\n components: {\n Modal,\n },\n})\nexport default class Prompt extends Vue {\n $refs!: {\n answer: HTMLElement;\n };\n\n visible = false;\n question = \"\";\n answer = \"\";\n title = \"\";\n\n resolve = (value: string) => {};\n reject = () => {};\n\n submit() {\n this.resolve(this.answer);\n this.close();\n }\n close() {\n this.reject();\n this.visible = false;\n this.question = \"\";\n this.answer = \"\";\n this.title = \"\";\n }\n prompt(question: string, title: string): Promise {\n this.question = question;\n this.title = title;\n this.visible = true;\n this.$nextTick(() => {\n this.$refs.answer.focus();\n });\n return new Promise((resolve, reject) => {\n this.resolve = resolve;\n this.reject = reject;\n });\n }\n}\n","import mod from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./accordion.vue?vue&type=style&index=0&id=0bf2b7ba&scoped=true&lang=css&\"; export default mod; export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./accordion.vue?vue&type=style&index=0&id=0bf2b7ba&scoped=true&lang=css&\"","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_vm._v(_vm._s(_vm.message))])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","export * from \"-!cache-loader?{\\\"cacheDirectory\\\":\\\"node_modules/.cache/vue-loader\\\",\\\"cacheIdentifier\\\":\\\"74f43d04-vue-loader-template\\\"}!../../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./load.vue?vue&type=template&id=ff095222&\"","import mod from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/ts-loader/index.js??ref--12-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./menu.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/ts-loader/index.js??ref--12-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./menu.vue?vue&type=script&lang=ts&\"","import { GlobalPoint, Point, Ray, Vector } from \"@/game/geom\";\nimport { g2lx, g2ly } from \"../units\";\n\nexport class BoundingRect {\n readonly w: number;\n readonly h: number;\n readonly topLeft: GlobalPoint;\n readonly topRight: GlobalPoint;\n readonly botRight: GlobalPoint;\n readonly botLeft: GlobalPoint;\n\n constructor(topleft: GlobalPoint, w: number, h: number) {\n this.w = w;\n this.h = h;\n this.topLeft = topleft;\n this.topRight = new GlobalPoint(topleft.x + w, topleft.y);\n this.botRight = new GlobalPoint(topleft.x + w, topleft.y + h);\n this.botLeft = new GlobalPoint(topleft.x, topleft.y + h);\n }\n\n contains(point: GlobalPoint): boolean {\n return (\n this.topLeft.x <= point.x &&\n this.topRight.x >= point.x &&\n this.topLeft.y <= point.y &&\n this.botLeft.y >= point.y\n );\n }\n\n get points() {\n if (this.w === 0 || this.h === 0) return [[this.topLeft.x, this.topLeft.y]];\n return [\n [this.topLeft.x, this.topLeft.y],\n [this.botLeft.x, this.botLeft.y],\n [this.botRight.x, this.botRight.y],\n [this.topRight.x, this.topRight.y],\n ];\n }\n\n offset(vector: Vector): BoundingRect {\n return new BoundingRect(this.topLeft.add(vector), this.w, this.h);\n }\n\n union(other: BoundingRect): BoundingRect {\n const xmin = Math.min(this.topLeft.x, other.topLeft.x);\n const xmax = Math.max(this.topRight.x, other.topRight.x);\n const ymin = Math.min(this.topLeft.y, other.topLeft.y);\n const ymax = Math.max(this.botLeft.y, other.botLeft.y);\n return new BoundingRect(new GlobalPoint(xmin, ymin), xmax - xmin, ymax - ymin);\n }\n\n getDiagCorner(botright: boolean) {\n return botright ? this.botRight : this.topLeft;\n }\n\n intersectsWith(other: BoundingRect): boolean {\n return !(\n other.topLeft.x > this.topRight.x ||\n other.topRight.x < this.topLeft.x ||\n other.topLeft.y > this.botLeft.y ||\n other.botLeft.y < this.topLeft.y\n );\n }\n\n intersectsWithInner(other: BoundingRect): boolean {\n return !(\n other.topLeft.x >= this.topRight.x ||\n other.topRight.x <= this.topLeft.x ||\n other.topLeft.y >= this.botLeft.y ||\n other.botLeft.y <= this.topLeft.y\n );\n }\n\n intersectP(ray: Ray, invDir: Vector, dirIsNeg: boolean[]) {\n let txmin = invDir.x * (this.getDiagCorner(dirIsNeg[0]).x - ray.origin!.x);\n let txmax = invDir.x * (this.getDiagCorner(!dirIsNeg[0]).x - ray.origin!.x);\n const tymin = invDir.y * (this.getDiagCorner(dirIsNeg[1]).y - ray.origin!.y);\n const tymax = invDir.y * (this.getDiagCorner(!dirIsNeg[1]).y - ray.origin!.y);\n if (txmin > tymax || tymin > txmax) return { hit: false, min: txmin, max: txmax };\n if (tymin > txmin) txmin = tymin;\n if (tymax < txmax) txmax = tymax;\n return { hit: txmin < ray.tMax! && txmax > 0, min: txmin, max: txmax };\n }\n\n center(): GlobalPoint {\n return this.topLeft.add(new Vector(this.w / 2, this.h / 2));\n }\n\n getMaxExtent() {\n return this.w > this.h ? 0 : 1;\n }\n visibleInCanvas(canvas: HTMLCanvasElement): boolean {\n const coreVisible = !(\n g2lx(this.topLeft.x) > canvas.width ||\n g2ly(this.topLeft.y) > canvas.height ||\n g2lx(this.topRight.x) < 0 ||\n g2ly(this.botRight.y) < 0\n );\n if (coreVisible) return true;\n return false;\n }\n}\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{attrs:{\"id\":\"formcontainer\"}},[(_vm.owned || _vm.joined)?_c('form',[_c('fieldset',[_c('legend',{staticClass:\"legend\"},[_vm._v(\"Your sessions\")]),_c('div',{staticClass:\"input\"},[_vm._l((_vm.owned),function(room,i){return _c('router-link',{key:'o-'+i,attrs:{\"to\":'/game/' + room[1] + '/' + room[0]}},[_vm._v(_vm._s(room[0]))])}),_vm._l((_vm.joined),function(room,i){return _c('router-link',{key:'j-'+i,attrs:{\"to\":'/game/' + room[1] + '/' + room[0]}},[_vm._v(_vm._s(room[1])+\"/\"+_vm._s(room[0]))])})],2),(_vm.owned.length === 0)?_c('div',{staticClass:\"input\"},[_vm._v(\"No active sessions\")]):_vm._e()])]):_vm._e(),_vm._m(0),_c('form',{on:{\"submit\":function($event){$event.preventDefault();return _vm.createRoom($event)}}},[_c('fieldset',[(!_vm.owned && !_vm.joined)?_c('legend',{staticClass:\"legend\"},[_vm._v(\"Create a session\")]):_c('div',{staticClass:\"input\"},[_vm._v(\"Create a new session\")]),_c('div',{staticClass:\"input\"},[_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.newSessionName),expression:\"newSessionName\"}],attrs:{\"type\":\"text\",\"name\":\"room_name\",\"placeholder\":\"Session Name\"},domProps:{\"value\":(_vm.newSessionName)},on:{\"input\":function($event){if($event.target.composing){ return; }_vm.newSessionName=$event.target.value}}}),_vm._m(1)]),_vm._m(2)])]),_c('div',{attrs:{\"id\":\"account-options\"}},[_c('form',{on:{\"submit\":function($event){$event.preventDefault();}}},[_c('router-link',{staticClass:\"submit\",attrs:{\"tag\":\"button\",\"title\":\"Account Settings\",\"to\":\"/account\"}},[_c('i',{staticClass:\"fas fa-cog\"})])],1),_c('form',{on:{\"submit\":function($event){$event.preventDefault();}}},[_c('router-link',{staticClass:\"submit\",attrs:{\"tag\":\"button\",\"title\":\"Logout\",\"to\":\"/auth/logout\"}},[_c('i',{staticClass:\"fas fa-sign-out-alt\"})])],1)])])}\nvar staticRenderFns = [function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('h4',[_c('span',[_vm._v(\"OR\")])])},function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('span',[_c('i',{staticClass:\"fab fa-d-and-d\"})])},function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('button',{staticClass:\"submit\",attrs:{\"type\":\"submit\",\"title\":\"Create\"}},[_c('i',{staticClass:\"fas fa-arrow-right\"})])}]\n\nexport { render, staticRenderFns }","export * from \"-!cache-loader?{\\\"cacheDirectory\\\":\\\"node_modules/.cache/vue-loader\\\",\\\"cacheIdentifier\\\":\\\"74f43d04-vue-loader-template\\\"}!../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./main.vue?vue&type=template&id=61eb1455&scoped=true&\"","/*\nThis module defines some Point classes.\nA strong focus is made to ensure that at no time a global and a local point are mixed up with each other.\nAt first glance this adds weird looking hacks as ts does not support nominal typing.\n*/\n\nexport function getPointDistance(p1: Point, p2: Point) {\n const a = p1.x - p2.x;\n const b = p1.y - p2.y;\n return Math.sqrt(a * a + b * b);\n}\n\nexport class Point {\n readonly x: number;\n readonly y: number;\n constructor(x: number, y: number) {\n this.x = x;\n this.y = y;\n }\n static fromArray(point: number[]) {\n return new Point(point[0], point[1]);\n }\n add(vec: Vector) {\n return new Point(this.x + vec.x, this.y + vec.y);\n }\n subtract(other: Point) {\n return new Vector(this.x - other.x, this.y - other.y);\n }\n clone(): Point {\n return new Point(this.x, this.y);\n }\n get(dimension: 0 | 1) {\n if (dimension === 0) return this.x;\n return this.y;\n }\n asArray(): number[] {\n return [this.x, this.y];\n }\n}\nexport class GlobalPoint extends Point {\n // This is to differentiate with LocalPoint, is actually never used\n // We do ! to prevent errors that it never gets initialized\n // tslint:disable-next-line:variable-name\n _GlobalPoint!: string;\n add(vec: Vector): GlobalPoint {\n return super.add(vec);\n }\n subtract(other: GlobalPoint): Vector {\n return super.subtract(other);\n }\n clone(): GlobalPoint {\n return super.clone();\n }\n static fromArray(point: number[]) {\n return new GlobalPoint(point[0], point[1]);\n }\n}\n\nexport class LocalPoint extends Point {\n // This is to differentiate with GlobalPoint, is actually never used\n // We do ! to prevent errors that it never gets initialized\n // tslint:disable-next-line:variable-name\n _LocalPoint!: string;\n add(vec: Vector): LocalPoint {\n return super.add(vec);\n }\n subtract(other: LocalPoint): Vector {\n return super.subtract(other);\n }\n clone(): LocalPoint {\n return super.clone();\n }\n}\n\nexport class Vector {\n readonly x: number;\n readonly y: number;\n constructor(x: number, y: number) {\n this.x = x;\n this.y = y;\n }\n dot(other: Vector): number {\n return this.x * other.x + this.y * other.y;\n }\n inverse(): Vector {\n return new Vector(this.x === 0 ? 0 : 1 / this.x, this.y === 0 ? 0 : 1 / this.y);\n }\n length(): number {\n return Math.sqrt(Math.pow(this.x, 2) + Math.pow(this.y, 2));\n }\n normalize(): Vector {\n const l = this.length();\n return new Vector(this.x / l, this.y / l);\n }\n reverse(): Vector {\n return new Vector(-this.x, -this.y);\n }\n multiply(scale: number): Vector {\n return new Vector(this.x * scale, this.y * scale);\n }\n angle(): number {\n return (Math.atan2(this.y, this.x) * 180) / Math.PI;\n }\n}\n\nexport class Ray {\n readonly direction: Vector;\n readonly origin: T;\n tMax: number;\n constructor(origin: T, direction: Vector, tMax?: number) {\n this.direction = direction;\n this.origin = origin;\n if (tMax === undefined) tMax = Infinity;\n this.tMax = tMax;\n }\n static fromPoints(p1: T, p2: T): Ray {\n const vec = new Vector(p2.x - p1.x, p2.y - p1.y);\n let maxT;\n if (Math.abs(vec.x) > 0.01) maxT = (p2.x - p1.x) / vec.x;\n else maxT = (p2.y - p1.y) / vec.y;\n return new Ray(p1, vec, maxT);\n }\n get(t: number): T {\n return new Point(this.origin.x + t * this.direction.x, this.origin.y + t * this.direction.y);\n }\n getDistance(t1: number, t2: number) {\n return Math.sqrt(Math.pow(t2 - t1, 2) * (Math.pow(this.direction.x, 2) + Math.pow(this.direction.y, 2)));\n }\n getT(t1: number, distance: number) {\n return t1 + Math.sqrt(Math.pow(distance, 2) / (Math.pow(this.direction.x, 2) + Math.pow(this.direction.y, 2)));\n }\n}\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('ul',[_vm._l((_vm.folders),function(folder){return _c('li',{key:folder,staticClass:\"folder\",on:{\"click\":function($event){$event.stopPropagation();return _vm.toggle($event)}}},[_vm._v(\"\\n \"+_vm._s(folder)+\"\\n \"),_c('asset-node',{attrs:{\"asset\":_vm.asset[folder]}})],1)}),_vm._l((_vm.files),function(file){return _c('li',{key:file.name,staticClass:\"file draggable token\",attrs:{\"draggable\":\"true\"},on:{\"mouseover\":function($event){_vm.showImage = file.hash},\"mouseout\":function($event){_vm.showImage = null},\"dragstart\":function($event){_vm.dragStart($event, '/static/assets/' + file.hash)}}},[_vm._v(\"\\n \"+_vm._s(file.name)+\"\\n \"),(_vm.showImage == file.hash)?_c('div',{staticClass:\"preview\"},[_c('img',{staticClass:\"asset-preview-image\",attrs:{\"src\":'/static/assets/' + file.hash}})]):_vm._e()])})],2)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","export * from \"-!cache-loader?{\\\"cacheDirectory\\\":\\\"node_modules/.cache/vue-loader\\\",\\\"cacheIdentifier\\\":\\\"74f43d04-vue-loader-template\\\"}!../../../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./asset_node.vue?vue&type=template&id=6d718094&scoped=true&\"","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nimport Vue from \"vue\";\nimport Component from \"vue-class-component\";\nimport vueSlider from \"vue-slider-component\";\n\nimport \"@/game/api/events\";\n\nimport { throttle } from \"lodash\";\nimport { mapGetters, mapState } from \"vuex\";\n\nimport ConfirmDialog from \"@/core/components/modals/confirm.vue\";\nimport Prompt from \"@/core/components/modals/prompt.vue\";\nimport Initiative from \"@/game/ui/initiative.vue\";\nimport LabelManager from \"@/game/ui/labels.vue\";\nimport MenuBar from \"@/game/ui/menu/menu.vue\";\nimport NoteDialog from \"@/game/ui/note.vue\";\nimport SelectionInfo from \"@/game/ui/selection/selection_info.vue\";\nimport Tools from \"@/game/ui/tools/tools.vue\";\n\nimport { createConnection, socket } from \"@/game/api/socket\";\nimport { onKeyDown, onKeyUp } from \"@/game/events/keyboard\";\nimport { scrollZoom } from \"@/game/events/mouse\";\nimport { layerManager } from \"@/game/layers/manager\";\nimport { gameStore } from \"@/game/store\";\nimport { l2g } from \"@/game/units\";\nimport { LocalPoint } from \"./geom\";\n\n@Component({\n components: {\n \"tool-bar\": Tools,\n \"selection-info\": SelectionInfo,\n \"prompt-dialog\": Prompt,\n \"confirm-dialog\": ConfirmDialog,\n \"menu-bar\": MenuBar,\n \"initiative-dialog\": Initiative,\n \"zoom-slider\": vueSlider,\n \"note-dialog\": NoteDialog,\n \"label-dialog\": LabelManager,\n },\n beforeRouteEnter(to, from, next) {\n createConnection(to);\n next();\n },\n beforeRouteLeave(to, from, next) {\n socket.disconnect();\n next();\n },\n})\nexport default class Game extends Vue {\n $refs!: {\n confirm: InstanceType;\n tools: InstanceType;\n };\n\n ready = {\n manager: false,\n tools: false,\n };\n\n get showUI(): boolean {\n return gameStore.showUI;\n }\n\n get IS_DM(): boolean {\n return gameStore.IS_DM;\n }\n\n get layers(): string[] {\n return gameStore.layers;\n }\n\n get selectedLayer(): string {\n return gameStore.selectedLayer;\n }\n\n get zoomDisplay(): number {\n return gameStore.zoomDisplay;\n }\n\n set zoomDisplay(value: number) {\n gameStore.updateZoom({\n newZoomDisplay: value,\n zoomLocation: l2g(new LocalPoint(window.innerWidth / 2, window.innerHeight / 2)),\n });\n }\n\n mounted() {\n window.addEventListener(\"resize\", this.resizeWindow);\n window.addEventListener(\"keyup\", onKeyUp);\n window.addEventListener(\"keydown\", onKeyDown);\n this.ready.manager = true;\n }\n\n destroyed() {\n window.removeEventListener(\"resize\", this.resizeWindow);\n window.removeEventListener(\"keyup\", onKeyUp);\n window.removeEventListener(\"keydown\", onKeyDown);\n this.ready.manager = false;\n }\n\n // Window events\n\n zoom(event: WheelEvent) {\n throttle(scrollZoom)(event);\n }\n\n resizeWindow() {\n layerManager.setWidth(window.innerWidth);\n layerManager.setHeight(window.innerHeight);\n layerManager.invalidate();\n }\n\n // Mouse events\n\n mousedown(event: MouseEvent) {\n this.$refs.tools.mousedown(event);\n }\n mouseup(event: MouseEvent) {\n this.$refs.tools.mouseup(event);\n }\n mousemove(event: MouseEvent) {\n this.$refs.tools.mousemove(event);\n }\n mouseleave(event: MouseEvent) {\n this.$refs.tools.mouseleave(event);\n }\n contextmenu(event: MouseEvent) {\n this.$refs.tools.contextmenu(event);\n }\n selectLayer(layer: string) {\n layerManager.selectLayer(layer);\n }\n drop(event: DragEvent) {\n if (event === null || event.dataTransfer === null) return;\n if (event.dataTransfer.files.length > 0) {\n this.$refs.confirm\n .open(\"Uploading files should be done through the asset manager.\", \"Ok\", \"\")\n .then(() => {}, () => {});\n } else if (event.dataTransfer.getData(\"text/plain\") === \"\") {\n return;\n } else {\n layerManager.dropAsset(event);\n }\n }\n}\n","import { GlobalPoint, LocalPoint, Ray } from \"@/game/geom\";\nimport { gameStore } from \"@/game/store\";\n\nexport function g2l(obj: GlobalPoint): LocalPoint {\n const z = gameStore.zoomFactor;\n const panX = gameStore.panX;\n const panY = gameStore.panY;\n return new LocalPoint((obj.x + panX) * z, (obj.y + panY) * z);\n}\n\nexport function g2lx(x: number) {\n return g2l(new GlobalPoint(x, 0)).x;\n}\n\nexport function g2ly(y: number) {\n return g2l(new GlobalPoint(0, y)).y;\n}\n\nexport function g2lz(z: number) {\n return z * gameStore.zoomFactor;\n}\n\nexport function getUnitDistance(r: number) {\n return (r / gameStore.unitSize) * gameStore.gridSize;\n}\n\nexport function g2lr(r: number) {\n return g2lz(getUnitDistance(r));\n}\n\nexport function l2g(obj: LocalPoint): GlobalPoint;\nexport function l2g(obj: Ray): Ray;\nexport function l2g(obj: LocalPoint | Ray): GlobalPoint | Ray {\n const z = gameStore.zoomFactor;\n const panX = gameStore.panX;\n const panY = gameStore.panY;\n if (obj instanceof LocalPoint) {\n return new GlobalPoint(obj.x / z - panX, obj.y / z - panY);\n } else {\n return new Ray(l2g(obj.origin), obj.direction.multiply(1 / z), obj.tMax);\n }\n}\n\nexport function l2gx(x: number) {\n return l2g(new LocalPoint(x, 0)).x;\n}\n\nexport function l2gy(y: number) {\n return l2g(new LocalPoint(0, y)).y;\n}\n\nexport function l2gz(z: number) {\n return z / gameStore.zoomFactor;\n}\n\nexport function l2gr(r: number) {\n return l2gz(getUnitDistance(r));\n}\n\n(window).g2lx = g2lx;\n(window).g2ly = g2ly;\n","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nimport Vue from \"vue\";\nimport Component from \"vue-class-component\";\n\nimport { mapState } from \"vuex\";\n\nimport ColorPicker from \"@/core/components/colorpicker.vue\";\nimport Prompt from \"@/core/components/modals/prompt.vue\";\nimport AssetNode from \"@/game/ui/menu/asset_node.vue\";\nimport NoteDialog from \"@/game/ui/note.vue\";\n\nimport { getRef, uuidv4 } from \"@/core/utils\";\nimport { socket } from \"@/game/api/socket\";\nimport { Note } from \"@/game/comm/types/general\";\nimport { layerManager } from \"@/game/layers/manager\";\nimport { gameStore } from \"@/game/store\";\n\n@Component({\n components: {\n \"color-picker\": ColorPicker,\n \"asset-node\": AssetNode,\n },\n computed: {\n ...mapState(\"game\", [\"invitationCode\", \"locations\", \"assets\", \"notes\"]),\n },\n})\nexport default class MenuBar extends Vue {\n visible = {\n settings: false,\n locations: false,\n };\n\n get IS_DM(): boolean {\n return gameStore.IS_DM || gameStore.FAKE_PLAYER;\n }\n\n get fakePlayer(): boolean {\n return gameStore.FAKE_PLAYER;\n }\n set fakePlayer(value: boolean) {\n gameStore.setFakePlayer(value);\n }\n get useGrid(): boolean {\n return gameStore.useGrid;\n }\n set useGrid(value: boolean) {\n gameStore.setUseGrid({ useGrid: value, sync: true });\n }\n get fullFOW(): boolean {\n return gameStore.fullFOW;\n }\n set fullFOW(value: boolean) {\n gameStore.setFullFOW({ fullFOW: value, sync: true });\n }\n get fowOpacity(): number {\n return gameStore.fowOpacity;\n }\n set fowOpacity(value: number) {\n if (typeof value !== \"number\") return;\n gameStore.setFOWOpacity({ fowOpacity: value, sync: true });\n }\n get fowLOS(): boolean {\n return gameStore.fowLOS;\n }\n set fowLOS(value: boolean) {\n gameStore.setLineOfSight({ fowLOS: value, sync: true });\n }\n get unitSize(): number {\n return gameStore.unitSize;\n }\n set unitSize(value: number) {\n if (typeof value !== \"number\") return;\n gameStore.setUnitSize({ unitSize: value, sync: true });\n }\n get gridSize(): number {\n return gameStore.gridSize;\n }\n set gridSize(value: number) {\n if (typeof value !== \"number\") return;\n gameStore.setGridSize({ gridSize: value, sync: true });\n }\n get gridColour(): string {\n return gameStore.gridColour;\n }\n set gridColour(value: string) {\n gameStore.setGridColour({ colour: value, sync: true });\n }\n get fowColour(): string {\n return gameStore.fowColour;\n }\n set fowColour(value: string) {\n gameStore.setFOWColour({ colour: value, sync: true });\n }\n get rulerColour(): string {\n return gameStore.rulerColour;\n }\n set rulerColour(value: string) {\n gameStore.setRulerColour({ colour: value, sync: true });\n }\n get visionRangeMin(): number {\n return gameStore.visionRangeMin;\n }\n set visionRangeMin(value: number) {\n if (typeof value !== \"number\") return;\n gameStore.setVisionRangeMin({ value, sync: true });\n }\n get visionRangeMax(): number {\n return gameStore.visionRangeMax;\n }\n set visionRangeMax(value: number) {\n if (typeof value !== \"number\") return;\n gameStore.setVisionRangeMax({ value, sync: true });\n }\n settingsClick(event: { target: HTMLElement }) {\n if (event.target.classList.contains(\"menu-accordion\")) {\n event.target.classList.toggle(\"menu-accordion-active\");\n const next = event.target.nextElementSibling;\n if (next !== null) next.style.display = next.style.display === \"\" ? \"block\" : \"\";\n }\n }\n changeLocation(name: string) {\n socket.emit(\"Location.Change\", name);\n }\n createLocation() {\n getRef(\"prompt\")\n .prompt(`New location name:`, `Create new location`)\n .then(\n (value: string) => {\n socket.emit(\"Location.New\", value);\n },\n () => {},\n );\n }\n createNote() {\n const note = { title: \"New note\", text: \"\", uuid: uuidv4() };\n gameStore.newNote({ note, sync: true });\n this.openNote(note);\n }\n openNote(note: Note) {\n getRef(\"note\").open(note);\n }\n changeVisionMode(event: { target: HTMLSelectElement }) {\n const value = event.target.value.toLowerCase();\n if (value !== \"bvh\" && value !== \"triangle\") return;\n gameStore.setVisionMode({ mode: value, sync: true });\n gameStore.recalculateVision();\n gameStore.recalculateMovement();\n layerManager.invalidate();\n }\n}\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/ts-loader/index.js??ref--12-2!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./colorpicker.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/ts-loader/index.js??ref--12-2!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./colorpicker.vue?vue&type=script&lang=ts&\"","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('ContextMenu',{attrs:{\"visible\":_vm.visible,\"left\":_vm.x + 'px',\"top\":_vm.y + 'px'},on:{\"close\":_vm.close}},[(_vm.IS_DM)?_c('li',{on:{\"click\":_vm.bringPlayers}},[_vm._v(\"Bring players\")]):_vm._e(),_c('li',{on:{\"click\":_vm.createToken}},[_vm._v(\"Create basic token\")]),_c('li',{on:{\"click\":_vm.showInitiative}},[_vm._v(\"Show initiative\")])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","export * from \"-!cache-loader?{\\\"cacheDirectory\\\":\\\"node_modules/.cache/vue-loader\\\",\\\"cacheIdentifier\\\":\\\"74f43d04-vue-loader-template\\\"}!../../../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./selectcontext.vue?vue&type=template&id=44a31e42&scoped=true&\"","import { CDT } from \"./cdt\";\nimport { ccw, cw, orientation, ulp } from \"./triag\";\n\nexport type Point = number[];\n\nexport const INFINITE = -7e310;\n\nlet _INFINITE_VERTEX: Vertex;\n\nexport enum Sign {\n NEGATIVE = -1,\n ZERO = 0,\n POSITIVE = 1,\n\n RIGHT_TURN = -1,\n LEFT_TURN = 1,\n\n SMALLER = -1,\n EQUAL = 0,\n LARGER = 1,\n\n CLOCKWISE = -1,\n COUNTERCLOCKWISE = 1,\n\n COLLINEAR = 0,\n COPLANAR = 0,\n DEGENERATE = 0,\n\n ON_NEGATIVE_SIDE = -1,\n ON_ORIENTED_BOUNDARY = 0,\n ON_POSITIVE_SIDE = 1,\n}\n\nenum LineFaceState {\n UNDEFINED = -1,\n VERTEX_VERTEX = 0,\n VERTEX_EDGE = 1,\n EDGE_VERTEX = 2,\n EDGE_EDGE = 3,\n}\n\nfunction newPoint(): Point {\n return [INFINITE, INFINITE];\n}\n\nexport class Triangle {\n vertices: (Vertex | null)[] = [];\n neighbours: (Triangle | null)[] = [null, null, null];\n constraints = [false, false, false];\n static _counter = 0;\n uid = Triangle._counter++;\n\n constructor(...vertices: (Vertex | null)[]) {\n this.vertices = vertices;\n }\n\n from(t: Triangle): this {\n this.vertices = t.vertices.slice(0, t.vertices.length);\n this.neighbours = t.neighbours.slice(0, t.neighbours.length);\n this.constraints = t.constraints.slice(0, t.constraints.length);\n return this;\n }\n\n get dimension() {\n return this.vertices.length - 1;\n }\n\n addVertex(vertex: Vertex) {\n if (vertex === undefined) {\n console.log(\"UNDEFINED HIERE\");\n }\n this.vertices.push(vertex);\n vertex.triangle = this;\n }\n\n isConstrained(index: number): boolean {\n return this.constraints[index];\n }\n\n reorient() {\n // If certain indices do not exist yet thay will append faulty undefined's, thus we slice them\n this.vertices = [this.vertices[1], this.vertices[0], this.vertices[2]].slice(0, this.vertices.length);\n this.neighbours = [this.neighbours[1], this.neighbours[0], this.neighbours[2]];\n this.constraints = [this.constraints[1], this.constraints[0], this.constraints[2]];\n }\n\n indexV(v: Vertex): number {\n return this.vertices.indexOf(v);\n }\n\n indexT(t: Triangle): number {\n return this.neighbours.indexOf(t);\n }\n\n isInfinite(index?: number): boolean {\n if (index === undefined) {\n return this.vertices.includes(_INFINITE_VERTEX);\n } else {\n return this.vertices[ccw(index)]!.infinite || this.vertices[cw(index)]!.infinite;\n }\n }\n\n contains(point: Point) {\n const A =\n -this.vertices[1]!.point![1] * this.vertices[2]!.point![0] +\n this.vertices[0]!.point![1] * (-this.vertices[1]!.point![0] + this.vertices[2]!.point![0]) +\n this.vertices[0]!.point![0] * (this.vertices[1]!.point![1] - this.vertices[2]!.point![1]) +\n this.vertices[1]!.point![0] * this.vertices[2]!.point![1];\n const sign = A < 0 ? -1 : 1;\n const s =\n (this.vertices[0]!.point![1] * this.vertices[2]!.point![0] -\n this.vertices[0]!.point![0] * this.vertices[2]!.point![1] +\n (this.vertices[2]!.point![1] - this.vertices[0]!.point![1]) * point[0] +\n (this.vertices[0]!.point![0] - this.vertices[2]!.point![0]) * point[1]) *\n sign;\n if (s < 0) return false;\n const t =\n (this.vertices[0]!.point![0] * this.vertices[1]!.point![1] -\n this.vertices[0]!.point![1] * this.vertices[1]!.point![0] +\n (this.vertices[0]!.point![1] - this.vertices[1]!.point![1]) * point[0] +\n (this.vertices[1]!.point![0] - this.vertices[0]!.point![0]) * point[1]) *\n sign;\n\n return t > 0 && s + t < A * sign;\n }\n}\n\nexport class Vertex {\n infinite = false;\n private _point: Point | undefined;\n triangle: Triangle | undefined;\n\n constructor(point?: Point) {\n this._point = point;\n }\n\n get point(): Point | undefined {\n return this._point;\n }\n\n set point(point: Point | undefined) {\n this._point = point;\n this.infinite = false;\n }\n}\n\nexport class EdgeCirculator {\n ri: number;\n v: Vertex | null;\n t: Triangle | null;\n _ri: number;\n _v: Vertex | null;\n _t: Triangle | null;\n\n constructor(v: Vertex | null, t: Triangle | null) {\n this.v = v;\n this.t = t;\n if (v === null) {\n this.t = null;\n } else if (t === null) {\n this.t = v.triangle!;\n }\n if (this.t == null || this.t.dimension < 1) {\n this.ri = 0;\n this.v = null;\n this.t = null;\n } else {\n const i = this.t.indexV(v!);\n if (this.t.dimension === 2) this.ri = ccw(i);\n else this.ri = 2;\n }\n this._ri = this.ri;\n this._v = this.v;\n this._t = this.t;\n }\n\n get valid() {\n return this.t !== null && this.v !== null;\n }\n\n next(): boolean {\n let i = this.t!.indexV(this.v!);\n if (this.t!.dimension === 1) {\n this.t = this.t!.neighbours[i === 0 ? 1 : 0];\n } else {\n this.t = this.t!.neighbours[ccw(i)];\n i = this.t!.indexV(this.v!);\n this.ri = ccw(i);\n }\n return this.ri !== this._ri || this.v !== this._v || this.t !== this._t;\n }\n}\n\nexport class EdgeIterator {\n private i = 0;\n pos: Triangle | null;\n edge: Edge = new Edge();\n tds: TDS;\n _es = 0;\n constructor(tds: TDS) {\n this.tds = tds;\n this.edge.second = 0;\n if (tds.dimension <= 0) {\n this.pos = null;\n return;\n }\n this.pos = tds.triangles[0];\n if (tds.dimension === 1) this.edge.second = 2;\n while (this.pos !== null && !this.associatedEdge()) {\n throw new Error(\"[poi\");\n }\n\n if (tds.dimension === 1) this._es = 2;\n }\n\n get valid(): boolean {\n return (this.pos !== null || this._es !== this.edge.second) && this.pos!.isInfinite(this.edge.second);\n }\n\n next() {\n do {\n this.increment();\n } while (this.pos !== null && !this.associatedEdge());\n }\n\n collect(): Edge {\n this.edge.first = this.pos;\n return this.edge;\n }\n\n associatedEdge(): boolean {\n if (this.tds.dimension === 1) return true;\n return (\n this.tds.triangles.indexOf(this.pos!) < this.tds.triangles.indexOf(this.pos!.neighbours[this.edge.second]!)\n );\n }\n\n increment() {\n if (this.tds.dimension === 1) {\n this.i++;\n if (this.tds.triangles.length <= this.i) this.pos = null;\n else this.pos = this.tds.triangles[this.i];\n } else if (this.edge.second === 2) {\n this.edge.second = 0;\n this.i++;\n if (this.tds.triangles.length <= this.i) this.pos = null;\n else this.pos = this.tds.triangles[this.i];\n } else {\n this.edge.second++;\n }\n }\n}\n\nexport class FaceCirculator {\n v: Vertex | null;\n t: Triangle | null;\n _v: Vertex | null;\n _t: Triangle | null;\n\n constructor(v: Vertex | null, t: Triangle | null) {\n this.v = v;\n this.t = t;\n if (v === null) {\n this.t = null;\n } else if (t === null) {\n this.t = v.triangle!;\n }\n if (this.t == null || this.t.dimension < 2) {\n this.v = null;\n this.t = null;\n }\n this._v = this.v;\n this._t = this.t;\n }\n\n get valid() {\n return this.t !== null && this.v !== null;\n }\n\n prev() {\n const i = this.t!.indexV(this.v!);\n this.t = this.t!.neighbours[cw(i)];\n }\n\n next(): boolean {\n const i = this.t!.indexV(this.v!);\n this.t = this.t!.neighbours[ccw(i)];\n return this.v !== this._v || this.t !== this._t;\n }\n}\n\nexport class LineFaceCirculator {\n private i = 0;\n pos: Triangle | null = null;\n _tr: CDT;\n s: LineFaceState = LineFaceState.UNDEFINED;\n p: Point;\n q: Point;\n\n constructor(v: Vertex, tr: CDT, dir: Point) {\n this._tr = tr;\n this.p = v.point!;\n this.q = dir;\n\n const fc = new FaceCirculator(v, null);\n let ic = fc.t!.indexV(v);\n let vt = fc.t!.vertices[cw(ic)]!;\n while (v === _INFINITE_VERTEX || orientation(this.p, this.q, vt.point!) !== Sign.LEFT_TURN) {\n fc.next();\n ic = fc.t!.indexV(v);\n vt = fc.t!.vertices[cw(ic)]!;\n if (!fc.valid) {\n return;\n }\n }\n\n let vr = fc.t!.vertices[ccw(ic)]!;\n let pqr: Sign = Sign.RIGHT_TURN;\n // tslint:disable:no-conditional-assignment\n while (vr !== _INFINITE_VERTEX && (pqr = orientation(this.p, this.q, vr.point!)) === Sign.LEFT_TURN) {\n fc.prev();\n ic = fc.t!.indexV(v);\n vr = fc.t!.vertices[ccw(ic)]!;\n }\n\n ic = fc.t!.indexV(v);\n vt = fc.t!.vertices[cw(ic)]!;\n\n if (vr === _INFINITE_VERTEX) {\n fc.prev();\n ic = fc.t!.indexV(v);\n vr = fc.t!.vertices[ccw(ic)]!;\n pqr = orientation(this.p, this.q, vr.point!);\n switch (pqr) {\n case Sign.RIGHT_TURN:\n case Sign.COLLINEAR: {\n fc.next();\n ic = fc.t!.indexV(_INFINITE_VERTEX);\n this.pos = fc.t!;\n this.s = LineFaceState.VERTEX_VERTEX;\n this.i = ic;\n break;\n }\n case Sign.LEFT_TURN: {\n break;\n }\n }\n } else if (pqr === Sign.COLLINEAR) {\n this.pos = fc.t!;\n this.s = LineFaceState.VERTEX_VERTEX;\n this.i = ccw(ic);\n } else {\n this.pos = fc.t!;\n this.s = LineFaceState.VERTEX_EDGE;\n this.i = ic;\n }\n }\n\n next() {\n this.increment();\n }\n\n increment() {\n let o: Sign;\n if (this.s === LineFaceState.VERTEX_VERTEX || this.s === LineFaceState.EDGE_VERTEX) {\n do {\n const n = this.pos!.neighbours[cw(this.i)]!;\n this.i = n.indexT(this.pos!);\n this.pos = n;\n if (this.pos!.vertices[this.i] === _INFINITE_VERTEX) {\n o = Sign.COLLINEAR;\n this.i = cw(this.i);\n break;\n }\n o = orientation(this.p, this.q, this.pos!.vertices[this.i]!.point!);\n this.i = cw(this.i);\n } while (o === Sign.LEFT_TURN);\n if (o === Sign.COLLINEAR) {\n this.s = LineFaceState.VERTEX_VERTEX;\n this.i = ccw(this.i);\n } else {\n this.s = LineFaceState.VERTEX_EDGE;\n }\n } else {\n const n = this.pos!.neighbours[this.i]!;\n const ni = n.indexT(this.pos!);\n this.pos = n;\n o =\n this.pos!.vertices[ni]! === _INFINITE_VERTEX\n ? Sign.COLLINEAR\n : orientation(this.p, this.q, this.pos!.vertices[ni]!.point!);\n switch (o) {\n case Sign.LEFT_TURN: {\n this.s = LineFaceState.EDGE_EDGE;\n this.i = ccw(ni);\n break;\n }\n case Sign.RIGHT_TURN: {\n this.s = LineFaceState.EDGE_EDGE;\n this.i = cw(ni);\n break;\n }\n default: {\n this.s = LineFaceState.EDGE_VERTEX;\n this.i = ni;\n }\n }\n }\n }\n}\n\nclass Edge {\n first: Triangle | null = null;\n second: number = 0;\n}\n\nexport enum LocateType {\n VERTEX,\n EDGE,\n FACE,\n OUTSIDE_CONVEX_HULL,\n OUTSIDE_AFFINE_HULL,\n}\n\nexport class TDS {\n dimension = -1;\n vertices: Vertex[] = [];\n triangles: Triangle[] = [];\n _infinite: Vertex;\n\n constructor() {\n this._infinite = this.createVertex();\n _INFINITE_VERTEX = this._infinite;\n const t = new Triangle();\n t.addVertex(this._infinite);\n this.triangles.push(t);\n }\n\n createVertex(): Vertex {\n const v = this.infiniteVertex;\n if (v === undefined) {\n console.log(\"UNDEFINED HIERE\");\n }\n this.vertices.push(v);\n return v;\n }\n\n createTriangle(\n v0: Vertex | null,\n v1: Vertex | null,\n v2: Vertex | null,\n n0: Triangle | null,\n n1: Triangle | null,\n n2: Triangle | null,\n ) {\n const t = new Triangle(v0, v1, v2);\n t.neighbours[0] = n0;\n t.neighbours[1] = n1;\n t.neighbours[2] = n2;\n this.triangles.push(t);\n return t;\n }\n\n deleteTriangle(trig: Triangle) {\n this.triangles = this.triangles.filter(t => t !== trig);\n }\n\n setAdjacency(t0: Triangle, i0: number, t1: Triangle, i1: number) {\n t0.neighbours[i0] = t1;\n t1.neighbours[i1] = t0;\n }\n\n get finiteVertex(): Vertex {\n return this.vertices[1];\n }\n\n get infiniteVertex(): Vertex {\n const v = new Vertex(newPoint());\n v.infinite = true;\n return v;\n }\n\n get finiteEdge(): Edge {\n if (this.dimension < 1) throw new Error(\"aspo\");\n const ei = new EdgeIterator(this);\n while (ei.valid) ei.next();\n return ei.collect();\n }\n\n insertDimUp(w: Vertex = new Vertex(), orient: boolean = true): Vertex {\n const v = this.createVertex();\n this.dimension++;\n let t1: Triangle;\n let t2: Triangle;\n switch (this.dimension) {\n case 0: {\n t1 = this.triangles[0];\n t2 = new Triangle(v);\n this.triangles.push(t2);\n this.setAdjacency(t1, 0, t2, 0);\n v.triangle = t2;\n break;\n }\n case 1:\n case 2: {\n const deleteList: Triangle[] = [];\n const triangles = this.triangles.slice(0, this.triangles.length);\n for (const trig of triangles) {\n const copy = new Triangle().from(trig);\n this.triangles.push(copy);\n trig.vertices[this.dimension] = v;\n copy.vertices[this.dimension] = w;\n this.setAdjacency(trig, this.dimension, copy, this.dimension);\n if (trig.vertices.includes(w)) deleteList.push(copy);\n }\n for (const trig of triangles) {\n const neighbour = trig.neighbours[this.dimension];\n for (let j = 0; j < this.dimension; ++j) {\n neighbour!.neighbours[j] = trig.neighbours[j]!.neighbours[this.dimension];\n }\n }\n\n let lfit = 0;\n if (this.dimension === 1) {\n if (orient) {\n triangles[lfit].reorient();\n lfit++;\n triangles[lfit].neighbours[1]!.reorient();\n } else {\n triangles[lfit].neighbours[1]!.reorient();\n lfit++;\n triangles[lfit].reorient();\n }\n } else {\n for (const trig of triangles) {\n if (orient) trig.neighbours[2]!.reorient();\n else trig.reorient();\n }\n }\n\n for (const trig of deleteList) {\n let j = 1;\n if (trig.vertices[0] === w) j = 0;\n t1 = trig.neighbours[this.dimension]!;\n const i1 = this.mirrorIndex(trig, this.dimension);\n t2 = trig.neighbours[j]!;\n const i2 = this.mirrorIndex(trig, j);\n this.setAdjacency(t1, i1, t2, i2);\n this.deleteTriangle(trig);\n }\n v.triangle = triangles[0];\n break;\n }\n default: {\n throw new Error(\"Dimension unknown\");\n }\n }\n return v;\n }\n\n mirrorIndex(t: Triangle, i: number): number {\n if (t.dimension === 1) {\n const j = t.neighbours[i]!.indexV(t.vertices[i === 0 ? 1 : 0]!);\n return j === 0 ? 1 : 0;\n }\n return ccw(t.neighbours[i]!.indexV(t.vertices[ccw(i)]!));\n }\n\n insertInFace(t: Triangle) {\n const v = this.createVertex();\n const v0 = t.vertices[0]!;\n const v1 = t.vertices[1]!;\n const v2 = t.vertices[2]!;\n const n1 = t.neighbours[1]!;\n const n2 = t.neighbours[2]!;\n const t1 = this.createTriangle(v0, v, v2, t, n1, null);\n const t2 = this.createTriangle(v0, v1, v, t, null, n2);\n this.setAdjacency(t1, 2, t2, 1);\n if (n1 !== null) {\n const i1 = this.mirrorIndex(t, 1);\n n1.neighbours[i1] = t1;\n }\n if (n2 !== null) {\n const i2 = this.mirrorIndex(t, 2);\n n2.neighbours[i2] = t2;\n }\n t.vertices[0] = v;\n t.neighbours[1] = t1;\n t.neighbours[2] = t2;\n if (v0.triangle === t) v0.triangle = t2;\n v.triangle = t;\n return v;\n }\n\n flip(t: Triangle, i: number) {\n const n = t.neighbours[i]!;\n const ni = this.mirrorIndex(t, i);\n const vCW = t.vertices[cw(i)]!;\n const vCCW = t.vertices[ccw(i)]!;\n const tr = t.neighbours[ccw(i)]!;\n const tri = this.mirrorIndex(t, ccw(i));\n const bl = n.neighbours[ccw(ni)]!;\n const bli = this.mirrorIndex(n, ccw(ni));\n\n t.vertices[cw(i)] = n.vertices[ni]!;\n n.vertices[cw(ni)] = t.vertices[i]!;\n\n this.setAdjacency(t, i, bl, bli);\n this.setAdjacency(t, ccw(i), n, ccw(ni));\n this.setAdjacency(n, ni, tr, tri);\n\n if (vCW.triangle! === t) vCW.triangle = n;\n if (vCCW.triangle! === n) vCCW.triangle = t;\n }\n\n insertInEdge(t: Triangle, i: number) {\n let v: Vertex;\n if (this.dimension === 1) {\n v = this.createVertex();\n const ff = t.neighbours[0]!;\n const vv = t.vertices[1]!;\n const g = this.createTriangle(v, vv, null, ff, t, null);\n t.vertices[1] = v;\n t.neighbours[0] = g;\n ff.neighbours[1] = g;\n v.triangle = g;\n vv.triangle = ff;\n } else {\n const n = t.neighbours[i]!;\n const ni = this.mirrorIndex(t, i);\n v = this.insertInFace(t);\n this.flip(n, ni);\n }\n return v;\n }\n}\n\nexport class BoundingBox {\n x1: number;\n x2: number;\n y1: number;\n y2: number;\n constructor(p: Point) {\n this.x1 = p[0];\n this.y1 = p[1];\n this.x2 = p[0];\n this.y2 = p[1];\n }\n\n dilate(dist: number) {\n this.x1 -= dist * ulp(this.x1);\n this.y1 -= dist * ulp(this.y1);\n this.x2 += dist * ulp(this.x2);\n this.y2 += dist * ulp(this.y2);\n }\n\n overlaps(other: BoundingBox): boolean {\n if (this.x2 < other.x1 || other.x2 < this.x1) return false;\n if (this.y2 < other.y1 || other.y2 < this.y1) return false;\n return true;\n }\n}\n","import { partition } from \"@/core/utils\";\nimport { GlobalPoint, Ray } from \"@/game/geom\";\nimport { layerManager } from \"@/game/layers/manager\";\nimport { BoundingRect } from \"@/game/shapes/boundingrect\";\nimport { gameStore } from \"@/game/store\";\nimport { g2lx, g2ly, g2lz } from \"@/game/units\";\nimport { BoundingNode, InteriorNode, LeafNode } from \"@/game/visibility/bvh/node\";\n\ninterface BuildInfo {\n index: number;\n bbox: BoundingRect;\n center: BoundingRect;\n}\ninterface LinearBHVNode {\n bbox: BoundingRect;\n nPrimitives: number;\n}\ninterface LinearLeafNode extends LinearBHVNode {\n primitivesOffset: number;\n}\ninterface LinearInternalNode extends LinearBHVNode {\n secondChildOffset: number;\n dimension: number;\n}\n\nexport class BoundingVolume {\n totalNodes = 0;\n buildData: BuildInfo[] = [];\n shapes: string[];\n orderedPrims: string[] = [];\n root: BoundingNode | null;\n nodes: LinearBHVNode[] = [];\n\n offset = 0;\n\n constructor(shapes: string[]) {\n this.shapes = shapes;\n if (this.shapes.length === 0) {\n this.root = null;\n this.nodes = [];\n return;\n }\n for (let i = 0; i < shapes.length; i++) {\n const shape = layerManager.UUIDMap.get(shapes[i])!;\n this.buildData.push({\n index: i,\n bbox: shape.getBoundingBox(),\n center: new BoundingRect(shape.center(), 0, 0),\n });\n }\n this.root = this.recursiveBuild(0, shapes.length);\n this.compact();\n }\n\n draw() {\n const ctx = layerManager.getLayer(\"draw\")!.ctx;\n for (const node of this.nodes) {\n const b = node.bbox;\n ctx.strokeRect(g2lx(b.topLeft.x), g2ly(b.topLeft.y), g2lz(b.w), g2lz(b.h));\n }\n }\n\n recursiveBuild(start: number, end: number): BoundingNode {\n this.totalNodes++;\n let bbox = this.buildData[start].bbox;\n for (let i = start + 1; i < end; i++) bbox = bbox.union(this.buildData[i].bbox);\n const nPrimitives = end - start;\n if (nPrimitives === 1) {\n return this.createLeaf(start, end, nPrimitives, bbox);\n } else {\n let centroidBbox = this.buildData[start].center;\n for (let i = start; i < end; i++) centroidBbox = centroidBbox.union(this.buildData[i].center);\n const dimension = centroidBbox.getMaxExtent();\n if (centroidBbox.botRight.get(dimension) === centroidBbox.topLeft.get(dimension)) {\n return this.createLeaf(start, end, nPrimitives, bbox);\n }\n // Use shitty Middle thingy until an introselect js algo is added\n const pMid = 0.5 * (centroidBbox.topLeft.get(dimension) + centroidBbox.botRight.get(dimension));\n const partitionedData = partition(\n this.buildData.slice(start, end),\n (n: BuildInfo) => n.center.center().get(dimension) < pMid,\n );\n const flattened = ([]).concat.apply([], partitionedData);\n if (partitionedData[0].length === 0 || partitionedData[1].length === 0) console.log(\"EMPTY\");\n this.buildData.splice(start, flattened.length, ...flattened);\n const mid = partitionedData[0].length + start;\n return new InteriorNode(dimension, this.recursiveBuild(start, mid), this.recursiveBuild(mid, end));\n }\n }\n\n intersect(ray: Ray, stopOnFirstHit?: boolean) {\n if (this.nodes.length === 0) return { hit: false, intersect: ray.get(0), tMin: 0, tMax: ray.tMax };\n if (stopOnFirstHit === undefined) stopOnFirstHit = false;\n // Initialize return values\n let hit = false;\n let tMin = 0;\n let tMax = ray.tMax;\n\n // Initialize work variables\n let todoOffset = 0;\n let nodeNum = 0;\n const todo: number[] = [];\n\n // Precalculate intersection vectors\n const invDir = ray.direction.inverse();\n const dirIsNegative = [invDir.x < 0, invDir.y < 0];\n\n while (true) {\n const node = this.nodes[nodeNum];\n\n const i = node.bbox.intersectP(ray, invDir, dirIsNegative);\n if (i.hit) {\n if (node.nPrimitives > 0) {\n // TODO: nPrimitives is currently always 1 , this could be generalised\n // for (let i=0; i < node.nPrimitives; i++) {\n // if (this.shapes[(node).primitivesOffset + i])\n // }\n hit = true;\n tMin = ray.tMax = i.min;\n tMax = i.max;\n if (todoOffset === 0 || stopOnFirstHit) break;\n nodeNum = todo[--todoOffset];\n } else {\n if (dirIsNegative[(node).dimension]) {\n todo[todoOffset++] = nodeNum + 1;\n nodeNum = (node).secondChildOffset;\n } else {\n todo[todoOffset++] = (node).secondChildOffset;\n nodeNum++;\n }\n }\n } else {\n if (todoOffset === 0) break;\n nodeNum = todo[--todoOffset];\n }\n }\n return { hit, intersect: ray.get(tMin), tMin, tMax };\n }\n\n private compact() {\n this.offset = 0;\n if (this.root !== null) this.flatten(this.root);\n }\n\n private flatten(node: BoundingNode) {\n const index = this.offset;\n const myOffset = this.offset++;\n if (node.nPrimitives === 0) {\n this.flatten(node.children[0]);\n const secondOffset = this.flatten(node.children[1]);\n this.nodes[index] = {\n bbox: node.bbox,\n dimension: (node).dimension,\n nPrimitives: 0,\n secondChildOffset: secondOffset,\n };\n } else {\n this.nodes[index] = {\n bbox: node.bbox,\n primitivesOffset: (node).firstPrimOffset,\n nPrimitives: node.nPrimitives,\n };\n }\n return myOffset;\n }\n\n private createLeaf(start: number, end: number, nPrimitives: number, bbox: BoundingRect) {\n const size = this.orderedPrims.length;\n for (let i = start; i < end; i++) this.orderedPrims.push(this.shapes[this.buildData[i].index]);\n return new LeafNode(size, nPrimitives, bbox);\n }\n}\n","import mod from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./filter.vue?vue&type=style&index=1&id=dca395d6&scoped=true&lang=css&\"; export default mod; export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./filter.vue?vue&type=style&index=1&id=dca395d6&scoped=true&lang=css&\"","import Initiative from \"./ui/initiative.vue\";\n\nimport { getRef } from \"@/core/utils\";\nimport { sendClientOptions } from \"@/game/api/utils\";\nimport { ServerShape } from \"@/game/comm/types/shapes\";\nimport { GlobalPoint } from \"@/game/geom\";\nimport { layerManager } from \"@/game/layers/manager\";\nimport { createShapeFromDict } from \"@/game/shapes/utils\";\nimport { gameStore } from \"@/game/store\";\nimport { AnnotationManager } from \"@/game/ui/annotation\";\nimport { g2l } from \"@/game/units\";\n\nexport class GameManager {\n selectedTool: number = 0;\n\n annotationManager = new AnnotationManager();\n\n addShape(shape: ServerShape): void {\n if (!layerManager.hasLayer(shape.layer)) {\n console.log(`Shape with unknown layer ${shape.layer} could not be added`);\n return;\n }\n const layer = layerManager.getLayer(shape.layer)!;\n const sh = createShapeFromDict(shape);\n if (sh === undefined) {\n console.log(`Shape with unknown type ${shape.type_} could not be added`);\n return;\n }\n layer.addShape(sh, false);\n layer.invalidate(false);\n }\n\n updateShape(data: { shape: ServerShape; redraw: boolean; move: boolean; temporary: boolean }): void {\n if (!layerManager.hasLayer(data.shape.layer)) {\n console.log(`Shape with unknown layer ${data.shape.layer} could not be added`);\n return;\n }\n const sh = createShapeFromDict(data.shape);\n if (sh === undefined) {\n console.log(`Shape with unknown type ${data.shape.type_} could not be added`);\n return;\n }\n const oldShape = layerManager.UUIDMap.get(data.shape.uuid);\n if (oldShape === undefined) {\n console.log(`Shape with unknown id could not be updated`);\n return;\n }\n const redrawInitiative = sh.owners !== oldShape.owners;\n const shape = Object.assign(oldShape, sh);\n shape.checkVisionSources();\n shape.setMovementBlock(shape.movementObstruction);\n shape.setIsToken(shape.isToken);\n if (data.redraw) {\n gameStore.recalculateVision(data.temporary);\n layerManager.getLayer(data.shape.layer)!.invalidate(false);\n if (shape.movementObstruction) gameStore.recalculateMovement(data.temporary);\n }\n if (redrawInitiative) getRef(\"initiative\").$forceUpdate();\n }\n\n setCenterPosition(position: GlobalPoint) {\n const localPos = g2l(position);\n gameStore.increasePanX((window.innerWidth / 2 - localPos.x) / gameStore.zoomFactor);\n gameStore.increasePanY((window.innerHeight / 2 - localPos.y) / gameStore.zoomFactor);\n layerManager.invalidate();\n sendClientOptions();\n }\n}\n\nexport const gameManager = new GameManager();\n(window).gameManager = gameManager;\n","import mod from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./asset_node.vue?vue&type=style&index=0&id=6d718094&scoped=true&lang=css&\"; export default mod; export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./asset_node.vue?vue&type=style&index=0&id=6d718094&scoped=true&lang=css&\"","import { render, staticRenderFns } from \"./vision.vue?vue&type=template&id=46baf892&scoped=true&\"\nimport script from \"./vision.vue?vue&type=script&lang=ts&\"\nexport * from \"./vision.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./vision.vue?vue&type=style&index=0&id=46baf892&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"46baf892\",\n null\n \n)\n\ncomponent.options.__file = \"vision.vue\"\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('modal',{attrs:{\"visible\":_vm.visible,\"mask\":false},on:{\"close\":function($event){_vm.visible = false}},scopedSlots:_vm._u([{key:\"header\",fn:function(m){return _c('div',{staticClass:\"modal-header\",attrs:{\"draggable\":\"true\"},on:{\"dragstart\":m.dragStart,\"dragend\":m.dragEnd}},[_c('div',[_vm._v(\"Initiative\")]),_c('div',{staticClass:\"header-close\",on:{\"click\":function($event){_vm.visible = false}}},[_c('i',{staticClass:\"far fa-window-close\"})])])}}])},[_c('div',{staticClass:\"modal-body\"},[_c('draggable',{attrs:{\"id\":\"initiative-list\",\"options\":{setData: _vm.fakeSetData, disabled: !_vm.$store.state.game.IS_DM}},on:{\"change\":_vm.updateOrder},model:{value:(_vm.data),callback:function ($$v) {_vm.data=$$v},expression:\"data\"}},[_vm._l((_vm.data),function(actor){return [_c('div',{key:actor.uuid,staticStyle:{\"display\":\"flex\",\"flex-direction\":\"column\",\"align-items\":\"flex-end\"}},[_c('div',{staticClass:\"initiative-actor\",class:{'initiative-selected': _vm.currentActor === actor.uuid},style:({'cursor': _vm.$store.state.game.IS_DM && 'move'}),on:{\"mouseenter\":function($event){_vm.toggleHighlight(actor, true)},\"mouseleave\":function($event){_vm.toggleHighlight(actor, false)}}},[(actor.has_img)?[_c('img',{attrs:{\"src\":actor.source,\"width\":\"30px\",\"height\":\"30px\"}})]:[_c('span',{staticStyle:{\"width\":\"auto\"}},[_vm._v(_vm._s(actor.source))])],_c('input',{directives:[{name:\"model\",rawName:\"v-model.lazy.number\",value:(actor.initiative),expression:\"actor.initiative\",modifiers:{\"lazy\":true,\"number\":true}}],class:{'notAllowed': !_vm.owns(actor)},attrs:{\"type\":\"text\",\"placeholder\":\"value\",\"disabled\":!_vm.owns(actor)},domProps:{\"value\":(actor.initiative)},on:{\"change\":[function($event){_vm.$set(actor, \"initiative\", _vm._n($event.target.value))},function($event){_vm.syncInitiative(actor)}],\"blur\":function($event){_vm.$forceUpdate()}}}),_c('div',{staticClass:\"initiative-effects-icon\",class:{'notAllowed': !_vm.owns(actor)},staticStyle:{\"opacity\":\"0.6\"},on:{\"click\":function($event){_vm.createEffect(actor, _vm.getDefaultEffect(), true)}}},[_c('i',{staticClass:\"fas fa-stopwatch\"}),(actor.effects)?[_vm._v(_vm._s(actor.effects.length))]:[_vm._v(\"0\")]],2),_c('div',{class:{'notAllowed': !_vm.owns(actor)},style:({'opacity': actor.visible ? '1.0' : '0.3'}),on:{\"click\":function($event){_vm.toggleOption(actor, 'visible')}}},[_c('i',{staticClass:\"fas fa-eye\"})]),_c('div',{class:{'notAllowed': !_vm.owns(actor)},style:({'opacity': actor.group ? '1.0' : '0.3'}),on:{\"click\":function($event){_vm.toggleOption(actor, 'group')}}},[_c('i',{staticClass:\"fas fa-users\"})]),_c('div',{class:{'notAllowed': !_vm.owns(actor)},style:({'opacity': _vm.owns(actor) ? '1.0' : '0.3'}),on:{\"click\":function($event){_vm.removeInitiative(actor.uuid, true, true)}}},[_c('i',{staticClass:\"fas fa-trash-alt\"})])],2),(actor.effects)?_c('div',{staticClass:\"initiative-effect\"},_vm._l((actor.effects),function(effect){return _c('div',{key:effect.uuid},[_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(effect.name),expression:\"effect.name\"}],attrs:{\"type\":\"text\",\"size\":effect.name.length || 1},domProps:{\"value\":(effect.name)},on:{\"change\":function($event){_vm.updateEffect(actor.uuid, effect, true)},\"input\":function($event){if($event.target.composing){ return; }_vm.$set(effect, \"name\", $event.target.value)}}}),_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(effect.turns),expression:\"effect.turns\"}],attrs:{\"type\":\"text\",\"size\":effect.turns.toString().length || 1},domProps:{\"value\":(effect.turns)},on:{\"change\":function($event){_vm.updateEffect(actor.uuid, effect, true)},\"input\":function($event){if($event.target.composing){ return; }_vm.$set(effect, \"turns\", $event.target.value)}}})])})):_vm._e()])]})],2),_c('div',{attrs:{\"id\":\"initiative-bar\"}},[_c('div',{attrs:{\"id\":\"initiative-round\"}},[_vm._v(\"Round \"+_vm._s(_vm.roundCounter))]),_c('div',{staticStyle:{\"display\":\"flex\"}}),_c('div',{staticClass:\"initiative-bar-button\",style:(_vm.visionLock ? 'background-color: #82c8a0' : ''),on:{\"click\":_vm.toggleVisionLock}},[_c('i',{staticClass:\"fas fa-eye\"})]),_c('div',{staticClass:\"initiative-bar-button\",style:(_vm.cameraLock ? 'background-color: #82c8a0' : ''),on:{\"click\":function($event){_vm.cameraLock = !_vm.cameraLock}}},[_c('i',{staticClass:\"fas fa-video\"})]),_c('div',{staticClass:\"initiative-bar-button\",class:{'notAllowed': !_vm.$store.state.game.IS_DM},on:{\"click\":function($event){_vm.setRound(0, true); _vm.updateTurn(_vm.data[0].uuid, true)}}},[_c('i',{staticClass:\"fas fa-sync-alt\"})]),_c('div',{staticClass:\"initiative-bar-button\",class:{'notAllowed': !_vm.$store.state.game.IS_DM},on:{\"click\":_vm.nextTurn}},[_c('i',{staticClass:\"fas fa-chevron-right\"})])])],1)])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","export * from \"-!cache-loader?{\\\"cacheDirectory\\\":\\\"node_modules/.cache/vue-loader\\\",\\\"cacheIdentifier\\\":\\\"74f43d04-vue-loader-template\\\"}!../../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./initiative.vue?vue&type=template&id=07fc8ff2&scoped=true&\"","\n\n\n\n\n\nimport Vue from \"vue\";\nimport Component from \"vue-class-component\";\n\n@Component\nexport default class LoadComponent extends Vue {\n message = \"Loading...\";\n}\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return (_vm.shape !== null)?_c('div',[_c('div',{attrs:{\"id\":\"selection-menu\"}},[_c('div',{attrs:{\"id\":\"selection-edit-button\"},on:{\"click\":_vm.openEditDialog}},[_c('i',{staticClass:\"fas fa-edit\"})]),_c('div',{attrs:{\"id\":\"selection-name\"}},[_vm._v(_vm._s(_vm.shape.name))]),_c('div',{attrs:{\"id\":\"selection-trackers\"}},[_vm._l((_vm.shape.trackers),function(tracker){return (tracker.name !== '' || tracker.value !== 0)?[_c('div',{key:'name-' + tracker.uuid},[_vm._v(_vm._s(tracker.name))]),_c('div',{key:'value-' + tracker.uuid,staticClass:\"selection-tracker-value\",on:{\"click\":function($event){_vm.changeValue(tracker, false)}}},[(tracker.maxvalue === 0)?[_vm._v(_vm._s(tracker.value))]:[_vm._v(_vm._s(tracker.value)+\" / \"+_vm._s(tracker.maxvalue))]],2)]:_vm._e()})],2),_c('div',{attrs:{\"id\":\"selection-auras\"}},[_vm._l((_vm.shape.auras),function(aura){return (aura.name !== '' || aura.value !== 0)?[_c('div',{key:'name-' + aura.uuid},[_vm._v(_vm._s(aura.name))]),_c('div',{key:'value-' + aura.uuid,staticClass:\"selection-tracker-value\",on:{\"click\":function($event){_vm.changeValue(aura, true)}}},[(aura.dim === 0)?[_vm._v(_vm._s(aura.value))]:[_vm._v(_vm._s(aura.value)+\" / \"+_vm._s(aura.dim))]],2)]:_vm._e()})],2)]),_c('edit-dialog',{ref:\"editDialog\",attrs:{\"shape\":_vm.shape}})],1):_vm._e()}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","export * from \"-!cache-loader?{\\\"cacheDirectory\\\":\\\"node_modules/.cache/vue-loader\\\",\\\"cacheIdentifier\\\":\\\"74f43d04-vue-loader-template\\\"}!../../../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./selection_info.vue?vue&type=template&id=674cf937&scoped=true&\"","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return (_vm.getActiveLayer() !== undefined)?_c('ContextMenu',{attrs:{\"visible\":_vm.visible,\"left\":_vm.x + 'px',\"top\":_vm.y + 'px'},on:{\"close\":_vm.close}},[(_vm.getLayers().length > 1)?_c('li',[_vm._v(\"Layer\\n \"),_c('ul',_vm._l((_vm.getLayers()),function(layer){return _c('li',{key:layer.name,style:([_vm.getActiveLayer().name === layer.name ? {'background-color':'#82c8a0'}: {}]),on:{\"click\":function($event){_vm.setLayer(layer.name)}}},[_vm._v(_vm._s(layer.name))])}))]):_vm._e(),_c('li',{on:{\"click\":_vm.moveToBack}},[_vm._v(\"Move to back\")]),_c('li',{on:{\"click\":_vm.moveToFront}},[_vm._v(\"Move to front\")]),_c('li',{on:{\"click\":_vm.addInitiative}},[_vm._v(_vm._s(_vm.getInitiativeWord())+\" initiative\")]),_c('li',{on:{\"click\":_vm.openEditDialog}},[_vm._v(\"Show properties\")])]):_vm._e()}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","export * from \"-!cache-loader?{\\\"cacheDirectory\\\":\\\"node_modules/.cache/vue-loader\\\",\\\"cacheIdentifier\\\":\\\"74f43d04-vue-loader-template\\\"}!../../../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./shapecontext.vue?vue&type=template&id=759e5a8a&scoped=true&\"","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nimport axios, { AxiosError, AxiosResponse } from \"axios\";\nimport Vue from \"vue\";\nimport Component from \"vue-class-component\";\nimport { Route } from \"vue-router\";\n\nimport { coreStore } from \"@/core/store\";\n\nComponent.registerHooks([\"beforeRouteEnter\"]);\n\n@Component\nexport default class Dashboard extends Vue {\n owned = [];\n joined = [];\n error = \"\";\n\n newSessionName = \"\";\n\n beforeRouteEnter(to: Route, from: Route, next: ({}) => {}) {\n axios\n .get(\"/api/rooms\")\n .then((response: AxiosResponse) => {\n next((vm: this) => {\n vm.owned = response.data.owned;\n vm.joined = response.data.joined;\n });\n })\n .catch((err: AxiosError) => {\n next((vm: this) => {\n vm.error = err.message;\n });\n });\n }\n\n createRoom(event: Event) {\n axios\n .post(\"/api/rooms\", {\n name: this.newSessionName,\n })\n .then((response: AxiosResponse) => {\n this.$router.push(`/game/${coreStore.username}/${this.newSessionName}`);\n })\n .catch((err: AxiosError) => {\n this.error = err.message;\n });\n }\n}\n","import { render, staticRenderFns } from \"./confirm.vue?vue&type=template&id=1883e207&scoped=true&\"\nimport script from \"./confirm.vue?vue&type=script&lang=ts&\"\nexport * from \"./confirm.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./confirm.vue?vue&type=style&index=0&id=1883e207&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"1883e207\",\n null\n \n)\n\ncomponent.options.__file = \"confirm.vue\"\nexport default component.exports","import mod from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/ts-loader/index.js??ref--12-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./shapecontext.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/ts-loader/index.js??ref--12-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./shapecontext.vue?vue&type=script&lang=ts&\"","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('ContextMenu',{attrs:{\"visible\":_vm.visible,\"left\":_vm.left + 'px',\"top\":_vm.top + 'px'},on:{\"close\":_vm.close}},[_c('li',{on:{\"click\":_vm.rename}},[_vm._v(\"Rename\")]),_c('li',{on:{\"click\":_vm.remove}},[_vm._v(\"Remove\")])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","export * from \"-!cache-loader?{\\\"cacheDirectory\\\":\\\"node_modules/.cache/vue-loader\\\",\\\"cacheIdentifier\\\":\\\"74f43d04-vue-loader-template\\\"}!../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./contextMenu.vue?vue&type=template&id=606797b4&\"","import mod from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./draw.vue?vue&type=style&index=0&id=639cd890&scoped=true&lang=css&\"; export default mod; export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./draw.vue?vue&type=style&index=0&id=639cd890&scoped=true&lang=css&\"","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/ts-loader/index.js??ref--12-2!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./manager.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/ts-loader/index.js??ref--12-2!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./manager.vue?vue&type=script&lang=ts&\"","import Vue from \"vue\";\nexport const EventBus = new Vue();\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/ts-loader/index.js??ref--12-2!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./main.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/ts-loader/index.js??ref--12-2!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./main.vue?vue&type=script&lang=ts&\"","import { GlobalPoint } from \"@/game/geom\";\nimport { BaseRect } from \"@/game/shapes/baserect\";\nimport { gameStore } from \"@/game/store\";\nimport { g2l } from \"@/game/units\";\nimport { getFogColour } from \"@/game/utils\";\n\nexport class Rect extends BaseRect {\n type = \"rect\";\n constructor(topleft: GlobalPoint, w: number, h: number, fillColour?: string, strokeColour?: string, uuid?: string) {\n super(topleft, w, h, fillColour, strokeColour, uuid);\n }\n asDict() {\n return super.getBaseDict();\n }\n draw(ctx: CanvasRenderingContext2D) {\n super.draw(ctx);\n if (this.fillColour === \"fog\") ctx.fillStyle = getFogColour();\n else ctx.fillStyle = this.fillColour;\n const z = gameStore.zoomFactor;\n const loc = g2l(this.refPoint);\n ctx.fillRect(loc.x, loc.y, this.w * z, this.h * z);\n if (this.strokeColour !== \"rgba(0, 0, 0, 0)\") {\n ctx.strokeStyle = this.strokeColour;\n ctx.lineWidth = 5;\n ctx.strokeRect(loc.x, loc.y, this.w * z, this.h * z);\n }\n }\n}\n","import mod from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./game.vue?vue&type=style&index=1&id=05b88da7&scoped=true&lang=css&\"; export default mod; export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./game.vue?vue&type=style&index=1&id=05b88da7&scoped=true&lang=css&\"","import mod from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/ts-loader/index.js??ref--12-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./filter.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/ts-loader/index.js??ref--12-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./filter.vue?vue&type=script&lang=ts&\"","import mod from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/ts-loader/index.js??ref--12-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./selectcontext.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/ts-loader/index.js??ref--12-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./selectcontext.vue?vue&type=script&lang=ts&\"","import { Ray, Vector } from \"@/game/geom\";\nimport { Layer } from \"@/game/layers/layer\";\nimport { layerManager } from \"@/game/layers/manager\";\nimport { Settings } from \"@/game/settings\";\nimport { gameStore } from \"@/game/store\";\nimport { g2l, g2lr, g2lx, g2ly } from \"@/game/units\";\nimport { computeVisibility } from \"../visibility/te/te\";\n\nexport class FOWPlayersLayer extends Layer {\n isVisionLayer: boolean = true;\n\n draw(): void {\n if (!this.valid) {\n // console.time(\"VI\");\n const ctx = this.ctx;\n\n if (!gameStore.fowLOS || Settings.skipPlayerFOW) {\n ctx.clearRect(0, 0, this.canvas.width, this.canvas.height);\n this.valid = true;\n return;\n }\n\n ctx.clearRect(0, 0, this.canvas.width, this.canvas.height);\n\n const originalOperation = ctx.globalCompositeOperation;\n\n ctx.fillStyle = \"rgba(0, 0, 0, 1)\";\n\n // For the DM this is done at the end of this function. TODO: why the split up ???\n // This was done in commit be1e65cff1e7369375fe11cfa1643fab1d11beab.\n if (!gameStore.IS_DM) super.draw(!gameStore.fullFOW);\n\n // Then cut out all the player vision auras\n const maxLength = ctx.canvas.width + ctx.canvas.height;\n\n for (const tokenId of gameStore.activeTokens) {\n const token = layerManager.UUIDMap.get(tokenId);\n if (token === undefined) continue;\n const center = token.center();\n const lcenter = g2l(center);\n if (gameStore.visionMode === \"bvh\") {\n ctx.beginPath();\n let lastArcAngle = -1;\n\n for (let angle = 0; angle < 2 * Math.PI; angle += (Settings.angleSteps / 2 / 180) * Math.PI) {\n const cos = Math.cos(angle);\n const sin = Math.sin(angle);\n // Check if there is a hit with one of the nearby light blockers.\n const lightRay = new Ray(center, new Vector(cos, sin));\n const hitResult = gameStore.BV.intersect(lightRay);\n\n // We can move on to the next angle if nothing was hit.\n if (!hitResult.hit) {\n // If an earlier hit caused the aura to leave the arc, we need to go back to the arc\n if (lastArcAngle === -1) {\n // Draw a line from the last non arc location back to the arc\n ctx.lineTo(lcenter.x + maxLength * cos, lcenter.y + maxLength * sin);\n // Set the start of a new arc beginning at the current angle\n lastArcAngle = angle;\n }\n continue;\n }\n // If hit , first finish any ongoing arc, then move to the intersection point\n if (lastArcAngle !== -1) {\n ctx.arc(lcenter.x, lcenter.y, maxLength, lastArcAngle, angle);\n lastArcAngle = -1;\n }\n ctx.lineTo(g2lx(hitResult.intersect.x), g2ly(hitResult.intersect.y));\n }\n\n // Finish the final arc.\n if (lastArcAngle !== -1) ctx.arc(lcenter.x, lcenter.y, maxLength, lastArcAngle, 2 * Math.PI);\n else ctx.closePath();\n ctx.fill();\n } else {\n if (true) {\n // Add a gradient vision dropoff\n const gradient = ctx.createRadialGradient(\n lcenter.x,\n lcenter.y,\n g2lr(gameStore.visionRangeMin),\n lcenter.x,\n lcenter.y,\n g2lr(gameStore.visionRangeMax),\n );\n gradient.addColorStop(0, \"rgba(0, 0, 0, 1)\");\n gradient.addColorStop(1, \"rgba(0, 0, 0, 0)\");\n ctx.fillStyle = gradient;\n } else {\n ctx.fillStyle = \"rgba(0, 0, 0, 1)\";\n }\n try {\n const polygon = computeVisibility(token.center(), \"vision\");\n ctx.beginPath();\n ctx.moveTo(g2lx(polygon[0][0]), g2ly(polygon[0][1]));\n for (const point of polygon) ctx.lineTo(g2lx(point[0]), g2ly(point[1]));\n ctx.closePath();\n ctx.fill();\n } catch {}\n }\n }\n\n // For the players this is done at the beginning of this function. TODO: why the split up ???\n // This was done in commit be1e65cff1e7369375fe11cfa1643fab1d11beab.\n if (gameStore.IS_DM) super.draw(!gameStore.fullFOW);\n\n ctx.globalCompositeOperation = originalOperation;\n // console.timeEnd(\"VI\");\n }\n }\n}\n","import { socket } from \"@/game/api/socket\";\nimport { ServerShape } from \"@/game/comm/types/shapes\";\nimport { EventBus } from \"@/game/event-bus\";\nimport { layerManager } from \"@/game/layers/manager\";\nimport { Shape } from \"@/game/shapes/shape\";\nimport { createShapeFromDict } from \"@/game/shapes/utils\";\nimport { gameStore } from \"@/game/store\";\nimport { g2lx, g2ly } from \"@/game/units\";\n\nexport class Layer {\n name: string;\n width: number;\n height: number;\n canvas: HTMLCanvasElement;\n ctx: CanvasRenderingContext2D;\n\n selectable: boolean = false;\n playerEditable: boolean = false;\n isVisionLayer: boolean = false;\n\n // When set to false, the layer will be redrawn on the next tick\n valid: boolean = false;\n // The collection of shapes that this layer contains.\n // These are ordered on a depth basis.\n shapes: Shape[] = [];\n\n // Collection of shapes that are currently selected\n selection: Shape[] = [];\n\n // Extra selection highlighting settings\n selectionColor = \"#CC0000\";\n selectionWidth = 2;\n\n constructor(canvas: HTMLCanvasElement, name: string) {\n this.canvas = canvas;\n this.name = name;\n this.width = canvas.width;\n this.height = canvas.height;\n this.ctx = canvas.getContext(\"2d\")!;\n }\n\n invalidate(skipLightUpdate: boolean): void {\n this.valid = false;\n if (!skipLightUpdate) {\n layerManager.invalidateLight();\n }\n }\n\n addShape(shape: Shape, sync: boolean, temporary?: boolean, invalidate = true): void {\n if (temporary === undefined) temporary = false;\n shape.layer = this.name;\n this.shapes.push(shape);\n layerManager.UUIDMap.set(shape.uuid, shape);\n shape.checkVisionSources(invalidate);\n shape.setMovementBlock(shape.movementObstruction, invalidate);\n if (shape.ownedBy(gameStore.username) && shape.isToken) gameStore.ownedtokens.push(shape.uuid);\n if (shape.annotation.length) gameStore.annotations.push(shape.uuid);\n if (sync) socket.emit(\"Shape.Add\", { shape: shape.asDict(), temporary });\n if (invalidate) this.invalidate(!sync);\n }\n\n setShapes(shapes: ServerShape[]): void {\n for (const serverShape of shapes) {\n const shape = createShapeFromDict(serverShape);\n if (shape === undefined) {\n console.log(`Shape with unknown type ${serverShape.type_} could not be added`);\n return;\n }\n this.addShape(shape, false, false, false);\n }\n this.clearSelection(); // TODO: Fix keeping selection on those items that are not moved.\n this.invalidate(false);\n }\n\n removeShape(shape: Shape, sync: boolean, temporary?: boolean) {\n if (temporary === undefined) temporary = false;\n this.shapes.splice(this.shapes.indexOf(shape), 1);\n\n if (sync) socket.emit(\"Shape.Remove\", { shape: shape.asDict(), temporary });\n const lsI = gameStore.visionSources.findIndex(ls => ls.shape === shape.uuid);\n const lbI = gameStore.visionBlockers.findIndex(ls => ls === shape.uuid);\n\n const mbI = gameStore.movementblockers.findIndex(ls => ls === shape.uuid);\n const anI = gameStore.annotations.findIndex(ls => ls === shape.uuid);\n if (lsI >= 0) gameStore.visionSources.splice(lsI, 1);\n if (lbI >= 0) gameStore.visionBlockers.splice(lbI, 1);\n if (mbI >= 0) gameStore.movementblockers.splice(mbI, 1);\n if (anI >= 0) gameStore.annotations.splice(anI, 1);\n\n const annotationIndex = gameStore.annotations.indexOf(shape.uuid);\n if (annotationIndex >= 0) gameStore.annotations.splice(annotationIndex, 1);\n\n const ownedIndex = gameStore.ownedtokens.indexOf(shape.uuid);\n if (ownedIndex >= 0) gameStore.ownedtokens.splice(ownedIndex, 1);\n\n layerManager.UUIDMap.delete(shape.uuid);\n\n const index = this.selection.indexOf(shape);\n if (index >= 0) this.selection.splice(index, 1);\n if (lbI >= 0) gameStore.recalculateVision();\n if (mbI >= 0) gameStore.recalculateMovement();\n this.invalidate(!sync);\n }\n\n clear(): void {\n this.ctx.clearRect(0, 0, this.width, this.height);\n }\n\n clearSelection(): void {\n this.selection = [];\n EventBus.$emit(\"SelectionInfo.Shape.Set\", null);\n }\n\n draw(doClear?: boolean): void {\n if (!this.valid) {\n const ctx = this.ctx;\n const ogOP = ctx.globalCompositeOperation;\n doClear = doClear === undefined ? true : doClear;\n\n if (doClear) this.clear();\n\n const state = this;\n\n // We iteratre twice over all shapes\n // First to draw the auras and a second time to draw the shapes themselves\n // Otherwise auras from one shape could be overlapping another shape itself.\n\n this.shapes.forEach(shape => {\n if (shape.options.has(\"skipDraw\") && shape.options.get(\"skipDraw\")) return;\n if (layerManager.getLayer() === undefined) return;\n if (!shape.visibleInCanvas(state.canvas)) return;\n if (state.name === \"fow\" && shape.visionObstruction && layerManager.getLayer()!.name !== state.name)\n return;\n shape.drawAuras(ctx);\n });\n this.shapes.forEach(shape => {\n if (shape.options.has(\"skipDraw\") && shape.options.get(\"skipDraw\")) return;\n if (shape.labels.length === 0 && gameStore.filterNoLabel) return;\n if (\n shape.labels.length &&\n gameStore.labelFilters.length &&\n !shape.labels.some(l => gameStore.labelFilters.includes(l.uuid))\n )\n return;\n if (layerManager.getLayer() === undefined) return;\n if (!shape.visibleInCanvas(state.canvas)) return;\n if (state.name === \"fow\" && shape.visionObstruction && layerManager.getLayer()!.name !== state.name)\n return;\n shape.draw(ctx);\n });\n\n if (this.selection != null) {\n ctx.fillStyle = this.selectionColor;\n ctx.strokeStyle = this.selectionColor;\n ctx.lineWidth = this.selectionWidth;\n const z = gameStore.zoomFactor;\n this.selection.forEach(sel => {\n ctx.globalCompositeOperation = sel.globalCompositeOperation;\n const bb = sel.getBoundingBox();\n // TODO: REFACTOR THIS TO Shape.drawSelection(ctx);\n ctx.strokeRect(g2lx(bb.topLeft.x), g2ly(bb.topLeft.y), bb.w * z, bb.h * z);\n\n for (const p of sel.points) {\n ctx.beginPath();\n ctx.arc(g2lx(p[0]), g2ly(p[1]), 3, 0, 2 * Math.PI);\n ctx.fill();\n }\n ctx.beginPath();\n ctx.moveTo(g2lx(sel.points[0][0]), g2ly(sel.points[0][1]));\n for (let i = 1; i <= sel.points.length; i++) {\n const vertex = sel.points[i % sel.points.length];\n ctx.lineTo(g2lx(vertex[0]), g2ly(vertex[1]));\n }\n ctx.stroke();\n });\n }\n ctx.globalCompositeOperation = ogOP;\n this.valid = true;\n }\n }\n\n moveShapeOrder(shape: Shape, destinationIndex: number, sync: boolean): void {\n const oldIdx = this.shapes.indexOf(shape);\n if (oldIdx === destinationIndex) return;\n this.shapes.splice(oldIdx, 1);\n this.shapes.splice(destinationIndex, 0, shape);\n if (sync) socket.emit(\"Shape.Order.Set\", { shape: shape.asDict(), index: destinationIndex });\n this.invalidate(true);\n }\n}\n","import { gameStore } from \"@/game/store\";\nimport { l2g } from \"@/game/units\";\nimport { getMouse } from \"@/game/utils\";\n\nexport function scrollZoom(e: WheelEvent) {\n if (!e.target || !(e.target).tagName || (e.target).tagName !== \"CANVAS\") return;\n let delta: number;\n delta = Math.sign(e.deltaY) * -1;\n gameStore.updateZoom({ newZoomDisplay: gameStore.zoomDisplay - 0.1 * delta, zoomLocation: l2g(getMouse(e)) });\n}\n","import { render, staticRenderFns } from \"./filter.vue?vue&type=template&id=dca395d6&scoped=true&\"\nimport script from \"./filter.vue?vue&type=script&lang=ts&\"\nexport * from \"./filter.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./filter.vue?vue&type=style&index=0&lang=css&\"\nimport style1 from \"./filter.vue?vue&type=style&index=1&id=dca395d6&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"dca395d6\",\n null\n \n)\n\ncomponent.options.__file = \"filter.vue\"\nexport default component.exports","import { GlobalPoint, LocalPoint, Vector } from \"@/game/geom\";\nimport { BoundingRect } from \"@/game/shapes/boundingrect\";\nimport { Shape } from \"@/game/shapes/shape\";\nimport { gameStore } from \"@/game/store\";\nimport { calculateDelta } from \"@/game/ui/tools/utils\";\nimport { g2lx, g2ly, l2g, l2gx, l2gy } from \"@/game/units\";\n\nexport abstract class BaseRect extends Shape {\n w: number;\n h: number;\n constructor(topleft: GlobalPoint, w: number, h: number, fillColour?: string, strokeColour?: string, uuid?: string) {\n super(topleft, fillColour, strokeColour, uuid);\n this.w = w;\n this.h = h;\n }\n getBaseDict() {\n return Object.assign(super.getBaseDict(), {\n width: this.w,\n height: this.h,\n });\n }\n getBoundingBox() {\n return new BoundingRect(this.refPoint, this.w, this.h);\n }\n\n get points() {\n if (this.w === 0 || this.h === 0) return [[this.refPoint.x, this.refPoint.y]];\n // note to self: topright and botleft are swapped because I'm retarded.\n const topright = this.refPoint.add(new Vector(0, this.h));\n const botright = this.refPoint.add(new Vector(this.w, this.h));\n const botleft = this.refPoint.add(new Vector(this.w, 0));\n return [\n [this.refPoint.x, this.refPoint.y],\n [topright.x, topright.y],\n [botright.x, botright.y],\n [botleft.x, botleft.y],\n ];\n }\n\n contains(point: GlobalPoint): boolean {\n return (\n this.refPoint.x <= point.x &&\n this.refPoint.x + this.w >= point.x &&\n this.refPoint.y <= point.y &&\n this.refPoint.y + this.h >= point.y\n );\n }\n center(): GlobalPoint;\n center(centerPoint: GlobalPoint): void;\n center(centerPoint?: GlobalPoint): GlobalPoint | void {\n if (centerPoint === undefined) return this.refPoint.add(new Vector(this.w / 2, this.h / 2));\n this.refPoint = new GlobalPoint(centerPoint.x - this.w / 2, centerPoint.y - this.h / 2);\n }\n\n visibleInCanvas(canvas: HTMLCanvasElement): boolean {\n if (super.visibleInCanvas(canvas)) return true;\n const coreVisible = !(\n g2lx(this.refPoint.x) > canvas.width ||\n g2ly(this.refPoint.y) > canvas.height ||\n g2lx(this.refPoint.x + this.w) < 0 ||\n g2ly(this.refPoint.y + this.h) < 0\n );\n if (coreVisible) return true;\n return false;\n }\n snapToGrid() {\n const gs = gameStore.gridSize;\n const center = this.center();\n const mx = center.x;\n const my = center.y;\n\n let targetX;\n let targetY;\n\n if ((this.w / gs) % 2 === 0) {\n targetX = Math.round(mx / gs) * gs - this.w / 2;\n } else {\n targetX = (Math.round((mx + gs / 2) / gs) - 1 / 2) * gs - this.w / 2;\n }\n if ((this.h / gs) % 2 === 0) {\n targetY = Math.round(my / gs) * gs - this.h / 2;\n } else {\n targetY = (Math.round((my + gs / 2) / gs) - 1 / 2) * gs - this.h / 2;\n }\n\n const delta = calculateDelta(new Vector(targetX - this.refPoint.x, targetY - this.refPoint.y), this);\n this.refPoint = this.refPoint.add(delta);\n\n this.invalidate(false);\n }\n resizeToGrid() {\n const gs = gameStore.gridSize;\n this.refPoint = new GlobalPoint(Math.round(this.refPoint.x / gs) * gs, Math.round(this.refPoint.y / gs) * gs);\n this.w = Math.max(Math.round(this.w / gs) * gs, gs);\n this.h = Math.max(Math.round(this.h / gs) * gs, gs);\n this.invalidate(false);\n }\n resize(resizePoint: number, point: LocalPoint) {\n const z = gameStore.zoomFactor;\n switch (resizePoint) {\n case 0: {\n this.w = g2lx(this.refPoint.x) + this.w * z - point.x;\n this.h = g2ly(this.refPoint.y) + this.h * z - point.y;\n this.refPoint = l2g(point);\n break;\n }\n case 1: {\n this.w = g2lx(this.refPoint.x) + this.w * z - point.x;\n this.h = point.y - g2ly(this.refPoint.y);\n this.refPoint = new GlobalPoint(l2gx(point.x), this.refPoint.y);\n break;\n }\n case 2: {\n this.w = point.x - g2lx(this.refPoint.x);\n this.h = point.y - g2ly(this.refPoint.y);\n break;\n }\n case 3: {\n this.w = point.x - g2lx(this.refPoint.x);\n this.h = g2ly(this.refPoint.y) + this.h * z - point.y;\n this.refPoint = new GlobalPoint(this.refPoint.x, l2gy(point.y));\n break;\n }\n }\n\n this.w /= z;\n this.h /= z;\n\n if (this.w < 0) {\n this.refPoint = this.refPoint.add(new Vector(this.w, 0));\n this.w = Math.abs(this.w);\n }\n if (this.h < 0) {\n this.refPoint = this.refPoint.add(new Vector(0, this.h));\n this.h = Math.abs(this.h);\n }\n }\n}\n","import { render, staticRenderFns } from \"./select.vue?vue&type=template&id=048b3482&\"\nimport script from \"./select.vue?vue&type=script&lang=ts&\"\nexport * from \"./select.vue?vue&type=script&lang=ts&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\ncomponent.options.__file = \"select.vue\"\nexport default component.exports","import { render, staticRenderFns } from \"./main.vue?vue&type=template&id=61eb1455&scoped=true&\"\nimport script from \"./main.vue?vue&type=script&lang=ts&\"\nexport * from \"./main.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./main.vue?vue&type=style&index=0&id=61eb1455&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"61eb1455\",\n null\n \n)\n\ncomponent.options.__file = \"main.vue\"\nexport default component.exports","import mod from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./createtoken_modal.vue?vue&type=style&index=0&id=73816298&scoped=true&lang=css&\"; export default mod; export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./createtoken_modal.vue?vue&type=style&index=0&id=73816298&scoped=true&lang=css&\"","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{attrs:{\"id\":\"AssetManager\"}},[_c('div',{attrs:{\"id\":\"titlebar\"}},[_vm._v(\"Asset Manager\")]),_c('div',{attrs:{\"id\":\"main\"}},[_c('div',{attrs:{\"id\":\"assets\"},on:{\"dragover\":function($event){$event.preventDefault();return _vm.moveDrag($event)},\"drop\":function($event){$event.preventDefault();$event.stopPropagation();_vm.stopDrag($event, _vm.currentFolder)}}},[_c('div',{attrs:{\"id\":\"breadcrumbs\"}},[_c('div',[_vm._v(\"/\")]),_vm._l((_vm.path),function(dir){return _c('div',{key:dir},[_vm._v(_vm._s(_vm.idMap.get(dir).name))])})],2),_c('div',{attrs:{\"id\":\"actionbar\"}},[_c('input',{attrs:{\"id\":\"files\",\"type\":\"file\",\"multiple\":\"\",\"hidden\":\"\"},on:{\"change\":function($event){_vm.upload()}}}),_c('div',{attrs:{\"title\":\"Create folder\"},on:{\"click\":_vm.createDirectory}},[_c('i',{staticClass:\"fas fa-plus-square\"})]),_c('div',{attrs:{\"title\":\"Upload files\"},on:{\"click\":_vm.prepareUpload}},[_c('i',{staticClass:\"fas fa-upload\"})])]),_c('div',{attrs:{\"id\":\"explorer\"}},[(_vm.path.length)?_c('div',{staticClass:\"inode folder\",on:{\"dblclick\":function($event){_vm.changeDirectory(-1)},\"dragover\":function($event){$event.preventDefault();return _vm.moveDrag($event)},\"dragleave\":function($event){$event.preventDefault();return _vm.leaveDrag($event)},\"drop\":function($event){$event.preventDefault();$event.stopPropagation();_vm.stopDrag($event, _vm.parentFolder)}}},[_c('i',{staticClass:\"fas fa-folder\",staticStyle:{\"font-size\":\"50px\"}}),_c('div',{staticClass:\"title\"},[_vm._v(\"..\")])]):_vm._e(),_vm._l((_vm.folders),function(key){return _c('div',{key:key,staticClass:\"inode folder\",class:{'inode-selected': _vm.selected.includes(key)},attrs:{\"draggable\":\"true\"},on:{\"click\":function($event){_vm.select($event, key)},\"dblclick\":function($event){_vm.changeDirectory(key)},\"contextmenu\":function($event){$event.preventDefault();_vm.$refs.cm.open($event, key)},\"dragstart\":function($event){_vm.startDrag($event, key)},\"dragover\":function($event){$event.preventDefault();return _vm.moveDrag($event)},\"dragleave\":function($event){$event.preventDefault();return _vm.leaveDrag($event)},\"drop\":function($event){$event.preventDefault();$event.stopPropagation();_vm.stopDrag($event, key)}}},[_c('i',{staticClass:\"fas fa-folder\",staticStyle:{\"font-size\":\"50px\"}}),_c('div',{staticClass:\"title\"},[_vm._v(_vm._s(_vm.idMap.get(key).name))])])}),_vm._l((_vm.files),function(file){return _c('div',{key:file,staticClass:\"inode file\",class:{'inode-selected': _vm.selected.includes(file)},attrs:{\"draggable\":\"true\"},on:{\"click\":function($event){_vm.select($event, file)},\"contextmenu\":function($event){$event.preventDefault();_vm.$refs.cm.open($event, file)},\"dragstart\":function($event){_vm.startDrag($event, file)}}},[_c('img',{attrs:{\"src\":'/static/assets/' + _vm.idMap.get(file).file_hash,\"width\":\"50\"}}),_c('div',{staticClass:\"title\"},[_vm._v(_vm._s(_vm.idMap.get(file).name))])])})],2)]),(_vm.firstSelectedFile)?_c('div',{attrs:{\"id\":\"asset-details\"}},[_c('div',{attrs:{\"id\":\"asset-detail-title\"}},[_vm._v(_vm._s(_vm.firstSelectedFile.name))]),_c('img',{attrs:{\"src\":'/static/assets/' + _vm.firstSelectedFile.file_hash}})]):_vm._e()]),_c('AssetContextMenu',{ref:\"cm\"}),_c('Prompt',{ref:\"prompt\"}),_c('ConfirmDialog',{ref:\"confirm\"})],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","export * from \"-!cache-loader?{\\\"cacheDirectory\\\":\\\"node_modules/.cache/vue-loader\\\",\\\"cacheIdentifier\\\":\\\"74f43d04-vue-loader-template\\\"}!../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./manager.vue?vue&type=template&id=5b0def98&\"","\n\n\n\n\n\n\n\n\nimport Vue from \"vue\";\nimport Component from \"vue-class-component\";\n\nimport ContextMenu from \"@/core/components/contextmenu.vue\";\n\nimport { socket } from \"@/game/api/socket\";\nimport { EventBus } from \"@/game/event-bus\";\nimport { gameStore } from \"@/game/store\";\nimport { l2gx, l2gy } from \"@/game/units\";\n\n@Component({\n components: {\n ContextMenu,\n },\n})\nexport default class SelectContext extends Vue {\n visible = false;\n x = 0;\n y = 0;\n\n get IS_DM(): boolean {\n return gameStore.IS_DM;\n }\n\n open(event: MouseEvent) {\n this.visible = true;\n this.x = event.pageX;\n this.y = event.pageY;\n this.$nextTick(() => this.$children[0].$el.focus());\n }\n close() {\n this.visible = false;\n }\n bringPlayers() {\n if (!gameStore.IS_DM) return;\n socket.emit(\"Players.Bring\", { x: l2gx(this.x), y: l2gy(this.y) });\n this.close();\n }\n createToken() {\n (this.$parent.$parent.$refs.createtokendialog).open(this.x, this.y);\n this.close();\n }\n showInitiative() {\n EventBus.$emit(\"Initiative.Show\");\n this.close();\n }\n}\n","import Axios from \"axios\";\nimport Vue from \"vue\";\nimport Component from \"vue-class-component\";\nimport { Route } from \"vue-router\";\n\nimport { coreStore } from \"@/core/store\";\n\nComponent.registerHooks([\"beforeRouteEnter\"]);\n\n@Component({})\nexport default class Logout extends Vue {\n beforeRouteEnter(to: Route, from: Route, next: ({}) => {}) {\n Axios.post(\"/api/logout\").then(() => {\n coreStore.setAuthenticated(false);\n coreStore.setUsername(\"\");\n next({ path: \"/auth/login\" });\n });\n }\n}\n","import { getModule, Module, Mutation, VuexModule } from \"vuex-module-decorators\";\n\nimport { rootStore } from \"@/store\";\n\nexport interface CoreState {\n authenticated: boolean;\n initialized: boolean;\n username: string;\n}\n\n@Module({ dynamic: true, store: rootStore, name: \"core\" })\nclass CoreStore extends VuexModule implements CoreState {\n authenticated = false;\n initialized = false;\n username = \"\";\n\n @Mutation\n setAuthenticated(auth: boolean) {\n this.authenticated = auth;\n }\n\n @Mutation\n setInitialized(init: boolean) {\n this.initialized = init;\n }\n\n @Mutation\n setUsername(username: string) {\n this.username = username;\n }\n}\n\nexport const coreStore = getModule(CoreStore);\n","import Vue from \"vue\";\n\nimport App from \"@/App.vue\";\nimport { router } from \"@/router\";\nimport { rootStore } from \"@/store\";\n\nVue.config.productionTip = false;\nVue.config.devtools = true;\nVue.config.performance = true;\n\nexport const app = new Vue({\n router,\n store: rootStore,\n render: h => h(App),\n}).$mount(\"#app\");\n\n(window).app = app;\n","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nimport Vue from \"vue\";\nimport Component from \"vue-class-component\";\n\n@Component({\n props: [\"visible\", \"left\", \"top\"],\n})\nexport default class ContextMenu extends Vue {}\n","import Axios, { AxiosError, AxiosResponse } from \"axios\";\nimport Vue from \"vue\";\nimport Component from \"vue-class-component\";\nimport { Route } from \"vue-router\";\n\n@Component({ template: \"\" })\nexport default class Initiative extends Vue {\n beforeRouteEnter(to: Route, from: Route, next: ({}) => {}) {\n Axios.post(\"/api/invite\", {\n code: to.params.code,\n })\n .then((response: AxiosResponse) => {\n next({ path: response.data.sessionUrl });\n })\n .catch((error: AxiosError) => {\n console.error(\"Invitation code could not be redeemed\");\n next({ path: \"/dashboard\" });\n });\n }\n}\n","import { render, staticRenderFns } from \"./prompt.vue?vue&type=template&id=0602c2e6&scoped=true&\"\nimport script from \"./prompt.vue?vue&type=script&lang=ts&\"\nexport * from \"./prompt.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./prompt.vue?vue&type=style&index=0&id=0602c2e6&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"0602c2e6\",\n null\n \n)\n\ncomponent.options.__file = \"prompt.vue\"\nexport default component.exports","import { GlobalPoint } from \"@/game/geom\";\nimport { gameStore } from \"@/game/store\";\n\nimport { Edge } from \"./cdt\";\nimport { drawPolygon } from \"./draw\";\nimport { PA_CDT } from \"./pa\";\nimport { Point, Sign, Triangle } from \"./tds\";\nimport { ccw, cw, orientation } from \"./triag\";\n\nexport function computeVisibility(q: GlobalPoint, target: \"vision\" | \"movement\", drawt?: boolean): number[][] {\n if (drawt === undefined) drawt = gameStore.drawTEContour;\n // console.time(\"CV\");\n const Q: Point = [q.x, q.y];\n const rawOutput: number[][] = [];\n const triangle = PA_CDT[target].locate(Q, null).loc;\n if (triangle === null) {\n console.error(\"Triangle not found\");\n return [];\n }\n // triangle.fill();\n rawOutput.push(triangle.vertices[1]!.point!);\n if (!triangle.isConstrained(0))\n expandEdge(Q, triangle.vertices[2]!.point!, triangle.vertices[1]!.point!, triangle, 0, rawOutput);\n rawOutput.push(triangle.vertices[2]!.point!);\n if (!triangle.isConstrained(1))\n expandEdge(Q, triangle.vertices[0]!.point!, triangle.vertices[2]!.point!, triangle, 1, rawOutput);\n rawOutput.push(triangle.vertices[0]!.point!);\n if (!triangle.isConstrained(2))\n expandEdge(Q, triangle.vertices[1]!.point!, triangle.vertices[0]!.point!, triangle, 2, rawOutput);\n // console.timeEnd(\"CV\");\n\n if (drawt) drawPolygon(rawOutput, \"red\");\n\n return rawOutput;\n}\n\nfunction expandEdge(\n q: Point,\n left: number[],\n right: number[],\n fh: Triangle,\n index: number,\n rawOutput: number[][],\n): void {\n // fh.edge(index).draw();\n const nfh = fh.neighbours[index]!;\n // nfh.fill(\"rgba(255, 0, 0, 0.25)\");\n const nIndex = nfh.indexT(fh);\n const rIndex = ccw(nIndex);\n const lIndex = cw(nIndex);\n const nvh = nfh.vertices[nIndex]!;\n const rvh = nfh.vertices[lIndex]!;\n const lvh = nfh.vertices[rIndex]!;\n\n const re: Edge = [nfh, rIndex];\n const le: Edge = [nfh, lIndex];\n\n const ro = orientation(q, right, nvh.point!);\n const lo = orientation(q, left, nvh.point!);\n\n // const ctx = layerManager.getLayer(\"draw\")!.ctx;\n // ctx.beginPath();\n // ctx.strokeStyle = \"red\";\n // ctx.lineJoin = \"round\";\n // ctx.moveTo(g2lx(q.x), g2ly(q.y));\n // ctx.lineTo(g2lx(left[0]), g2ly(left[1]));\n // ctx.moveTo(g2lx(q.x), g2ly(q.y));\n // ctx.lineTo(g2lx(nvh[0]), g2ly(nvh[1]));\n // ctx.strokeStyle = \"blue\";\n // ctx.moveTo(g2lx(q.x), g2ly(q.y));\n // ctx.lineTo(g2lx(right[0]), g2ly(right[1]));\n // ctx.moveTo(g2lx(q.x), g2ly(q.y));\n // ctx.lineTo(g2lx(nvh[0]), g2ly(nvh[1]));\n // ctx.closePath();\n // ctx.stroke();\n\n // Right edge is seen if the new vertex is ccw of the right ray\n if (ro === Sign.COUNTERCLOCKWISE) {\n if (re[0].isConstrained(re[1])) {\n // See if current right ray is rvh\n if (right !== rvh.point!) rawOutput.push(raySegIntersection(q, right, nvh.point!, rvh.point!));\n if (lo === Sign.COUNTERCLOCKWISE) rawOutput.push(raySegIntersection(q, left, nvh.point!, rvh.point!));\n } else {\n if (lo === Sign.COUNTERCLOCKWISE) return expandEdge(q, left, right, nfh, rIndex, rawOutput);\n else expandEdge(q, nvh.point!, right, nfh, rIndex, rawOutput);\n }\n }\n\n if (ro !== Sign.CLOCKWISE && lo !== Sign.COUNTERCLOCKWISE) {\n rawOutput.push(nvh.point!);\n }\n\n if (lo === Sign.CLOCKWISE) {\n if (le[0].isConstrained(le[1])) {\n if (ro === Sign.CLOCKWISE) {\n rawOutput.push(raySegIntersection(q, right, nvh.point!, lvh.point!));\n }\n if (left !== lvh.point!) {\n rawOutput.push(raySegIntersection(q, left, nvh.point!, lvh.point!));\n }\n return;\n } else {\n if (ro === Sign.CLOCKWISE) {\n return expandEdge(q, left, right, nfh, lIndex, rawOutput);\n } else {\n return expandEdge(q, left, nvh.point!, nfh, lIndex, rawOutput);\n }\n }\n }\n}\n\nfunction raySegIntersection(q: Point, b: Point, s: Point, t: Point) {\n const denominator = (t[1] - s[1]) * (b[0] - q[0]) - (t[0] - s[0]) * (b[1] - q[1]);\n const ua = ((t[0] - s[0]) * (q[1] - s[1]) - (t[1] - s[1]) * (q[0] - s[0])) / denominator;\n // const ub = ((b[0] - q.x) * (q.y - s[1]) - (b[1] - q.y) * (q.x - s[0])) / denominator;\n const x = q[0] + ua * (b[0] - q[0]);\n const y = q[1] + ua * (b[1] - q[1]);\n\n return [x, y];\n}\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return (_vm.selected)?_c('div',{staticClass:\"tool-detail\",style:({'--detailRight': _vm.detailRight, '--detailArrow': _vm.detailArrow})},[_c('div',[_vm._v(\"#X\")]),_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.xCount),expression:\"xCount\"}],attrs:{\"type\":\"text\"},domProps:{\"value\":(_vm.xCount)},on:{\"input\":function($event){if($event.target.composing){ return; }_vm.xCount=$event.target.value}}}),_c('div',[_vm._v(\"#Y\")]),_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.yCount),expression:\"yCount\"}],attrs:{\"type\":\"text\"},domProps:{\"value\":(_vm.yCount)},on:{\"input\":function($event){if($event.target.composing){ return; }_vm.yCount=$event.target.value}}})]):_vm._e()}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","export * from \"-!cache-loader?{\\\"cacheDirectory\\\":\\\"node_modules/.cache/vue-loader\\\",\\\"cacheIdentifier\\\":\\\"74f43d04-vue-loader-template\\\"}!../../../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./map.vue?vue&type=template&id=2104f147&\"","import { render, staticRenderFns } from \"./edit_dialog.vue?vue&type=template&id=23de098e&scoped=true&\"\nimport script from \"./edit_dialog.vue?vue&type=script&lang=ts&\"\nexport * from \"./edit_dialog.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./edit_dialog.vue?vue&type=style&index=0&id=23de098e&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"23de098e\",\n null\n \n)\n\ncomponent.options.__file = \"edit_dialog.vue\"\nexport default component.exports","export class Settings {\n static angleSteps = 4;\n static drawAngleLines = false;\n static drawFirstLightHit = false;\n static skipPlayerFOW = false;\n static skipLightFOW = false;\n\n static tempFill: string = \"fog\";\n}\n","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nimport axios, { AxiosError, AxiosResponse } from \"axios\";\nimport Vue from \"vue\";\nimport Component from \"vue-class-component\";\n\nimport { coreStore } from \"@/core/store\";\n\n@Component\nexport default class Login extends Vue {\n username = \"\";\n password = \"\";\n error = \"\";\n\n login() {\n axios\n .post(\"/api/login\", {\n username: this.username,\n password: this.password,\n })\n .then((response: AxiosResponse) => {\n coreStore.setUsername(this.username);\n coreStore.setAuthenticated(true);\n this.$router.push(this.$route.query.redirect || \"/\");\n })\n .catch((error: AxiosError) => {\n if (error.response) this.error = error.response.statusText;\n else this.error = \"Unknown error occured\";\n });\n }\n\n register() {\n axios\n .post(\"/api/register\", {\n username: this.username,\n password: this.password,\n })\n .then((response: AxiosResponse) => {\n coreStore.setUsername(this.username);\n coreStore.setAuthenticated(true);\n this.$router.push(this.$route.query.redirect || \"/\");\n })\n .catch((error: AxiosError) => {\n if (error.response) this.error = error.response.statusText;\n else this.error = \"Unknown error occured\";\n });\n }\n\n focusin(event: { target?: { nextElementSibling?: HTMLElement } }) {\n if (event.target && event.target.nextElementSibling) {\n const span = event.target.nextElementSibling;\n span.style.opacity = \"0\";\n }\n }\n\n focusout(event: { target?: { nextElementSibling?: HTMLElement } }) {\n if (event.target && event.target.nextElementSibling) {\n const span = event.target.nextElementSibling;\n span.style.opacity = \"1\";\n }\n }\n}\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('modal',{attrs:{\"visible\":_vm.visible},on:{\"close\":function($event){_vm.visible = false}},scopedSlots:_vm._u([{key:\"header\",fn:function(m){return _c('div',{staticClass:\"modal-header\",attrs:{\"draggable\":\"true\"},on:{\"dragstart\":m.dragStart,\"dragend\":m.dragEnd}},[_vm._v(\"Create basic token\")])}}])},[_c('div',{staticClass:\"modal-body\"},[_c('label',{attrs:{\"for\":\"createtokendialog-text\"}},[_vm._v(\"Text\")]),_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.text),expression:\"text\"}],attrs:{\"type\":\"text\",\"id\":\"createtokendialog-name\"},domProps:{\"value\":(_vm.text)},on:{\"input\":function($event){if($event.target.composing){ return; }_vm.text=$event.target.value}}}),_c('label',[_vm._v(\"Colours\")]),_c('div',{staticClass:\"colours\"},[_c('span',[_vm._v(\"Fill:\")]),_c('color-picker',{attrs:{\"color\":_vm.fillColour},on:{\"update:color\":function($event){_vm.fillColour=$event}}}),_c('span',[_vm._v(\"Border:\")]),_c('color-picker',{attrs:{\"color\":_vm.borderColour},on:{\"update:color\":function($event){_vm.borderColour=$event}}})],1),_c('canvas',{ref:\"canvas\",attrs:{\"width\":\"100px\",\"height\":\"100px\"}})]),_c('div',{staticClass:\"modal-footer\"},[_c('button',{on:{\"click\":_vm.submit}},[_vm._v(\"Submit\")])])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","export * from \"-!cache-loader?{\\\"cacheDirectory\\\":\\\"node_modules/.cache/vue-loader\\\",\\\"cacheIdentifier\\\":\\\"74f43d04-vue-loader-template\\\"}!../../../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./createtoken_modal.vue?vue&type=template&id=73816298&scoped=true&\"","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c(\"div\")}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","export * from \"-!cache-loader?{\\\"cacheDirectory\\\":\\\"node_modules/.cache/vue-loader\\\",\\\"cacheIdentifier\\\":\\\"74f43d04-vue-loader-template\\\"}!../../../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./tool.vue?vue&type=template&id=1e034b42&\"","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('transition',{attrs:{\"name\":\"modal\"}},[_c('div',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.visible),expression:\"visible\"}],staticClass:\"mask\",class:{'modal-mask': _vm.mask, 'dialog-mask': !_vm.mask},on:{\"click\":_vm.close,\"dragover\":function($event){$event.preventDefault();return _vm.dragOver($event)}}},[_c('div',{ref:\"container\",staticClass:\"modal-container\",on:{\"click\":function($event){$event.stopPropagation();}}},[_vm._t(\"header\",null,{dragStart:_vm.dragStart,dragEnd:_vm.dragEnd}),_vm._t(\"default\")],2)])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","export * from \"-!cache-loader?{\\\"cacheDirectory\\\":\\\"node_modules/.cache/vue-loader\\\",\\\"cacheIdentifier\\\":\\\"74f43d04-vue-loader-template\\\"}!../../../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./modal.vue?vue&type=template&id=12ed61ba&scoped=true&\"","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/ts-loader/index.js??ref--12-2!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./game.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/ts-loader/index.js??ref--12-2!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./game.vue?vue&type=script&lang=ts&\"","import Component from \"vue-class-component\";\n\nimport Tool from \"@/game/ui/tools/tool.vue\";\n\nimport { socket } from \"@/game/api/socket\";\nimport { GlobalPoint } from \"@/game/geom\";\nimport { layerManager } from \"@/game/layers/manager\";\nimport { Line } from \"@/game/shapes/line\";\nimport { Text } from \"@/game/shapes/text\";\nimport { gameStore } from \"@/game/store\";\nimport { l2g } from \"@/game/units\";\nimport { getMouse } from \"@/game/utils\";\n\n@Component\nexport class RulerTool extends Tool {\n name = \"Ruler\";\n active = false;\n startPoint: GlobalPoint | null = null;\n ruler: Line | null = null;\n text: Text | null = null;\n onMouseDown(event: MouseEvent) {\n const layer = layerManager.getLayer(\"draw\");\n if (layer === undefined) {\n console.log(\"No draw layer!\");\n return;\n }\n this.active = true;\n this.startPoint = l2g(getMouse(event));\n this.ruler = new Line(this.startPoint, this.startPoint, 3, gameStore.rulerColour);\n this.text = new Text(this.startPoint.clone(), \"\", \"bold 20px serif\");\n this.ruler.addOwner(gameStore.username);\n this.text.addOwner(gameStore.username);\n layer.addShape(this.ruler, true, true);\n layer.addShape(this.text, true, true);\n }\n onMouseMove(event: MouseEvent) {\n if (!this.active || this.ruler === null || this.startPoint === null || this.text === null) return;\n\n const layer = layerManager.getLayer(\"draw\");\n if (layer === undefined) {\n console.log(\"No draw layer!\");\n return;\n }\n const endPoint = l2g(getMouse(event));\n\n this.ruler.endPoint = endPoint;\n socket.emit(\"Shape.Update\", { shape: this.ruler!.asDict(), redraw: true, temporary: true });\n\n const diffsign = Math.sign(endPoint.x - this.startPoint.x) * Math.sign(endPoint.y - this.startPoint.y);\n const xdiff = Math.abs(endPoint.x - this.startPoint.x);\n const ydiff = Math.abs(endPoint.y - this.startPoint.y);\n const label =\n Math.round((Math.sqrt(xdiff ** 2 + ydiff ** 2) * gameStore.unitSize) / gameStore.gridSize) + \" ft\";\n const angle = Math.atan2(diffsign * ydiff, xdiff);\n const xmid = Math.min(this.startPoint.x, endPoint.x) + xdiff / 2;\n const ymid = Math.min(this.startPoint.y, endPoint.y) + ydiff / 2;\n this.text.refPoint = new GlobalPoint(xmid, ymid);\n this.text.text = label;\n this.text.angle = angle;\n socket.emit(\"Shape.Update\", { shape: this.text.asDict(), redraw: true, temporary: true });\n layer.invalidate(true);\n }\n onMouseUp(event: MouseEvent) {\n if (!this.active || this.ruler === null || this.startPoint === null || this.text === null) return;\n\n const layer = layerManager.getLayer(\"draw\");\n if (layer === undefined) {\n console.log(\"No active layer!\");\n return;\n }\n this.active = false;\n\n layer.removeShape(this.ruler, true, true);\n layer.removeShape(this.text, true, true);\n layer.invalidate(true);\n this.ruler = this.startPoint = this.text = null;\n }\n}\n","import { render, staticRenderFns } from \"./modal.vue?vue&type=template&id=12ed61ba&scoped=true&\"\nimport script from \"./modal.vue?vue&type=script&lang=ts&\"\nexport * from \"./modal.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./modal.vue?vue&type=style&index=0&id=12ed61ba&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"12ed61ba\",\n null\n \n)\n\ncomponent.options.__file = \"modal.vue\"\nexport default component.exports","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/ts-loader/index.js??ref--12-2!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./accordion.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/ts-loader/index.js??ref--12-2!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./accordion.vue?vue&type=script&lang=ts&\"","import { layerManager } from \"@/game/layers/manager\";\nimport { gameStore } from \"@/game/store\";\n\nimport { CDT } from \"./cdt\";\n\nexport let PA_CDT = {\n vision: new CDT(),\n movement: new CDT(),\n};\n\nexport function triangulate(target: \"vision\" | \"movement\", partial: boolean = false) {\n const cdt = new CDT();\n\n let shapes;\n if (target === \"vision\") shapes = gameStore.visionBlockers;\n else shapes = gameStore.movementblockers;\n\n for (const sh of shapes) {\n const shape = layerManager.UUIDMap.get(sh)!;\n if (partial && !shape.visibleInCanvas(layerManager.getLayer()!.canvas)) continue;\n for (let i = 0; i < shape.points.length; i++) {\n cdt.insertConstraint(shape.points[i], shape.points[(i + 1) % shape.points.length]);\n }\n }\n // LEFT WALL\n cdt.insertConstraint([-1e8, -1e8], [-1e8, 1e8]);\n cdt.insertConstraint([-1e8, 1e8], [-1e11, 1e8]);\n cdt.insertConstraint([-1e11, 1e8], [-1e11, -1e8]);\n cdt.insertConstraint([-1e11, -1e8], [-1e8, -1e8]);\n // TOP WALL\n cdt.insertConstraint([-1e8, -1e8], [1e8, -1e8]);\n cdt.insertConstraint([1e8, -1e8], [1e8, -1e11]);\n cdt.insertConstraint([1e8, -1e11], [-1e8, -1e11]);\n cdt.insertConstraint([-1e8, -1e11], [-1e8, -1e8]);\n // RIGHT WALL\n cdt.insertConstraint([1e8, -1e8], [1e8, 1e8]);\n cdt.insertConstraint([1e8, 1e8], [1e11, 1e8]);\n cdt.insertConstraint([1e11, 1e8], [1e11, -1e8]);\n cdt.insertConstraint([1e11, -1e8], [1e8, -1e8]);\n // BOT WALL\n cdt.insertConstraint([-1e8, 1e8], [1e8, 1e8]);\n cdt.insertConstraint([1e8, 1e8], [1e8, 1e11]);\n cdt.insertConstraint([1e8, 1e11], [-1e8, 1e11]);\n cdt.insertConstraint([-1e8, 1e11], [-1e8, 1e8]);\n PA_CDT[target] = cdt;\n (window).CDT = PA_CDT;\n}\n","import mod from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./tools.vue?vue&type=style&index=0&id=b6e1f51c&scoped=true&lang=css&\"; export default mod; export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./tools.vue?vue&type=style&index=0&id=b6e1f51c&scoped=true&lang=css&\"","import mod from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./main.vue?vue&type=style&index=0&id=61eb1455&scoped=true&lang=css&\"; export default mod; export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./main.vue?vue&type=style&index=0&id=61eb1455&scoped=true&lang=css&\"","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nimport Vue from \"vue\";\nimport Component from \"vue-class-component\";\n\nimport { Prop } from \"vue-property-decorator\";\n\nimport ColorPicker from \"@/core/components/colorpicker.vue\";\nimport Modal from \"@/core/components/modals/modal.vue\";\n\nimport { uuidv4 } from \"@/core/utils\";\nimport { socket } from \"@/game/api/socket\";\nimport { EventBus } from \"@/game/event-bus\";\nimport { layerManager } from \"@/game/layers/manager\";\nimport { Shape } from \"@/game/shapes/shape\";\nimport { gameStore } from \"@/game/store\";\n\n@Component({\n components: {\n Modal,\n \"color-picker\": ColorPicker,\n },\n})\nexport default class EditDialog extends Vue {\n @Prop() shape!: Shape;\n\n visible = false;\n\n get owned(): boolean {\n return this.shape.ownedBy();\n }\n\n mounted() {\n EventBus.$on(\"EditDialog.Open\", (shape: Shape) => {\n this.shape = shape;\n this.visible = true;\n });\n EventBus.$on(\"EditDialog.AddLabel\", (label: string) => {\n if (this.visible) {\n this.shape.labels.push(gameStore.labels[label]);\n this.updateShape(true);\n }\n });\n }\n\n beforeDestroy() {\n EventBus.$off(\"EditDialog.Open\");\n EventBus.$off(\"EditDialog.AddLabel\");\n }\n\n updated() {\n this.addEmpty();\n }\n\n addEmpty() {\n if (this.shape.owners[this.shape.owners.length - 1] !== \"\") this.shape.addOwner(\"\");\n if (\n !this.shape.trackers.length ||\n this.shape.trackers[this.shape.trackers.length - 1].name !== \"\" ||\n this.shape.trackers[this.shape.trackers.length - 1].value !== 0\n )\n this.shape.trackers.push({ uuid: uuidv4(), name: \"\", value: 0, maxvalue: 0, visible: false });\n if (\n !this.shape.auras.length ||\n this.shape.auras[this.shape.auras.length - 1].name !== \"\" ||\n this.shape.auras[this.shape.auras.length - 1].value !== 0\n )\n this.shape.auras.push({\n uuid: uuidv4(),\n name: \"\",\n value: 0,\n dim: 0,\n visionSource: false,\n colour: \"rgba(0,0,0,0)\",\n visible: false,\n });\n }\n updateShape(redraw: boolean, temporary = false) {\n if (!this.owned) return;\n socket.emit(\"Shape.Update\", { shape: this.shape.asDict(), redraw, temporary });\n if (redraw) layerManager.invalidate();\n this.addEmpty();\n }\n setToken(event: { target: HTMLInputElement }) {\n if (!this.owned) return;\n this.shape.setIsToken(event.target.checked);\n this.updateShape(true);\n }\n setVisionBlocker(event: { target: HTMLInputElement }) {\n if (!this.owned) return;\n this.shape.checkVisionSources();\n this.updateShape(true);\n }\n setMovementBlocker(event: { target: HTMLInputElement }) {\n if (!this.owned) return;\n this.shape.setMovementBlock(event.target.checked);\n this.updateShape(false);\n }\n updateAnnotation(event: { target: HTMLInputElement }) {\n if (!this.owned) return;\n const hadAnnotation = this.shape.annotation !== \"\";\n this.shape.annotation = event.target.value;\n if (this.shape.annotation !== \"\" && !hadAnnotation) {\n gameStore.annotations.push(this.shape.uuid);\n if (layerManager.hasLayer(\"draw\")) layerManager.getLayer(\"draw\")!.invalidate(true);\n } else if (this.shape.annotation === \"\" && hadAnnotation) {\n gameStore.annotations.splice(gameStore.annotations.findIndex(an => an === this.shape.uuid));\n if (layerManager.hasLayer(\"draw\")) layerManager.getLayer(\"draw\")!.invalidate(true);\n }\n this.updateShape(false);\n }\n updateOwner(event: { target: HTMLInputElement }, oldValue: string) {\n if (!this.owned) return;\n this.shape.updateOwner(oldValue, event.target.value);\n this.updateShape(gameStore.fowLOS);\n }\n removeOwner(value: string) {\n if (!this.owned) return;\n this.shape.removeOwner(value);\n this.updateShape(gameStore.fowLOS);\n }\n removeTracker(uuid: string) {\n if (!this.owned) return;\n this.shape.trackers = this.shape.trackers.filter(tr => tr.uuid !== uuid);\n this.updateShape(false);\n }\n removeAura(uuid: string) {\n if (!this.owned) return;\n this.shape.auras = this.shape.auras.filter(au => au.uuid !== uuid);\n this.shape.checkVisionSources();\n this.updateShape(true);\n }\n updateAuraVisionSource(aura: Aura) {\n if (!this.owned) return;\n aura.visionSource = !aura.visionSource;\n const i = gameStore.visionSources.findIndex(ls => ls.aura === aura.uuid);\n if (aura.visionSource && i === -1) gameStore.visionSources.push({ shape: this.shape.uuid, aura: aura.uuid });\n else if (!aura.visionSource && i >= 0) gameStore.visionSources.splice(i, 1);\n this.updateShape(true);\n }\n updateAuraColour(aura: Aura, colour: string) {\n if (!this.owned) return;\n const layer = layerManager.getLayer(this.shape.layer);\n if (layer === undefined) return;\n layer.invalidate(!aura.visionSource);\n }\n openLabelManager() {\n EventBus.$emit(\"LabelManager.Open\");\n }\n removeLabel(uuid: string) {\n if(!this.owned) return;\n this.shape.labels = this.shape.labels.filter(l => l.uuid !== uuid);\n this.updateShape(true);\n }\n}\n","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nimport Vue from \"vue\";\nimport Component from \"vue-class-component\";\n\nimport Modal from \"@/core/components/modals/modal.vue\";\n\n@Component({\n components: {\n Modal,\n },\n})\nexport default class ConfirmDialog extends Vue {\n $refs!: {\n confirm: HTMLButtonElement;\n };\n\n visible = false;\n yes = \"Yes\";\n no = \"No\";\n title = \"\";\n\n resolve = (ok: boolean) => {};\n reject = () => {};\n\n confirm() {\n this.resolve(true);\n this.close();\n }\n deny() {\n this.resolve(false);\n this.close();\n }\n close() {\n this.reject();\n this.visible = false;\n this.title = \"\";\n }\n open(title: string, yes = \"yes\", no = \"no\"): Promise {\n this.yes = yes;\n this.no = no;\n this.title = title;\n\n this.visible = true;\n this.$nextTick(() => {\n this.$refs.confirm.focus();\n });\n\n return new Promise((resolve, reject) => {\n this.resolve = resolve;\n this.reject = reject;\n });\n }\n}\n","import { render, staticRenderFns } from \"./map.vue?vue&type=template&id=2104f147&\"\nimport script from \"./map.vue?vue&type=script&lang=ts&\"\nexport * from \"./map.vue?vue&type=script&lang=ts&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\ncomponent.options.__file = \"map.vue\"\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"accordion\"},[_c('div',{attrs:{\"id\":\"header\"},on:{\"click\":function($event){$event.preventDefault();return _vm.toggleDisplay($event)}}},[_c('input',{ref:\"overall\",attrs:{\"type\":\"checkbox\"},on:{\"click\":function($event){$event.stopPropagation();return _vm.toggleCategory($event)}}}),_c('strong',[_vm._v(_vm._s(_vm.title))]),(_vm.showArrow)?[_c('span',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.showArrow && !_vm.active),expression:\"showArrow && !active\"}],staticClass:\"down-Arrow\"},[_vm._v(\"▼\")]),_c('span',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.showArrow && _vm.active),expression:\"showArrow && active\"}],staticClass:\"up-Arrow\"},[_vm._v(\"▲\")])]:_vm._e()],2),_c('div',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.active),expression:\"active\"}],attrs:{\"id\":\"body\"}},_vm._l((_vm.items),function(item){return _c('div',{key:item[0],staticClass:\"item\",on:{\"click\":function($event){_vm.toggleSelection(item[0])}}},[_c('input',{attrs:{\"type\":\"checkbox\"},domProps:{\"checked\":_vm.selected.includes(item[0])},on:{\"click\":function($event){$event.preventDefault();}}}),_vm._v(\" \"+_vm._s(item[1])+\"\\n \")])}))])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","export * from \"-!cache-loader?{\\\"cacheDirectory\\\":\\\"node_modules/.cache/vue-loader\\\",\\\"cacheIdentifier\\\":\\\"74f43d04-vue-loader-template\\\"}!../../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./accordion.vue?vue&type=template&id=0bf2b7ba&scoped=true&\"","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('modal',{attrs:{\"visible\":_vm.visible},on:{\"close\":_vm.close},scopedSlots:_vm._u([{key:\"header\",fn:function(m){return _c('div',{staticClass:\"modal-header\",attrs:{\"draggable\":\"true\"},on:{\"dragstart\":m.dragStart,\"dragend\":m.dragEnd}},[_vm._v(_vm._s(_vm.title))])}}])},[_c('div',{staticClass:\"modal-body\"},[_c('button',{ref:\"confirm\",on:{\"click\":_vm.confirm}},[_vm._v(_vm._s(_vm.yes))]),(!!_vm.no)?_c('button',{on:{\"click\":_vm.deny}},[_vm._v(_vm._s(_vm.no))]):_vm._e()])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","export * from \"-!cache-loader?{\\\"cacheDirectory\\\":\\\"node_modules/.cache/vue-loader\\\",\\\"cacheIdentifier\\\":\\\"74f43d04-vue-loader-template\\\"}!../../../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./confirm.vue?vue&type=template&id=1883e207&scoped=true&\"","\n\n\n\n\n\n\n\nimport Vue from \"vue\";\n\nimport Component from \"vue-class-component\";\n\nimport ContextMenu from \"@/core/components/contextmenu.vue\";\nimport ConfirmDialog from \"@/core/components/modals/confirm.vue\";\nimport Prompt from \"@/core/components/modals/prompt.vue\";\n\nimport { socket } from \"@/assetManager/socket\";\nimport { assetStore } from \"@/assetManager/store\";\nimport { getComponent, getRef } from \"@/core/utils\";\n\n@Component({\n components: {\n ContextMenu,\n },\n})\nexport default class AssetContextMenu extends Vue {\n visible = false;\n left = 0;\n top = 0;\n open(event: MouseEvent, inode: number) {\n if (!assetStore.selected.includes(inode)) getComponent().select(event, inode);\n\n this.visible = true;\n this.left = event.pageX;\n this.top = event.pageY;\n this.$nextTick(() => {\n this.$children[0].$el.focus();\n });\n }\n close() {\n this.visible = false;\n }\n rename() {\n if (assetStore.selected.length !== 1) return;\n const asset = assetStore.idMap.get(assetStore.selected[0])!;\n\n getRef(\"prompt\")\n .prompt(\"New name:\", `Renaming ${asset.name}`)\n .then(\n (name: string) => {\n socket.emit(\"Asset.Rename\", {\n asset: asset.id,\n name,\n });\n asset.name = name;\n getComponent().$forceUpdate();\n },\n () => {},\n );\n this.close();\n }\n remove() {\n if (assetStore.selected.length === 0) return;\n getRef(\"confirm\")\n .open(\"Are you sure you wish to remove this?\")\n .then(\n (result: boolean) => {\n if (result) {\n for (const sel of assetStore.selected) {\n socket.emit(\"Asset.Remove\", sel);\n if (assetStore.files.includes(sel))\n assetStore.files.splice(assetStore.files.indexOf(sel), 1);\n else assetStore.folders.splice(assetStore.folders.indexOf(sel), 1);\n }\n assetStore.clearSelected();\n }\n },\n () => {},\n );\n this.close();\n }\n}\n","import mod from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/ts-loader/index.js??ref--12-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./select.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/ts-loader/index.js??ref--12-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./select.vue?vue&type=script&lang=ts&\"","import mod from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./filter.vue?vue&type=style&index=0&lang=css&\"; export default mod; export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./filter.vue?vue&type=style&index=0&lang=css&\"","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nimport Vue from \"vue\";\nimport Component from \"vue-class-component\";\n\nimport Modal from \"@/core/components/modals/modal.vue\";\n\nimport { uuidv4 } from \"@/core/utils\";\nimport { socket } from \"@/game/api/socket\";\nimport { EventBus } from \"@/game/event-bus\";\nimport { gameStore } from \"@/game/store\";\n\n@Component({\n components: {\n Modal,\n },\n})\nexport default class LabelManager extends Vue {\n visible = false;\n newCategory = \"\";\n newName = \"\";\n search = \"\";\n\n mounted() {\n EventBus.$on(\"LabelManager.Open\", () => {\n this.visible = true;\n this.newCategory = \"\";\n this.newName = \"\";\n this.$nextTick(() => (this.$refs.search).focus());\n });\n }\n\n beforeDestroy() {\n EventBus.$off(\"LabelManager.Open\");\n }\n\n get labels() {\n const cat: {[category: string]: Label[]} = {'': []};\n for (const uuid of Object.keys(gameStore.labels)) {\n const label = gameStore.labels[uuid];\n if (this.search.length && `${label.category.toLowerCase()}${label.name.toLowerCase()}`.search(this.search.toLowerCase()) < 0) continue;\n if (label.user !== gameStore.username) continue;\n if (!label.category) cat[''].push(label);\n else {\n if (!(label.category in cat)) cat[label.category] = [];\n cat[label.category].push(label);\n cat[label.category].sort((a, b) => a.name.localeCompare(b.name));\n }\n }\n return cat;\n }\n\n get categories() {\n return Object.keys(this.labels).sort();\n }\n\n selectLabel(label: string) {\n EventBus.$emit(\"EditDialog.AddLabel\", label);\n this.visible = false;\n }\n\n toggleVisibility(label: Label) {\n label.visible = !label.visible;\n socket.emit(\"Label.Visibility.Set\", { uuid: label.uuid, visible: label.visible });\n }\n\n addLabel() {\n if (this.newName === \"\") return;\n const label = {\n uuid: uuidv4(),\n category: this.newCategory,\n name: this.newName,\n visible: false,\n user: gameStore.username,\n };\n gameStore.addLabel(label);\n socket.emit(\"Label.Add\", label);\n this.newCategory = \"\";\n this.newName = \"\";\n }\n\n deleteLabel(uuid: string) {\n gameStore.deleteLabel({ uuid, user: gameStore.username });\n socket.emit(\"Label.Delete\", uuid);\n }\n}\n","import { ServerPolygon } from \"../comm/types/shapes\";\nimport { GlobalPoint, LocalPoint } from \"../geom\";\nimport { g2lx, g2ly, g2lz, l2g } from \"../units\";\nimport { getFogColour } from \"../utils\";\nimport { BoundingRect } from \"./boundingrect\";\nimport { Shape } from \"./shape\";\n\nexport class Polygon extends Shape {\n type = \"polygon\";\n _vertices: GlobalPoint[] = [];\n\n constructor(\n startPoint: GlobalPoint,\n vertices: GlobalPoint[] = [],\n fillColour?: string,\n strokeColour?: string,\n uuid?: string,\n ) {\n super(startPoint, fillColour, strokeColour, uuid);\n this._vertices = vertices;\n }\n\n get refPoint() {\n return this._refPoint;\n }\n set refPoint(point: GlobalPoint) {\n const delta = point.subtract(this._refPoint);\n this._refPoint = point;\n for (let i = 0; i < this._vertices.length; i++) this._vertices[i] = this._vertices[i].add(delta);\n }\n\n get vertices() {\n return [this._refPoint, ...this._vertices];\n }\n\n asDict() {\n return Object.assign(this.getBaseDict(), {\n vertices: this._vertices.map(p => ({ x: p.x, y: p.y })),\n });\n }\n\n fromDict(data: ServerPolygon) {\n super.fromDict(data);\n this._vertices = data.vertices.map(v => new GlobalPoint(v.x, v.y));\n }\n\n get points() {\n return this.vertices.map(point => [point.x, point.y]);\n }\n\n draw(ctx: CanvasRenderingContext2D) {\n super.draw(ctx);\n ctx.lineCap = \"round\";\n ctx.lineJoin = \"round\";\n\n if (this.strokeColour === \"fog\") ctx.strokeStyle = getFogColour();\n else if (this.vertices.length === 2) ctx.strokeStyle = this.fillColour;\n else ctx.strokeStyle = this.strokeColour;\n if (this.fillColour === \"fog\") ctx.fillStyle = getFogColour();\n else ctx.fillStyle = this.fillColour;\n ctx.lineWidth = g2lz(2);\n\n ctx.beginPath();\n ctx.moveTo(g2lx(this.vertices[0].x), g2ly(this.vertices[0].y));\n for (let i = 1; i <= this.vertices.length; i++) {\n const vertex = this.vertices[i % this.vertices.length];\n ctx.lineTo(g2lx(vertex.x), g2ly(vertex.y));\n }\n ctx.fill();\n ctx.stroke();\n }\n\n contains(point: GlobalPoint): boolean {\n return this.getBoundingBox().contains(point);\n }\n\n center(): GlobalPoint;\n center(centerPoint: GlobalPoint): void;\n center(centerPoint?: GlobalPoint): GlobalPoint | void {\n return this.getBoundingBox().center();\n }\n visibleInCanvas(canvas: HTMLCanvasElement): boolean {\n return this.getBoundingBox().visibleInCanvas(canvas);\n } // TODO\n snapToGrid(): void {}\n resizeToGrid(): void {}\n resize(resizePoint: number, point: LocalPoint): void {\n if (resizePoint === 0) this._refPoint = l2g(point);\n else this._vertices[resizePoint - 1] = l2g(point);\n }\n getBoundingBox(): BoundingRect {\n let minx: number = this.refPoint.x;\n let maxx: number = this.refPoint.x;\n let miny: number = this.refPoint.y;\n let maxy: number = this.refPoint.y;\n for (const p of this._vertices) {\n if (p.x < minx) minx = p.x;\n if (p.x > maxx) maxx = p.x;\n if (p.y < miny) miny = p.y;\n if (p.y > maxy) maxy = p.y;\n }\n return new BoundingRect(new GlobalPoint(minx, miny), maxx - minx, maxy - miny);\n }\n}\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return (_vm.selected)?_c('div',{staticClass:\"tool-detail\",style:({'--detailRight': _vm.detailRight, '--detailArrow': _vm.detailArrow})},[_c('div',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.IS_DM),expression:\"IS_DM\"}]},[_vm._v(\"Mode\")]),_c('div',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.IS_DM),expression:\"IS_DM\"}],staticClass:\"selectgroup\"},_vm._l((_vm.modes),function(mode){return _c('div',{key:mode,staticClass:\"option\",class:{'option-selected': _vm.modeSelect === mode},on:{\"click\":function($event){_vm.modeSelect = mode}}},[_vm._v(_vm._s(mode))])})),_c('div',[_vm._v(\"Shape\")]),_c('div',{staticClass:\"selectgroup\"},_vm._l((_vm.shapes),function(shape){return _c('div',{key:shape,staticClass:\"option\",class:{'option-selected': _vm.shapeSelect === shape},on:{\"click\":function($event){_vm.shapeSelect = shape}}},[_c('i',{staticClass:\"fas\",class:'fa-' + shape})])})),_c('div',[_vm._v(\"Colours\")]),_c('div',{staticClass:\"selectgroup\"},[_c('color-picker',{staticClass:\"option\",attrs:{\"color\":_vm.fillColour},on:{\"update:color\":function($event){_vm.fillColour=$event}}}),_c('color-picker',{staticClass:\"option\",attrs:{\"color\":_vm.borderColour},on:{\"update:color\":function($event){_vm.borderColour=$event}}})],1),_c('div',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.shapeSelect === 'paint-brush'),expression:\"shapeSelect === 'paint-brush'\"}]},[_vm._v(\"Brush size\")]),_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.brushSize),expression:\"brushSize\"},{name:\"show\",rawName:\"v-show\",value:(_vm.shapeSelect === 'paint-brush'),expression:\"shapeSelect === 'paint-brush'\"}],staticStyle:{\"max-width\":\"100px\"},attrs:{\"type\":\"text\"},domProps:{\"value\":(_vm.brushSize)},on:{\"input\":function($event){if($event.target.composing){ return; }_vm.brushSize=$event.target.value}}})]):_vm._e()}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","export * from \"-!cache-loader?{\\\"cacheDirectory\\\":\\\"node_modules/.cache/vue-loader\\\",\\\"cacheIdentifier\\\":\\\"74f43d04-vue-loader-template\\\"}!../../../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./draw.vue?vue&type=template&id=639cd890&scoped=true&\"","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"outer\",on:{\"click\":function($event){if($event.target !== $event.currentTarget){ return null; }return _vm.open($event)}}},[_c('div',{staticClass:\"current-color\",style:(_vm.transparent ? 'background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAMCAIAAADZF8uwAAAAGUlEQVQYV2M4gwH+YwCGIasIUwhT25BVBADtzYNYrHvv4gAAAABJRU5ErkJggg==)' : 'background-color:' + _vm.color),on:{\"click\":function($event){if($event.target !== $event.currentTarget){ return null; }return _vm.open($event)}}}),_c('div',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.display),expression:\"display\"}],staticClass:\"mask\",on:{\"click\":function($event){if($event.target !== $event.currentTarget){ return null; }return _vm.closePicker($event)}}}),_c('chrome-picker',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.display),expression:\"display\"}],ref:\"chromePicker\",style:({position: 'fixed', left:_vm.left + 'px', top:_vm.top + 'px', 'z-index': 9999}),attrs:{\"value\":_vm.color,\"tabindex\":\"-1\"},on:{\"input\":_vm.updateColor}})],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","export * from \"-!cache-loader?{\\\"cacheDirectory\\\":\\\"node_modules/.cache/vue-loader\\\",\\\"cacheIdentifier\\\":\\\"74f43d04-vue-loader-template\\\"}!../../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./colorpicker.vue?vue&type=template&id=d32461a4&scoped=true&\"","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return (_vm.selected)?_c('div',{staticClass:\"tool-detail\",style:({'--detailRight': _vm.detailRight, '--detailArrow': _vm.detailArrow})},[_c('div',{attrs:{\"id\":\"accordion-container\"}},_vm._l((_vm.categories),function(category){return _c('accordion',{key:category,attrs:{\"title\":category === '' ? 'no category' : category,\"showArrow\":false,\"items\":_vm.labels[category],\"initialValues\":_vm.initalValues[category]},on:{\"selectionupdate\":_vm.updateSelection}})}))]):_vm._e()}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","export * from \"-!cache-loader?{\\\"cacheDirectory\\\":\\\"node_modules/.cache/vue-loader\\\",\\\"cacheIdentifier\\\":\\\"74f43d04-vue-loader-template\\\"}!../../../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./filter.vue?vue&type=template&id=dca395d6&scoped=true&\"","import { render, staticRenderFns } from \"./manager.vue?vue&type=template&id=5b0def98&\"\nimport script from \"./manager.vue?vue&type=script&lang=ts&\"\nexport * from \"./manager.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./manager.vue?vue&type=style&index=0&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\ncomponent.options.__file = \"manager.vue\"\nexport default component.exports","import mod from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/ts-loader/index.js??ref--12-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./tools.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/ts-loader/index.js??ref--12-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./tools.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./tool.vue?vue&type=template&id=1e034b42&\"\nimport script from \"./tool.vue?vue&type=script&lang=ts&\"\nexport * from \"./tool.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./tool.vue?vue&type=style&index=0&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\ncomponent.options.__file = \"tool.vue\"\nexport default component.exports","import mod from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./initiative.vue?vue&type=style&index=0&id=07fc8ff2&scoped=true&lang=css&\"; export default mod; export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./initiative.vue?vue&type=style&index=0&id=07fc8ff2&scoped=true&lang=css&\"","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('Modal',{attrs:{\"visible\":_vm.visible},on:{\"close\":_vm.close},scopedSlots:_vm._u([{key:\"header\",fn:function(m){return _c('div',{staticClass:\"modal-header\",attrs:{\"draggable\":\"true\"},on:{\"dragstart\":m.dragStart,\"dragend\":m.dragEnd}},[_vm._v(_vm._s(_vm.title))])}}])},[_c('div',{staticClass:\"modal-body\"},[_vm._v(\"\\n \"+_vm._s(_vm.question)+\"\\n \"),_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.answer),expression:\"answer\"}],ref:\"answer\",attrs:{\"type\":\"text\"},domProps:{\"value\":(_vm.answer)},on:{\"keyup\":function($event){if(!('button' in $event)&&_vm._k($event.keyCode,\"enter\",13,$event.key,\"Enter\")){ return null; }return _vm.submit($event)},\"input\":function($event){if($event.target.composing){ return; }_vm.answer=$event.target.value}}})]),_c('div',{staticClass:\"modal-footer\"},[_c('button',{on:{\"click\":_vm.submit}},[_vm._v(\"Submit\")])])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","export * from \"-!cache-loader?{\\\"cacheDirectory\\\":\\\"node_modules/.cache/vue-loader\\\",\\\"cacheIdentifier\\\":\\\"74f43d04-vue-loader-template\\\"}!../../../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./prompt.vue?vue&type=template&id=0602c2e6&scoped=true&\"","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nimport Vue from \"vue\";\nimport Component from \"vue-class-component\";\nimport draggable from \"vuedraggable\";\nVue.component(\"draggable\", draggable);\n\nimport Modal from \"@/core/components/modals/modal.vue\";\n\nimport { uuidv4 } from \"@/core/utils\";\nimport { socket } from \"@/game/api/socket\";\nimport { InitiativeData, InitiativeEffect } from \"@/game/comm/types/general\";\nimport { EventBus } from \"@/game/event-bus\";\nimport { layerManager } from \"@/game/layers/manager\";\nimport { gameStore } from \"@/game/store\";\nimport { gameManager } from '../manager';\n\n@Component({\n components: {\n Modal,\n draggable,\n },\n})\nexport default class Initiative extends Vue {\n visible = false;\n data: InitiativeData[] = [];\n currentActor: string | null = null;\n roundCounter = 0;\n visionLock = false;\n cameraLock = false;\n _activeTokens: string[] = [];\n\n mounted() {\n EventBus.$on(\"Initiative.Clear\", this.clear);\n EventBus.$on(\"Initiative.Remove\", (data: string) => this.removeInitiative(data));\n EventBus.$on(\"Initiative.Show\", () => (this.visible = true));\n\n socket.on(\"Initiative.Set\", (data: InitiativeData[]) => {\n this.data = data;\n });\n socket.on(\"Initiative.Turn.Set\", (data: string) => this.setTurn(data));\n socket.on(\"Initiative.Turn.Update\", (data: string) => this.updateTurn(data, false));\n socket.on(\"Initiative.Round.Update\", (data: number) => this.setRound(data, false));\n socket.on(\"Initiative.Effect.New\", (data: { actor: string; effect: InitiativeEffect }) => {\n const actor = this.getActor(data.actor);\n if (actor === undefined) return;\n this.createEffect(actor, data.effect, false);\n });\n socket.on(\"Initiative.Effect.Update\", (data: { actor: string; effect: InitiativeEffect }) =>\n this.updateEffect(data.actor, data.effect, false),\n );\n }\n\n beforeDestroy() {\n EventBus.$off(\"Initiative.Clear\");\n EventBus.$off(\"Initiative.Remove\");\n EventBus.$off(\"Initiative.Show\");\n }\n\n // Utilities\n clear() {\n this.data = [];\n this.currentActor = null;\n }\n getActor(actorId: string) {\n return this.data.find(a => a.uuid === actorId);\n }\n contains(uuid: string) {\n return this.data.some(d => d.uuid === uuid);\n }\n owns(actor: InitiativeData): boolean {\n if (gameStore.IS_DM) return true;\n const shape = layerManager.UUIDMap.get(actor.uuid);\n // Shapes that are unknown to this client are hidden from this client but owned by other clients\n if (shape === undefined) return false;\n return shape.owners.includes(gameStore.username);\n }\n getDefaultEffect() {\n return { uuid: uuidv4(), name: \"New Effect\", turns: 10 };\n }\n fakeSetData(dataTransfer: DataTransfer) {\n dataTransfer.setData(\"Hack\", \"\");\n }\n syncInitiative(data: InitiativeData | { uuid: string }) {\n socket.emit(\"Initiative.Update\", data);\n }\n // Events\n addInitiative(data: InitiativeData) {\n const d = this.data.findIndex(a => a.uuid === data.uuid);\n if (d >= 0) return;\n if (data.initiative === undefined) data.initiative = 0;\n this.syncInitiative(data);\n }\n removeInitiative(uuid: string) {\n const d = this.data.findIndex(a => a.uuid === uuid);\n if (d < 0 || this.data[d].group) return;\n this.syncInitiative({ uuid });\n // Remove highlight\n const shape = layerManager.UUIDMap.get(uuid);\n if (shape === undefined) return;\n if (shape.showHighlight) {\n shape.showHighlight = false;\n layerManager.getLayer(shape.layer)!.invalidate(true);\n }\n }\n updateOrder() {\n if (!gameStore.IS_DM) return;\n socket.emit(\"Initiative.Set\", this.data.map(d => d.uuid));\n }\n updateTurn(actorId: string | null, sync: boolean) {\n if (!gameStore.IS_DM && sync) return;\n this.currentActor = actorId;\n const actor = this.data.find(a => a.uuid === actorId);\n if (actor === undefined) return;\n if (actor.effects) {\n for (let e = actor.effects.length - 1; e >= 0; e--) {\n if (actor.effects[e].turns <= 0) actor.effects.splice(e, 1);\n else actor.effects[e].turns--;\n }\n }\n if (this.visionLock) {\n if (actorId !== null && gameStore.ownedtokens.includes(actorId)) gameStore.setActiveTokens([actorId]);\n else gameStore.setActiveTokens([]);\n }\n if (this.cameraLock) {\n if (actorId !== null) {\n const shape = layerManager.UUIDMap.get(actorId);\n if (shape !== undefined && shape.ownedBy()) {\n gameManager.setCenterPosition(shape.center());\n }\n }\n }\n if (sync) socket.emit(\"Initiative.Turn.Update\", actorId);\n }\n setRound(round: number, sync: boolean) {\n if (!gameStore.IS_DM && sync) return;\n this.roundCounter = round;\n if (sync) socket.emit(\"Initiative.Round.Update\", round);\n }\n setTurn(actorId: string | null) {\n this.currentActor = actorId;\n }\n nextTurn() {\n if (!gameStore.IS_DM) return;\n const order = this.data;\n const next = order[(order.findIndex(a => a.uuid === this.currentActor) + 1) % order.length];\n if (this.data[0].uuid === next.uuid) this.setRound(this.roundCounter + 1, true);\n this.updateTurn(next.uuid, true);\n }\n toggleHighlight(actor: InitiativeData, show: boolean) {\n const shape = layerManager.UUIDMap.get(actor.uuid);\n if (shape === undefined) return;\n shape.showHighlight = show;\n layerManager.getLayer(shape.layer)!.invalidate(true);\n }\n toggleOption(actor: InitiativeData, option: \"visible\" | \"group\") {\n if (!this.owns(actor)) return;\n actor[option] = !actor[option];\n this.syncInitiative(actor);\n }\n createEffect(actor: InitiativeData, effect: InitiativeEffect, sync: boolean) {\n if (!this.owns(actor)) return;\n actor.effects.push(effect);\n if (sync) socket.emit(\"Initiative.Effect.New\", { actor: actor.uuid, effect });\n }\n syncEffect(actor: InitiativeData, effect: InitiativeEffect) {\n if (!this.owns(actor)) return;\n socket.emit(\"Initiative.Effect.Update\", { actor: actor.uuid, effect });\n }\n updateEffect(actorId: string, effect: InitiativeEffect, sync: boolean) {\n const actor = this.data.find(a => a.uuid === actorId);\n if (actor === undefined) return;\n const effectIndex = actor.effects.findIndex(e => e.uuid === effect.uuid);\n if (effectIndex === undefined) return;\n actor.effects[effectIndex] = effect;\n if (sync) this.syncEffect(actor, effect);\n else this.$forceUpdate();\n }\n toggleVisionLock() {\n this.visionLock = !this.visionLock;\n if (this.visionLock) {\n this._activeTokens = [...gameStore._activeTokens];\n if (this.currentActor !== null && gameStore.ownedtokens.includes(this.currentActor)) gameStore.setActiveTokens([this.currentActor]);\n } else {\n gameStore.setActiveTokens(this._activeTokens);\n }\n }\n}\n","import { render, staticRenderFns } from \"./selection_info.vue?vue&type=template&id=674cf937&scoped=true&\"\nimport script from \"./selection_info.vue?vue&type=script&lang=ts&\"\nexport * from \"./selection_info.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./selection_info.vue?vue&type=style&index=0&id=674cf937&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"674cf937\",\n null\n \n)\n\ncomponent.options.__file = \"selection_info.vue\"\nexport default component.exports","import Vue from \"vue\";\n\nimport { Action, getModule, Module, Mutation, VuexModule } from \"vuex-module-decorators\";\n\nimport { AssetList } from \"@/core/comm/types\";\nimport { socket } from \"@/game/api/socket\";\nimport { sendClientOptions } from \"@/game/api/utils\";\nimport { Note } from \"@/game/comm/types/general\";\nimport { ServerShape } from \"@/game/comm/types/shapes\";\nimport { GlobalPoint } from \"@/game/geom\";\nimport { layerManager } from \"@/game/layers/manager\";\nimport { g2l, l2g } from \"@/game/units\";\nimport { zoomValue } from \"@/game/utils\";\nimport { BoundingVolume } from \"@/game/visibility/bvh/bvh\";\nimport { triangulate } from \"@/game/visibility/te/pa\";\nimport { rootStore } from \"@/store\";\n\nexport interface GameState {\n boardInitialized: boolean;\n}\n\n@Module({ dynamic: true, store: rootStore, name: \"game\", namespaced: true })\nclass GameStore extends VuexModule implements GameState {\n // This is a limited view of selectable layers that is used to generate the layer selection UI and ability to switch layers\n // See the layerManager for proper layer management tools\n layers: string[] = [];\n selectedLayerIndex = -1;\n boardInitialized = false;\n\n locations: string[] = [];\n\n assets: AssetList = {};\n\n notes: Note[] = [];\n\n IS_DM = false;\n FAKE_PLAYER = false;\n gridSize = 50;\n username = \"\";\n roomName = \"\";\n roomCreator = \"\";\n invitationCode = \"\";\n\n gridColour = \"rgba(0, 0, 0, 1)\";\n fowColour = \"rgba(0, 0, 0, 1)\";\n rulerColour = \"rgba(255, 0, 0, 1)\";\n panX = 0;\n panY = 0;\n\n zoomDisplay = 0.5;\n // zoomFactor = 1;\n\n unitSize = 5;\n useGrid = true;\n fullFOW = false;\n fowOpacity = 0.3;\n fowLOS = false;\n locationName = \"\";\n\n visionSources: { shape: string; aura: string }[] = [];\n visionBlockers: string[] = [];\n annotations: string[] = [];\n movementblockers: string[] = [];\n ownedtokens: string[] = [];\n _activeTokens: string[] = [];\n\n BV = Object.freeze(new BoundingVolume([]));\n\n visionMode: \"bvh\" | \"triangle\" = \"bvh\";\n drawTEContour = false;\n visionRangeMin = 1640;\n visionRangeMax = 3281;\n\n clipboard: ServerShape[] = [];\n\n // Maps are not yet supported in Vue untill 3.X, so for now we're using a plain old object\n labels: { [uuid: string]: Label } = {};\n\n filterNoLabel = false;\n labelFilters: string[] = [];\n\n showUI = true;\n\n get selectedLayer() {\n return this.layers[this.selectedLayerIndex];\n }\n\n get zoomFactor() {\n return zoomValue(this.zoomDisplay);\n }\n\n get activeTokens() {\n if (this._activeTokens.length === 0) return this.ownedtokens;\n return this._activeTokens;\n }\n\n @Mutation\n setFakePlayer(value: boolean) {\n this.FAKE_PLAYER = value;\n this.IS_DM = !value;\n layerManager.invalidate();\n }\n\n @Mutation\n setZoomDisplay(zoom: number) {\n if (zoom === this.zoomDisplay) return;\n if (zoom < 0) zoom = 0;\n if (zoom > 1) zoom = 1;\n this.zoomDisplay = zoom;\n layerManager.invalidate();\n }\n\n @Mutation\n setVisionMode(data: { mode: \"bvh\" | \"triangle\"; sync: boolean }) {\n this.visionMode = data.mode;\n if (data.sync) socket.emit(\"Location.Options.Set\", { vision_mode: data.mode });\n }\n\n @Mutation\n setBoardInitialized(boardInitialized: boolean) {\n this.boardInitialized = boardInitialized;\n }\n\n @Mutation\n toggleUnlabeledFilter() {\n this.filterNoLabel = !this.filterNoLabel;\n }\n\n @Mutation\n addLabel(label: Label) {\n Vue.set(this.labels, label.uuid, label);\n }\n\n @Mutation\n setLabelFilters(filters: string[]) {\n this.labelFilters = filters;\n }\n\n @Mutation\n setLabelVisibility(data: { user: string; uuid: string; visible: boolean }) {\n if (!(data.uuid in this.labels)) return;\n this.labels[data.uuid].visible = data.visible;\n }\n\n @Mutation\n deleteLabel(data: { uuid: string; user: string }) {\n if (!(data.uuid in this.labels)) return;\n const label = this.labels[data.uuid];\n const updatedLayers: Set = new Set();\n for (const shape of layerManager.UUIDMap.values()) {\n const i = shape.labels.indexOf(label);\n if (i >= 0) {\n shape.labels.splice(i, 1);\n updatedLayers.add(shape.layer);\n }\n }\n for (const layer of updatedLayers) layerManager.getLayer(layer)!.invalidate(false);\n Vue.delete(this.labels, data.uuid);\n }\n\n @Mutation\n setDM(isDM: boolean) {\n this.IS_DM = isDM;\n }\n\n @Mutation\n setUsername(username: string) {\n this.username = username;\n }\n\n @Mutation\n setRoomName(name: string) {\n this.roomName = name;\n }\n\n @Mutation\n setRoomCreator(name: string) {\n this.roomCreator = name;\n }\n\n @Mutation\n setInvitationCode(code: string) {\n this.invitationCode = code;\n }\n\n @Mutation\n addLayer(name: string) {\n this.layers.push(name);\n if (this.selectedLayerIndex === -1) this.selectedLayerIndex = this.layers.indexOf(name);\n }\n\n @Mutation\n selectLayer(data: { name: string; sync: boolean }) {\n const index = this.layers.indexOf(data.name);\n if (index >= 0) this.selectedLayerIndex = index;\n if (data.sync) socket.emit(\"Client.ActiveLayer.Set\", data.name);\n }\n\n @Mutation\n newNote(data: { note: Note; sync: boolean }) {\n this.notes.push(data.note);\n if (data.sync) socket.emit(\"Note.New\", data.note);\n }\n\n @Mutation\n setAssets(assets: AssetList) {\n this.assets = assets;\n }\n\n @Mutation\n setLocations(locations: string[]) {\n this.locations = locations;\n }\n\n @Mutation\n resetLayerInfo() {\n this.layers = [];\n this.selectedLayerIndex = -1;\n }\n\n @Mutation\n recalculateVision(partial = false) {\n if (this.boardInitialized) {\n if (this.visionMode === \"triangle\") triangulate(\"vision\", partial);\n else this.BV = Object.freeze(new BoundingVolume(this.visionBlockers));\n }\n }\n\n @Mutation\n recalculateMovement(partial = false) {\n if (this.boardInitialized && this.visionMode === \"triangle\") triangulate(\"movement\", partial);\n }\n\n @Mutation\n updateZoom(data: { newZoomDisplay: number; zoomLocation: GlobalPoint }) {\n if (data.newZoomDisplay === this.zoomDisplay) return;\n if (data.newZoomDisplay < 0) data.newZoomDisplay = 0;\n if (data.newZoomDisplay > 1) data.newZoomDisplay = 1;\n const oldLoc = g2l(data.zoomLocation);\n this.zoomDisplay = data.newZoomDisplay;\n const newLoc = l2g(oldLoc);\n // Change the pan settings to keep the zoomLocation in the same exact location before and after the zoom.\n const diff = newLoc.subtract(data.zoomLocation);\n this.panX += diff.x;\n this.panY += diff.y;\n layerManager.invalidate();\n sendClientOptions();\n }\n\n @Mutation\n setGridColour(data: { colour: string; sync: boolean }) {\n this.gridColour = data.colour;\n layerManager.getGridLayer()!.drawGrid();\n if (data.sync) socket.emit(\"Client.Options.Set\", { gridColour: data.colour });\n }\n\n @Mutation\n setFOWColour(data: { colour: string; sync: boolean }) {\n this.fowColour = data.colour;\n layerManager.invalidate();\n if (data.sync) socket.emit(\"Client.Options.Set\", { fowColour: data.colour });\n }\n\n @Mutation\n setRulerColour(data: { colour: string; sync: boolean }) {\n this.rulerColour = data.colour;\n if (data.sync) socket.emit(\"Client.Options.Set\", { rulerColour: data.colour });\n }\n\n @Mutation\n setPanX(x: number) {\n this.panX = x;\n }\n\n @Mutation\n setPanY(y: number) {\n this.panY = y;\n }\n\n @Mutation\n increasePanX(increase: number) {\n this.panX += increase;\n }\n\n @Mutation\n increasePanY(increase: number) {\n this.panY += increase;\n }\n\n @Mutation\n setUnitSize(data: { unitSize: number; sync: boolean }) {\n if (this.unitSize !== data.unitSize && data.unitSize > 0 && data.unitSize < Infinity) {\n this.unitSize = data.unitSize;\n layerManager.invalidate();\n if (data.sync) socket.emit(\"Location.Options.Set\", { unit_size: data.unitSize });\n }\n }\n\n @Mutation\n setUseGrid(data: { useGrid: boolean; sync: boolean }) {\n if (this.useGrid !== data.useGrid) {\n this.useGrid = data.useGrid;\n const gridLayer = layerManager.getGridLayer()!;\n if (data.useGrid) gridLayer.canvas.style.display = \"block\";\n else gridLayer.canvas.style.display = \"none\";\n if (data.sync) socket.emit(\"Location.Options.Set\", { use_grid: data.useGrid });\n }\n }\n\n @Mutation\n setGridSize(data: { gridSize: number; sync: boolean }): void {\n if (this.gridSize !== data.gridSize && data.gridSize > 0) {\n this.gridSize = data.gridSize;\n const gridLayer = layerManager.getGridLayer();\n if (gridLayer !== undefined) gridLayer.drawGrid();\n if (data.sync) socket.emit(\"Gridsize.Set\", data.gridSize);\n }\n }\n\n @Mutation\n setVisionRangeMin(data: { value: number; sync: boolean }): void {\n this.visionRangeMin = data.value;\n layerManager.invalidateLight();\n if (data.sync) socket.emit(\"Location.Options.Set\", { vision_min_range: data.value });\n }\n\n @Mutation\n setVisionRangeMax(data: { value: number; sync: boolean }): void {\n this.visionRangeMax = Math.max(data.value, this.visionRangeMin);\n layerManager.invalidateLight();\n if (data.sync) socket.emit(\"Location.Options.Set\", { vision_max_range: this.visionRangeMax });\n }\n\n @Mutation\n setFullFOW(data: { fullFOW: boolean; sync: boolean }) {\n if (this.fullFOW !== data.fullFOW) {\n this.fullFOW = data.fullFOW;\n layerManager.invalidateLight();\n if (data.sync) socket.emit(\"Location.Options.Set\", { full_fow: data.fullFOW });\n }\n }\n\n @Mutation\n setFOWOpacity(data: { fowOpacity: number; sync: boolean }) {\n this.fowOpacity = data.fowOpacity;\n layerManager.invalidateLight();\n if (data.sync) socket.emit(\"Location.Options.Set\", { fow_opacity: data.fowOpacity });\n }\n\n @Mutation\n setLineOfSight(data: { fowLOS: boolean; sync: boolean }) {\n if (this.fowLOS !== data.fowLOS) {\n this.fowLOS = data.fowLOS;\n layerManager.invalidate();\n if (data.sync) socket.emit(\"Location.Options.Set\", { fow_los: data.fowLOS });\n }\n }\n\n @Mutation\n setLocationName(name: string) {\n this.locationName = name;\n }\n\n @Mutation\n updateNote(data: { note: Note; sync: boolean }) {\n const actualNote = this.notes.find(n => n.uuid === data.note.uuid);\n if (actualNote === undefined) return;\n actualNote.title = data.note.title;\n actualNote.text = data.note.text;\n if (data.sync) socket.emit(\"Note.Update\", actualNote);\n }\n\n @Mutation\n removeNote(data: { note: Note; sync: boolean }) {\n this.notes = this.notes.filter(n => n.uuid !== data.note.uuid);\n if (data.sync) socket.emit(\"Note.Remove\", data.note.uuid);\n }\n\n @Mutation\n toggleUI() {\n this.showUI = !this.showUI;\n }\n\n @Mutation\n setClipboard(clipboard: ServerShape[]) {\n this.clipboard = clipboard;\n }\n\n @Mutation\n setActiveTokens(tokens: string[]) {\n this._activeTokens = tokens;\n layerManager.invalidateLight();\n }\n\n @Mutation\n addActiveToken(token: string) {\n this._activeTokens.push(token);\n layerManager.invalidateLight();\n }\n\n @Mutation\n removeActiveToken(token: string) {\n if (this._activeTokens.length === 0) {\n this._activeTokens = [...this.ownedtokens];\n }\n this._activeTokens.splice(this._activeTokens.indexOf(token), 1);\n layerManager.invalidateLight();\n }\n\n @Action\n clear() {\n (this.context.state).visionSources = [];\n (this.context.state).visionBlockers = [];\n (this.context.state).ownedtokens = [];\n (this.context.state).annotations = [];\n (this.context.state).movementblockers = [];\n (this.context.state).notes = [];\n this.context.commit(\"recalculateVision\");\n this.context.commit(\"recalculateMovement\");\n }\n}\n\nexport const gameStore = getModule(GameStore);\n","import mod from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./colorpicker.vue?vue&type=style&index=0&id=d32461a4&scoped=true&lang=css&\"; export default mod; export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./colorpicker.vue?vue&type=style&index=0&id=d32461a4&scoped=true&lang=css&\"","import mod from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/ts-loader/index.js??ref--12-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./confirm.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/ts-loader/index.js??ref--12-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./confirm.vue?vue&type=script&lang=ts&\"","import { ServerAura } from \"@/game/comm/types/shapes\";\n\nexport const aurasFromServer = (auras: ServerAura[]): Aura[] => {\n const result = [];\n for (const aura of auras) {\n result.push({\n uuid: aura.uuid,\n visionSource: aura.vision_source,\n visible: aura.visible,\n name: aura.name,\n value: aura.value,\n dim: aura.dim,\n colour: aura.colour,\n });\n }\n return result;\n};\n\nexport const aurasToServer = (auras: Aura[]): ServerAura[] => {\n const result = [];\n for (const aura of auras) {\n result.push({\n uuid: aura.uuid,\n vision_source: aura.visionSource,\n visible: aura.visible,\n name: aura.name,\n value: aura.value,\n dim: aura.dim,\n colour: aura.colour,\n });\n }\n return result;\n};\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/ts-loader/index.js??ref--12-2!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./contextMenu.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/ts-loader/index.js??ref--12-2!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./contextMenu.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./note.vue?vue&type=template&id=7a3669fd&scoped=true&\"\nimport script from \"./note.vue?vue&type=script&lang=ts&\"\nexport * from \"./note.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./note.vue?vue&type=style&index=0&id=7a3669fd&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"7a3669fd\",\n null\n \n)\n\ncomponent.options.__file = \"note.vue\"\nexport default component.exports","import { render, staticRenderFns } from \"./initiative.vue?vue&type=template&id=07fc8ff2&scoped=true&\"\nimport script from \"./initiative.vue?vue&type=script&lang=ts&\"\nexport * from \"./initiative.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./initiative.vue?vue&type=style&index=0&id=07fc8ff2&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"07fc8ff2\",\n null\n \n)\n\ncomponent.options.__file = \"initiative.vue\"\nexport default component.exports","import { ServerLayer } from \"@/game/comm/types/general\";\nimport { FOWLayer } from \"@/game/layers/fow\";\nimport { FOWPlayersLayer } from \"@/game/layers/fowplayers\";\nimport { GridLayer } from \"@/game/layers/grid\";\nimport { Layer } from \"@/game/layers/layer\";\nimport { layerManager } from \"@/game/layers/manager\";\nimport { gameStore } from \"@/game/store\";\n\nexport function createLayer(layerInfo: ServerLayer) {\n // Create canvas element\n const canvas = document.createElement(\"canvas\");\n canvas.style.zIndex = layerManager.layers.length.toString();\n canvas.width = window.innerWidth;\n canvas.height = window.innerHeight;\n\n // Create the Layer instance\n let layer: Layer;\n if (layerInfo.type_ === \"grid\") layer = new GridLayer(canvas, layerInfo.name);\n else if (layerInfo.type_ === \"fow\") layer = new FOWLayer(canvas, layerInfo.name);\n else if (layerInfo.type_ === \"fow-players\") layer = new FOWPlayersLayer(canvas, layerInfo.name);\n else layer = new Layer(canvas, layerInfo.name);\n layer.selectable = layerInfo.selectable;\n layer.playerEditable = layerInfo.player_editable;\n layerManager.addLayer(layer);\n\n // Add the element to the DOM\n const layers = document.getElementById(\"layers\");\n if (layers === null) {\n console.warn(\"Layers div is missing, this will prevent the main game board from loading!\");\n return;\n }\n if (layerInfo.name !== \"fow-players\") layers.appendChild(canvas);\n\n if (layerInfo.type_ === \"grid\" && layerInfo.size) gameStore.setGridSize({ gridSize: layerInfo.size, sync: false });\n // Load layer shapes\n layer.setShapes(layerInfo.shapes);\n}\n","import { render, staticRenderFns } from \"./labels.vue?vue&type=template&id=e477c214&scoped=true&\"\nimport script from \"./labels.vue?vue&type=script&lang=ts&\"\nexport * from \"./labels.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./labels.vue?vue&type=style&index=0&id=e477c214&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"e477c214\",\n null\n \n)\n\ncomponent.options.__file = \"labels.vue\"\nexport default component.exports","import mod from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/ts-loader/index.js??ref--12-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./edit_dialog.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/ts-loader/index.js??ref--12-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./edit_dialog.vue?vue&type=script&lang=ts&\"","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('div',{attrs:{\"id\":\"toolselect\"}},[_c('ul',_vm._l((_vm.visibleTools),function(tool){return _c('li',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.toolVisible(tool)),expression:\"toolVisible(tool)\"}],key:tool,ref:tool + '-selector',refInFor:true,class:{'tool-selected': _vm.currentTool === tool},on:{\"mousedown\":function($event){_vm.currentTool = tool}}},[_c('a',{attrs:{\"href\":\"#\"}},[_vm._v(_vm._s(tool))])])}))]),_c('div',[[_c('select-tool',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.currentTool === 'Select'),expression:\"currentTool === 'Select'\"}],ref:\"selectTool\"}),_c('pan-tool',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.currentTool === 'Pan'),expression:\"currentTool === 'Pan'\"}]}),_c('keep-alive',[_c('draw-tool',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.currentTool === 'Draw'),expression:\"currentTool === 'Draw'\"}]})],1),_c('ruler-tool',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.currentTool === 'Ruler'),expression:\"currentTool === 'Ruler'\"}]}),_c('map-tool',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.currentTool === 'Map'),expression:\"currentTool === 'Map'\"}]}),_c('filter-tool',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.currentTool === 'Filter'),expression:\"currentTool === 'Filter'\"}]}),_c('vision-tool',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.currentTool === 'Vision'),expression:\"currentTool === 'Vision'\"}]}),_c('shape-menu',{ref:\"shapecontext\"}),_c('createtoken-dialog',{ref:\"createtokendialog\"})]],2)])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","export * from \"-!cache-loader?{\\\"cacheDirectory\\\":\\\"node_modules/.cache/vue-loader\\\",\\\"cacheIdentifier\\\":\\\"74f43d04-vue-loader-template\\\"}!../../../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./tools.vue?vue&type=template&id=b6e1f51c&scoped=true&\"","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('form',{on:{\"focusin\":_vm.focusin,\"focusout\":_vm.focusout,\"submit\":function($event){$event.preventDefault();return _vm.login($event)}}},[_c('fieldset',[_c('legend',{staticClass:\"legend\"},[_vm._v(\"PlanarAlly\")]),_c('div',{staticClass:\"input\"},[_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.username),expression:\"username\"}],attrs:{\"type\":\"text\",\"name\":\"username\",\"placeholder\":\"Username\",\"autocomplete\":\"username\",\"required\":\"\"},domProps:{\"value\":(_vm.username)},on:{\"input\":function($event){if($event.target.composing){ return; }_vm.username=$event.target.value}}}),_vm._m(0)]),_c('div',{staticClass:\"input\"},[_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.password),expression:\"password\"}],attrs:{\"type\":\"password\",\"name\":\"password\",\"placeholder\":\"Password\",\"autocomplete\":\"current-password\",\"required\":\"\"},domProps:{\"value\":(_vm.password)},on:{\"input\":function($event){if($event.target.composing){ return; }_vm.password=$event.target.value}}}),_vm._m(1)]),_c('div',{staticStyle:{\"display\":\"flex\"}},[_c('button',{staticStyle:{\"visibility\":\"hidden\",\"display\":\"none\"},attrs:{\"type\":\"submit\",\"name\":\"login\"}}),_c('button',{staticClass:\"submit\",attrs:{\"type\":\"button\",\"name\":\"register\",\"title\":\"Register\"},on:{\"click\":_vm.register}},[_c('i',{staticClass:\"fas fa-plus\"})]),_vm._m(2)])]),(_vm.error)?_c('div',{staticClass:\"feedback\"},[_c('p',{staticClass:\"error\"},[_c('strong',[_vm._v(\"Error:\")]),_vm._v(\"\\n \"+_vm._s(_vm.error)+\"\\n \")])]):_vm._e()])}\nvar staticRenderFns = [function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('span',[_c('i',{staticClass:\"fas fa-user-circle\"})])},function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('span',[_c('i',{staticClass:\"fas fa-lock\"})])},function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('button',{staticClass:\"submit\",attrs:{\"type\":\"submit\",\"name\":\"login\",\"title\":\"Login\"}},[_c('i',{staticClass:\"fas fa-arrow-right\"})])}]\n\nexport { render, staticRenderFns }","export * from \"-!cache-loader?{\\\"cacheDirectory\\\":\\\"node_modules/.cache/vue-loader\\\",\\\"cacheIdentifier\\\":\\\"74f43d04-vue-loader-template\\\"}!../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./login.vue?vue&type=template&id=bc30fc14&scoped=true&\"","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nimport Vue from \"vue\";\nimport Component from \"vue-class-component\";\n\nimport Prompt from \"@/core/components/modals/prompt.vue\";\nimport EditDialog from \"@/game/ui/selection/edit_dialog.vue\";\n\nimport { getRef } from \"@/core/utils\";\nimport { socket } from \"@/game/api/socket\";\nimport { EventBus } from \"@/game/event-bus\";\nimport { layerManager } from \"@/game/layers/manager\";\nimport { Shape } from \"@/game/shapes/shape\";\n\n@Component({\n components: {\n \"edit-dialog\": EditDialog,\n },\n})\nexport default class SelectionInfo extends Vue {\n shape: Shape | null = null;\n\n mounted() {\n EventBus.$on(\"SelectionInfo.Shape.Set\", (shape: Shape | null) => {\n this.shape = shape;\n });\n }\n\n beforeDestroy() {\n EventBus.$off(\"SelectionInfo.Shape.Set\");\n }\n\n openEditDialog() {\n (this.$refs.editDialog).visible = true;\n }\n changeValue(object: Tracker | Aura, redraw: boolean) {\n if (this.shape === null) return;\n getRef(\"prompt\")\n .prompt(`New ${object.name} value:`, `Updating ${object.name}`)\n .then(\n (value: string) => {\n if (this.shape === null) return;\n const ogValue = object.value;\n if (value[0] === \"+\" || value[0] === \"-\") object.value += parseInt(value, 10);\n else object.value = parseInt(value, 10);\n if (isNaN(object.value)) object.value = ogValue;\n socket.emit(\"Shape.Update\", { shape: this.shape.asDict(), redraw, temporary: false });\n if (redraw) layerManager.invalidate();\n },\n () => {},\n );\n }\n}\n","import { AssetList } from \"@/core/comm/types\";\nimport { socket } from \"@/game/api/socket\";\nimport { BoardInfo, Note, ServerClient, ServerLocation } from \"@/game/comm/types/general\";\nimport { ServerShape } from \"@/game/comm/types/shapes\";\nimport { EventBus } from \"@/game/event-bus\";\nimport { GlobalPoint } from \"@/game/geom\";\nimport { layerManager } from \"@/game/layers/manager\";\nimport { createLayer } from \"@/game/layers/utils\";\nimport { gameManager } from \"@/game/manager\";\nimport { gameStore } from \"@/game/store\";\nimport { router } from \"@/router\";\nimport { zoomDisplay } from \"../utils\";\n\nsocket.on(\"connect\", () => {\n console.log(\"Connected\");\n});\nsocket.on(\"disconnect\", () => {\n console.log(\"Disconnected\");\n});\nsocket.on(\"connect_error\", (error: any) => {\n console.error(\"Could not connect to game session.\");\n router.push(\"/dashboard\");\n});\nsocket.on(\"error\", (error: any) => {\n console.error(\"Game session does not exist.\");\n router.push(\"/dashboard\");\n});\nsocket.on(\"redirect\", (destination: string) => {\n console.log(\"redirecting\");\n router.push(destination);\n});\nsocket.on(\"Room.Info.Set\", (data: { name: string; creator: string; invitationCode: string }) => {\n gameStore.setRoomName(data.name);\n gameStore.setRoomCreator(data.creator);\n gameStore.setInvitationCode(data.invitationCode);\n});\nsocket.on(\"Username.Set\", (username: string) => {\n gameStore.setUsername(username);\n gameStore.setDM(username === window.location.pathname.split(\"/\")[2]);\n});\nsocket.on(\"Client.Options.Set\", (options: ServerClient) => {\n gameStore.setGridColour({ colour: options.grid_colour, sync: false });\n gameStore.setFOWColour({ colour: options.fow_colour, sync: false });\n gameStore.setRulerColour({ colour: options.ruler_colour, sync: false });\n gameStore.setPanX(options.pan_x);\n gameStore.setPanY(options.pan_y);\n gameStore.setZoomDisplay(zoomDisplay(options.zoom_factor));\n // gameStore.setZoomDisplay(0.5);\n if (options.active_layer) layerManager.selectLayer(options.active_layer, false);\n if (layerManager.getGridLayer() !== undefined) layerManager.getGridLayer()!.invalidate();\n});\nsocket.on(\"Location.Set\", (data: Partial) => {\n if (data.name !== undefined) gameStore.setLocationName(data.name);\n if (data.unit_size !== undefined) gameStore.setUnitSize({ unitSize: data.unit_size, sync: false });\n if (data.use_grid !== undefined) gameStore.setUseGrid({ useGrid: data.use_grid, sync: false });\n if (data.full_fow !== undefined) gameStore.setFullFOW({ fullFOW: data.full_fow, sync: false });\n if (data.fow_opacity !== undefined) gameStore.setFOWOpacity({ fowOpacity: data.fow_opacity, sync: false });\n if (data.fow_los !== undefined) gameStore.setLineOfSight({ fowLOS: data.fow_los, sync: false });\n if (data.vision_min_range !== undefined) gameStore.setVisionRangeMin({ value: data.vision_min_range, sync: false });\n if (data.vision_max_range !== undefined) gameStore.setVisionRangeMax({ value: data.vision_max_range, sync: false });\n if (data.vision_mode !== undefined) {\n gameStore.setVisionMode({ mode: data.vision_mode, sync: false });\n gameStore.recalculateVision();\n gameStore.recalculateMovement();\n }\n});\nsocket.on(\"Position.Set\", (data: { x: number; y: number }) => {\n gameManager.setCenterPosition(new GlobalPoint(data.x, data.y));\n});\nsocket.on(\"Notes.Set\", (notes: Note[]) => {\n for (const note of notes) gameStore.newNote({ note, sync: false });\n});\nsocket.on(\"Asset.List.Set\", (assets: AssetList) => {\n gameStore.setAssets(assets);\n});\nsocket.on(\"Board.Set\", (locationInfo: BoardInfo) => {\n gameStore.clear();\n gameStore.setLocations(locationInfo.locations);\n document.getElementById(\"layers\")!.innerHTML = \"\";\n gameStore.resetLayerInfo();\n layerManager.reset();\n for (const layer of locationInfo.layers) createLayer(layer);\n // Force the correct opacity render on other layers.\n layerManager.selectLayer(layerManager.getLayer()!.name, false);\n EventBus.$emit(\"Initiative.Clear\");\n gameStore.recalculateVision();\n gameStore.recalculateMovement();\n gameStore.setBoardInitialized(true);\n});\nsocket.on(\"Gridsize.Set\", (gridSize: number) => {\n gameStore.setGridSize({ gridSize, sync: false });\n});\nsocket.on(\"Shape.Add\", (shape: ServerShape) => {\n gameManager.addShape(shape);\n});\nsocket.on(\"Shape.Remove\", (shape: ServerShape) => {\n if (!layerManager.UUIDMap.has(shape.uuid)) {\n console.log(`Attempted to remove an unknown shape`);\n return;\n }\n if (!layerManager.hasLayer(shape.layer)) {\n console.log(`Attempted to remove shape from an unknown layer ${shape.layer}`);\n return;\n }\n const layer = layerManager.getLayer(shape.layer)!;\n layer.removeShape(layerManager.UUIDMap.get(shape.uuid)!, false);\n layer.invalidate(false);\n});\nsocket.on(\"Shape.Order.Set\", (data: { shape: ServerShape; index: number }) => {\n if (!layerManager.UUIDMap.has(data.shape.uuid)) {\n console.log(`Attempted to move the shape order of an unknown shape`);\n return;\n }\n if (!layerManager.hasLayer(data.shape.layer)) {\n console.log(`Attempted to remove shape from an unknown layer ${data.shape.layer}`);\n return;\n }\n const shape = layerManager.UUIDMap.get(data.shape.uuid)!;\n const layer = layerManager.getLayer(shape.layer)!;\n layer.moveShapeOrder(shape, data.index, false);\n});\nsocket.on(\"Shape.Layer.Change\", (data: { uuid: string; layer: string }) => {\n const shape = layerManager.UUIDMap.get(data.uuid);\n if (shape === undefined) return;\n shape.moveLayer(data.layer, false);\n});\nsocket.on(\"Shape.Update\", (data: { shape: ServerShape; redraw: boolean; move: boolean, temporary: boolean }) => {\n gameManager.updateShape(data);\n});\nsocket.on(\"Temp.Clear\", (shapes: ServerShape[]) => {\n shapes.forEach(shape => {\n if (!layerManager.UUIDMap.has(shape.uuid)) {\n console.log(\"Attempted to remove an unknown temporary shape\");\n return;\n }\n if (!layerManager.hasLayer(shape.layer)) {\n console.log(`Attempted to remove shape from an unknown layer ${shape.layer}`);\n return;\n }\n const realShape = layerManager.UUIDMap.get(shape.uuid)!;\n layerManager.getLayer(shape.layer)!.removeShape(realShape, false);\n });\n});\nsocket.on(\"Labels.Set\", (labels: Label[]) => {\n for (const label of labels) gameStore.addLabel(label);\n});\nsocket.on(\"Label.Visibility.Set\", (data: { user: string; uuid: string; visible: boolean }) => {\n gameStore.setLabelVisibility(data);\n});\nsocket.on(\"Label.Add\", (data: Label) => {\n gameStore.addLabel(data);\n});\nsocket.on(\"Label.Delete\", (data: { user: string; uuid: string }) => {\n gameStore.deleteLabel(data);\n});\nsocket.on(\"Labels.Filter.Add\", (uuid: string) => {\n gameStore.labelFilters.push(uuid);\n layerManager.invalidate();\n})\nsocket.on(\"Labels.Filter.Remove\", (uuid: string) => {\n const idx = gameStore.labelFilters.indexOf(uuid);\n if (idx >= 0) {\n gameStore.labelFilters.splice(idx, 1);\n layerManager.invalidate();\n }\n})\nsocket.on(\"Labels.Filters.Set\", (filters: string[]) => {\n gameStore.setLabelFilters(filters);\n})\n"],"sourceRoot":""} \ No newline at end of file diff --git a/server/templates/index.html b/server/templates/index.html index e9e6c6824..70fdd5c0a 100644 --- a/server/templates/index.html +++ b/server/templates/index.html @@ -1 +1 @@ -PlanarAlly - The companion tool for your planar travels.
\ No newline at end of file +PlanarAlly - The companion tool for your planar travels.
\ No newline at end of file