Compare commits

...

20 commits

Author SHA1 Message Date
JaxxMoss
3193127809 windows-release.yml file added for github actions. 2025-05-09 00:34:51 +02:00
JaxxMoss
5dbd66ea0c Windows-build script update. 2025-05-09 00:34:25 +02:00
JaxxMoss
2fe1266c34 Refactor build-scripts: directory added, old file deleted and windows-build file created. 2025-05-09 00:15:54 +02:00
JaxxMoss
bb5aedf04a package.json update: name, descrption, version and private updated to reflect the project. 2025-05-08 23:52:10 +02:00
Jesse Malotaux
b0d629da66
Create README.md 2025-05-08 23:47:23 +02:00
Jesse Malotaux
d914d0c3de
Merge pull request #2 from Macrame-App/development
Clean Development environment
2025-05-08 23:34:24 +02:00
JaxxMoss
f3cd497212 Removed Elite Dangerous panel on development branch. 2025-05-08 23:31:39 +02:00
JaxxMoss
6bdace237b .gitignore update: ignore all the contents of macros except the TEST- macros. Same goes for panels and test_panel. 2025-05-08 23:30:52 +02:00
JaxxMoss
eb77287066 .gitignore update: ignore tmp build directory 2025-05-08 23:15:58 +02:00
JaxxMoss
9a961079cd .gitignore update: ignore contents of public directory on dev branches 2025-05-08 23:13:48 +02:00
JaxxMoss
89b9c7a157 Update env-helper to use ui directory instead of fe directory 2025-05-08 23:12:54 +02:00
JaxxMoss
b85962a539 Refactor: Renamed fe->ui 2025-05-08 23:12:20 +02:00
JaxxMoss
67bbbd6baf Removal of redundant BE directory. Contents moved to the root of the project. 2025-05-08 23:02:58 +02:00
Jesse Malotaux
972bc9e970 Removed redundant files. 2025-05-03 21:33:52 +02:00
Jesse Malotaux
3051011db0 Merge branch 'main' of https://github.com/Macrame-App/Macrame 2025-05-03 21:32:51 +02:00
Jesse Malotaux
668b653527 Merge branch 'main' of https://github.com/JaxxMoss/macrame 2025-05-03 21:32:17 +02:00
Jesse Malotaux
358e4fea17 Merge branch 'development' 2025-05-03 21:31:46 +02:00
Jesse Malotaux
38fc8ee387
Merge pull request #1 from Macrame-App/development
Development
2025-05-03 21:27:50 +02:00
Jesse Malotaux
06b89704f3
Merge pull request #1 from JaxxMoss/development
Development
2025-05-03 21:00:04 +02:00
Jesse Malotaux
59dd711ab3 Redundant commit: only to switch branches. Can be removed. 2025-04-04 11:52:48 +02:00
115 changed files with 402 additions and 2960 deletions

48
.github/workflows/windows-release.yml vendored Normal file
View file

@ -0,0 +1,48 @@
name: Release Build (Windows)
on:
push:
branches:
- "release/**"
jobs:
build-and-merge:
runs-on: windows-latest
steps:
- name: Checkout the release branch
uses: actions/checkout@v4
with:
token: ${{ secrets.GITHUB_TOKEN }}
- name: Extract version from branch name
id: extract
shell: bash
run: |
version="${GITHUB_REF##*/}"
echo "version=$version" >> $GITHUB_OUTPUT
- name: Set up Git
shell: bash
run: |
git config user.name "github-actions"
git config user.email "github-actions@github.com"
- name: Run build script
shell: cmd
run: .\build-scripts\windows-build.bat
- name: Commit and push build artifacts
shell: bash
run: |
git add -A
git commit -m "Automated release build for version: ${{ steps.extract.outputs.version }}" || echo "No changes to commit"
git push origin ${{ github.ref }}
- name: Fetch and force merge into main
shell: bash
run: |
git fetch origin main
git checkout main
git merge -X theirs ${{ github.ref }} -m "Merging release version ${{ steps.extract.outputs.version }} into main"
git push origin main

10
.gitignore vendored
View file

@ -2,13 +2,19 @@
config.js
devices/*
tmp/
tmp
log.txt
Macrame.exe
public
public/*
macros/*
!macros/TEST-*
panels/*
!panels/test_panel
builds
node_modules
ToDo.md

13
README.md Normal file
View file

@ -0,0 +1,13 @@
# <img src="favicon.ico" width="24" alt="Macrame icon" /> Macrame
*The current release isn't yet public.*
Turn Any Device into a button panel. Open-source, easy, and built to supercharge your workflow or gaming.
Macrame is released under the GPL V3 licence. More information can be found at: [Macrame License](https://macrame-app.github.io/license.html)
Macrame is small application that can be used to record keyboard macros.
The macros can be linked to button panels and the panels can be used by devices on the same network.
## Getting Started
Read the [official documentation](https://macrame-app.github.io/) about the Macrame app to get started.

View file

@ -36,7 +36,7 @@ func EnvGet(key string) string {
if !configFileExists() {
CreateConfigFile(configPath)
CheckFeDevDir()
CheckUIDevDir()
}
data, err := os.ReadFile(configPath)
@ -63,12 +63,12 @@ func configFileExists() bool {
return err == nil
}
func CheckFeDevDir() {
func CheckUIDevDir() {
log.Println("Checking FE dev directory...")
_, err := os.Stat("fe")
_, err := os.Stat("ui")
if err != nil {
log.Println("Error checking FE dev directory:", err)
log.Println("Error checking ui dev directory:", err)
return
}
@ -83,7 +83,7 @@ func copyConfigToFe() {
return
}
if err := os.WriteFile("fe/config.js", data, 0644); err != nil {
if err := os.WriteFile("ui/config.js", data, 0644); err != nil {
log.Println("Error writing config.js:", err)
}
}

View file

@ -0,0 +1,52 @@
@echo off
setlocal enabledelayedexpansion
REM Step 1: Build Macrame Go application for Windows
echo Building Macrame Go Application for Windows...
go build -ldflags "-H=windowsgui" -o Macrame.exe main.go
IF %ERRORLEVEL% NEQ 0 (
echo Go build failed!
exit /b %ERRORLEVEL%
) ELSE (
echo Go build was successful!
)
REM Step 2: Build Macrame Vue UI
echo Moving to ui directory and building Vue UI
cd ui
echo Running npm install...
call npm install
IF %ERRORLEVEL% NEQ 0 (
echo npm install failed!
exit /b %ERRORLEVEL%
)
echo Running npm run build...
call npm run build
IF %ERRORLEVEL% NEQ 0 (
echo npm run build failed!
exit /b %ERRORLEVEL%
)
cd ..
REM Step 3: Cleanup root directory of build files.
echo Cleaning up root directory...
echo Removing directories: app, ui, and build-scripts
rmdir /s /q app
rmdir /s /q ui
rmdir /s /q build-scripts
for %%F in (*) do (
set "file=%%~nxF"
if /I not "!file!"=="Macrame.exe" if /I not "!file!"=="favicon.ico" if /I not "!file!"=="README.md" (
echo Deleting !file!
del /f /q "%%F"
)
)
echo Build and cleanup complete.

View file

@ -1,35 +0,0 @@
#!/bin/bash
# Set the name of the build directory
BUILD_DIR="Macrame_$(date +'%m%d%H%M%S')"
# Build the Go application
go build -ldflags "-H=windowsgui" -o Macrame.exe main.go
# Build the frontend
cd fe
npm run build
cd ../builds
# Create the new build directory
mkdir $BUILD_DIR
mkdir $BUILD_DIR/macros
mkdir $BUILD_DIR/panels
mkdir $BUILD_DIR/panels/test_panel
mkdir $BUILD_DIR/public
mkdir $BUILD_DIR/public/assets
# Move the generated files to the new build directory
cp ../Macrame.exe $BUILD_DIR/Macrame.exe
cp ../favicon.ico $BUILD_DIR/favicon.ico
find ../macros -type f ! -name 'ED-*' -exec cp --parents {} "$BUILD_DIR/macros/" \;
cp -r ../panels/test_panel/* $BUILD_DIR/panels/test_panel/
mv ../public/* $BUILD_DIR/public/
# cp ../install.bat $BUILD_DIR/install.bat
powershell -Command "Compress-Archive -Path $BUILD_DIR/* -DestinationPath $BUILD_DIR.zip -Force"
# Print the path to the new build directory
echo "Build directory: ../$BUILD_DIR"

View file

@ -0,0 +1,9 @@
[
{ "code": "lalt", "direction": "down", "type": "key" },
{ "type": "delay", "value": 15 },
{ "code": "f4", "direction": "down", "type": "key" },
{ "type": "delay", "value": 15 },
{ "code": "lalt", "direction": "up", "type": "key" },
{ "type": "delay", "value": 15 },
{ "code": "f4", "direction": "up", "type": "key" }
]

View file

@ -0,0 +1,13 @@
[
{ "code": "lctrl", "direction": "down", "type": "key" },
{ "type": "delay", "value": 15 },
{ "code": "lshift", "direction": "down", "type": "key" },
{ "type": "delay", "value": 15 },
{ "code": "w", "direction": "down", "type": "key" },
{ "type": "delay", "value": 15 },
{ "code": "lctrl", "direction": "up", "type": "key" },
{ "type": "delay", "value": 15 },
{ "code": "lshift", "direction": "up", "type": "key" },
{ "type": "delay", "value": 15 },
{ "code": "w", "direction": "up", "type": "key" }
]

View file

@ -0,0 +1,9 @@
[
{ "code": "lctrl", "direction": "down", "type": "key" },
{ "type": "delay", "value": 15 },
{ "code": "w", "direction": "down", "type": "key" },
{ "type": "delay", "value": 15 },
{ "code": "lctrl", "direction": "up", "type": "key" },
{ "type": "delay", "value": 15 },
{ "code": "w", "direction": "up", "type": "key" }
]

View file

@ -0,0 +1,9 @@
[
{ "code": "lcmd", "direction": "down", "type": "key" },
{ "type": "delay", "value": 15 },
{ "code": "p", "direction": "down", "type": "key" },
{ "type": "delay", "value": 15 },
{ "code": "lcmd", "direction": "up", "type": "key" },
{ "type": "delay", "value": 15 },
{ "code": "p", "direction": "up", "type": "key" }
]

9
macros/TEST-Files.json Normal file
View file

@ -0,0 +1,9 @@
[
{ "code": "lcmd", "direction": "down", "type": "key" },
{ "type": "delay", "value": 15 },
{ "code": "e", "direction": "down", "type": "key" },
{ "type": "delay", "value": 15 },
{ "code": "lcmd", "direction": "up", "type": "key" },
{ "type": "delay", "value": 15 },
{ "code": "e", "direction": "up", "type": "key" }
]

View file

@ -0,0 +1 @@
[{"code":"f11","direction":"down","type":"key"},{"type":"delay","value":15},{"code":"f11","direction":"up","type":"key"}]

9
macros/TEST-Home.json Normal file
View file

@ -0,0 +1,9 @@
[
{ "code": "lalt", "direction": "down", "type": "key" },
{ "type": "delay", "value": 15 },
{ "code": "home", "direction": "down", "type": "key" },
{ "type": "delay", "value": 15 },
{ "code": "home", "direction": "up", "type": "key" },
{ "type": "delay", "value": 15 },
{ "code": "lalt", "direction": "up", "type": "key" }
]

View file

@ -0,0 +1,13 @@
[
{ "code": "lcmd", "direction": "down", "type": "key" },
{ "type": "delay", "value": 50 },
{ "code": "lctrl", "direction": "down", "type": "key" },
{ "type": "delay", "value": 50 },
{ "code": "d", "direction": "down", "type": "key" },
{ "type": "delay", "value": 50 },
{ "code": "lcmd", "direction": "up", "type": "key" },
{ "type": "delay", "value": 50 },
{ "code": "lctrl", "direction": "up", "type": "key" },
{ "type": "delay", "value": 50 },
{ "code": "d", "direction": "up", "type": "key" }
]

9
macros/TEST-New_Tab.json Normal file
View file

@ -0,0 +1,9 @@
[
{ "code": "lctrl", "direction": "down", "type": "key" },
{ "type": "delay", "value": 15 },
{ "code": "t", "direction": "down", "type": "key" },
{ "type": "delay", "value": 15 },
{ "code": "lctrl", "direction": "up", "type": "key" },
{ "type": "delay", "value": 15 },
{ "code": "t", "direction": "up", "type": "key" }
]

View file

@ -0,0 +1,9 @@
[
{ "code": "lctrl", "direction": "down", "type": "key" },
{ "type": "delay", "value": 15 },
{ "code": "n", "direction": "down", "type": "key" },
{ "type": "delay", "value": 15 },
{ "code": "lctrl", "direction": "up", "type": "key" },
{ "type": "delay", "value": 15 },
{ "code": "n", "direction": "up", "type": "key" }
]

View file

@ -0,0 +1,9 @@
[
{ "code": "lctrl", "direction": "down", "type": "key" },
{ "type": "delay", "value": 15 },
{ "code": "tab", "direction": "down", "type": "key" },
{ "type": "delay", "value": 15 },
{ "code": "lctrl", "direction": "up", "type": "key" },
{ "type": "delay", "value": 15 },
{ "code": "tab", "direction": "up", "type": "key" }
]

View file

@ -0,0 +1 @@
[{"code":"audio_play|audio_pause","direction":"down","type":"key"},{"type":"delay","value":15},{"code":"audio_play|audio_pause","direction":"up","type":"key"}]

View file

@ -0,0 +1,13 @@
[
{ "code": "lctrl", "direction": "down", "type": "key" },
{ "type": "delay", "value": 15 },
{ "code": "lshift", "direction": "down", "type": "key" },
{ "type": "delay", "value": 15 },
{ "code": "tab", "direction": "down", "type": "key" },
{ "type": "delay", "value": 15 },
{ "code": "lctrl", "direction": "up", "type": "key" },
{ "type": "delay", "value": 15 },
{ "code": "lshift", "direction": "up", "type": "key" },
{ "type": "delay", "value": 15 },
{ "code": "tab", "direction": "up", "type": "key" }
]

View file

@ -0,0 +1,9 @@
[
{ "code": "lcmd", "direction": "down", "type": "key" },
{ "type": "delay", "value": 15 },
{ "code": "r", "direction": "down", "type": "key" },
{ "type": "delay", "value": 15 },
{ "code": "lcmd", "direction": "up", "type": "key" },
{ "type": "delay", "value": 15 },
{ "code": "r", "direction": "up", "type": "key" }
]

View file

@ -0,0 +1,9 @@
[
{ "code": "lcmd", "direction": "down", "type": "key" },
{ "type": "delay", "value": 15 },
{ "code": "i", "direction": "down", "type": "key" },
{ "type": "delay", "value": 15 },
{ "code": "lcmd", "direction": "up", "type": "key" },
{ "type": "delay", "value": 15 },
{ "code": "i", "direction": "up", "type": "key" }
]

View file

@ -0,0 +1,13 @@
[
{ "code": "lctrl", "direction": "down", "type": "key" },
{ "type": "delay", "value": 15 },
{ "code": "lshift", "direction": "down", "type": "key" },
{ "type": "delay", "value": 15 },
{ "code": "esc", "direction": "down", "type": "key" },
{ "type": "delay", "value": 15 },
{ "code": "esc", "direction": "up", "type": "key" },
{ "type": "delay", "value": 15 },
{ "code": "lshift", "direction": "up", "type": "key" },
{ "type": "delay", "value": 15 },
{ "code": "lctrl", "direction": "up", "type": "key" }
]

View file

@ -0,0 +1,9 @@
[
{ "code": "lcmd", "direction": "down", "type": "key" },
{ "type": "delay", "value": 15 },
{ "code": "tab", "direction": "down", "type": "key" },
{ "type": "delay", "value": 15 },
{ "code": "lcmd", "direction": "up", "type": "key" },
{ "type": "delay", "value": 15 },
{ "code": "tab", "direction": "up", "type": "key" }
]

1
macros/TEST-desktop.json Normal file
View file

@ -0,0 +1 @@
[{"type":"key","key":"Meta","code":"MetaLeft","location":1,"direction":"down","value":0},{"type":"delay","key":"","code":"","location":0,"direction":"","value":240},{"type":"key","key":"d","code":"KeyD","location":0,"direction":"down","value":0},{"type":"delay","key":"","code":"","location":0,"direction":"","value":10},{"type":"key","key":"d","code":"KeyD","location":0,"direction":"up","value":0},{"type":"delay","key":"","code":"","location":0,"direction":"","value":10},{"type":"key","key":"Meta","code":"MetaLeft","location":1,"direction":"up","value":0}]

View file

@ -1,913 +0,0 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<!-- <meta name="viewport" content="width=device-width, initial-scale=1.0" /> -->
<title>Document</title>
<link rel="stylesheet" href="./output.css" />
</head>
<body id="panel-html__body" class="relative m-0">
<div
class="absolute inset-0 bg-slate-950 size-full grid grid-cols-[1fr_2fr_1fr] gap-2 p-2"
>
<div class="group-left">
<div id="menu-spacer" class="size-16"></div>
<div id="maps" class="ed-panel pnl__blue">
<h3>Maps</h3>
<div class="grid-cols-2 ed-button-group__horizontal">
<div
class="ed-button btn__yellow btn__vertical"
id="System__map"
mcrm__button
>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
<g style="fill: currentColor">
<circle cx="21.6" cy="17.1" r="0.9" />
<circle cx="21.6" cy="14.6" r="0.9" />
<circle cx="21.6" cy="12" r="0.9" />
<circle cx="15.4" cy="12" r="0.9" />
<circle cx="15.4" cy="7.9" r="1.9" />
<circle cx="21.6" cy="7.9" r="1.9" />
<circle cx="5.9" cy="7.6" r="5.4" />
<circle cx="5.9" cy="19.2" r="2.6" />
</g>
</svg>
System
</div>
<div
class="ed-button btn__orange btn__vertical"
id="Galaxy__map"
mcrm__button
>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
<path
style="fill: currentColor"
d="M22.1,8.9c-0.3,0-0.6,0.1-0.9,0.3L17,4.9c0.2-0.4,0.3-0.8,0.3-1.3c0-1.6-1.3-2.8-2.8-2.8S11.7,2,11.7,3.6
c0,0.8,0.4,1.6,0.9,2.1l-5.5,7.9c-0.5-0.2-1.1-0.3-1.7-0.3c-2.7,0-5,2.2-5,5s2.2,5,5,5s5-2.2,5-5c0-1.6-0.7-3-1.9-3.9l4.8-8.2
c0.3,0.2,0.7,0.2,1.1,0.2c0.6,0,1.1-0.2,1.5-0.5l4.7,3.8c-0.1,0.2-0.1,0.4-0.1,0.6c0,0.8,0.6,1.4,1.4,1.4s1.4-0.6,1.4-1.4
C23.5,9.6,22.9,8.9,22.1,8.9z"
/>
</svg>
Galaxy
</div>
</div>
</div>
<div id="fsd" class="ed-panel pnl__yellow">
<h3>Frame Shift Drive</h3>
<div
id="FSD__toggle"
class="ed-button btn__blue !rounded-b-none"
mcrm__button
>
Toggle FSD
</div>
<div class="grid-cols-2 ed-button-group__horizontal">
<div
id="Super__Cruise"
class="!rounded-tl-none ed-button btn__yellow"
mcrm__button
>
Super Cruise
</div>
<div
id="Hyper__Space"
class="!rounded-tr-none ed-button btn__orange"
mcrm__button
>
Hyper Space
</div>
</div>
</div>
<div class="grid grid-cols-2 gap-2">
<div
id="mode-switch"
class="grid gap-2 justify-items-center ed-panel pnl__white"
>
<h4>Mode</h4>
<span>Analysis</span>
<div
id="Mode__toggle"
class="ed-toggle toggle__vertical"
inactive-wrapper="border-sky-600 bg-sky-400/30"
inactive-indicator="bg-sky-400"
active-wrapper="border-red-600 bg-red-400/30"
active-indicator="bg-red-400"
mcrm__button
toggle__button
>
<div class="toggle__wrapper">
<div class="toggle__indicator"></div>
</div>
</div>
<span>Combat</span>
</div>
<div
id="mode-switch"
class="grid gap-2 justify-items-center ed-panel pnl__red"
>
<h4>Hardpoints</h4>
<span>Retract</span>
<div
id="Hardpoints__toggle"
class="ed-toggle toggle__vertical"
inactive-wrapper="border-sky-600 bg-sky-400/30"
inactive-indicator="bg-sky-400"
active-wrapper="border-red-600 bg-red-400/30"
active-indicator="bg-red-400"
mcrm__button
toggle__button
>
<div class="toggle__wrapper">
<div class="toggle__indicator"></div>
</div>
</div>
<span>Deploy</span>
</div>
</div>
</div>
<div class="group-middle">
<div id="ship-panels" class="ed-panel pnl__blue">
<h3>Panels</h3>
<div class="grid-cols-4 ed-button-group__horizontal">
<div
class="ed-button btn__orange"
id="External__panel"
mcrm__button
>
External
</div>
<div class="ed-button btn__yellow" id="Comms__panel" mcrm__button>
Comms
</div>
<div class="ed-button btn__yellow" id="Roles__panel" mcrm__button>
Roles
</div>
<div
class="ed-button btn__orange"
id="Internal__panel"
mcrm__button
>
Internal
</div>
</div>
</div>
<div class="grid grid-cols-[3fr_1fr_1fr] gap-2">
<div class="ed-panel pnl__blue">
<h3>Scanner</h3>
<div class="grid-cols-2 ed-button-group__horizontal">
<div
id="Scanner__FSS"
class="ed-button btn__blue btn__filled"
mcrm__button
>
FSS
</div>
<div
id="Scanner__DiscScan"
class="ed-button btn__blue"
mcrm__button
>
Discovery
</div>
</div>
</div>
<div
id="Route__NextSystem"
class="ed-button btn__yellow !px-2"
mcrm__button
>
<div>
<span class="text-base opacity-80">Route:</span>
<strong>Next System</strong>
</div>
</div>
<div
id="Speed_0percent"
class="ed-button btn__white !px-2"
mcrm__button
>
<div>
<span class="text-base opacity-80">Speed:</span>
<strong>0%</strong>
</div>
</div>
</div>
<div class="ed-panel pnl__red">
<h3>Fighters</h3>
<div class="grid grid-cols-[2fr_1fr] gap-2">
<div class="grid gap-2">
<div class="grid-cols-2 ed-button-group__horizontal">
<div
class="!justify-start ed-button btn__red btn__filled btn__vertical"
id="Fighter_attack"
mcrm__button
>
<svg
xmlns="http://www.w3.org/2000/svg"
style="fill: currentColor"
viewBox="0 0 24 24"
>
<path
d="M12,1.5C6.5,1.5,2,8,2,11.5s1.5,4.1,1.6,5.6c0.1,1,0.9,1.7,1.8,1.6c0.1,0-0.1-0.1,0.1-0.1v-2h1.2v1.9v2.1
c0,1,0.8,1.8,1.8,1.8H12h3.5c1,0,1.8-0.8,1.8-1.8v-2.1v-1.9h1.2v2c0.2,0-0.1,0.1,0.1,0.1c0.9,0.1,1.7-0.6,1.8-1.6
c0.2-1.5,1.6-2.1,1.6-5.6S17.5,1.5,12,1.5z M10.4,11.5c-0.6,1.4-2.3,2-3.7,1.4s-2-2.3-1.4-3.7C6,7.9,7.7,9.3,9.1,10
S11,10.2,10.4,11.5z M13,15.6c-0.3,0-0.7-0.3-0.8-0.6c-0.1-0.3-0.3-0.3-0.4,0c-0.1,0.3-0.5,0.6-0.8,0.6s-0.3-0.9,0.1-1.9l0.3-0.8
c0.4-1,0.9-1,1.3,0l0.3,0.8C13.3,14.7,13.3,15.6,13,15.6z M17.3,12.9c-1.4,0.6-3,0-3.7-1.4c-0.6-1.4-0.1-1,1.3-1.6s3.1-2.1,3.7-0.7
C19.3,10.7,18.7,12.3,17.3,12.9z"
/>
</svg>
Attack
</div>
<div
class="!justify-start text-red-400 ed-button btn__red btn__vertical"
id="Fighter__engage"
mcrm__button
>
<svg
xmlns="http://www.w3.org/2000/svg"
viewBox="0 0 24 24"
style="fill: currentColor"
>
<path
d="M14,4.3c2.8,0.7,5,2.9,5.7,5.7h2.1C21,6.1,17.9,3,14,2.2V4.3z"
/>
<path
d="M4.3,10C5,7.2,7.2,5,10,4.3V2.2C6.1,3,3,6.1,2.2,10H4.3z"
/>
<path
d="M10,19.7C7.2,19,5,16.8,4.3,14H2.2c0.8,3.9,3.9,7,7.8,7.8V19.7z"
/>
<path
d="M19.7,14c-0.7,2.8-2.9,5-5.7,5.7v2.1c3.9-0.8,7-3.9,7.8-7.8H19.7z"
/>
<polygon points="13,1 11,1 11,6.5 13,6.5 13,1 " />
<polygon points="6.5,11 1,11 1,13 6.5,13 6.5,11 " />
<polygon points="23,11 17.5,11 17.5,13 23,13 23,11 " />
<polygon points="13,17.5 11,17.5 11,23 13,23 13,17.5 " />
</svg>
Engage
</div>
</div>
<div class="grid-cols-2 ed-button-group__horizontal">
<div
class="!justify-start ed-button btn__orange btn__filled btn__vertical"
id="Fighter_defend"
mcrm__button
>
<svg
xmlns="http://www.w3.org/2000/svg"
viewBox="0 0 24 24"
style="fill: currentColor"
>
<path
style="opacity: 0.8"
d="M12,2.4l0.3,0.1l7.2,2.6l0.6,0.2l0,0.7c0,0.5,0.6,12.6-7.9,15.4L12,21.6l-0.3-0.1C3.2,18.6,3.8,6.6,3.8,6.1l0-0.7l0.6-0.2
l7.2-2.6L12,2.4 M12,0.3l-1,0.4L3.8,3.3L1.9,4l-0.1,2c0,0.6-0.7,14.1,9.2,17.4l0.9,0.3l0.9-0.3c9.9-3.3,9.3-16.8,9.2-17.4l-0.1-2
l-1.9-0.7L13,0.7L12,0.3L12,0.3z"
/>
<path
d="M19.2,6.1L12,3.5L4.8,6.1c0,0-0.7,11.8,7.2,14.4C19.8,17.9,19.2,6.1,19.2,6.1z"
/>
</svg>
Defend
</div>
<div
class="!justify-start text-red-400 ed-button btn__orange btn__vertical"
id="Fighter__hold"
mcrm__button
>
<svg
xmlns="http://www.w3.org/2000/svg"
viewBox="0 0 24 24"
style="fill: currentColor"
>
<polygon
style="opacity: 0.8"
points="13,1 11,1 11,6.5 13,6.5 13,1 "
/>
<polygon
style="opacity: 0.8"
points="6.5,11 1,11 1,13 6.5,13 6.5,11 "
/>
<polygon
style="opacity: 0.8"
points="23,11 17.5,11 17.5,13 23,13 23,11 "
/>
<polygon
style="opacity: 0.8"
points="13,17.5 11,17.5 11,23 13,23 13,17.5 "
/>
<path
style="opacity: 0.8"
d="M6.1,20c1.1,0.8,2.5,1.5,3.9,1.8v-2.1c-0.9-0.2-1.7-0.6-2.5-1.1L6.1,20z"
/>
<path
style="opacity: 0.8"
d="M4.3,14H2.2c0.3,1.4,0.9,2.8,1.8,3.9l1.5-1.5C4.9,15.7,4.5,14.9,4.3,14z"
/>
<path
style="opacity: 0.8"
d="M7.5,5.4C8.3,4.9,9.1,4.5,10,4.3V2.2C8.6,2.5,7.2,3.1,6.1,4L7.5,5.4z"
/>
<path
style="opacity: 0.8"
d="M5.4,7.5L4,6.1C3.1,7.2,2.5,8.6,2.2,10h2.1C4.5,9.1,4.9,8.3,5.4,7.5z"
/>
<path
style="opacity: 0.8"
d="M18.6,7.5c0.5,0.7,0.9,1.6,1.1,2.5h2.1c-0.3-1.4-0.9-2.8-1.8-3.9L18.6,7.5z"
/>
<path
style="opacity: 0.8"
d="M17.9,4c-1.1-0.8-2.5-1.5-3.9-1.8v2.1c0.9,0.2,1.7,0.6,2.5,1.1L17.9,4z"
/>
<path
style="opacity: 0.8"
d="M18.6,16.5l1.5,1.5c0.8-1.1,1.5-2.5,1.8-3.9h-2.1C19.5,14.9,19.1,15.7,18.6,16.5z"
/>
<path
style="opacity: 0.8"
d="M16.5,18.6c-0.7,0.5-1.6,0.9-2.5,1.1v2.1c1.4-0.3,2.8-0.9,3.9-1.8L16.5,18.6z"
/>
<polygon
points="21.2,19.8 13.4,12 21.2,4.2 19.8,2.8 12,10.6 4.2,2.8 2.8,4.2 10.6,12 2.8,19.8 4.2,21.2 12,13.4 19.8,21.2 "
/>
</svg>
Hold
</div>
</div>
<div class="grid-cols-2 ed-button-group__horizontal">
<div
class="!justify-start ed-button btn__blue btn__filled btn__vertical"
id="Fighter_follow"
mcrm__button
>
<svg
xmlns="http://www.w3.org/2000/svg"
viewBox="0 0 24 24"
style="fill: currentColor"
>
<polygon
points="11,13 2.5,13 4.5,15 0.3,19.2 4.8,23.7 9,19.5 11,21.5 "
/>
<polygon
points="11,11 11,2.5 9,4.5 4.8,0.3 0.3,4.8 4.5,9 2.5,11 "
/>
<polygon
points="13,11 21.5,11 19.5,9 23.7,4.8 19.2,0.3 15,4.5 13,2.5 "
/>
<polygon
points="13,13 13,21.5 15,19.5 19.2,23.7 23.7,19.2 19.5,15 21.5,13 "
/>
</svg>
Follow
</div>
<div
class="!justify-start text-red-400 ed-button btn__blue btn__vertical"
id="Fighter__recall"
mcrm__button
>
<svg
xmlns="http://www.w3.org/2000/svg"
viewBox="0 0 24 24"
style="fill: currentColor"
>
<path
d="M12,1C5.9,1,1,5.9,1,12s4.9,11,11,11s11-4.9,11-11S18.1,1,12,1z M12,20c-4.4,0-8-3.6-8-8c0-3,1.6-5.5,4-6.9V10H5l7,7l7-7
h-3V5.1c2.4,1.4,4,4,4,6.9C20,16.4,16.4,20,12,20z"
/>
</svg>
Recall
</div>
</div>
</div>
<div>
<div class="h-full grid-rows-3 ed-button-group__vertical">
<div
id="Fighter__wingman1"
class="ed-button btn__yellow btn__vertical"
mcrm__button
>
<span class="text-base opacity-80">Wingman</span>
<strong>#1</strong>
</div>
<div
id="Fighter__wingman2"
class="ed-button btn__yellow btn__vertical"
mcrm__button
>
<span class="text-base opacity-80">Wingman</span>
<strong>#2</strong>
</div>
<div
id="Fighter__wingman3"
class="ed-button btn__yellow btn__vertical"
mcrm__button
>
<span class="text-base opacity-80">Wingman</span>
<strong>#3</strong>
</div>
</div>
</div>
</div>
</div>
<div class="ed-panel pnl__red">
<h3>Counter Measures</h3>
<div class="grid-cols-4 ed-button-group__horizontal">
<div id="CM__Heatsink" class="ed-button btn__red" mcrm__button>
Heatsink
</div>
<div
id="CM__Chaff"
class="ed-button btn__red btn__filled"
mcrm__button
>
Chaff
</div>
<div
id="CM__ECM"
class="ed-button btn__red btn__filled"
mcrm__button
>
ECM
</div>
<div id="CM__Shieldcell" class="ed-button btn__red" mcrm__button>
Shieldcell
</div>
</div>
</div>
</div>
<div class="group-right">
<div class="ed-panel pnl__white">
<h3>Flight Assist</h3>
<div class="grid grid-cols-2 gap-2">
<div class="grid gap-2 justify-items-center">
<div
id="FlightAssist__toggle"
class="ed-toggle toggle__horizontal"
inactive-wrapper="border-red-600 bg-red-400/30"
inactive-indicator="bg-red-400"
active-wrapper="border-lime-600 bg-lime-400/30"
active-indicator="bg-lime-400"
mcrm__button
toggle__button
active="true"
>
<div class="toggle__wrapper">
<div class="toggle__indicator"></div>
</div>
</div>
<div class="flex justify-between w-full">
<span>Off</span>
<span>On</span>
</div>
</div>
<div
id="Rotational__Correction"
class="!px-2 ed-button btn__blue w-fit"
mcrm__button
>
<span class="text-xs">Rotational Correction</span>
</div>
</div>
</div>
<div
class="grid grid-cols-2 divide-x ed-panel pnl__white divider-white !p-0"
>
<div id="light-switch" class="grid gap-2 p-2 justify-items-center">
<h4>Lights</h4>
<div
id="Lights__toggle"
class="ed-toggle toggle__horizontal"
inactive-wrapper="border-white bg-white/30"
inactive-indicator="bg-white"
active-wrapper="border-sky-600 bg-sky-400/30"
active-indicator="bg-sky-400"
mcrm__button
toggle__button
>
<div class="toggle__wrapper">
<div class="toggle__indicator"></div>
</div>
</div>
<div class="flex justify-between w-full">
<span>Off</span>
<span>On</span>
</div>
</div>
<div id="light-switch" class="grid gap-2 p-2 justify-items-center">
<h4>Night Vis.</h4>
<div
id="NightVis__toggle"
class="ed-toggle toggle__horizontal"
inactive-wrapper="border-white bg-white/30"
inactive-indicator="bg-white"
active-wrapper="border-lime-600 bg-lime-400/30"
active-indicator="bg-lime-400"
mcrm__button
toggle__button
>
<div class="toggle__wrapper">
<div class="toggle__indicator"></div>
</div>
</div>
<div class="flex justify-between w-full">
<span>Off</span>
<span>On</span>
</div>
</div>
</div>
<div class="grid grid-cols-2 gap-2">
<div class="grid gap-2 text-center ed-panel pnl__orange">
<h4>Silent Running</h4>
<div
id="SilentRunning__toggle"
class="ed-toggle toggle__horizontal"
inactive-wrapper="border-white bg-white/30"
inactive-indicator="bg-white"
active-wrapper="border-red-600 bg-red-400/30"
active-indicator="bg-red-400"
mcrm__button
toggle__button
>
<div class="toggle__wrapper">
<div class="toggle__indicator"></div>
</div>
</div>
<div class="flex justify-between w-full">
<span>Off</span>
<span>On</span>
</div>
</div>
<div class="flex items-center justify-between">
<div
id="Jettison__Cargo"
class="flex flex-col items-center justify-center gap-2 text-center text-white border-red-500 rounded-full border-3 bg-red-500/80 aspect-square"
mcrm__button
>
<svg
xmlns="http://www.w3.org/2000/svg"
width="24"
height="24"
viewBox="0 0 24 24"
fill="currentColor"
>
<path stroke="none" d="M0 0h24v24H0z" fill="none" />
<path
d="M12 1.67c.955 0 1.845 .467 2.39 1.247l.105 .16l8.114 13.548a2.914 2.914 0 0 1 -2.307 4.363l-.195 .008h-16.225a2.914 2.914 0 0 1 -2.582 -4.2l.099 -.185l8.11 -13.538a2.914 2.914 0 0 1 2.491 -1.403zm.01 13.33l-.127 .007a1 1 0 0 0 0 1.986l.117 .007l.127 -.007a1 1 0 0 0 0 -1.986l-.117 -.007zm-.01 -7a1 1 0 0 0 -.993 .883l-.007 .117v4l.007 .117a1 1 0 0 0 1.986 0l.007 -.117v-4l-.007 -.117a1 1 0 0 0 -.993 -.883z"
/>
</svg>
<span> JETTISON CARGO </span>
</div>
</div>
</div>
<div class="grid grid-cols-2 gap-2">
<div
class="ed-button btn__blue btn__vertical"
dialog-trigger="#camera-dialog"
mcrm__dialog-trigger
>
<svg
xmlns="http://www.w3.org/2000/svg"
viewBox="0 0 24 24"
style="fill: currentColor"
>
<path
d="M22.6,9.1c-0.1-0.5-0.3-1-0.5-1.6c-1.5,0-5.3,0-6.8,0c2.3,2.3,5.1,5.1,7.3,7.3C23.1,13.1,23.1,10.9,22.6,9.1z"
/>
<path
d="M6.6,12.8c0-3.2,0-7.2,0-10.4C4.4,3.7,2.6,5.7,1.7,8C2.3,8.6,6.6,12.8,6.6,12.8z"
/>
<path
d="M12.8,17.4c-3.2,0-7.2,0-10.4,0c1.2,2.2,3.2,3.9,5.6,4.8C8.6,21.7,12.8,17.4,12.8,17.4z"
/>
<path
d="M17.4,11.2c0,3.2,0,7.2,0,10.4c2.2-1.2,3.9-3.2,4.8-5.6C21.7,15.4,17.4,11.2,17.4,11.2z"
/>
<path
d="M11.2,6.6c3.2,0,7.2,0,10.4,0c-1.2-2.2-3.2-3.9-5.6-4.8C15.4,2.3,11.2,6.6,11.2,6.6z"
/>
<path
d="M7.6,16.4h1.2c-2.3-2.3-5.1-5.1-7.3-7.3c-0.7,2.4-0.5,5.1,0.5,7.3C2.7,16.4,6.9,16.4,7.6,16.4z"
/>
<path
d="M14.3,17.4c-1.3,1.3-3.8,3.8-5.2,5.2c2.4,0.7,5.1,0.5,7.3-0.5c0-1.5,0-5.3,0-6.8C15.9,15.8,14.8,16.9,14.3,17.4z"
/>
<path
d="M14.9,1.4c-2.4-0.7-5.1-0.5-7.3,0.5c0,1.5,0,5.3,0,6.8C8.1,8.2,13.5,2.8,14.9,1.4z"
/>
</svg>
<span> CAMERA </span>
</div>
<dialog id="camera-dialog" mcrm__dialog>
<div
class="dialog__content ed-panel pnl__blue !w-fit !bg-sky-900 relative !p-4"
>
<div class="dialog__close">
<svg
xmlns="http://www.w3.org/2000/svg"
width="24"
height="24"
viewBox="0 0 24 24"
stroke="currentColor"
stroke-width="2"
stroke-linecap="round"
stroke-linejoin="round"
class="size-8"
>
<path stroke="none" d="M0 0h24v24H0z" fill="none" />
<path d="M18 6l-12 12" />
<path d="M6 6l12 12" />
</svg>
</div>
<h4>Camera</h4>
<div class="grid grid-cols-[1fr_2fr] gap-2 mt-4">
<div
id="Camera__Suite"
class="ed-button btn__orange btn__filled btn__vertical !text-gray-800"
mcrm__button
>
<svg
xmlns="http://www.w3.org/2000/svg"
width="24"
height="24"
viewBox="0 0 24 24"
fill="none"
stroke="currentColor"
stroke-width="2"
stroke-linecap="round"
stroke-linejoin="round"
class="icon icon-tabler icons-tabler-outline icon-tabler-gradienter"
>
<path stroke="none" d="M0 0h24v24H0z" fill="none" />
<path
d="M3.227 14c.917 4 4.497 7 8.773 7c4.277 0 7.858 -3 8.773 -7"
/>
<path
d="M20.78 10a9 9 0 0 0 -8.78 -7a8.985 8.985 0 0 0 -8.782 7"
/>
<path d="M12 12m-2 0a2 2 0 1 0 4 0a2 2 0 1 0 -4 0" />
</svg>
<span>Camera Suite</span>
</div>
<div class="grid-cols-2 ed-button-group__horizontal">
<div
id="Previous__Camera"
class="ed-button btn__yellow !text-gray-800 btn__filled !pt-8"
mcrm__button
>
<svg
xmlns="http://www.w3.org/2000/svg"
width="24"
height="24"
viewBox="0 0 24 24"
fill="currentColor"
>
<path stroke="none" d="M0 0h24v24H0z" fill="none" />
<path
d="M20.341 4.247l-8 7a1 1 0 0 0 0 1.506l8 7c.647 .565 1.659 .106 1.659 -.753v-14c0 -.86 -1.012 -1.318 -1.659 -.753z"
/>
<path
d="M9.341 4.247l-8 7a1 1 0 0 0 0 1.506l8 7c.647 .565 1.659 .106 1.659 -.753v-14c0 -.86 -1.012 -1.318 -1.659 -.753z"
/>
</svg>
<div class="relative text-right w-28">
<span
class="absolute right-0 text-base opacity-90 bottom-full"
>
Previous
</span>
<strong>Camera</strong>
</div>
</div>
<div
id="Next__Camera"
class="!pt-8 ed-button btn__yellow"
mcrm__button
>
<div class="relative text-left w-28">
<span class="absolute text-base opacity-80 bottom-full">
Next
</span>
<strong>Camera</strong>
</div>
<svg
xmlns="http://www.w3.org/2000/svg"
width="24"
height="24"
viewBox="0 0 24 24"
fill="currentColor"
>
<path stroke="none" d="M0 0h24v24H0z" fill="none" />
<path
d="M2 5v14c0 .86 1.012 1.318 1.659 .753l8 -7a1 1 0 0 0 0 -1.506l-8 -7c-.647 -.565 -1.659 -.106 -1.659 .753z"
/>
<path
d="M13 5v14c0 .86 1.012 1.318 1.659 .753l8 -7a1 1 0 0 0 0 -1.506l-8 -7c-.647 -.565 -1.659 -.106 -1.659 .753z"
/>
</svg>
</div>
</div>
<div
id="Free__Camera"
class="ed-button btn__orange btn__vertical"
mcrm__button
>
<svg
xmlns="http://www.w3.org/2000/svg"
width="24"
height="24"
viewBox="0 0 24 24"
fill="none"
stroke="currentColor"
stroke-width="2"
stroke-linecap="round"
stroke-linejoin="round"
>
<path stroke="none" d="M0 0h24v24H0z" fill="none" />
<path d="M18 9l3 3l-3 3" />
<path d="M15 12h6" />
<path d="M6 9l-3 3l3 3" />
<path d="M3 12h6" />
<path d="M9 18l3 3l3 -3" />
<path d="M12 15v6" />
<path d="M15 6l-3 -3l-3 3" />
<path d="M12 3v6" />
</svg>
<span>Free Camera</span>
</div>
<div class="grid-cols-2 ed-button-group__horizontal">
<div
id="Camera__Pos1"
class="ed-button btn__yellow !text-gray-800 btn__filled btn__vertical"
mcrm__button
>
<span class="text-base opacity-80">Position</span>
<strong>#1</strong>
</div>
<div
id="Camera__Pos2"
class="ed-button btn__yellow btn__vertical"
mcrm__button
>
<span class="text-base opacity-80">Position</span>
<strong>#2</strong>
</div>
</div>
</div>
</div>
</dialog>
</div>
<div class="flex items-end justify-end h-28">
<div id="clock">
<div class="hours-minutes"></div>
<sup class="seconds"></sup>
</div>
</div>
</div>
</div>
<script>
function onPanelLoaded() {
document
.querySelectorAll("#panel-html__body [toggle__button]")
.forEach((toggleButton) => {
if (toggleButton.getAttribute("active")) {
toggleClasses(toggleButton, true);
} else {
toggleClasses(toggleButton, false);
}
toggleButton.addEventListener("click", (e) => {
if (!toggleButton.getAttribute("active")) {
toggleButton.setAttribute("active", true);
toggleClasses(toggleButton, true);
} else {
toggleButton.removeAttribute("active");
toggleClasses(toggleButton, false);
}
});
});
function toggleClasses(toggleButton, active) {
const wrapper = toggleButton.querySelector(".toggle__wrapper");
const indicator = toggleButton.querySelector(".toggle__indicator");
const stateClasses = getStateClasses(toggleButton);
if (active) {
wrapper.classList.remove(...stateClasses.wrapper.inactive);
wrapper.classList.add(...stateClasses.wrapper.active);
indicator.classList.remove(...stateClasses.indicator.inactive);
indicator.classList.add(...stateClasses.indicator.active);
} else {
wrapper.classList.remove(...stateClasses.wrapper.active);
wrapper.classList.add(...stateClasses.wrapper.inactive);
indicator.classList.remove(...stateClasses.indicator.active);
indicator.classList.add(...stateClasses.indicator.inactive);
}
}
function getStateClasses(toggleButton) {
return {
wrapper: {
active: mapClasses(toggleButton.getAttribute("active-wrapper")),
inactive: mapClasses(
toggleButton.getAttribute("inactive-wrapper")
),
},
indicator: {
active: mapClasses(toggleButton.getAttribute("active-indicator")),
inactive: mapClasses(
toggleButton.getAttribute("inactive-indicator")
),
},
};
}
function mapClasses(classStr) {
return classStr.split(" ").map((c) => c.trim());
}
// document
// .querySelectorAll("[dialog-trigger]")
// .forEach((dialogTrigger) => {
// dialogTrigger.addEventListener("click", (e) => {
// document
// .querySelector(dialogTrigger.getAttribute("dialog-trigger"))
// .showModal();
// });
// });
// document
// .querySelectorAll("dialog, dialog .dialog__close")
// .forEach((dialogClose) => {
// const dialog = dialogClose.closest("dialog");
// dialogClose.addEventListener("click", (e) => {
// if (
// e.target.classList.contains("dialog__close") ||
// e.target.closest(".dialog__close") ||
// e.target.tagName == "DIALOG"
// ) {
// dialog.close();
// }
// });
// });
setInterval(() => {
const clockEl = document.querySelector("#clock");
const hoursMins = clockEl.querySelector(".hours-minutes");
const seconds = clockEl.querySelector(".seconds");
const now = new Date();
const hours = now.getHours();
const minutes = now.getMinutes();
const secondsStr = now.getSeconds();
hoursMins.innerHTML = formatTimeToHTML(
`${hours.toString().padStart(2, "0")}:${minutes
.toString()
.padStart(2, "0")}`
);
seconds.innerHTML = formatTimeToHTML(
secondsStr.toString().padStart(2, "0")
);
}, 1000);
function formatTimeToHTML(timeStr) {
let htmlStr = "";
timeStr.split("").forEach((char) => {
if (char === ":") htmlStr += "<i>:</i>";
else htmlStr += "<span>" + char + "</span>";
});
return htmlStr;
}
}
</script>
<script no-compile>
onPanelLoaded();
</script>
</body>
</html>

View file

@ -1,253 +0,0 @@
@import url(https://fonts.bunny.net/css?family=orbitron:400,600,800);
@layer theme, utilities;
@import "tailwindcss/theme.css" layer(theme);
@import "tailwindcss/utilities.css" layer(utilities);
@layer theme {
/* :root {
} */
}
html,
body,
#panel-html__body {
@apply relative;
}
#panel-html__body {
--font-sans: "Orbitron", sans-serif;
@apply font-sans text-sm font-light tracking-wide bg-gray-900 text-slate-50 size-full;
* {
box-sizing: border-box;
}
}
.group-left,
.group-middle,
.group-right {
@apply grid gap-2 h-fit;
}
.ed-panel {
@apply w-full p-2 border h-fit rounded-b-xl;
h3,
h4 {
@apply m-0 mb-1 font-extralight;
}
h3 {
@apply text-base;
}
h4 {
@apply text-sm;
}
&.pnl__blue {
@apply border-sky-300 bg-sky-500/30;
h3,
h4 {
@apply text-sky-100;
text-shadow: 0 0 0.2em var(--color-sky-300);
}
}
&.pnl__yellow {
@apply border-amber-300 bg-amber-500/30;
h3,
h4 {
@apply text-amber-100;
text-shadow: 0 0 0.2em var(--color-amber-300);
}
}
&.pnl__orange {
@apply border-orange-300 bg-orange-500/30;
h3,
h4 {
@apply text-orange-100;
text-shadow: 0 0 0.2em var(--color-orange-300);
}
}
&.pnl__red {
@apply border-rose-300 bg-rose-500/30;
h3,
h4 {
@apply text-rose-100;
text-shadow: 0 0 0.2em var(--color-rose-400);
}
}
&.pnl__white {
@apply border-white bg-white/20;
h3,
h4 {
@apply text-white;
text-shadow: 0 0 0.2em var(--color-white);
}
}
}
.ed-button {
@apply flex items-center justify-center px-4 py-2 text-base text-center rounded-lg border-3;
svg {
@apply block !size-5;
}
&.btn__vertical {
@apply flex-col;
}
&.btn__filled {
@apply text-gray-900;
}
&.btn__orange {
@apply text-orange-100 border-orange-400 bg-orange-500/50;
&.btn__filled {
@apply bg-orange-400;
}
}
&.btn__yellow {
@apply text-orange-100 border-amber-400 bg-amber-500/50;
&.btn__filled {
@apply bg-amber-400;
}
}
&.btn__blue {
@apply border-sky-400 bg-sky-500/50 text-sky-100;
&.btn__filled {
@apply bg-sky-500;
}
}
&.btn__red {
@apply border-rose-500 bg-rose-600/50 text-rose-100;
&.btn__filled {
@apply bg-rose-600;
}
}
&.btn__white {
@apply border-white bg-white/30;
&.btn__filled {
@apply bg-white;
}
}
}
.ed-button-group__horizontal {
@apply grid divide-x;
.ed-button {
@apply rounded-none;
&:first-child {
@apply rounded-l-lg;
}
&:last-child {
@apply rounded-r-lg;
}
}
}
.ed-button-group__vertical {
@apply grid divide-y;
.ed-button {
@apply rounded-none;
&:first-child {
@apply rounded-t-lg;
}
&:last-child {
@apply rounded-b-lg;
}
}
}
.ed-toggle {
.toggle__wrapper {
@apply relative p-1.5 border-2 rounded-full size-full;
}
.toggle__indicator {
@apply absolute transition rounded-full aspect-square;
}
&.toggle__horizontal {
@apply w-20 h-12;
.toggle__indicator {
@apply left-1.5 translate-x-0 h-[calc(100%-.75rem)];
}
&[active] .toggle__indicator {
@apply translate-x-full;
}
}
&.toggle__vertical {
@apply w-12 h-20;
.toggle__indicator {
@apply top-1.5 translate-y-0 w-[calc(100%-.75rem)];
}
&[active] .toggle__indicator {
@apply translate-y-full;
}
}
}
dialog[open] {
@apply absolute -translate-x-1/2 -translate-y-1/2 bg-transparent border-0 outline-0 top-1/2 left-1/2;
@apply backdrop:absolute backdrop:bg-black/50;
.dialog__close {
@apply absolute text-white top-3 right-3;
}
}
#clock {
@apply relative flex pr-16 text-3xl w-fit;
i {
@apply pl-1 not-italic;
}
.hours-minutes,
.seconds {
@apply flex gap-1;
}
span {
@apply inline-block w-[.75em] text-center;
}
sup {
@apply absolute right-0 w-16 pl-2 text-lg text-left opacity-80;
}
}

View file

@ -1,688 +0,0 @@
/*! tailwindcss v4.1.4 | MIT License | https://tailwindcss.com */
@import url(https://fonts.bunny.net/css?family=orbitron:400,600,800);
@layer properties;
@layer theme, utilities;
@layer theme {
:root, :host {
--font-sans: ui-sans-serif, system-ui, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol',
'Noto Color Emoji';
--color-red-400: oklch(70.4% 0.191 22.216);
--color-red-500: oklch(63.7% 0.237 25.331);
--color-red-600: oklch(57.7% 0.245 27.325);
--color-orange-100: oklch(95.4% 0.038 75.164);
--color-orange-300: oklch(83.7% 0.128 66.29);
--color-orange-400: oklch(75% 0.183 55.934);
--color-orange-500: oklch(70.5% 0.213 47.604);
--color-amber-100: oklch(96.2% 0.059 95.617);
--color-amber-300: oklch(87.9% 0.169 91.605);
--color-amber-400: oklch(82.8% 0.189 84.429);
--color-amber-500: oklch(76.9% 0.188 70.08);
--color-lime-400: oklch(84.1% 0.238 128.85);
--color-lime-600: oklch(64.8% 0.2 131.684);
--color-sky-100: oklch(95.1% 0.026 236.824);
--color-sky-300: oklch(82.8% 0.111 230.318);
--color-sky-400: oklch(74.6% 0.16 232.661);
--color-sky-500: oklch(68.5% 0.169 237.323);
--color-sky-600: oklch(58.8% 0.158 241.966);
--color-sky-900: oklch(39.1% 0.09 240.876);
--color-rose-100: oklch(94.1% 0.03 12.58);
--color-rose-300: oklch(81% 0.117 11.638);
--color-rose-400: oklch(71.2% 0.194 13.428);
--color-rose-500: oklch(64.5% 0.246 16.439);
--color-rose-600: oklch(58.6% 0.253 17.585);
--color-slate-50: oklch(98.4% 0.003 247.858);
--color-slate-950: oklch(12.9% 0.042 264.695);
--color-gray-800: oklch(27.8% 0.033 256.848);
--color-gray-900: oklch(21% 0.034 264.665);
--color-black: #000;
--color-white: #fff;
--spacing: 0.25rem;
--text-xs: 0.75rem;
--text-xs--line-height: calc(1 / 0.75);
--text-sm: 0.875rem;
--text-sm--line-height: calc(1.25 / 0.875);
--text-base: 1rem;
--text-base--line-height: calc(1.5 / 1);
--text-lg: 1.125rem;
--text-lg--line-height: calc(1.75 / 1.125);
--text-3xl: 1.875rem;
--text-3xl--line-height: calc(2.25 / 1.875);
--font-weight-extralight: 200;
--font-weight-light: 300;
--tracking-wide: 0.025em;
--radius-lg: 0.5rem;
--radius-xl: 0.75rem;
--default-transition-duration: 150ms;
--default-transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
}
}
@layer utilities {
.absolute {
position: absolute;
}
.relative {
position: relative;
}
.inset-0 {
inset: calc(var(--spacing) * 0);
}
.right-0 {
right: calc(var(--spacing) * 0);
}
.bottom-full {
bottom: 100%;
}
.m-0 {
margin: calc(var(--spacing) * 0);
}
.mt-4 {
margin-top: calc(var(--spacing) * 4);
}
.flex {
display: flex;
}
.grid {
display: grid;
}
.aspect-square {
aspect-ratio: 1 / 1;
}
.size-8 {
width: calc(var(--spacing) * 8);
height: calc(var(--spacing) * 8);
}
.size-16 {
width: calc(var(--spacing) * 16);
height: calc(var(--spacing) * 16);
}
.size-full {
width: 100%;
height: 100%;
}
.h-28 {
height: calc(var(--spacing) * 28);
}
.h-full {
height: 100%;
}
.\!w-fit {
width: fit-content !important;
}
.w-28 {
width: calc(var(--spacing) * 28);
}
.w-fit {
width: fit-content;
}
.w-full {
width: 100%;
}
.grid-cols-2 {
grid-template-columns: repeat(2, minmax(0, 1fr));
}
.grid-cols-4 {
grid-template-columns: repeat(4, minmax(0, 1fr));
}
.grid-cols-\[1fr_2fr\] {
grid-template-columns: 1fr 2fr;
}
.grid-cols-\[1fr_2fr_1fr\] {
grid-template-columns: 1fr 2fr 1fr;
}
.grid-cols-\[2fr_1fr\] {
grid-template-columns: 2fr 1fr;
}
.grid-cols-\[3fr_1fr_1fr\] {
grid-template-columns: 3fr 1fr 1fr;
}
.grid-rows-3 {
grid-template-rows: repeat(3, minmax(0, 1fr));
}
.flex-col {
flex-direction: column;
}
.items-center {
align-items: center;
}
.items-end {
align-items: flex-end;
}
.\!justify-start {
justify-content: flex-start !important;
}
.justify-between {
justify-content: space-between;
}
.justify-center {
justify-content: center;
}
.justify-end {
justify-content: flex-end;
}
.justify-items-center {
justify-items: center;
}
.gap-2 {
gap: calc(var(--spacing) * 2);
}
.divide-x {
:where(& > :not(:last-child)) {
--tw-divide-x-reverse: 0;
border-inline-style: var(--tw-border-style);
border-inline-start-width: calc(1px * var(--tw-divide-x-reverse));
border-inline-end-width: calc(1px * calc(1 - var(--tw-divide-x-reverse)));
}
}
.rounded-full {
border-radius: calc(infinity * 1px);
}
.\!rounded-tl-none {
border-top-left-radius: 0 !important;
}
.\!rounded-tr-none {
border-top-right-radius: 0 !important;
}
.\!rounded-b-none {
border-bottom-right-radius: 0 !important;
border-bottom-left-radius: 0 !important;
}
.border-3 {
border-style: var(--tw-border-style);
border-width: 3px;
}
.border-lime-600 {
border-color: var(--color-lime-600);
}
.border-red-500 {
border-color: var(--color-red-500);
}
.border-red-600 {
border-color: var(--color-red-600);
}
.border-sky-600 {
border-color: var(--color-sky-600);
}
.border-white {
border-color: var(--color-white);
}
.\!bg-sky-900 {
background-color: var(--color-sky-900) !important;
}
.bg-lime-400 {
background-color: var(--color-lime-400);
}
.bg-lime-400\/30 {
background-color: color-mix(in srgb, oklch(84.1% 0.238 128.85) 30%, transparent);
@supports (color: color-mix(in lab, red, red)) {
background-color: color-mix(in oklab, var(--color-lime-400) 30%, transparent);
}
}
.bg-red-400 {
background-color: var(--color-red-400);
}
.bg-red-400\/30 {
background-color: color-mix(in srgb, oklch(70.4% 0.191 22.216) 30%, transparent);
@supports (color: color-mix(in lab, red, red)) {
background-color: color-mix(in oklab, var(--color-red-400) 30%, transparent);
}
}
.bg-red-500\/80 {
background-color: color-mix(in srgb, oklch(63.7% 0.237 25.331) 80%, transparent);
@supports (color: color-mix(in lab, red, red)) {
background-color: color-mix(in oklab, var(--color-red-500) 80%, transparent);
}
}
.bg-sky-400 {
background-color: var(--color-sky-400);
}
.bg-sky-400\/30 {
background-color: color-mix(in srgb, oklch(74.6% 0.16 232.661) 30%, transparent);
@supports (color: color-mix(in lab, red, red)) {
background-color: color-mix(in oklab, var(--color-sky-400) 30%, transparent);
}
}
.bg-slate-950 {
background-color: var(--color-slate-950);
}
.bg-white {
background-color: var(--color-white);
}
.bg-white\/30 {
background-color: color-mix(in srgb, #fff 30%, transparent);
@supports (color: color-mix(in lab, red, red)) {
background-color: color-mix(in oklab, var(--color-white) 30%, transparent);
}
}
.\!p-0 {
padding: calc(var(--spacing) * 0) !important;
}
.\!p-4 {
padding: calc(var(--spacing) * 4) !important;
}
.p-2 {
padding: calc(var(--spacing) * 2);
}
.\!px-2 {
padding-inline: calc(var(--spacing) * 2) !important;
}
.\!pt-8 {
padding-top: calc(var(--spacing) * 8) !important;
}
.text-center {
text-align: center;
}
.text-left {
text-align: left;
}
.text-right {
text-align: right;
}
.text-base {
font-size: var(--text-base);
line-height: var(--tw-leading, var(--text-base--line-height));
}
.text-xs {
font-size: var(--text-xs);
line-height: var(--tw-leading, var(--text-xs--line-height));
}
.\!text-gray-800 {
color: var(--color-gray-800) !important;
}
.text-red-400 {
color: var(--color-red-400);
}
.text-white {
color: var(--color-white);
}
.opacity-80 {
opacity: 80%;
}
.opacity-90 {
opacity: 90%;
}
}
@layer theme;
html, body, #panel-html__body {
position: relative;
}
#panel-html__body {
--font-sans: "Orbitron", sans-serif;
width: 100%;
height: 100%;
background-color: var(--color-gray-900);
font-family: var(--font-sans);
font-size: var(--text-sm);
line-height: var(--tw-leading, var(--text-sm--line-height));
--tw-font-weight: var(--font-weight-light);
font-weight: var(--font-weight-light);
--tw-tracking: var(--tracking-wide);
letter-spacing: var(--tracking-wide);
color: var(--color-slate-50);
* {
box-sizing: border-box;
}
}
.group-left, .group-middle, .group-right {
display: grid;
height: fit-content;
gap: calc(var(--spacing) * 2);
}
.ed-panel {
height: fit-content;
width: 100%;
border-bottom-right-radius: var(--radius-xl);
border-bottom-left-radius: var(--radius-xl);
border-style: var(--tw-border-style);
border-width: 1px;
padding: calc(var(--spacing) * 2);
h3, h4 {
margin: calc(var(--spacing) * 0);
margin-bottom: calc(var(--spacing) * 1);
--tw-font-weight: var(--font-weight-extralight);
font-weight: var(--font-weight-extralight);
}
h3 {
font-size: var(--text-base);
line-height: var(--tw-leading, var(--text-base--line-height));
}
h4 {
font-size: var(--text-sm);
line-height: var(--tw-leading, var(--text-sm--line-height));
}
&.pnl__blue {
border-color: var(--color-sky-300);
background-color: color-mix(in srgb, oklch(68.5% 0.169 237.323) 30%, transparent);
@supports (color: color-mix(in lab, red, red)) {
background-color: color-mix(in oklab, var(--color-sky-500) 30%, transparent);
}
h3, h4 {
color: var(--color-sky-100);
text-shadow: 0 0 0.2em var(--color-sky-300);
}
}
&.pnl__yellow {
border-color: var(--color-amber-300);
background-color: color-mix(in srgb, oklch(76.9% 0.188 70.08) 30%, transparent);
@supports (color: color-mix(in lab, red, red)) {
background-color: color-mix(in oklab, var(--color-amber-500) 30%, transparent);
}
h3, h4 {
color: var(--color-amber-100);
text-shadow: 0 0 0.2em var(--color-amber-300);
}
}
&.pnl__orange {
border-color: var(--color-orange-300);
background-color: color-mix(in srgb, oklch(70.5% 0.213 47.604) 30%, transparent);
@supports (color: color-mix(in lab, red, red)) {
background-color: color-mix(in oklab, var(--color-orange-500) 30%, transparent);
}
h3, h4 {
color: var(--color-orange-100);
text-shadow: 0 0 0.2em var(--color-orange-300);
}
}
&.pnl__red {
border-color: var(--color-rose-300);
background-color: color-mix(in srgb, oklch(64.5% 0.246 16.439) 30%, transparent);
@supports (color: color-mix(in lab, red, red)) {
background-color: color-mix(in oklab, var(--color-rose-500) 30%, transparent);
}
h3, h4 {
color: var(--color-rose-100);
text-shadow: 0 0 0.2em var(--color-rose-400);
}
}
&.pnl__white {
border-color: var(--color-white);
background-color: color-mix(in srgb, #fff 20%, transparent);
@supports (color: color-mix(in lab, red, red)) {
background-color: color-mix(in oklab, var(--color-white) 20%, transparent);
}
h3, h4 {
color: var(--color-white);
text-shadow: 0 0 0.2em var(--color-white);
}
}
}
.ed-button {
display: flex;
align-items: center;
justify-content: center;
border-radius: var(--radius-lg);
border-style: var(--tw-border-style);
border-width: 3px;
padding-inline: calc(var(--spacing) * 4);
padding-block: calc(var(--spacing) * 2);
text-align: center;
font-size: var(--text-base);
line-height: var(--tw-leading, var(--text-base--line-height));
svg {
display: block;
width: calc(var(--spacing) * 5) !important;
height: calc(var(--spacing) * 5) !important;
}
&.btn__vertical {
flex-direction: column;
}
&.btn__filled {
color: var(--color-gray-900);
}
&.btn__orange {
border-color: var(--color-orange-400);
background-color: color-mix(in srgb, oklch(70.5% 0.213 47.604) 50%, transparent);
@supports (color: color-mix(in lab, red, red)) {
background-color: color-mix(in oklab, var(--color-orange-500) 50%, transparent);
}
color: var(--color-orange-100);
&.btn__filled {
background-color: var(--color-orange-400);
}
}
&.btn__yellow {
border-color: var(--color-amber-400);
background-color: color-mix(in srgb, oklch(76.9% 0.188 70.08) 50%, transparent);
@supports (color: color-mix(in lab, red, red)) {
background-color: color-mix(in oklab, var(--color-amber-500) 50%, transparent);
}
color: var(--color-orange-100);
&.btn__filled {
background-color: var(--color-amber-400);
}
}
&.btn__blue {
border-color: var(--color-sky-400);
background-color: color-mix(in srgb, oklch(68.5% 0.169 237.323) 50%, transparent);
@supports (color: color-mix(in lab, red, red)) {
background-color: color-mix(in oklab, var(--color-sky-500) 50%, transparent);
}
color: var(--color-sky-100);
&.btn__filled {
background-color: var(--color-sky-500);
}
}
&.btn__red {
border-color: var(--color-rose-500);
background-color: color-mix(in srgb, oklch(58.6% 0.253 17.585) 50%, transparent);
@supports (color: color-mix(in lab, red, red)) {
background-color: color-mix(in oklab, var(--color-rose-600) 50%, transparent);
}
color: var(--color-rose-100);
&.btn__filled {
background-color: var(--color-rose-600);
}
}
&.btn__white {
border-color: var(--color-white);
background-color: color-mix(in srgb, #fff 30%, transparent);
@supports (color: color-mix(in lab, red, red)) {
background-color: color-mix(in oklab, var(--color-white) 30%, transparent);
}
&.btn__filled {
background-color: var(--color-white);
}
}
}
.ed-button-group__horizontal {
display: grid;
:where(& > :not(:last-child)) {
--tw-divide-x-reverse: 0;
border-inline-style: var(--tw-border-style);
border-inline-start-width: calc(1px * var(--tw-divide-x-reverse));
border-inline-end-width: calc(1px * calc(1 - var(--tw-divide-x-reverse)));
}
.ed-button {
border-radius: 0;
&:first-child {
border-top-left-radius: var(--radius-lg);
border-bottom-left-radius: var(--radius-lg);
}
&:last-child {
border-top-right-radius: var(--radius-lg);
border-bottom-right-radius: var(--radius-lg);
}
}
}
.ed-button-group__vertical {
display: grid;
:where(& > :not(:last-child)) {
--tw-divide-y-reverse: 0;
border-bottom-style: var(--tw-border-style);
border-top-style: var(--tw-border-style);
border-top-width: calc(1px * var(--tw-divide-y-reverse));
border-bottom-width: calc(1px * calc(1 - var(--tw-divide-y-reverse)));
}
.ed-button {
border-radius: 0;
&:first-child {
border-top-left-radius: var(--radius-lg);
border-top-right-radius: var(--radius-lg);
}
&:last-child {
border-bottom-right-radius: var(--radius-lg);
border-bottom-left-radius: var(--radius-lg);
}
}
}
.ed-toggle {
.toggle__wrapper {
position: relative;
width: 100%;
height: 100%;
border-radius: calc(infinity * 1px);
border-style: var(--tw-border-style);
border-width: 2px;
padding: calc(var(--spacing) * 1.5);
}
.toggle__indicator {
position: absolute;
aspect-ratio: 1 / 1;
border-radius: calc(infinity * 1px);
transition-property: color, background-color, border-color, outline-color, text-decoration-color, fill, stroke, --tw-gradient-from, --tw-gradient-via, --tw-gradient-to, opacity, box-shadow, transform, translate, scale, rotate, filter, -webkit-backdrop-filter, backdrop-filter;
transition-timing-function: var(--tw-ease, var(--default-transition-timing-function));
transition-duration: var(--tw-duration, var(--default-transition-duration));
}
&.toggle__horizontal {
height: calc(var(--spacing) * 12);
width: calc(var(--spacing) * 20);
.toggle__indicator {
left: calc(var(--spacing) * 1.5);
height: calc(100% - .75rem);
--tw-translate-x: calc(var(--spacing) * 0);
translate: var(--tw-translate-x) var(--tw-translate-y);
}
&[active] .toggle__indicator {
--tw-translate-x: 100%;
translate: var(--tw-translate-x) var(--tw-translate-y);
}
}
&.toggle__vertical {
height: calc(var(--spacing) * 20);
width: calc(var(--spacing) * 12);
.toggle__indicator {
top: calc(var(--spacing) * 1.5);
width: calc(100% - .75rem);
--tw-translate-y: calc(var(--spacing) * 0);
translate: var(--tw-translate-x) var(--tw-translate-y);
}
&[active] .toggle__indicator {
--tw-translate-y: 100%;
translate: var(--tw-translate-x) var(--tw-translate-y);
}
}
}
dialog[open] {
position: absolute;
top: calc(1/2 * 100%);
left: calc(1/2 * 100%);
--tw-translate-x: calc(calc(1/2 * 100%) * -1);
translate: var(--tw-translate-x) var(--tw-translate-y);
--tw-translate-y: calc(calc(1/2 * 100%) * -1);
translate: var(--tw-translate-x) var(--tw-translate-y);
border-style: var(--tw-border-style);
border-width: 0px;
background-color: transparent;
outline-style: var(--tw-outline-style);
outline-width: 0px;
&::backdrop {
background-color: color-mix(in srgb, #000 50%, transparent);
@supports (color: color-mix(in lab, red, red)) {
background-color: color-mix(in oklab, var(--color-black) 50%, transparent);
}
}
.dialog__close {
position: absolute;
top: calc(var(--spacing) * 3);
right: calc(var(--spacing) * 3);
color: var(--color-white);
}
}
#clock {
position: relative;
display: flex;
width: fit-content;
padding-right: calc(var(--spacing) * 16);
font-size: var(--text-3xl);
line-height: var(--tw-leading, var(--text-3xl--line-height));
i {
padding-left: calc(var(--spacing) * 1);
font-style: normal;
}
.hours-minutes, .seconds {
display: flex;
gap: calc(var(--spacing) * 1);
}
span {
display: inline-block;
width: .75em;
text-align: center;
}
sup {
position: absolute;
right: calc(var(--spacing) * 0);
width: calc(var(--spacing) * 16);
padding-left: calc(var(--spacing) * 2);
text-align: left;
font-size: var(--text-lg);
line-height: var(--tw-leading, var(--text-lg--line-height));
opacity: 80%;
}
}
@property --tw-divide-x-reverse {
syntax: "*";
inherits: false;
initial-value: 0;
}
@property --tw-border-style {
syntax: "*";
inherits: false;
initial-value: solid;
}
@property --tw-font-weight {
syntax: "*";
inherits: false;
}
@property --tw-tracking {
syntax: "*";
inherits: false;
}
@property --tw-divide-y-reverse {
syntax: "*";
inherits: false;
initial-value: 0;
}
@property --tw-translate-x {
syntax: "*";
inherits: false;
initial-value: 0;
}
@property --tw-translate-y {
syntax: "*";
inherits: false;
initial-value: 0;
}
@property --tw-translate-z {
syntax: "*";
inherits: false;
initial-value: 0;
}
@property --tw-outline-style {
syntax: "*";
inherits: false;
initial-value: solid;
}
@layer properties {
@supports ((-webkit-hyphens: none) and (not (margin-trim: inline))) or ((-moz-orient: inline) and (not (color:rgb(from red r g b)))) {
*, ::before, ::after, ::backdrop {
--tw-divide-x-reverse: 0;
--tw-border-style: solid;
--tw-font-weight: initial;
--tw-tracking: initial;
--tw-divide-y-reverse: 0;
--tw-translate-x: 0;
--tw-translate-y: 0;
--tw-translate-z: 0;
--tw-outline-style: solid;
}
}
}

View file

@ -1,974 +0,0 @@
{
"name": "test_panel",
"version": "1.0.0",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "test_panel",
"version": "1.0.0",
"license": "ISC",
"devDependencies": {
"@tailwindcss/cli": "^4.1.2",
"tailwindcss": "^4.1.2"
}
},
"node_modules/@parcel/watcher": {
"version": "2.5.1",
"resolved": "https://registry.npmjs.org/@parcel/watcher/-/watcher-2.5.1.tgz",
"integrity": "sha512-dfUnCxiN9H4ap84DvD2ubjw+3vUNpstxa0TneY/Paat8a3R4uQZDLSvWjmznAY/DoahqTHl9V46HF/Zs3F29pg==",
"dev": true,
"hasInstallScript": true,
"dependencies": {
"detect-libc": "^1.0.3",
"is-glob": "^4.0.3",
"micromatch": "^4.0.5",
"node-addon-api": "^7.0.0"
},
"engines": {
"node": ">= 10.0.0"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/parcel"
},
"optionalDependencies": {
"@parcel/watcher-android-arm64": "2.5.1",
"@parcel/watcher-darwin-arm64": "2.5.1",
"@parcel/watcher-darwin-x64": "2.5.1",
"@parcel/watcher-freebsd-x64": "2.5.1",
"@parcel/watcher-linux-arm-glibc": "2.5.1",
"@parcel/watcher-linux-arm-musl": "2.5.1",
"@parcel/watcher-linux-arm64-glibc": "2.5.1",
"@parcel/watcher-linux-arm64-musl": "2.5.1",
"@parcel/watcher-linux-x64-glibc": "2.5.1",
"@parcel/watcher-linux-x64-musl": "2.5.1",
"@parcel/watcher-win32-arm64": "2.5.1",
"@parcel/watcher-win32-ia32": "2.5.1",
"@parcel/watcher-win32-x64": "2.5.1"
}
},
"node_modules/@parcel/watcher-android-arm64": {
"version": "2.5.1",
"resolved": "https://registry.npmjs.org/@parcel/watcher-android-arm64/-/watcher-android-arm64-2.5.1.tgz",
"integrity": "sha512-KF8+j9nNbUN8vzOFDpRMsaKBHZ/mcjEjMToVMJOhTozkDonQFFrRcfdLWn6yWKCmJKmdVxSgHiYvTCef4/qcBA==",
"cpu": [
"arm64"
],
"dev": true,
"optional": true,
"os": [
"android"
],
"engines": {
"node": ">= 10.0.0"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/parcel"
}
},
"node_modules/@parcel/watcher-darwin-arm64": {
"version": "2.5.1",
"resolved": "https://registry.npmjs.org/@parcel/watcher-darwin-arm64/-/watcher-darwin-arm64-2.5.1.tgz",
"integrity": "sha512-eAzPv5osDmZyBhou8PoF4i6RQXAfeKL9tjb3QzYuccXFMQU0ruIc/POh30ePnaOyD1UXdlKguHBmsTs53tVoPw==",
"cpu": [
"arm64"
],
"dev": true,
"optional": true,
"os": [
"darwin"
],
"engines": {
"node": ">= 10.0.0"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/parcel"
}
},
"node_modules/@parcel/watcher-darwin-x64": {
"version": "2.5.1",
"resolved": "https://registry.npmjs.org/@parcel/watcher-darwin-x64/-/watcher-darwin-x64-2.5.1.tgz",
"integrity": "sha512-1ZXDthrnNmwv10A0/3AJNZ9JGlzrF82i3gNQcWOzd7nJ8aj+ILyW1MTxVk35Db0u91oD5Nlk9MBiujMlwmeXZg==",
"cpu": [
"x64"
],
"dev": true,
"optional": true,
"os": [
"darwin"
],
"engines": {
"node": ">= 10.0.0"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/parcel"
}
},
"node_modules/@parcel/watcher-freebsd-x64": {
"version": "2.5.1",
"resolved": "https://registry.npmjs.org/@parcel/watcher-freebsd-x64/-/watcher-freebsd-x64-2.5.1.tgz",
"integrity": "sha512-SI4eljM7Flp9yPuKi8W0ird8TI/JK6CSxju3NojVI6BjHsTyK7zxA9urjVjEKJ5MBYC+bLmMcbAWlZ+rFkLpJQ==",
"cpu": [
"x64"
],
"dev": true,
"optional": true,
"os": [
"freebsd"
],
"engines": {
"node": ">= 10.0.0"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/parcel"
}
},
"node_modules/@parcel/watcher-linux-arm-glibc": {
"version": "2.5.1",
"resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm-glibc/-/watcher-linux-arm-glibc-2.5.1.tgz",
"integrity": "sha512-RCdZlEyTs8geyBkkcnPWvtXLY44BCeZKmGYRtSgtwwnHR4dxfHRG3gR99XdMEdQ7KeiDdasJwwvNSF5jKtDwdA==",
"cpu": [
"arm"
],
"dev": true,
"optional": true,
"os": [
"linux"
],
"engines": {
"node": ">= 10.0.0"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/parcel"
}
},
"node_modules/@parcel/watcher-linux-arm-musl": {
"version": "2.5.1",
"resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm-musl/-/watcher-linux-arm-musl-2.5.1.tgz",
"integrity": "sha512-6E+m/Mm1t1yhB8X412stiKFG3XykmgdIOqhjWj+VL8oHkKABfu/gjFj8DvLrYVHSBNC+/u5PeNrujiSQ1zwd1Q==",
"cpu": [
"arm"
],
"dev": true,
"optional": true,
"os": [
"linux"
],
"engines": {
"node": ">= 10.0.0"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/parcel"
}
},
"node_modules/@parcel/watcher-linux-arm64-glibc": {
"version": "2.5.1",
"resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm64-glibc/-/watcher-linux-arm64-glibc-2.5.1.tgz",
"integrity": "sha512-LrGp+f02yU3BN9A+DGuY3v3bmnFUggAITBGriZHUREfNEzZh/GO06FF5u2kx8x+GBEUYfyTGamol4j3m9ANe8w==",
"cpu": [
"arm64"
],
"dev": true,
"optional": true,
"os": [
"linux"
],
"engines": {
"node": ">= 10.0.0"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/parcel"
}
},
"node_modules/@parcel/watcher-linux-arm64-musl": {
"version": "2.5.1",
"resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm64-musl/-/watcher-linux-arm64-musl-2.5.1.tgz",
"integrity": "sha512-cFOjABi92pMYRXS7AcQv9/M1YuKRw8SZniCDw0ssQb/noPkRzA+HBDkwmyOJYp5wXcsTrhxO0zq1U11cK9jsFg==",
"cpu": [
"arm64"
],
"dev": true,
"optional": true,
"os": [
"linux"
],
"engines": {
"node": ">= 10.0.0"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/parcel"
}
},
"node_modules/@parcel/watcher-linux-x64-glibc": {
"version": "2.5.1",
"resolved": "https://registry.npmjs.org/@parcel/watcher-linux-x64-glibc/-/watcher-linux-x64-glibc-2.5.1.tgz",
"integrity": "sha512-GcESn8NZySmfwlTsIur+49yDqSny2IhPeZfXunQi48DMugKeZ7uy1FX83pO0X22sHntJ4Ub+9k34XQCX+oHt2A==",
"cpu": [
"x64"
],
"dev": true,
"optional": true,
"os": [
"linux"
],
"engines": {
"node": ">= 10.0.0"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/parcel"
}
},
"node_modules/@parcel/watcher-linux-x64-musl": {
"version": "2.5.1",
"resolved": "https://registry.npmjs.org/@parcel/watcher-linux-x64-musl/-/watcher-linux-x64-musl-2.5.1.tgz",
"integrity": "sha512-n0E2EQbatQ3bXhcH2D1XIAANAcTZkQICBPVaxMeaCVBtOpBZpWJuf7LwyWPSBDITb7In8mqQgJ7gH8CILCURXg==",
"cpu": [
"x64"
],
"dev": true,
"optional": true,
"os": [
"linux"
],
"engines": {
"node": ">= 10.0.0"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/parcel"
}
},
"node_modules/@parcel/watcher-win32-arm64": {
"version": "2.5.1",
"resolved": "https://registry.npmjs.org/@parcel/watcher-win32-arm64/-/watcher-win32-arm64-2.5.1.tgz",
"integrity": "sha512-RFzklRvmc3PkjKjry3hLF9wD7ppR4AKcWNzH7kXR7GUe0Igb3Nz8fyPwtZCSquGrhU5HhUNDr/mKBqj7tqA2Vw==",
"cpu": [
"arm64"
],
"dev": true,
"optional": true,
"os": [
"win32"
],
"engines": {
"node": ">= 10.0.0"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/parcel"
}
},
"node_modules/@parcel/watcher-win32-ia32": {
"version": "2.5.1",
"resolved": "https://registry.npmjs.org/@parcel/watcher-win32-ia32/-/watcher-win32-ia32-2.5.1.tgz",
"integrity": "sha512-c2KkcVN+NJmuA7CGlaGD1qJh1cLfDnQsHjE89E60vUEMlqduHGCdCLJCID5geFVM0dOtA3ZiIO8BoEQmzQVfpQ==",
"cpu": [
"ia32"
],
"dev": true,
"optional": true,
"os": [
"win32"
],
"engines": {
"node": ">= 10.0.0"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/parcel"
}
},
"node_modules/@parcel/watcher-win32-x64": {
"version": "2.5.1",
"resolved": "https://registry.npmjs.org/@parcel/watcher-win32-x64/-/watcher-win32-x64-2.5.1.tgz",
"integrity": "sha512-9lHBdJITeNR++EvSQVUcaZoWupyHfXe1jZvGZ06O/5MflPcuPLtEphScIBL+AiCWBO46tDSHzWyD0uDmmZqsgA==",
"cpu": [
"x64"
],
"dev": true,
"optional": true,
"os": [
"win32"
],
"engines": {
"node": ">= 10.0.0"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/parcel"
}
},
"node_modules/@tailwindcss/cli": {
"version": "4.1.4",
"resolved": "https://registry.npmjs.org/@tailwindcss/cli/-/cli-4.1.4.tgz",
"integrity": "sha512-gP05Qihh+cZ2FqD5fa0WJXx3KEk2YWUYv/RBKAyiOg0V4vYVDr/xlLc0sacpnVEXM45BVUR9U2hsESufYs6YTA==",
"dev": true,
"dependencies": {
"@parcel/watcher": "^2.5.1",
"@tailwindcss/node": "4.1.4",
"@tailwindcss/oxide": "4.1.4",
"enhanced-resolve": "^5.18.1",
"mri": "^1.2.0",
"picocolors": "^1.1.1",
"tailwindcss": "4.1.4"
},
"bin": {
"tailwindcss": "dist/index.mjs"
}
},
"node_modules/@tailwindcss/node": {
"version": "4.1.4",
"resolved": "https://registry.npmjs.org/@tailwindcss/node/-/node-4.1.4.tgz",
"integrity": "sha512-MT5118zaiO6x6hNA04OWInuAiP1YISXql8Z+/Y8iisV5nuhM8VXlyhRuqc2PEviPszcXI66W44bCIk500Oolhw==",
"dev": true,
"dependencies": {
"enhanced-resolve": "^5.18.1",
"jiti": "^2.4.2",
"lightningcss": "1.29.2",
"tailwindcss": "4.1.4"
}
},
"node_modules/@tailwindcss/oxide": {
"version": "4.1.4",
"resolved": "https://registry.npmjs.org/@tailwindcss/oxide/-/oxide-4.1.4.tgz",
"integrity": "sha512-p5wOpXyOJx7mKh5MXh5oKk+kqcz8T+bA3z/5VWWeQwFrmuBItGwz8Y2CHk/sJ+dNb9B0nYFfn0rj/cKHZyjahQ==",
"dev": true,
"engines": {
"node": ">= 10"
},
"optionalDependencies": {
"@tailwindcss/oxide-android-arm64": "4.1.4",
"@tailwindcss/oxide-darwin-arm64": "4.1.4",
"@tailwindcss/oxide-darwin-x64": "4.1.4",
"@tailwindcss/oxide-freebsd-x64": "4.1.4",
"@tailwindcss/oxide-linux-arm-gnueabihf": "4.1.4",
"@tailwindcss/oxide-linux-arm64-gnu": "4.1.4",
"@tailwindcss/oxide-linux-arm64-musl": "4.1.4",
"@tailwindcss/oxide-linux-x64-gnu": "4.1.4",
"@tailwindcss/oxide-linux-x64-musl": "4.1.4",
"@tailwindcss/oxide-wasm32-wasi": "4.1.4",
"@tailwindcss/oxide-win32-arm64-msvc": "4.1.4",
"@tailwindcss/oxide-win32-x64-msvc": "4.1.4"
}
},
"node_modules/@tailwindcss/oxide-android-arm64": {
"version": "4.1.4",
"resolved": "https://registry.npmjs.org/@tailwindcss/oxide-android-arm64/-/oxide-android-arm64-4.1.4.tgz",
"integrity": "sha512-xMMAe/SaCN/vHfQYui3fqaBDEXMu22BVwQ33veLc8ep+DNy7CWN52L+TTG9y1K397w9nkzv+Mw+mZWISiqhmlA==",
"cpu": [
"arm64"
],
"dev": true,
"optional": true,
"os": [
"android"
],
"engines": {
"node": ">= 10"
}
},
"node_modules/@tailwindcss/oxide-darwin-arm64": {
"version": "4.1.4",
"resolved": "https://registry.npmjs.org/@tailwindcss/oxide-darwin-arm64/-/oxide-darwin-arm64-4.1.4.tgz",
"integrity": "sha512-JGRj0SYFuDuAGilWFBlshcexev2hOKfNkoX+0QTksKYq2zgF9VY/vVMq9m8IObYnLna0Xlg+ytCi2FN2rOL0Sg==",
"cpu": [
"arm64"
],
"dev": true,
"optional": true,
"os": [
"darwin"
],
"engines": {
"node": ">= 10"
}
},
"node_modules/@tailwindcss/oxide-darwin-x64": {
"version": "4.1.4",
"resolved": "https://registry.npmjs.org/@tailwindcss/oxide-darwin-x64/-/oxide-darwin-x64-4.1.4.tgz",
"integrity": "sha512-sdDeLNvs3cYeWsEJ4H1DvjOzaGios4QbBTNLVLVs0XQ0V95bffT3+scptzYGPMjm7xv4+qMhCDrkHwhnUySEzA==",
"cpu": [
"x64"
],
"dev": true,
"optional": true,
"os": [
"darwin"
],
"engines": {
"node": ">= 10"
}
},
"node_modules/@tailwindcss/oxide-freebsd-x64": {
"version": "4.1.4",
"resolved": "https://registry.npmjs.org/@tailwindcss/oxide-freebsd-x64/-/oxide-freebsd-x64-4.1.4.tgz",
"integrity": "sha512-VHxAqxqdghM83HslPhRsNhHo91McsxRJaEnShJOMu8mHmEj9Ig7ToHJtDukkuLWLzLboh2XSjq/0zO6wgvykNA==",
"cpu": [
"x64"
],
"dev": true,
"optional": true,
"os": [
"freebsd"
],
"engines": {
"node": ">= 10"
}
},
"node_modules/@tailwindcss/oxide-linux-arm-gnueabihf": {
"version": "4.1.4",
"resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm-gnueabihf/-/oxide-linux-arm-gnueabihf-4.1.4.tgz",
"integrity": "sha512-OTU/m/eV4gQKxy9r5acuesqaymyeSCnsx1cFto/I1WhPmi5HDxX1nkzb8KYBiwkHIGg7CTfo/AcGzoXAJBxLfg==",
"cpu": [
"arm"
],
"dev": true,
"optional": true,
"os": [
"linux"
],
"engines": {
"node": ">= 10"
}
},
"node_modules/@tailwindcss/oxide-linux-arm64-gnu": {
"version": "4.1.4",
"resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm64-gnu/-/oxide-linux-arm64-gnu-4.1.4.tgz",
"integrity": "sha512-hKlLNvbmUC6z5g/J4H+Zx7f7w15whSVImokLPmP6ff1QqTVE+TxUM9PGuNsjHvkvlHUtGTdDnOvGNSEUiXI1Ww==",
"cpu": [
"arm64"
],
"dev": true,
"optional": true,
"os": [
"linux"
],
"engines": {
"node": ">= 10"
}
},
"node_modules/@tailwindcss/oxide-linux-arm64-musl": {
"version": "4.1.4",
"resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm64-musl/-/oxide-linux-arm64-musl-4.1.4.tgz",
"integrity": "sha512-X3As2xhtgPTY/m5edUtddmZ8rCruvBvtxYLMw9OsZdH01L2gS2icsHRwxdU0dMItNfVmrBezueXZCHxVeeb7Aw==",
"cpu": [
"arm64"
],
"dev": true,
"optional": true,
"os": [
"linux"
],
"engines": {
"node": ">= 10"
}
},
"node_modules/@tailwindcss/oxide-linux-x64-gnu": {
"version": "4.1.4",
"resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-x64-gnu/-/oxide-linux-x64-gnu-4.1.4.tgz",
"integrity": "sha512-2VG4DqhGaDSmYIu6C4ua2vSLXnJsb/C9liej7TuSO04NK+JJJgJucDUgmX6sn7Gw3Cs5ZJ9ZLrnI0QRDOjLfNQ==",
"cpu": [
"x64"
],
"dev": true,
"optional": true,
"os": [
"linux"
],
"engines": {
"node": ">= 10"
}
},
"node_modules/@tailwindcss/oxide-linux-x64-musl": {
"version": "4.1.4",
"resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-x64-musl/-/oxide-linux-x64-musl-4.1.4.tgz",
"integrity": "sha512-v+mxVgH2kmur/X5Mdrz9m7TsoVjbdYQT0b4Z+dr+I4RvreCNXyCFELZL/DO0M1RsidZTrm6O1eMnV6zlgEzTMQ==",
"cpu": [
"x64"
],
"dev": true,
"optional": true,
"os": [
"linux"
],
"engines": {
"node": ">= 10"
}
},
"node_modules/@tailwindcss/oxide-wasm32-wasi": {
"version": "4.1.4",
"resolved": "https://registry.npmjs.org/@tailwindcss/oxide-wasm32-wasi/-/oxide-wasm32-wasi-4.1.4.tgz",
"integrity": "sha512-2TLe9ir+9esCf6Wm+lLWTMbgklIjiF0pbmDnwmhR9MksVOq+e8aP3TSsXySnBDDvTTVd/vKu1aNttEGj3P6l8Q==",
"bundleDependencies": [
"@napi-rs/wasm-runtime",
"@emnapi/core",
"@emnapi/runtime",
"@tybys/wasm-util",
"@emnapi/wasi-threads",
"tslib"
],
"cpu": [
"wasm32"
],
"dev": true,
"optional": true,
"dependencies": {
"@emnapi/core": "^1.4.0",
"@emnapi/runtime": "^1.4.0",
"@emnapi/wasi-threads": "^1.0.1",
"@napi-rs/wasm-runtime": "^0.2.8",
"@tybys/wasm-util": "^0.9.0",
"tslib": "^2.8.0"
},
"engines": {
"node": ">=14.0.0"
}
},
"node_modules/@tailwindcss/oxide-win32-arm64-msvc": {
"version": "4.1.4",
"resolved": "https://registry.npmjs.org/@tailwindcss/oxide-win32-arm64-msvc/-/oxide-win32-arm64-msvc-4.1.4.tgz",
"integrity": "sha512-VlnhfilPlO0ltxW9/BgfLI5547PYzqBMPIzRrk4W7uupgCt8z6Trw/tAj6QUtF2om+1MH281Pg+HHUJoLesmng==",
"cpu": [
"arm64"
],
"dev": true,
"optional": true,
"os": [
"win32"
],
"engines": {
"node": ">= 10"
}
},
"node_modules/@tailwindcss/oxide-win32-x64-msvc": {
"version": "4.1.4",
"resolved": "https://registry.npmjs.org/@tailwindcss/oxide-win32-x64-msvc/-/oxide-win32-x64-msvc-4.1.4.tgz",
"integrity": "sha512-+7S63t5zhYjslUGb8NcgLpFXD+Kq1F/zt5Xv5qTv7HaFTG/DHyHD9GA6ieNAxhgyA4IcKa/zy7Xx4Oad2/wuhw==",
"cpu": [
"x64"
],
"dev": true,
"optional": true,
"os": [
"win32"
],
"engines": {
"node": ">= 10"
}
},
"node_modules/braces": {
"version": "3.0.3",
"resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz",
"integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==",
"dev": true,
"dependencies": {
"fill-range": "^7.1.1"
},
"engines": {
"node": ">=8"
}
},
"node_modules/detect-libc": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz",
"integrity": "sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg==",
"dev": true,
"bin": {
"detect-libc": "bin/detect-libc.js"
},
"engines": {
"node": ">=0.10"
}
},
"node_modules/enhanced-resolve": {
"version": "5.18.1",
"resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.18.1.tgz",
"integrity": "sha512-ZSW3ma5GkcQBIpwZTSRAI8N71Uuwgs93IezB7mf7R60tC8ZbJideoDNKjHn2O9KIlx6rkGTTEk1xUCK2E1Y2Yg==",
"dev": true,
"dependencies": {
"graceful-fs": "^4.2.4",
"tapable": "^2.2.0"
},
"engines": {
"node": ">=10.13.0"
}
},
"node_modules/fill-range": {
"version": "7.1.1",
"resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz",
"integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==",
"dev": true,
"dependencies": {
"to-regex-range": "^5.0.1"
},
"engines": {
"node": ">=8"
}
},
"node_modules/graceful-fs": {
"version": "4.2.11",
"resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz",
"integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==",
"dev": true
},
"node_modules/is-extglob": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
"integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==",
"dev": true,
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/is-glob": {
"version": "4.0.3",
"resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
"integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
"dev": true,
"dependencies": {
"is-extglob": "^2.1.1"
},
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/is-number": {
"version": "7.0.0",
"resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
"integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
"dev": true,
"engines": {
"node": ">=0.12.0"
}
},
"node_modules/jiti": {
"version": "2.4.2",
"resolved": "https://registry.npmjs.org/jiti/-/jiti-2.4.2.tgz",
"integrity": "sha512-rg9zJN+G4n2nfJl5MW3BMygZX56zKPNVEYYqq7adpmMh4Jn2QNEwhvQlFy6jPVdcod7txZtKHWnyZiA3a0zP7A==",
"dev": true,
"bin": {
"jiti": "lib/jiti-cli.mjs"
}
},
"node_modules/lightningcss": {
"version": "1.29.2",
"resolved": "https://registry.npmjs.org/lightningcss/-/lightningcss-1.29.2.tgz",
"integrity": "sha512-6b6gd/RUXKaw5keVdSEtqFVdzWnU5jMxTUjA2bVcMNPLwSQ08Sv/UodBVtETLCn7k4S1Ibxwh7k68IwLZPgKaA==",
"dev": true,
"dependencies": {
"detect-libc": "^2.0.3"
},
"engines": {
"node": ">= 12.0.0"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/parcel"
},
"optionalDependencies": {
"lightningcss-darwin-arm64": "1.29.2",
"lightningcss-darwin-x64": "1.29.2",
"lightningcss-freebsd-x64": "1.29.2",
"lightningcss-linux-arm-gnueabihf": "1.29.2",
"lightningcss-linux-arm64-gnu": "1.29.2",
"lightningcss-linux-arm64-musl": "1.29.2",
"lightningcss-linux-x64-gnu": "1.29.2",
"lightningcss-linux-x64-musl": "1.29.2",
"lightningcss-win32-arm64-msvc": "1.29.2",
"lightningcss-win32-x64-msvc": "1.29.2"
}
},
"node_modules/lightningcss-darwin-arm64": {
"version": "1.29.2",
"resolved": "https://registry.npmjs.org/lightningcss-darwin-arm64/-/lightningcss-darwin-arm64-1.29.2.tgz",
"integrity": "sha512-cK/eMabSViKn/PG8U/a7aCorpeKLMlK0bQeNHmdb7qUnBkNPnL+oV5DjJUo0kqWsJUapZsM4jCfYItbqBDvlcA==",
"cpu": [
"arm64"
],
"dev": true,
"optional": true,
"os": [
"darwin"
],
"engines": {
"node": ">= 12.0.0"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/parcel"
}
},
"node_modules/lightningcss-darwin-x64": {
"version": "1.29.2",
"resolved": "https://registry.npmjs.org/lightningcss-darwin-x64/-/lightningcss-darwin-x64-1.29.2.tgz",
"integrity": "sha512-j5qYxamyQw4kDXX5hnnCKMf3mLlHvG44f24Qyi2965/Ycz829MYqjrVg2H8BidybHBp9kom4D7DR5VqCKDXS0w==",
"cpu": [
"x64"
],
"dev": true,
"optional": true,
"os": [
"darwin"
],
"engines": {
"node": ">= 12.0.0"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/parcel"
}
},
"node_modules/lightningcss-freebsd-x64": {
"version": "1.29.2",
"resolved": "https://registry.npmjs.org/lightningcss-freebsd-x64/-/lightningcss-freebsd-x64-1.29.2.tgz",
"integrity": "sha512-wDk7M2tM78Ii8ek9YjnY8MjV5f5JN2qNVO+/0BAGZRvXKtQrBC4/cn4ssQIpKIPP44YXw6gFdpUF+Ps+RGsCwg==",
"cpu": [
"x64"
],
"dev": true,
"optional": true,
"os": [
"freebsd"
],
"engines": {
"node": ">= 12.0.0"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/parcel"
}
},
"node_modules/lightningcss-linux-arm-gnueabihf": {
"version": "1.29.2",
"resolved": "https://registry.npmjs.org/lightningcss-linux-arm-gnueabihf/-/lightningcss-linux-arm-gnueabihf-1.29.2.tgz",
"integrity": "sha512-IRUrOrAF2Z+KExdExe3Rz7NSTuuJ2HvCGlMKoquK5pjvo2JY4Rybr+NrKnq0U0hZnx5AnGsuFHjGnNT14w26sg==",
"cpu": [
"arm"
],
"dev": true,
"optional": true,
"os": [
"linux"
],
"engines": {
"node": ">= 12.0.0"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/parcel"
}
},
"node_modules/lightningcss-linux-arm64-gnu": {
"version": "1.29.2",
"resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-gnu/-/lightningcss-linux-arm64-gnu-1.29.2.tgz",
"integrity": "sha512-KKCpOlmhdjvUTX/mBuaKemp0oeDIBBLFiU5Fnqxh1/DZ4JPZi4evEH7TKoSBFOSOV3J7iEmmBaw/8dpiUvRKlQ==",
"cpu": [
"arm64"
],
"dev": true,
"optional": true,
"os": [
"linux"
],
"engines": {
"node": ">= 12.0.0"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/parcel"
}
},
"node_modules/lightningcss-linux-arm64-musl": {
"version": "1.29.2",
"resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-musl/-/lightningcss-linux-arm64-musl-1.29.2.tgz",
"integrity": "sha512-Q64eM1bPlOOUgxFmoPUefqzY1yV3ctFPE6d/Vt7WzLW4rKTv7MyYNky+FWxRpLkNASTnKQUaiMJ87zNODIrrKQ==",
"cpu": [
"arm64"
],
"dev": true,
"optional": true,
"os": [
"linux"
],
"engines": {
"node": ">= 12.0.0"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/parcel"
}
},
"node_modules/lightningcss-linux-x64-gnu": {
"version": "1.29.2",
"resolved": "https://registry.npmjs.org/lightningcss-linux-x64-gnu/-/lightningcss-linux-x64-gnu-1.29.2.tgz",
"integrity": "sha512-0v6idDCPG6epLXtBH/RPkHvYx74CVziHo6TMYga8O2EiQApnUPZsbR9nFNrg2cgBzk1AYqEd95TlrsL7nYABQg==",
"cpu": [
"x64"
],
"dev": true,
"optional": true,
"os": [
"linux"
],
"engines": {
"node": ">= 12.0.0"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/parcel"
}
},
"node_modules/lightningcss-linux-x64-musl": {
"version": "1.29.2",
"resolved": "https://registry.npmjs.org/lightningcss-linux-x64-musl/-/lightningcss-linux-x64-musl-1.29.2.tgz",
"integrity": "sha512-rMpz2yawkgGT8RULc5S4WiZopVMOFWjiItBT7aSfDX4NQav6M44rhn5hjtkKzB+wMTRlLLqxkeYEtQ3dd9696w==",
"cpu": [
"x64"
],
"dev": true,
"optional": true,
"os": [
"linux"
],
"engines": {
"node": ">= 12.0.0"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/parcel"
}
},
"node_modules/lightningcss-win32-arm64-msvc": {
"version": "1.29.2",
"resolved": "https://registry.npmjs.org/lightningcss-win32-arm64-msvc/-/lightningcss-win32-arm64-msvc-1.29.2.tgz",
"integrity": "sha512-nL7zRW6evGQqYVu/bKGK+zShyz8OVzsCotFgc7judbt6wnB2KbiKKJwBE4SGoDBQ1O94RjW4asrCjQL4i8Fhbw==",
"cpu": [
"arm64"
],
"dev": true,
"optional": true,
"os": [
"win32"
],
"engines": {
"node": ">= 12.0.0"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/parcel"
}
},
"node_modules/lightningcss-win32-x64-msvc": {
"version": "1.29.2",
"resolved": "https://registry.npmjs.org/lightningcss-win32-x64-msvc/-/lightningcss-win32-x64-msvc-1.29.2.tgz",
"integrity": "sha512-EdIUW3B2vLuHmv7urfzMI/h2fmlnOQBk1xlsDxkN1tCWKjNFjfLhGxYk8C8mzpSfr+A6jFFIi8fU6LbQGsRWjA==",
"cpu": [
"x64"
],
"dev": true,
"optional": true,
"os": [
"win32"
],
"engines": {
"node": ">= 12.0.0"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/parcel"
}
},
"node_modules/lightningcss/node_modules/detect-libc": {
"version": "2.0.3",
"resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.3.tgz",
"integrity": "sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw==",
"dev": true,
"engines": {
"node": ">=8"
}
},
"node_modules/micromatch": {
"version": "4.0.8",
"resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz",
"integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==",
"dev": true,
"dependencies": {
"braces": "^3.0.3",
"picomatch": "^2.3.1"
},
"engines": {
"node": ">=8.6"
}
},
"node_modules/mri": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/mri/-/mri-1.2.0.tgz",
"integrity": "sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==",
"dev": true,
"engines": {
"node": ">=4"
}
},
"node_modules/node-addon-api": {
"version": "7.1.1",
"resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-7.1.1.tgz",
"integrity": "sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==",
"dev": true
},
"node_modules/picocolors": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz",
"integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==",
"dev": true
},
"node_modules/picomatch": {
"version": "2.3.1",
"resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
"integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
"dev": true,
"engines": {
"node": ">=8.6"
},
"funding": {
"url": "https://github.com/sponsors/jonschlinkert"
}
},
"node_modules/tailwindcss": {
"version": "4.1.4",
"resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-4.1.4.tgz",
"integrity": "sha512-1ZIUqtPITFbv/DxRmDr5/agPqJwF69d24m9qmM1939TJehgY539CtzeZRjbLt5G6fSy/7YqqYsfvoTEw9xUI2A==",
"dev": true
},
"node_modules/tapable": {
"version": "2.2.1",
"resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz",
"integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==",
"dev": true,
"engines": {
"node": ">=6"
}
},
"node_modules/to-regex-range": {
"version": "5.0.1",
"resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
"integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
"dev": true,
"dependencies": {
"is-number": "^7.0.0"
},
"engines": {
"node": ">=8.0"
}
}
}
}

View file

@ -1,16 +0,0 @@
{
"name": "test_panel",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1",
"dev": "npx tailwindcss -i ./input.css -o ./output.css --watch"
},
"author": "",
"license": "ISC",
"devDependencies": {
"@tailwindcss/cli": "^4.1.2",
"tailwindcss": "^4.1.2"
}
}

View file

@ -1,48 +0,0 @@
{
"dir": "",
"name": "Elite Dangerous",
"description": "A Semi Realistic button panel for Elite Dangerous, made by JaxxMoss.",
"aspectRatio": "16/10",
"macros": {
"CM__Chaff": "ED-CM-Chaff",
"CM__ECM": "ED-CM-ECM",
"CM__Heatsink": "ED-CM-Heat_Sink",
"CM__Shieldcell": "ED-CM-Schield_Cell",
"Camera__Pos1": "ED-Camera-Position1",
"Camera__Pos2": "ED-Camera-Position2",
"Camera__Suite": "ED-Camera-Suite",
"Comms__panel": "ED-Comms_Panel",
"External__panel": "ED-External_Panel",
"FSD__toggle": "ED-Toggle_FSD",
"Fighter__engage": "ED-Fighter-Engage",
"Fighter__hold": "ED-Fighter-Hold",
"Fighter__recall": "ED-Fighter-Recall",
"Fighter__wingman1": "ED-Fighter-Wingman1",
"Fighter__wingman2": "ED-Fighter-Wingman2",
"Fighter__wingman3": "ED-Fighter-Wingman3",
"Fighter_attack": "ED-Fighter-Attack",
"Fighter_defend": "ED-Fighter-Defend",
"Fighter_follow": "ED-Fighter-Follow",
"FlightAssist__toggle": "ED-Flight_Assist",
"Free__Camera": "ED-Camera-Free",
"Galaxy__map": "ED-Galaxy_Map",
"Hardpoints__toggle": "ED-Hardpoints_Switch",
"Hyper__Space": "ED-Hyperspace",
"Internal__panel": "ED-Internal_Panel",
"Jettison__Cargo": "ED-Jettison_Cargo",
"Lights__toggle": "ED-Flight_Assist",
"Mode__toggle": "ED-Mode_Switch",
"Next__Camera": "ED-Camera-Next",
"NightVis__toggle": "ED-Night_Vision",
"Previous__Camera": "ED-Camera-Previous",
"Roles__panel": "ED-Roles_Panel",
"Rotational__Correction": "ED-Rotational_Correction",
"Route__NextSystem": "ED-Route_Next_System",
"Scanner__DiscScan": "ED-Scanner_Discovery",
"Scanner__FSS": "ED-Scanner-FSS",
"SilentRunning__toggle": "ED-Silent_Running",
"Speed_0percent": "ED-0percent_Speed",
"Super__Cruise": "ED-Super_Cruise",
"System__map": "ED-System_Map"
}
}

View file

@ -1,17 +0,0 @@
/** @type {import('tailwindcss').Config} */
module.exports = {
content: [
"./index.html", // Ensure this path is correct
],
theme: {
extend: {},
},
safelist: [
{
pattern: /^(border|bg)-(blue|red|sky|orange|lime)-(200|400|300\/40)$/,
},
],
plugins: [],
preflight: false,
mode: "jit",
};

View file

@ -1 +1,24 @@
{"dir":"","name":"Test Panel 1","description":"This is the very first panel to be created. It is a test panel for a mobile phone.","aspectRatio":"10/20","macros":{"button_1":"Task_Manager","button_10":"Close_Browser_Window","button_11":"Previous_Tab","button_12":"Next_Tab","button_13":"Close_Tab","button_14":"New_Tab","button_15":"Fullscreen","button_16":"Home","button_2":"Close_Application","button_3":"RunDialog","button_4":"Files","button_5":"Settings","button_6":"New_Desktop","button_7":"Displays","button_8":"Task_view","button_9":"New_Window"}}
{
"dir": "",
"name": "Test Panel 1",
"description": "This is the very first panel to be created. It is a test panel for a mobile phone.",
"aspectRatio": "10/20",
"macros": {
"button_1": "TEST-Task_Manager",
"button_10": "TEST-Close_Browser_Window",
"button_11": "TEST-Previous_Tab",
"button_12": "TEST-Next_Tab",
"button_13": "TEST-Close_Tab",
"button_14": "TEST-New_Tab",
"button_15": "TEST-Fullscreen",
"button_16": "TEST-Home",
"button_2": "TEST-Close_Application",
"button_3": "TEST-RunDialog",
"button_4": "TEST-Files",
"button_5": "TEST-Settings",
"button_6": "TEST-New_Desktop",
"button_7": "TEST-Displays",
"button_8": "TEST-Task_view",
"button_9": "TEST-New_Window"
}
}

View file

@ -1,5 +0,0 @@
window.__CONFIG__ = {
"MCRM__IV": "7290919109450742",
"MCRM__PORT": "52893",
"MCRM__SALT": "UQrNepgDabFnvSC/xqKt7MyQQVLS"
};

View file

View file

Before

Width:  |  Height:  |  Size: 3.5 KiB

After

Width:  |  Height:  |  Size: 3.5 KiB

Before After
Before After

View file

@ -1,7 +1,8 @@
{
"name": "fe",
"version": "0.0.0",
"private": true,
"name": "Macrame - UI",
"description": "Macrame UI - Macrame is a small application that can turn any device into a button panel for your pc.",
"version": "1.0.0",
"private": false,
"type": "module",
"scripts": {
"dev": "vite --host",

File diff suppressed because one or more lines are too long

View file

@ -0,0 +1 @@
:root{--vt-c-white: #ffffff;--vt-c-white-soft: #f8f8f8;--vt-c-white-mute: #f2f2f2;--vt-c-black: #181818;--vt-c-black-soft: #222222;--vt-c-black-mute: #282828;--vt-c-indigo: #2c3e50;--vt-c-divider-light-1: rgba(60, 60, 60, .29);--vt-c-divider-light-2: rgba(60, 60, 60, .12);--vt-c-divider-dark-1: rgba(84, 84, 84, .65);--vt-c-divider-dark-2: rgba(84, 84, 84, .48);--vt-c-text-light-1: var(--vt-c-indigo);--vt-c-text-light-2: rgba(60, 60, 60, .66);--vt-c-text-dark-1: var(--vt-c-white);--vt-c-text-dark-2: rgba(235, 235, 235, .64)}:root{--color-background: var(--vt-c-white);--color-background-soft: var(--vt-c-white-soft);--color-background-mute: var(--vt-c-white-mute);--color-border: var(--vt-c-divider-light-2);--color-border-hover: var(--vt-c-divider-light-1);--color-heading: var(--vt-c-text-light-1);--color-text: var(--vt-c-text-light-1);--section-gap: 160px}@media (prefers-color-scheme: dark){:root{--color-background: var(--vt-c-black);--color-background-soft: var(--vt-c-black-soft);--color-background-mute: var(--vt-c-black-mute);--color-border: var(--vt-c-divider-dark-2);--color-border-hover: var(--vt-c-divider-dark-1);--color-heading: var(--vt-c-text-dark-1);--color-text: var(--vt-c-text-dark-2)}}*,*:before,*:after{box-sizing:border-box;margin:0;font-weight:400}body{min-height:100vh;color:var(--color-text);background:var(--color-background);transition:color .5s,background-color .5s;line-height:1.6;font-family:Inter,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Cantarell,Fira Sans,Droid Sans,Helvetica Neue,sans-serif;font-size:15px;text-rendering:optimizeLegibility;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}#app{max-width:1280px;margin:0 auto;padding:2rem;font-weight:400}a,.green{text-decoration:none;color:#00bd7e;transition:.4s;padding:3px}@media (hover: hover){a:hover{background-color:#00bd7e33}}@media (min-width: 1024px){body{display:flex;place-items:center}#app{display:grid;grid-template-columns:1fr 1fr;padding:0 2rem}}

14
ui/public/index.html Normal file
View file

@ -0,0 +1,14 @@
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<link rel="icon" type="image/svg+xml" href="/vite.svg" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Vite + Vue</title>
<script type="module" crossorigin src="/assets/index-CNkZ911J.js"></script>
<link rel="stylesheet" crossorigin href="/assets/index-zqIqfzzx.css">
</head>
<body>
<div id="app"></div>
</body>
</html>

View file

Before

Width:  |  Height:  |  Size: 1.8 KiB

After

Width:  |  Height:  |  Size: 1.8 KiB

Before After
Before After

View file

Before

Width:  |  Height:  |  Size: 3.5 KiB

After

Width:  |  Height:  |  Size: 3.5 KiB

Before After
Before After

View file

Before

Width:  |  Height:  |  Size: 1.7 KiB

After

Width:  |  Height:  |  Size: 1.7 KiB

Before After
Before After

View file

Before

Width:  |  Height:  |  Size: 3.1 KiB

After

Width:  |  Height:  |  Size: 3.1 KiB

Before After
Before After

View file

@ -0,0 +1,7 @@
<template>
<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" fill="currentColor">
<path
d="M15 4a1 1 0 1 0 0 2V4zm0 11v-1a1 1 0 0 0-1 1h1zm0 4l-.707.707A1 1 0 0 0 16 19h-1zm-4-4l.707-.707A1 1 0 0 0 11 14v1zm-4.707-1.293a1 1 0 0 0-1.414 1.414l1.414-1.414zm-.707.707l-.707-.707.707.707zM9 11v-1a1 1 0 0 0-.707.293L9 11zm-4 0h1a1 1 0 0 0-1-1v1zm0 4H4a1 1 0 0 0 1.707.707L5 15zm10-9h2V4h-2v2zm2 0a1 1 0 0 1 1 1h2a3 3 0 0 0-3-3v2zm1 1v6h2V7h-2zm0 6a1 1 0 0 1-1 1v2a3 3 0 0 0 3-3h-2zm-1 1h-2v2h2v-2zm-3 1v4h2v-4h-2zm1.707 3.293l-4-4-1.414 1.414 4 4 1.414-1.414zM11 14H7v2h4v-2zm-4 0c-.276 0-.525-.111-.707-.293l-1.414 1.414C5.42 15.663 6.172 16 7 16v-2zm-.707 1.121l3.414-3.414-1.414-1.414-3.414 3.414 1.414 1.414zM9 12h4v-2H9v2zm4 0a3 3 0 0 0 3-3h-2a1 1 0 0 1-1 1v2zm3-3V3h-2v6h2zm0-6a3 3 0 0 0-3-3v2a1 1 0 0 1 1 1h2zm-3-3H3v2h10V0zM3 0a3 3 0 0 0-3 3h2a1 1 0 0 1 1-1V0zM0 3v6h2V3H0zm0 6a3 3 0 0 0 3 3v-2a1 1 0 0 1-1-1H0zm3 3h2v-2H3v2zm1-1v4h2v-4H4zm1.707 4.707l.586-.586-1.414-1.414-.586.586 1.414 1.414z"
/>
</svg>
</template>

View file

@ -0,0 +1,7 @@
<template>
<svg xmlns="http://www.w3.org/2000/svg" width="20" height="17" fill="currentColor">
<path
d="M11 2.253a1 1 0 1 0-2 0h2zm-2 13a1 1 0 1 0 2 0H9zm.447-12.167a1 1 0 1 0 1.107-1.666L9.447 3.086zM1 2.253L.447 1.42A1 1 0 0 0 0 2.253h1zm0 13H0a1 1 0 0 0 1.553.833L1 15.253zm8.447.833a1 1 0 1 0 1.107-1.666l-1.107 1.666zm0-14.666a1 1 0 1 0 1.107 1.666L9.447 1.42zM19 2.253h1a1 1 0 0 0-.447-.833L19 2.253zm0 13l-.553.833A1 1 0 0 0 20 15.253h-1zm-9.553-.833a1 1 0 1 0 1.107 1.666L9.447 14.42zM9 2.253v13h2v-13H9zm1.553-.833C9.203.523 7.42 0 5.5 0v2c1.572 0 2.961.431 3.947 1.086l1.107-1.666zM5.5 0C3.58 0 1.797.523.447 1.42l1.107 1.666C2.539 2.431 3.928 2 5.5 2V0zM0 2.253v13h2v-13H0zm1.553 13.833C2.539 15.431 3.928 15 5.5 15v-2c-1.92 0-3.703.523-5.053 1.42l1.107 1.666zM5.5 15c1.572 0 2.961.431 3.947 1.086l1.107-1.666C9.203 13.523 7.42 13 5.5 13v2zm5.053-11.914C11.539 2.431 12.928 2 14.5 2V0c-1.92 0-3.703.523-5.053 1.42l1.107 1.666zM14.5 2c1.573 0 2.961.431 3.947 1.086l1.107-1.666C18.203.523 16.421 0 14.5 0v2zm3.5.253v13h2v-13h-2zm1.553 12.167C18.203 13.523 16.421 13 14.5 13v2c1.573 0 2.961.431 3.947 1.086l1.107-1.666zM14.5 13c-1.92 0-3.703.523-5.053 1.42l1.107 1.666C11.539 15.431 12.928 15 14.5 15v-2z"
/>
</svg>
</template>

View file

@ -0,0 +1,7 @@
<template>
<svg xmlns="http://www.w3.org/2000/svg" width="18" height="20" fill="currentColor">
<path
d="M11.447 8.894a1 1 0 1 0-.894-1.789l.894 1.789zm-2.894-.789a1 1 0 1 0 .894 1.789l-.894-1.789zm0 1.789a1 1 0 1 0 .894-1.789l-.894 1.789zM7.447 7.106a1 1 0 1 0-.894 1.789l.894-1.789zM10 9a1 1 0 1 0-2 0h2zm-2 2.5a1 1 0 1 0 2 0H8zm9.447-5.606a1 1 0 1 0-.894-1.789l.894 1.789zm-2.894-.789a1 1 0 1 0 .894 1.789l-.894-1.789zm2 .789a1 1 0 1 0 .894-1.789l-.894 1.789zm-1.106-2.789a1 1 0 1 0-.894 1.789l.894-1.789zM18 5a1 1 0 1 0-2 0h2zm-2 2.5a1 1 0 1 0 2 0h-2zm-5.447-4.606a1 1 0 1 0 .894-1.789l-.894 1.789zM9 1l.447-.894a1 1 0 0 0-.894 0L9 1zm-2.447.106a1 1 0 1 0 .894 1.789l-.894-1.789zm-6 3a1 1 0 1 0 .894 1.789L.553 4.106zm2.894.789a1 1 0 1 0-.894-1.789l.894 1.789zm-2-.789a1 1 0 1 0-.894 1.789l.894-1.789zm1.106 2.789a1 1 0 1 0 .894-1.789l-.894 1.789zM2 5a1 1 0 1 0-2 0h2zM0 7.5a1 1 0 1 0 2 0H0zm8.553 12.394a1 1 0 1 0 .894-1.789l-.894 1.789zm-1.106-2.789a1 1 0 1 0-.894 1.789l.894-1.789zm1.106 1a1 1 0 1 0 .894 1.789l-.894-1.789zm2.894.789a1 1 0 1 0-.894-1.789l.894 1.789zM8 19a1 1 0 1 0 2 0H8zm2-2.5a1 1 0 1 0-2 0h2zm-7.447.394a1 1 0 1 0 .894-1.789l-.894 1.789zM1 15H0a1 1 0 0 0 .553.894L1 15zm1-2.5a1 1 0 1 0-2 0h2zm12.553 2.606a1 1 0 1 0 .894 1.789l-.894-1.789zM17 15l.447.894A1 1 0 0 0 18 15h-1zm1-2.5a1 1 0 1 0-2 0h2zm-7.447-5.394l-2 1 .894 1.789 2-1-.894-1.789zm-1.106 1l-2-1-.894 1.789 2 1 .894-1.789zM8 9v2.5h2V9H8zm8.553-4.894l-2 1 .894 1.789 2-1-.894-1.789zm.894 0l-2-1-.894 1.789 2 1 .894-1.789zM16 5v2.5h2V5h-2zm-4.553-3.894l-2-1-.894 1.789 2 1 .894-1.789zm-2.894-1l-2 1 .894 1.789 2-1L8.553.106zM1.447 5.894l2-1-.894-1.789-2 1 .894 1.789zm-.894 0l2 1 .894-1.789-2-1-.894 1.789zM0 5v2.5h2V5H0zm9.447 13.106l-2-1-.894 1.789 2 1 .894-1.789zm0 1.789l2-1-.894-1.789-2 1 .894 1.789zM10 19v-2.5H8V19h2zm-6.553-3.894l-2-1-.894 1.789 2 1 .894-1.789zM2 15v-2.5H0V15h2zm13.447 1.894l2-1-.894-1.789-2 1 .894 1.789zM18 15v-2.5h-2V15h2z"
/>
</svg>
</template>

View file

@ -0,0 +1,7 @@
<template>
<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" fill="currentColor">
<path
d="M10 3.22l-.61-.6a5.5 5.5 0 0 0-7.666.105 5.5 5.5 0 0 0-.114 7.665L10 18.78l8.39-8.4a5.5 5.5 0 0 0-.114-7.665 5.5 5.5 0 0 0-7.666-.105l-.61.61z"
/>
</svg>
</template>

View file

@ -0,0 +1,19 @@
<!-- This icon is from <https://github.com/Templarian/MaterialDesign>, distributed under Apache 2.0 (https://www.apache.org/licenses/LICENSE-2.0) license-->
<template>
<svg
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
aria-hidden="true"
role="img"
class="iconify iconify--mdi"
width="24"
height="24"
preserveAspectRatio="xMidYMid meet"
viewBox="0 0 24 24"
>
<path
d="M20 18v-4h-3v1h-2v-1H9v1H7v-1H4v4h16M6.33 8l-1.74 4H7v-1h2v1h6v-1h2v1h2.41l-1.74-4H6.33M9 5v1h6V5H9m12.84 7.61c.1.22.16.48.16.8V18c0 .53-.21 1-.6 1.41c-.4.4-.85.59-1.4.59H4c-.55 0-1-.19-1.4-.59C2.21 19 2 18.53 2 18v-4.59c0-.32.06-.58.16-.8L4.5 7.22C4.84 6.41 5.45 6 6.33 6H7V5c0-.55.18-1 .57-1.41C7.96 3.2 8.44 3 9 3h6c.56 0 1.04.2 1.43.59c.39.41.57.86.57 1.41v1h.67c.88 0 1.49.41 1.83 1.22l2.34 5.39z"
fill="currentColor"
></path>
</svg>
</template>

Some files were not shown because too many files have changed in this diff Show more