From 1fcb5ad5a251069cafd7e8cfbac35c83a04f92ed Mon Sep 17 00:00:00 2001 From: community-scripts Date: Fri, 1 Nov 2024 15:13:34 +0100 Subject: [PATCH 001/631] Update README.md --- README.md | 44 ++++++++++++++++++++++++++++---------------- 1 file changed, 28 insertions(+), 16 deletions(-) diff --git a/README.md b/README.md index dcb7506a9..41487c3f3 100644 --- a/README.md +++ b/README.md @@ -1,31 +1,43 @@ -
-

Proxmox VE Helper-Scripts Project Update

-

Dear Community,

-

I wanted to share a personal update. I’ve recently transitioned into hospice care and, as a result, will be slowing down the development of this project. While I’m grateful for the progress we’ve made together, I recognize that I’ll be taking a step back for some rest and reflection during this time.

-

Thank you for your continued support, encouragement, and understanding. Your dedication to the community and this project means the world to me, and I am grateful for each of you.

-

Warm regards,
tteck/tteckster

-
- +
+ +
+

Proxmox VE Helper-Scripts: A Community Legacy

+

Dear Community,

+

In agreement with tteck, this project has now transitioned into a community-driven effort. We aim to continue his work, building on the foundation he laid to support Proxmox users worldwide.

+

tteck, whose contribution has been invaluable, shared recently that he is now in hospice care. His scripts have empowered thousands, and we honor his legacy by carrying this project forward with the same passion and commitment. We’re deeply grateful for his vision, which made Proxmox accessible to so many.

+

To tteck: Your impact will be felt in this community for years to come. We thank you for everything.

+

Warm regards,
The Community

+
+ + +

Proxmox VE Helper-Scripts

- Website | - Contribute | - Guides | - Changelog | - Support + Website (tteck) | + Ko-Fi (for tteck) | + Contribute | + Guides | + Changelog

--- -These scripts empower users to create a Linux container or virtual machine interactively, providing choices for both simple and advanced configurations. The basic setup adheres to default settings, while the advanced setup gives users the ability to customize these defaults. +This community-managed project continues tteck’s original vision of simplifying Proxmox VE setup. The scripts allow users to create Linux containers or virtual machines interactively, with options for both simple and advanced configurations. While the basic setup adheres to default settings, the advanced setup offers extensive customization options for specific needs. + +All configuration choices are displayed in a dialog box, where users can select their preferences. The script then validates these inputs to generate a final configuration for the container or virtual machine. -Options are displayed to users in a dialog box format. Once the user makes their selections, the script collects and validates their input to generate the final configuration for the container or virtual machine.

-Be cautious and thoroughly evaluate scripts and automation tasks obtained from external sources. Read more +Please exercise caution and thoroughly review scripts and automation tasks from external sources. Read more

+
Proxmox® is a registered trademark of Proxmox Server Solutions GmbH.
+ +--- + +### Note on the Transition: +This project is now maintained by the community in memory of tteck’s invaluable contribution. His dedication transformed the Proxmox experience for countless users, and we’re committed to continuing his work with the same dedication. From b8bf4eb175bb93077d31da3db6d0300441d3155f Mon Sep 17 00:00:00 2001 From: community-scripts Date: Fri, 1 Nov 2024 15:14:38 +0100 Subject: [PATCH 002/631] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 41487c3f3..5131d4bcd 100644 --- a/README.md +++ b/README.md @@ -7,7 +7,7 @@

Proxmox VE Helper-Scripts: A Community Legacy

Dear Community,

-

In agreement with tteck, this project has now transitioned into a community-driven effort. We aim to continue his work, building on the foundation he laid to support Proxmox users worldwide.

+

In agreement with tteck, this project has now transitioned into a community-driven effort. We aim to continue his work, building on the foundation he laid to support Proxmox users worldwide.

tteck, whose contribution has been invaluable, shared recently that he is now in hospice care. His scripts have empowered thousands, and we honor his legacy by carrying this project forward with the same passion and commitment. We’re deeply grateful for his vision, which made Proxmox accessible to so many.

To tteck: Your impact will be felt in this community for years to come. We thank you for everything.

Warm regards,
The Community

From 2add44ada35f770127a636effc568638cc885004 Mon Sep 17 00:00:00 2001 From: community-scripts Date: Fri, 1 Nov 2024 15:15:23 +0100 Subject: [PATCH 003/631] Update README.md --- README.md | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 5131d4bcd..c85760fb9 100644 --- a/README.md +++ b/README.md @@ -35,9 +35,11 @@ All configuration choices are displayed in a dialog box, where users can select Please exercise caution and thoroughly review scripts and automation tasks from external sources. Read more

-
Proxmox® is a registered trademark of Proxmox Server Solutions GmbH.
- --- ### Note on the Transition: This project is now maintained by the community in memory of tteck’s invaluable contribution. His dedication transformed the Proxmox experience for countless users, and we’re committed to continuing his work with the same dedication. + + + +
Proxmox® is a registered trademark of Proxmox Server Solutions GmbH.
From 1b37cd814e730b44e4d72361c2485bbe5b86d07d Mon Sep 17 00:00:00 2001 From: community-scripts Date: Fri, 1 Nov 2024 15:15:47 +0100 Subject: [PATCH 004/631] Update README.md --- README.md | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index c85760fb9..8025b9893 100644 --- a/README.md +++ b/README.md @@ -13,9 +13,7 @@

Warm regards,
The Community

- - -

Proxmox VE Helper-Scripts

+---

Website (tteck) | @@ -40,6 +38,6 @@ Please exercise caution and thoroughly review scripts and automation tasks from ### Note on the Transition: This project is now maintained by the community in memory of tteck’s invaluable contribution. His dedication transformed the Proxmox experience for countless users, and we’re committed to continuing his work with the same dedication. - +---

Proxmox® is a registered trademark of Proxmox Server Solutions GmbH.
From 8de4964835b7a3f2bb1da567f15e0e7aa70fcb04 Mon Sep 17 00:00:00 2001 From: community-scripts Date: Fri, 1 Nov 2024 15:21:06 +0100 Subject: [PATCH 005/631] Update README.md --- README.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 8025b9893..17fc61f6c 100644 --- a/README.md +++ b/README.md @@ -29,8 +29,10 @@ This community-managed project continues tteck’s original vision of simplifyin All configuration choices are displayed in a dialog box, where users can select their preferences. The script then validates these inputs to generate a final configuration for the container or virtual machine. +
+

-Please exercise caution and thoroughly review scripts and automation tasks from external sources. Read more +Please exercise caution and thoroughly review scripts and automation tasks from external sources. Read more

--- From 5bf253a9fa2b8cd26d36bc81d2fa32b19a729511 Mon Sep 17 00:00:00 2001 From: tteckster Date: Sat, 2 Nov 2024 01:22:13 -0400 Subject: [PATCH 006/631] Update build.func switch to `community-scripts/ProxmoxVE` Signed-off-by: tteckster --- misc/build.func | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/misc/build.func b/misc/build.func index c28216017..b838ef1ad 100644 --- a/misc/build.func +++ b/misc/build.func @@ -537,9 +537,9 @@ build_container() { TEMP_DIR=$(mktemp -d) pushd $TEMP_DIR >/dev/null if [ "$var_os" == "alpine" ]; then - export FUNCTIONS_FILE_PATH="$(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/alpine-install.func)" + export FUNCTIONS_FILE_PATH="$(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/alpine-install.func)" else - export FUNCTIONS_FILE_PATH="$(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/install.func)" + export FUNCTIONS_FILE_PATH="$(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/install.func)" fi export CACHER="$APT_CACHER" export CACHER_IP="$APT_CACHER_IP" @@ -569,7 +569,7 @@ build_container() { $PW " # This executes create_lxc.sh and creates the container and .conf file - bash -c "$(wget -qLO - https://raw.githubusercontent.com/tteck/Proxmox/main/ct/create_lxc.sh)" || exit + bash -c "$(wget -qLO - https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/ct/create_lxc.sh)" || exit LXC_CONFIG=/etc/pve/lxc/${CTID}.conf if [ "$CT_TYPE" == "0" ]; then @@ -633,7 +633,7 @@ http://dl-cdn.alpinelinux.org/alpine/latest-stable/community EOF' pct exec "$CTID" -- ash -c "apk add bash >/dev/null" fi - lxc-attach -n "$CTID" -- bash -c "$(wget -qLO - https://raw.githubusercontent.com/tteck/Proxmox/main/install/$var_install.sh)" || exit + lxc-attach -n "$CTID" -- bash -c "$(wget -qLO - https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/install/$var_install.sh)" || exit } From a4a1821822f0f00fde56bc9b1ebe7204f5e01c08 Mon Sep 17 00:00:00 2001 From: CanbiZ <47820557+MickLesk@users.noreply.github.com> Date: Sat, 2 Nov 2024 08:48:05 +0100 Subject: [PATCH 007/631] Changed all dependencies to the community project --- .github/CONTRIBUTING.md | 4 ++-- .github/ISSUE_TEMPLATE/bug_report.yaml | 2 +- .github/ISSUE_TEMPLATE/config.yml | 2 +- CODE-AUDIT.md | 16 ++++++++-------- LICENSE | 2 +- README.md | 2 +- USER_SUBMITTED_GUIDES.md | 2 +- ct/actualbudget.sh | 4 ++-- ct/adguard.sh | 4 ++-- ct/adventurelog.sh | 4 ++-- ct/agentdvr.sh | 4 ++-- ct/alpine-docker.sh | 4 ++-- ct/alpine-grafana.sh | 4 ++-- ct/alpine-nextcloud.sh | 4 ++-- ct/alpine-vaultwarden.sh | 4 ++-- ct/alpine-zigbee2mqtt.sh | 4 ++-- ct/alpine.sh | 4 ++-- ct/apache-cassandra.sh | 4 ++-- ct/apache-couchdb.sh | 4 ++-- ct/apt-cacher-ng.sh | 4 ++-- ct/archivebox.sh | 4 ++-- ct/aria2.sh | 4 ++-- ct/audiobookshelf.sh | 4 ++-- ct/autobrr.sh | 4 ++-- ct/bazarr.sh | 4 ++-- ct/blocky.sh | 4 ++-- ct/bunkerweb.sh | 4 ++-- ct/caddy.sh | 4 ++-- ct/calibre-web.sh | 4 ++-- ct/casaos.sh | 4 ++-- ct/changedetection.sh | 4 ++-- ct/channels.sh | 4 ++-- ct/cloudflared.sh | 4 ++-- ct/cockpit.sh | 4 ++-- ct/commafeed.sh | 4 ++-- ct/create_lxc.sh | 2 +- ct/cronicle.sh | 4 ++-- ct/daemonsync.sh | 4 ++-- ct/dashy.sh | 4 ++-- ct/debian.sh | 4 ++-- ct/deconz.sh | 4 ++-- ct/deluge.sh | 4 ++-- ct/docker.sh | 4 ++-- ct/dockge.sh | 4 ++-- ct/emby.sh | 4 ++-- ct/emqx.sh | 4 ++-- ct/ersatztv.sh | 4 ++-- ct/esphome.sh | 4 ++-- ct/evcc.sh | 4 ++-- ct/fenrus.sh | 4 ++-- ct/fhem.sh | 4 ++-- ct/flaresolverr.sh | 4 ++-- ct/flowiseai.sh | 4 ++-- ct/forgejo.sh | 4 ++-- ct/frigate.sh | 4 ++-- ct/gitea.sh | 4 ++-- ct/go2rtc.sh | 4 ++-- ct/gokapi.sh | 4 ++-- ct/gotify.sh | 4 ++-- ct/grafana.sh | 4 ++-- ct/grocy.sh | 4 ++-- ct/headscale.sh | 4 ++-- ct/heimdall-dashboard.sh | 4 ++-- ct/hivemq.sh | 4 ++-- ct/homarr.sh | 4 ++-- ct/homeassistant-core.sh | 4 ++-- ct/homeassistant.sh | 4 ++-- ct/homebox.sh | 4 ++-- ct/homebridge.sh | 4 ++-- ct/homepage.sh | 4 ++-- ct/homer.sh | 4 ++-- ct/hyperhdr.sh | 4 ++-- ct/hyperion.sh | 4 ++-- ct/influxdb.sh | 4 ++-- ct/iobroker.sh | 4 ++-- ct/iventoy.sh | 4 ++-- ct/jackett.sh | 4 ++-- ct/jellyfin.sh | 4 ++-- ct/jellyseerr.sh | 4 ++-- ct/kavita.sh | 4 ++-- ct/keycloak.sh | 4 ++-- ct/kubo.sh | 4 ++-- ct/lazylibrarian.sh | 4 ++-- ct/lidarr.sh | 4 ++-- ct/linkwarden.sh | 4 ++-- ct/lldap.sh | 4 ++-- ct/mafl.sh | 4 ++-- ct/magicmirror.sh | 4 ++-- ct/mariadb.sh | 4 ++-- ct/matterbridge.sh | 4 ++-- ct/mediamtx.sh | 4 ++-- ct/medusa.sh | 4 ++-- ct/memos.sh | 4 ++-- ct/meshcentral.sh | 4 ++-- ct/metube.sh | 4 ++-- ct/mongodb.sh | 4 ++-- ct/motioneye.sh | 4 ++-- ct/mqtt.sh | 4 ++-- ct/myspeed.sh | 4 ++-- ct/mysql.sh | 4 ++-- ct/n8n.sh | 4 ++-- ct/navidrome.sh | 4 ++-- ct/neo4j.sh | 4 ++-- ct/nextcloudpi.sh | 4 ++-- ct/nginxproxymanager.sh | 4 ++-- ct/nocodb.sh | 4 ++-- ct/node-red.sh | 4 ++-- ct/notifiarr.sh | 4 ++-- ct/ntfy.sh | 4 ++-- ct/nzbget.sh | 4 ++-- ct/octoprint.sh | 4 ++-- ct/ollama.sh | 4 ++-- ct/omada.sh | 4 ++-- ct/ombi.sh | 4 ++-- ct/omv.sh | 4 ++-- ct/openhab.sh | 4 ++-- ct/openobserve.sh | 4 ++-- ct/openwebui.sh | 4 ++-- ct/overseerr.sh | 4 ++-- ct/owncast.sh | 4 ++-- ct/pairdrop.sh | 4 ++-- ct/paperless-ngx.sh | 4 ++-- ct/pbs.sh | 4 ++-- ct/peanut.sh | 4 ++-- ct/petio.sh | 4 ++-- ct/photoprism.sh | 4 ++-- ct/pialert.sh | 4 ++-- ct/pihole.sh | 4 ++-- ct/pingvin.sh | 4 ++-- ct/plex.sh | 4 ++-- ct/pocketbase.sh | 4 ++-- ct/podman-homeassistant.sh | 4 ++-- ct/podman.sh | 4 ++-- ct/postgresql.sh | 4 ++-- ct/prometheus.sh | 4 ++-- ct/prowlarr.sh | 4 ++-- ct/qbittorrent.sh | 4 ++-- ct/rabbitmq.sh | 4 ++-- ct/radarr.sh | 4 ++-- ct/rdtclient.sh | 4 ++-- ct/readarr.sh | 4 ++-- ct/readeck.sh | 4 ++-- ct/redis.sh | 4 ++-- ct/rockylinux.sh | 4 ++-- ct/rtsptoweb.sh | 4 ++-- ct/runtipi.sh | 4 ++-- ct/sabnzbd.sh | 4 ++-- ct/scrypted.sh | 4 ++-- ct/sftpgo.sh | 4 ++-- ct/shinobi.sh | 4 ++-- ct/smokeping.sh | 4 ++-- ct/sonarr.sh | 4 ++-- ct/spoolman.sh | 4 ++-- ct/stirling-pdf.sh | 4 ++-- ct/syncthing.sh | 4 ++-- ct/tandoor.sh | 4 ++-- ct/tasmoadmin.sh | 4 ++-- ct/tautulli.sh | 4 ++-- ct/tdarr.sh | 4 ++-- ct/technitiumdns.sh | 4 ++-- ct/threadfin.sh | 4 ++-- ct/tianji.sh | 4 ++-- ct/traccar.sh | 4 ++-- ct/traefik.sh | 4 ++-- ct/transmission.sh | 4 ++-- ct/trilium.sh | 4 ++-- ct/ubuntu.sh | 4 ++-- ct/umami.sh | 4 ++-- ct/umbrel.sh | 4 ++-- ct/unifi.sh | 4 ++-- ct/unmanic.sh | 4 ++-- ct/uptimekuma.sh | 4 ++-- ct/vaultwarden.sh | 4 ++-- ct/wallos.sh | 4 ++-- ct/wastebin.sh | 4 ++-- ct/watchyourlan.sh | 4 ++-- ct/whisparr.sh | 4 ++-- ct/whoogle.sh | 4 ++-- ct/wikijs.sh | 4 ++-- ct/wireguard.sh | 4 ++-- ct/yunohost.sh | 4 ++-- ct/zabbix.sh | 4 ++-- ct/zigbee2mqtt.sh | 4 ++-- ct/zipline.sh | 4 ++-- ct/zoraxy.sh | 4 ++-- ct/zwave-js-ui.sh | 4 ++-- install/actualbudget-install.sh | 2 +- install/adguard-install.sh | 2 +- install/adventurelog-install.sh | 2 +- install/agentdvr-install.sh | 2 +- install/alpine-docker-install.sh | 2 +- install/alpine-grafana-install.sh | 2 +- install/alpine-install.sh | 2 +- install/alpine-nextcloud-install.sh | 2 +- install/alpine-vaultwarden-install.sh | 2 +- install/alpine-zigbee2mqtt-install.sh | 2 +- install/apache-cassandra-install.sh | 2 +- install/apache-couchdb-install.sh | 2 +- install/apt-cacher-ng-install.sh | 2 +- install/archivebox-install.sh | 2 +- install/aria2-install.sh | 2 +- install/audiobookshelf-install.sh | 2 +- install/autobrr-install.sh | 2 +- install/bazarr-install.sh | 2 +- install/blocky-install.sh | 2 +- install/bunkerweb-install.sh | 2 +- install/caddy-install.sh | 2 +- install/calibre-web-install.sh | 2 +- install/casaos-install.sh | 2 +- install/changedetection-install.sh | 2 +- install/channels-install.sh | 2 +- install/cloudflared-install.sh | 2 +- install/cockpit-install.sh | 2 +- install/commafeed-install.sh | 2 +- install/cronicle-install.sh | 2 +- install/daemonsync-install.sh | 4 ++-- install/dashy-install.sh | 2 +- install/debian-install.sh | 2 +- install/deconz-install.sh | 2 +- install/deluge-install.sh | 2 +- install/docker-install.sh | 2 +- install/dockge-install.sh | 2 +- install/emby-install.sh | 2 +- install/emqx-install.sh | 2 +- install/ersatztv-install.sh | 2 +- install/esphome-install.sh | 2 +- install/evcc-install.sh | 2 +- install/fenrus-install.sh | 2 +- install/fhem-install.sh | 2 +- install/flaresolverr-install.sh | 2 +- install/flowiseai-install.sh | 2 +- install/forgejo-install.sh | 2 +- install/frigate-install.sh | 2 +- install/gitea-install.sh | 2 +- install/go2rtc-install.sh | 2 +- install/gokapi-install.sh | 2 +- install/gotify-install.sh | 2 +- install/grafana-install.sh | 2 +- install/grocy-install.sh | 2 +- install/headscale-install.sh | 2 +- install/heimdall-dashboard-install.sh | 2 +- install/hivemq-install.sh | 2 +- install/homarr-install.sh | 2 +- install/homeassistant-core-install.sh | 2 +- install/homeassistant-install.sh | 2 +- install/homebox-install.sh | 2 +- install/homebridge-install.sh | 2 +- install/homepage-install.sh | 2 +- install/homer-install.sh | 2 +- install/hyperhdr-install.sh | 2 +- install/hyperion-install.sh | 2 +- install/influxdb-install.sh | 2 +- install/iobroker-install.sh | 2 +- install/iventoy-install.sh | 2 +- install/jackett-install.sh | 2 +- install/jellyfin-install.sh | 2 +- install/jellyseerr-install.sh | 2 +- install/kavita-install.sh | 2 +- install/keycloak-install.sh | 2 +- install/kubo-install.sh | 2 +- install/lazylibrarian-install.sh | 2 +- install/lidarr-install.sh | 2 +- install/linkwarden-install.sh | 2 +- install/lldap-install.sh | 2 +- install/mafl-install.sh | 2 +- install/magicmirror-install.sh | 2 +- install/mariadb-install.sh | 2 +- install/matterbridge-install.sh | 2 +- install/mediamtx-install.sh | 2 +- install/medusa-install.sh | 2 +- install/memos-install.sh | 2 +- install/meshcentral-install.sh | 2 +- install/metube-install.sh | 2 +- install/mongodb-install.sh | 2 +- install/motioneye-install.sh | 2 +- install/mqtt-install.sh | 2 +- install/myspeed-install.sh | 2 +- install/mysql-install.sh | 2 +- install/n8n-install.sh | 2 +- install/navidrome-install.sh | 2 +- install/neo4j-install.sh | 2 +- install/nextcloudpi-install.sh | 2 +- install/nginxproxymanager-install.sh | 2 +- install/nocodb-install.sh | 2 +- install/node-red-install.sh | 2 +- install/notifiarr-install.sh | 2 +- install/ntfy-install.sh | 2 +- install/nzbget-install.sh | 2 +- install/octoprint-install.sh | 2 +- install/ollama-install.sh | 2 +- install/omada-install.sh | 2 +- install/ombi-install.sh | 2 +- install/omv-install.sh | 2 +- install/openhab-install.sh | 2 +- install/openobserve-install.sh | 2 +- install/openwebui-install.sh | 2 +- install/overseerr-install.sh | 2 +- install/owncast-install.sh | 2 +- install/pairdrop-install.sh | 2 +- install/paperless-ngx-install.sh | 2 +- install/pbs-install.sh | 2 +- install/peanut-install.sh | 2 +- install/petio-install.sh | 2 +- install/photoprism-install.sh | 4 ++-- install/pialert-install.sh | 2 +- install/pihole-install.sh | 2 +- install/pingvin-install.sh | 2 +- install/plex-install.sh | 2 +- install/pocketbase-install.sh | 2 +- install/podman-homeassistant-install.sh | 2 +- install/podman-install.sh | 2 +- install/postgresql-install.sh | 2 +- install/prometheus-install.sh | 2 +- install/prowlarr-install.sh | 2 +- install/qbittorrent-install.sh | 2 +- install/rabbitmq-install.sh | 2 +- install/radarr-install.sh | 2 +- install/rdtclient-install.sh | 2 +- install/readarr-install.sh | 2 +- install/readeck-install.sh | 2 +- install/redis-install.sh | 2 +- install/rtsptoweb-install.sh | 2 +- install/runtipi-install.sh | 2 +- install/sabnzbd-install.sh | 2 +- install/scrypted-install.sh | 2 +- install/sftpgo-install.sh | 2 +- install/shinobi-install.sh | 2 +- install/smokeping-install.sh | 2 +- install/sonarr-install.sh | 2 +- install/spoolman-install.sh | 2 +- install/stirling-pdf-install.sh | 2 +- install/syncthing-install.sh | 2 +- install/tandoor-install.sh | 2 +- install/tasmoadmin-install.sh | 2 +- install/tautulli-install.sh | 2 +- install/tdarr-install.sh | 2 +- install/technitiumdns-install.sh | 2 +- install/threadfin-install.sh | 2 +- install/tianji-install.sh | 2 +- install/traccar-install.sh | 2 +- install/traefik-install.sh | 2 +- install/transmission-install.sh | 2 +- install/trilium-install.sh | 2 +- install/ubuntu-install.sh | 2 +- install/umami-install.sh | 2 +- install/umbrel-install.sh | 2 +- install/unifi-install.sh | 2 +- install/unmanic-install.sh | 2 +- install/uptimekuma-install.sh | 2 +- install/vaultwarden-install.sh | 2 +- install/wallos-install.sh | 2 +- install/wastebin-install.sh | 2 +- install/watchyourlan-install.sh | 2 +- install/whisparr-install.sh | 2 +- install/whoogle-install.sh | 2 +- install/wikijs-install.sh | 2 +- install/wireguard-install.sh | 2 +- install/yunohost-install.sh | 2 +- install/zabbix-install.sh | 2 +- install/zigbee2mqtt-install.sh | 2 +- install/zipline-install.sh | 2 +- install/zoraxy-install.sh | 2 +- install/zwave-js-ui-install.sh | 2 +- misc/add-netbird-lxc.sh | 2 +- misc/add-tailscale-lxc.sh | 2 +- misc/all-templates.sh | 2 +- misc/alpine-install.func | 2 +- misc/build.func | 2 +- misc/clean-lxcs.sh | 4 ++-- misc/clean.sh | 2 +- misc/code-server.sh | 2 +- misc/container-restore-from-backup.sh | 2 +- misc/copy-data/README.md | 18 +++++++++--------- ...ainer-copy-data-home-assistant-container.sh | 4 ++-- ...-container-copy-data-home-assistant-core.sh | 4 ++-- ...ontainer-copy-data-podman-home-assistant.sh | 4 ++-- ...-core-copy-data-home-assistant-container.sh | 4 ++-- ...stant-core-copy-data-home-assistant-core.sh | 4 ++-- misc/copy-data/plex-copy-data-plex.sh | 4 ++-- ...stant-copy-data-home-assistant-container.sh | 4 ++-- misc/copy-data/z2m-copy-data-z2m.sh | 4 ++-- .../zwavejs2mqtt-copy-data-zwavejsui.sh | 4 ++-- misc/core-restore-from-backup.sh | 2 +- misc/cron-update-lxcs.sh | 8 ++++---- misc/crowdsec.sh | 2 +- misc/filebrowser.sh | 2 +- misc/frigate-support.sh | 4 ++-- misc/fstrim.sh | 2 +- misc/glances.sh | 2 +- misc/host-backup.sh | 2 +- misc/hw-acceleration.sh | 4 ++-- misc/install.func | 2 +- misc/kernel-clean.sh | 2 +- misc/kernel-pin.sh | 2 +- misc/microcode.sh | 2 +- misc/monitor-all.sh | 2 +- misc/netdata.sh | 2 +- misc/olivetin.sh | 2 +- misc/pbs3-upgrade.sh | 2 +- misc/post-pbs-install.sh | 2 +- misc/post-pve-install.sh | 2 +- misc/pve8-upgrade.sh | 2 +- misc/pyenv.sh | 4 ++-- misc/scaling-governor.sh | 2 +- misc/update-lxcs-cron.sh | 2 +- misc/update-lxcs.sh | 2 +- misc/usb-passthrough.sh | 2 +- misc/webmin.sh | 2 +- turnkey/turnkey.sh | 2 +- vm/debian-vm.sh | 6 +++--- vm/haos-vm.sh | 4 ++-- vm/mikrotik-routeros.sh | 4 ++-- vm/nextcloud-vm.sh | 4 ++-- vm/openwrt.sh | 4 ++-- vm/owncloud-vm.sh | 4 ++-- vm/pimox-haos-vm.sh | 4 ++-- vm/ubuntu2204-vm.sh | 6 +++--- vm/ubuntu2404-vm.sh | 6 +++--- 418 files changed, 642 insertions(+), 642 deletions(-) diff --git a/.github/CONTRIBUTING.md b/.github/CONTRIBUTING.md index 2b2bf02d8..b000bd25e 100644 --- a/.github/CONTRIBUTING.md +++ b/.github/CONTRIBUTING.md @@ -1,13 +1,13 @@

Contributing to Proxmox VE Helper Scripts

Everybody is invited and welcome to contribute to Proxmox VE Helper Scripts. -- Pull requests submitted against [**main**](https://github.com/tteck/Proxmox/tree/main) are meticulously scrutinized, so please do not take it personally if the project maintainer rejects your request. By adhering to the established patterns and conventions throughout the codebase, you greatly increase the likelihood that your changes will get merged into [**main**](https://github.com/tteck/Proxmox/tree/main). +- Pull requests submitted against [**main**](https://github.com/community-scripts/ProxmoxVE/tree/main) are meticulously scrutinized, so please do not take it personally if the project maintainer rejects your request. By adhering to the established patterns and conventions throughout the codebase, you greatly increase the likelihood that your changes will get merged into [**main**](https://github.com/community-scripts/ProxmoxVE/tree/main). - It is important to stress that complaining about a decision after it has been made is not productive behavior for the pull request submitter. It is crucial for all contributors to respect the decision-making process and collaborate effectively towards achieving the best possible outcome for the project. diff --git a/.github/ISSUE_TEMPLATE/bug_report.yaml b/.github/ISSUE_TEMPLATE/bug_report.yaml index 26e62e89e..bed104331 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.yaml +++ b/.github/ISSUE_TEMPLATE/bug_report.yaml @@ -8,7 +8,7 @@ body: - Prior to submitting, kindly search the closed issues to check if the problem you are reporting has already been addressed and resolved. If you come across a closed issue that pertains to your problem, please leave a comment on that issue instead of creating a new one. - If the default Linux distribution is not adhered to, script support will be discontinued. - When encountering the error message `[ERROR] in line 23: exit code *: while executing command "$@" > /dev/null 2>&1`, make sure to run the script in verbose mode to accurately determine the underlying issue. - - For suggestions, questions or feature/script requests, please share them in the [Discussions section.](https://github.com/tteck/Proxmox/discussions) + - For suggestions, questions or feature/script requests, please share them in the [Discussions section.](https://github.com/community-scripts/ProxmoxVE/discussions) - type: input id: guidelines attributes: diff --git a/.github/ISSUE_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml index 09abbdf7f..5adde47d5 100644 --- a/.github/ISSUE_TEMPLATE/config.yml +++ b/.github/ISSUE_TEMPLATE/config.yml @@ -1,5 +1,5 @@ blank_issues_enabled: false contact_links: - name: Helper-Scripts Community Support - url: https://github.com/tteck/Proxmox/discussions + url: https://github.com/community-scripts/ProxmoxVE/discussions about: Please ask and answer questions here. diff --git a/CODE-AUDIT.md b/CODE-AUDIT.md index 46db7c9c7..158a5c6ce 100644 --- a/CODE-AUDIT.md +++ b/CODE-AUDIT.md @@ -1,14 +1,14 @@
- +

Exploring the Scripts and Steps Involved in an Application LXC Installation

-1) [adguard.sh](https://github.com/tteck/Proxmox/blob/main/ct/adguard.sh): This script collects system parameters. (Also holds the function to update the application.) -2) [build.func](https://github.com/tteck/Proxmox/blob/main/misc/build.func): Adds user settings and integrates collected information. -3) [create_lxc.sh](https://github.com/tteck/Proxmox/blob/main/ct/create_lxc.sh): Constructs the LXC container. -4) [adguard-install.sh](https://github.com/tteck/Proxmox/blob/main/install/adguard-install.sh): Executes functions from [install.func](https://github.com/tteck/Proxmox/blob/main/misc/install.func), and installs the application. -5) [adguard.sh](https://github.com/tteck/Proxmox/blob/main/ct/adguard.sh) (again): To display the completion message. +1) [adguard.sh](https://github.com/community-scripts/ProxmoxVE/blob/main/ct/adguard.sh): This script collects system parameters. (Also holds the function to update the application.) +2) [build.func](https://github.com/community-scripts/ProxmoxVE/blob/main/misc/build.func): Adds user settings and integrates collected information. +3) [create_lxc.sh](https://github.com/community-scripts/ProxmoxVE/blob/main/ct/create_lxc.sh): Constructs the LXC container. +4) [adguard-install.sh](https://github.com/community-scripts/ProxmoxVE/blob/main/install/adguard-install.sh): Executes functions from [install.func](https://github.com/community-scripts/ProxmoxVE/blob/main/misc/install.func), and installs the application. +5) [adguard.sh](https://github.com/community-scripts/ProxmoxVE/blob/main/ct/adguard.sh) (again): To display the completion message. -The installation process uses reusable scripts: [build.func](https://github.com/tteck/Proxmox/blob/main/misc/build.func), [create_lxc.sh](https://github.com/tteck/Proxmox/blob/main/ct/create_lxc.sh), and [install.func](https://github.com/tteck/Proxmox/blob/main/misc/install.func), which are not specific to any particular application. +The installation process uses reusable scripts: [build.func](https://github.com/community-scripts/ProxmoxVE/blob/main/misc/build.func), [create_lxc.sh](https://github.com/community-scripts/ProxmoxVE/blob/main/ct/create_lxc.sh), and [install.func](https://github.com/community-scripts/ProxmoxVE/blob/main/misc/install.func), which are not specific to any particular application. -To gain a better understanding, focus on reviewing [adguard-install.sh](https://github.com/tteck/Proxmox/blob/main/install/adguard-install.sh). This script contains the commands and configurations for installing and configuring AdGuard Home within the LXC container. +To gain a better understanding, focus on reviewing [adguard-install.sh](https://github.com/community-scripts/ProxmoxVE/blob/main/install/adguard-install.sh). This script contains the commands and configurations for installing and configuring AdGuard Home within the LXC container. diff --git a/LICENSE b/LICENSE index 86316b3f8..8603db7b1 100644 --- a/LICENSE +++ b/LICENSE @@ -1,6 +1,6 @@ MIT License -Copyright (c) 2021-2024 tteck +Copyright (c) 2021-2024 tteck | community-scripts ORG Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/README.md b/README.md index 17fc61f6c..240dca682 100644 --- a/README.md +++ b/README.md @@ -7,7 +7,7 @@

Proxmox VE Helper-Scripts: A Community Legacy

Dear Community,

-

In agreement with tteck, this project has now transitioned into a community-driven effort. We aim to continue his work, building on the foundation he laid to support Proxmox users worldwide.

+

In agreement with tteck and Community-Scripts, this project has now transitioned into a community-driven effort. We aim to continue his work, building on the foundation he laid to support Proxmox users worldwide.

tteck, whose contribution has been invaluable, shared recently that he is now in hospice care. His scripts have empowered thousands, and we honor his legacy by carrying this project forward with the same passion and commitment. We’re deeply grateful for his vision, which made Proxmox accessible to so many.

To tteck: Your impact will be felt in this community for years to come. We thank you for everything.

Warm regards,
The Community

diff --git a/USER_SUBMITTED_GUIDES.md b/USER_SUBMITTED_GUIDES.md index a1a3aae9e..795993950 100644 --- a/USER_SUBMITTED_GUIDES.md +++ b/USER_SUBMITTED_GUIDES.md @@ -1,6 +1,6 @@

User Submitted Guides

diff --git a/ct/actualbudget.sh b/ct/actualbudget.sh index 1f1e201d6..8a7f64015 100644 --- a/ct/actualbudget.sh +++ b/ct/actualbudget.sh @@ -1,9 +1,9 @@ #!/usr/bin/env bash -source <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func) +source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) # Copyright (c) 2021-2024 tteck # Author: tteck (tteckster) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE function header_info { clear diff --git a/ct/adguard.sh b/ct/adguard.sh index b7a8fdd53..6f4cf6f06 100644 --- a/ct/adguard.sh +++ b/ct/adguard.sh @@ -1,9 +1,9 @@ #!/usr/bin/env bash -source <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func) +source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) # Copyright (c) 2021-2024 tteck # Author: tteck (tteckster) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE function header_info { clear diff --git a/ct/adventurelog.sh b/ct/adventurelog.sh index 3d7137e57..96edfe0fc 100644 --- a/ct/adventurelog.sh +++ b/ct/adventurelog.sh @@ -1,10 +1,10 @@ #!/usr/bin/env bash -source <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func) +source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) # Copyright (c) 2021-2024 tteck # Author: tteck # Co-Author: MickLesk (Canbiz) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE function header_info { clear diff --git a/ct/agentdvr.sh b/ct/agentdvr.sh index d77921bf7..006d75da9 100644 --- a/ct/agentdvr.sh +++ b/ct/agentdvr.sh @@ -1,9 +1,9 @@ #!/usr/bin/env bash -source <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func) +source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) # Copyright (c) 2021-2024 tteck # Author: tteck (tteckster) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE function header_info { clear diff --git a/ct/alpine-docker.sh b/ct/alpine-docker.sh index 6fe0c3bf1..69d28456b 100644 --- a/ct/alpine-docker.sh +++ b/ct/alpine-docker.sh @@ -1,9 +1,9 @@ #!/usr/bin/env bash -source <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func) +source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) # Copyright (c) 2021-2024 tteck # Author: tteck (tteckster) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE function header_info { clear diff --git a/ct/alpine-grafana.sh b/ct/alpine-grafana.sh index 97e5ebde4..177e6b648 100644 --- a/ct/alpine-grafana.sh +++ b/ct/alpine-grafana.sh @@ -1,9 +1,9 @@ #!/usr/bin/env bash -source <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func) +source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) # Copyright (c) 2021-2024 tteck # Author: tteck (tteckster) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE function header_info { clear diff --git a/ct/alpine-nextcloud.sh b/ct/alpine-nextcloud.sh index c683cfe2d..f27cde241 100644 --- a/ct/alpine-nextcloud.sh +++ b/ct/alpine-nextcloud.sh @@ -1,9 +1,9 @@ #!/usr/bin/env bash -source <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func) +source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) # Copyright (c) 2021-2024 tteck # Author: tteck (tteckster) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE function header_info { clear diff --git a/ct/alpine-vaultwarden.sh b/ct/alpine-vaultwarden.sh index 9b06d51d3..b700a9522 100644 --- a/ct/alpine-vaultwarden.sh +++ b/ct/alpine-vaultwarden.sh @@ -1,9 +1,9 @@ #!/usr/bin/env bash -source <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func) +source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) # Copyright (c) 2021-2024 tteck # Author: tteck (tteckster) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE function header_info { clear diff --git a/ct/alpine-zigbee2mqtt.sh b/ct/alpine-zigbee2mqtt.sh index eb98903ab..39d213758 100644 --- a/ct/alpine-zigbee2mqtt.sh +++ b/ct/alpine-zigbee2mqtt.sh @@ -1,9 +1,9 @@ #!/usr/bin/env bash -source <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func) +source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) # Copyright (c) 2021-2024 tteck # Author: tteck (tteckster) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE function header_info { clear diff --git a/ct/alpine.sh b/ct/alpine.sh index 8a651555a..d6944dc0f 100644 --- a/ct/alpine.sh +++ b/ct/alpine.sh @@ -1,9 +1,9 @@ #!/usr/bin/env bash -source <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func) +source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) # Copyright (c) 2021-2024 tteck # Author: tteck (tteckster) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE function header_info { clear diff --git a/ct/apache-cassandra.sh b/ct/apache-cassandra.sh index 35f83dff9..f5b0aea74 100644 --- a/ct/apache-cassandra.sh +++ b/ct/apache-cassandra.sh @@ -1,9 +1,9 @@ #!/usr/bin/env bash -source <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func) +source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) # Copyright (c) 2021-2024 tteck # Author: tteck (tteckster) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE function header_info { clear diff --git a/ct/apache-couchdb.sh b/ct/apache-couchdb.sh index cd2c00afe..278ba73d7 100644 --- a/ct/apache-couchdb.sh +++ b/ct/apache-couchdb.sh @@ -1,9 +1,9 @@ #!/usr/bin/env bash -source <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func) +source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) # Copyright (c) 2021-2024 tteck # Author: tteck (tteckster) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE function header_info { clear diff --git a/ct/apt-cacher-ng.sh b/ct/apt-cacher-ng.sh index 8d8235a37..9dc1115ae 100644 --- a/ct/apt-cacher-ng.sh +++ b/ct/apt-cacher-ng.sh @@ -1,9 +1,9 @@ #!/usr/bin/env bash -source <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func) +source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) # Copyright (c) 2021-2024 tteck # Author: tteck (tteckster) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE function header_info { clear diff --git a/ct/archivebox.sh b/ct/archivebox.sh index 9b058660c..0ad2ab7ba 100644 --- a/ct/archivebox.sh +++ b/ct/archivebox.sh @@ -1,9 +1,9 @@ #!/usr/bin/env bash -source <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func) +source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) # Copyright (c) 2021-2024 tteck # Author: tteck # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE function header_info { clear diff --git a/ct/aria2.sh b/ct/aria2.sh index 7fc96b973..e58e51a63 100644 --- a/ct/aria2.sh +++ b/ct/aria2.sh @@ -1,9 +1,9 @@ #!/usr/bin/env bash -source <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func) +source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) # Copyright (c) 2021-2024 tteck # Author: tteck (tteckster) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE function header_info { clear diff --git a/ct/audiobookshelf.sh b/ct/audiobookshelf.sh index 4d360634c..5c57a966a 100644 --- a/ct/audiobookshelf.sh +++ b/ct/audiobookshelf.sh @@ -1,9 +1,9 @@ #!/usr/bin/env bash -source <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func) +source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) # Copyright (c) 2021-2024 tteck # Author: tteck (tteckster) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE function header_info { clear diff --git a/ct/autobrr.sh b/ct/autobrr.sh index 8cfc2f3ee..5cd19e7ab 100644 --- a/ct/autobrr.sh +++ b/ct/autobrr.sh @@ -1,9 +1,9 @@ #!/usr/bin/env bash -source <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func) +source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) # Copyright (c) 2021-2024 tteck # Author: tteck (tteckster) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE function header_info { clear diff --git a/ct/bazarr.sh b/ct/bazarr.sh index d94543e5e..7897f4c4a 100755 --- a/ct/bazarr.sh +++ b/ct/bazarr.sh @@ -1,9 +1,9 @@ #!/usr/bin/env bash -source <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func) +source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) # Copyright (c) 2021-2024 tteck # Author: tteck (tteckster) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE function header_info { clear diff --git a/ct/blocky.sh b/ct/blocky.sh index a9c74c4d2..634f21c27 100644 --- a/ct/blocky.sh +++ b/ct/blocky.sh @@ -1,9 +1,9 @@ #!/usr/bin/env bash -source <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func) +source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) # Copyright (c) 2021-2024 tteck # Author: tteck (tteckster) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE function header_info { clear diff --git a/ct/bunkerweb.sh b/ct/bunkerweb.sh index 98a809638..7d2cfdbf0 100644 --- a/ct/bunkerweb.sh +++ b/ct/bunkerweb.sh @@ -1,9 +1,9 @@ #!/usr/bin/env bash -source <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func) +source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) # Copyright (c) 2021-2024 tteck # Author: tteck (tteckster) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE function header_info { clear diff --git a/ct/caddy.sh b/ct/caddy.sh index 6df98d399..12c852071 100644 --- a/ct/caddy.sh +++ b/ct/caddy.sh @@ -1,9 +1,9 @@ #!/usr/bin/env bash -source <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func) +source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) # Copyright (c) 2021-2024 tteck # Author: tteck (tteckster) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE function header_info { clear diff --git a/ct/calibre-web.sh b/ct/calibre-web.sh index d7b53adc0..c04affeda 100644 --- a/ct/calibre-web.sh +++ b/ct/calibre-web.sh @@ -1,10 +1,10 @@ #!/usr/bin/env bash -source <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func) +source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) # Copyright (c) 2021-2024 tteck # Author: tteck (tteckster) # Co-Author: remz1337 # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE function header_info { clear diff --git a/ct/casaos.sh b/ct/casaos.sh index 85cc05106..c3fda0b90 100644 --- a/ct/casaos.sh +++ b/ct/casaos.sh @@ -1,9 +1,9 @@ #!/usr/bin/env bash -source <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func) +source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) # Copyright (c) 2021-2024 tteck # Author: tteck (tteckster) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE function header_info { clear diff --git a/ct/changedetection.sh b/ct/changedetection.sh index b7881b086..cb4c8f840 100644 --- a/ct/changedetection.sh +++ b/ct/changedetection.sh @@ -1,9 +1,9 @@ #!/usr/bin/env bash -source <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func) +source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) # Copyright (c) 2021-2024 tteck # Author: tteck (tteckster) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE function header_info { clear diff --git a/ct/channels.sh b/ct/channels.sh index 7e8b01403..b42361fbf 100644 --- a/ct/channels.sh +++ b/ct/channels.sh @@ -1,9 +1,9 @@ #!/usr/bin/env bash -source <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func) +source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) # Copyright (c) 2021-2024 tteck # Author: tteck (tteckster) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE function header_info { clear diff --git a/ct/cloudflared.sh b/ct/cloudflared.sh index c4f9631c5..667499259 100644 --- a/ct/cloudflared.sh +++ b/ct/cloudflared.sh @@ -1,9 +1,9 @@ #!/usr/bin/env bash -source <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func) +source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) # Copyright (c) 2021-2024 tteck # Author: tteck (tteckster) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE function header_info { clear diff --git a/ct/cockpit.sh b/ct/cockpit.sh index 479229950..4f195bce1 100644 --- a/ct/cockpit.sh +++ b/ct/cockpit.sh @@ -1,10 +1,10 @@ #!/usr/bin/env bash -source <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func) +source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) # Copyright (c) 2021-2024 tteck # Author: tteck # Co-Author: havardthom # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE function header_info { clear diff --git a/ct/commafeed.sh b/ct/commafeed.sh index 7b8b16b6b..2ad9262f4 100644 --- a/ct/commafeed.sh +++ b/ct/commafeed.sh @@ -1,9 +1,9 @@ #!/usr/bin/env bash -source <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func) +source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) # Copyright (c) 2021-2024 tteck # Author: tteck (tteckster) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE function header_info { clear diff --git a/ct/create_lxc.sh b/ct/create_lxc.sh index f52186004..aae2fcba0 100644 --- a/ct/create_lxc.sh +++ b/ct/create_lxc.sh @@ -3,7 +3,7 @@ # Copyright (c) 2021-2024 tteck # Author: tteck (tteckster) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE # This sets verbose mode if the global variable is set to "yes" # if [ "$VERBOSE" == "yes" ]; then set -x; fi diff --git a/ct/cronicle.sh b/ct/cronicle.sh index 946101f37..aa5423e22 100644 --- a/ct/cronicle.sh +++ b/ct/cronicle.sh @@ -1,9 +1,9 @@ #!/usr/bin/env bash -source <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func) +source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) # Copyright (c) 2021-2024 tteck # Author: tteck (tteckster) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE function header_info { clear diff --git a/ct/daemonsync.sh b/ct/daemonsync.sh index 01ffa4a7b..4e8069e29 100644 --- a/ct/daemonsync.sh +++ b/ct/daemonsync.sh @@ -1,9 +1,9 @@ #!/usr/bin/env bash -source <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func) +source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) # Copyright (c) 2021-2024 tteck # Author: tteck (tteckster) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE function header_info { clear diff --git a/ct/dashy.sh b/ct/dashy.sh index 2193d580e..f4c806142 100644 --- a/ct/dashy.sh +++ b/ct/dashy.sh @@ -1,9 +1,9 @@ #!/usr/bin/env bash -source <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func) +source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) # Copyright (c) 2021-2024 tteck # Author: tteck (tteckster) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE function header_info { clear diff --git a/ct/debian.sh b/ct/debian.sh index 2472b0acb..0af0c4974 100644 --- a/ct/debian.sh +++ b/ct/debian.sh @@ -1,9 +1,9 @@ #!/usr/bin/env bash -source <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func) +source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) # Copyright (c) 2021-2024 tteck # Author: tteck (tteckster) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE function header_info { clear diff --git a/ct/deconz.sh b/ct/deconz.sh index bf42af0ce..f5df37c6c 100644 --- a/ct/deconz.sh +++ b/ct/deconz.sh @@ -1,9 +1,9 @@ #!/usr/bin/env bash -source <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func) +source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) # Copyright (c) 2021-2024 tteck # Author: tteck (tteckster) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE function header_info { clear diff --git a/ct/deluge.sh b/ct/deluge.sh index 897a3bf8f..e938be22e 100644 --- a/ct/deluge.sh +++ b/ct/deluge.sh @@ -1,9 +1,9 @@ #!/usr/bin/env bash -source <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func) +source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) # Copyright (c) 2021-2024 tteck # Author: tteck (tteckster) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE function header_info { clear diff --git a/ct/docker.sh b/ct/docker.sh index ce263f9b8..2b9a880c9 100644 --- a/ct/docker.sh +++ b/ct/docker.sh @@ -1,9 +1,9 @@ #!/usr/bin/env bash -source <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func) +source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) # Copyright (c) 2021-2024 tteck # Author: tteck (tteckster) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE function header_info { clear diff --git a/ct/dockge.sh b/ct/dockge.sh index b1d943a41..38f6eb2a6 100644 --- a/ct/dockge.sh +++ b/ct/dockge.sh @@ -1,9 +1,9 @@ #!/usr/bin/env bash -source <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func) +source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) # Copyright (c) 2021-2024 tteck # Author: tteck (tteckster) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE function header_info { clear diff --git a/ct/emby.sh b/ct/emby.sh index 092a44a49..452affaaf 100644 --- a/ct/emby.sh +++ b/ct/emby.sh @@ -1,9 +1,9 @@ #!/usr/bin/env bash -source <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func) +source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) # Copyright (c) 2021-2024 tteck # Author: tteck (tteckster) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE function header_info { clear diff --git a/ct/emqx.sh b/ct/emqx.sh index 6ec3cab70..59aeeb663 100644 --- a/ct/emqx.sh +++ b/ct/emqx.sh @@ -1,9 +1,9 @@ #!/usr/bin/env bash -source <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func) +source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) # Copyright (c) 2021-2024 tteck # Author: tteck (tteckster) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE function header_info { clear diff --git a/ct/ersatztv.sh b/ct/ersatztv.sh index 81ea5b7b3..52cb9727c 100644 --- a/ct/ersatztv.sh +++ b/ct/ersatztv.sh @@ -1,10 +1,10 @@ #!/usr/bin/env bash -source <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func) +source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) # Copyright (c) 2021-2024 tteck # Author: tteck # Co-Author: MickLesk (Canbiz) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE # Source: https://github.com/ErsatzTV/ErsatzTV/ diff --git a/ct/esphome.sh b/ct/esphome.sh index 7a2e0e877..d5184a8ed 100644 --- a/ct/esphome.sh +++ b/ct/esphome.sh @@ -1,9 +1,9 @@ #!/usr/bin/env bash -source <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func) +source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) # Copyright (c) 2021-2024 tteck # Author: tteck (tteckster) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE function header_info { clear diff --git a/ct/evcc.sh b/ct/evcc.sh index c0e8ed617..17834d69e 100644 --- a/ct/evcc.sh +++ b/ct/evcc.sh @@ -1,9 +1,9 @@ #!/usr/bin/env bash -source <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func) +source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) # Copyright (c) 2021-2024 tteck # Author: MickLesk (Canbiz) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE function header_info { clear diff --git a/ct/fenrus.sh b/ct/fenrus.sh index 0f5e4d17a..af76aca15 100644 --- a/ct/fenrus.sh +++ b/ct/fenrus.sh @@ -1,10 +1,10 @@ #!/usr/bin/env bash -source <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func) +source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) # Copyright (c) 2021-2024 tteck # Author: tteck (tteckster) # Co-Author: Scorpoon # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE function header_info { clear diff --git a/ct/fhem.sh b/ct/fhem.sh index a98ce9ae4..482373be1 100644 --- a/ct/fhem.sh +++ b/ct/fhem.sh @@ -1,9 +1,9 @@ #!/usr/bin/env bash -source <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func) +source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) # Copyright (c) 2021-2024 tteck # Author: tteck (tteckster) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE function header_info { clear diff --git a/ct/flaresolverr.sh b/ct/flaresolverr.sh index a00702a38..b3018bdc8 100644 --- a/ct/flaresolverr.sh +++ b/ct/flaresolverr.sh @@ -1,10 +1,10 @@ #!/usr/bin/env bash -source <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func) +source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) # Copyright (c) 2021-2024 tteck # Author: tteck (tteckster) # Co-Author: remz1337 # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE function header_info { clear diff --git a/ct/flowiseai.sh b/ct/flowiseai.sh index 2e44acceb..b2fd762c4 100644 --- a/ct/flowiseai.sh +++ b/ct/flowiseai.sh @@ -1,9 +1,9 @@ #!/usr/bin/env bash -source <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func) +source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) # Copyright (c) 2021-2024 tteck # Author: tteck (tteckster) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE function header_info { clear diff --git a/ct/forgejo.sh b/ct/forgejo.sh index 9df120bad..606430b97 100644 --- a/ct/forgejo.sh +++ b/ct/forgejo.sh @@ -1,9 +1,9 @@ #!/usr/bin/env bash -source <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func) +source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) # Copyright (c) 2021-2024 tteck # Author: tteck (tteckster) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE function header_info { clear diff --git a/ct/frigate.sh b/ct/frigate.sh index 0e83c6e04..14dd5f612 100644 --- a/ct/frigate.sh +++ b/ct/frigate.sh @@ -1,9 +1,9 @@ #!/usr/bin/env bash -source <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func) +source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) # Copyright (c) 2021-2024 tteck # Authors: tteck (tteckster) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE function header_info { clear diff --git a/ct/gitea.sh b/ct/gitea.sh index 6ab816151..7b09f0b25 100644 --- a/ct/gitea.sh +++ b/ct/gitea.sh @@ -1,10 +1,10 @@ #!/usr/bin/env bash -source <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func) +source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) # Copyright (c) 2021-2024 tteck # Author: tteck (tteckster) # Co-author: Rogue-King # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE function header_info { clear diff --git a/ct/go2rtc.sh b/ct/go2rtc.sh index 380ed801c..03ad250c7 100644 --- a/ct/go2rtc.sh +++ b/ct/go2rtc.sh @@ -1,9 +1,9 @@ #!/usr/bin/env bash -source <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func) +source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) # Copyright (c) 2021-2024 tteck # Author: tteck (tteckster) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE function header_info { clear diff --git a/ct/gokapi.sh b/ct/gokapi.sh index 942cc5606..eafd79799 100644 --- a/ct/gokapi.sh +++ b/ct/gokapi.sh @@ -1,9 +1,9 @@ #!/usr/bin/env bash -source <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func) +source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) # Copyright (c) 2021-2024 tteck # Author: tteck (tteckster) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE function header_info { clear diff --git a/ct/gotify.sh b/ct/gotify.sh index 71b982782..5ef748f7d 100644 --- a/ct/gotify.sh +++ b/ct/gotify.sh @@ -1,9 +1,9 @@ #!/usr/bin/env bash -source <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func) +source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) # Copyright (c) 2021-2024 tteck # Author: tteck (tteckster) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE function header_info { clear diff --git a/ct/grafana.sh b/ct/grafana.sh index b5ea2aa9a..36c6832d7 100644 --- a/ct/grafana.sh +++ b/ct/grafana.sh @@ -1,9 +1,9 @@ #!/usr/bin/env bash -source <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func) +source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) # Copyright (c) 2021-2024 tteck # Author: tteck (tteckster) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE function header_info { clear diff --git a/ct/grocy.sh b/ct/grocy.sh index fc48644bf..58e21318d 100644 --- a/ct/grocy.sh +++ b/ct/grocy.sh @@ -1,9 +1,9 @@ #!/usr/bin/env bash -source <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func) +source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) # Copyright (c) 2021-2024 tteck # Author: tteck (tteckster) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE function header_info { clear diff --git a/ct/headscale.sh b/ct/headscale.sh index f50347ebe..619e2475a 100644 --- a/ct/headscale.sh +++ b/ct/headscale.sh @@ -1,9 +1,9 @@ #!/usr/bin/env bash -source <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func) +source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) # Copyright (c) 2021-2024 tteck # Author: tteck (tteckster) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE function header_info { clear diff --git a/ct/heimdall-dashboard.sh b/ct/heimdall-dashboard.sh index 04db1ea7f..1d3e44d0d 100644 --- a/ct/heimdall-dashboard.sh +++ b/ct/heimdall-dashboard.sh @@ -1,9 +1,9 @@ #!/usr/bin/env bash -source <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func) +source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) # Copyright (c) 2021-2024 tteck # Author: tteck (tteckster) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE function header_info { clear diff --git a/ct/hivemq.sh b/ct/hivemq.sh index 80b79c81c..26a92005f 100644 --- a/ct/hivemq.sh +++ b/ct/hivemq.sh @@ -1,9 +1,9 @@ #!/usr/bin/env bash -source <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func) +source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) # Copyright (c) 2021-2024 tteck # Author: tteck (tteckster) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE function header_info { clear diff --git a/ct/homarr.sh b/ct/homarr.sh index a42089f92..dcb55148b 100644 --- a/ct/homarr.sh +++ b/ct/homarr.sh @@ -1,9 +1,9 @@ #!/usr/bin/env bash -source <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func) +source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) # Copyright (c) 2021-2024 tteck # Author: tteck (tteckster) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE function header_info { clear diff --git a/ct/homeassistant-core.sh b/ct/homeassistant-core.sh index 8a659ea4b..4a673328d 100644 --- a/ct/homeassistant-core.sh +++ b/ct/homeassistant-core.sh @@ -1,9 +1,9 @@ #!/usr/bin/env bash -source <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func) +source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) # Copyright (c) 2021-2024 tteck # Author: tteck (tteckster) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE function header_info { clear diff --git a/ct/homeassistant.sh b/ct/homeassistant.sh index 425f1f2db..7a2444078 100644 --- a/ct/homeassistant.sh +++ b/ct/homeassistant.sh @@ -1,9 +1,9 @@ #!/usr/bin/env bash -source <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func) +source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) # Copyright (c) 2021-2024 tteck # Author: tteck (tteckster) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE function header_info { clear diff --git a/ct/homebox.sh b/ct/homebox.sh index 5038f7820..b05ba0642 100644 --- a/ct/homebox.sh +++ b/ct/homebox.sh @@ -1,10 +1,10 @@ #!/usr/bin/env bash -source <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func) +source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) # Copyright (c) 2021-2024 tteck # Author: tteck # Co-Author: MickLesk (Canbiz) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE function header_info { clear diff --git a/ct/homebridge.sh b/ct/homebridge.sh index d252b52bc..e511b7270 100644 --- a/ct/homebridge.sh +++ b/ct/homebridge.sh @@ -1,9 +1,9 @@ #!/usr/bin/env bash -source <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func) +source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) # Copyright (c) 2021-2024 tteck # Author: tteck (tteckster) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE function header_info { clear diff --git a/ct/homepage.sh b/ct/homepage.sh index 716da76b5..4cda21ab5 100644 --- a/ct/homepage.sh +++ b/ct/homepage.sh @@ -1,9 +1,9 @@ #!/usr/bin/env bash -source <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func) +source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) # Copyright (c) 2021-2024 tteck # Author: tteck (tteckster) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE function header_info { clear diff --git a/ct/homer.sh b/ct/homer.sh index bfec3090a..7aa5cbb58 100644 --- a/ct/homer.sh +++ b/ct/homer.sh @@ -1,9 +1,9 @@ #!/usr/bin/env bash -source <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func) +source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) # Copyright (c) 2021-2024 tteck # Author: tteck (tteckster) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE function header_info { clear diff --git a/ct/hyperhdr.sh b/ct/hyperhdr.sh index 7c04a5969..60d7b2d8a 100644 --- a/ct/hyperhdr.sh +++ b/ct/hyperhdr.sh @@ -1,9 +1,9 @@ #!/usr/bin/env bash -source <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func) +source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) # Copyright (c) 2021-2024 tteck # Author: tteck (tteckster) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE function header_info { clear diff --git a/ct/hyperion.sh b/ct/hyperion.sh index 4edd8dd83..36541dd67 100644 --- a/ct/hyperion.sh +++ b/ct/hyperion.sh @@ -1,9 +1,9 @@ #!/usr/bin/env bash -source <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func) +source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) # Copyright (c) 2021-2024 tteck # Author: tteck (tteckster) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE function header_info { clear diff --git a/ct/influxdb.sh b/ct/influxdb.sh index 2d995f6b5..8cf91d48f 100644 --- a/ct/influxdb.sh +++ b/ct/influxdb.sh @@ -1,9 +1,9 @@ #!/usr/bin/env bash -source <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func) +source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) # Copyright (c) 2021-2024 tteck # Author: tteck (tteckster) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE function header_info { clear diff --git a/ct/iobroker.sh b/ct/iobroker.sh index 0bbd1d0ff..50ef85c56 100644 --- a/ct/iobroker.sh +++ b/ct/iobroker.sh @@ -1,9 +1,9 @@ #!/usr/bin/env bash -source <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func) +source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) # Copyright (c) 2021-2024 tteck # Author: tteck (tteckster) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE function header_info { clear diff --git a/ct/iventoy.sh b/ct/iventoy.sh index 08e067aba..f58d7427f 100644 --- a/ct/iventoy.sh +++ b/ct/iventoy.sh @@ -1,9 +1,9 @@ #!/usr/bin/env bash -source <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func) +source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) # Copyright (c) 2021-2024 tteck # Author: tteck (tteckster) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE function header_info { clear diff --git a/ct/jackett.sh b/ct/jackett.sh index 278373d03..7548b7def 100644 --- a/ct/jackett.sh +++ b/ct/jackett.sh @@ -1,9 +1,9 @@ #!/usr/bin/env bash -source <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func) +source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) # Copyright (c) 2021-2024 tteck # Author: tteck (tteckster) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE function header_info { clear diff --git a/ct/jellyfin.sh b/ct/jellyfin.sh index 079836c24..ae6e09f12 100644 --- a/ct/jellyfin.sh +++ b/ct/jellyfin.sh @@ -1,9 +1,9 @@ #!/usr/bin/env bash -source <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func) +source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) # Copyright (c) 2021-2024 tteck # Author: tteck (tteckster) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE function header_info { clear diff --git a/ct/jellyseerr.sh b/ct/jellyseerr.sh index 930b6652f..6de142759 100644 --- a/ct/jellyseerr.sh +++ b/ct/jellyseerr.sh @@ -1,9 +1,9 @@ #!/usr/bin/env bash -source <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func) +source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) # Copyright (c) 2021-2024 tteck # Author: tteck (tteckster) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE function header_info { clear diff --git a/ct/kavita.sh b/ct/kavita.sh index 206778fb4..3b2286d43 100644 --- a/ct/kavita.sh +++ b/ct/kavita.sh @@ -1,9 +1,9 @@ #!/usr/bin/env bash -source <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func) +source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) # Copyright (c) 2021-2024 tteck # Author: tteck (tteckster) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE function header_info { clear diff --git a/ct/keycloak.sh b/ct/keycloak.sh index a695df1c4..43d9f44cc 100644 --- a/ct/keycloak.sh +++ b/ct/keycloak.sh @@ -1,9 +1,9 @@ #!/usr/bin/env bash -source <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func) +source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) # Copyright (c) 2021-2024 tteck # Author: tteck (tteckster) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE function header_info { clear diff --git a/ct/kubo.sh b/ct/kubo.sh index e792b791f..587cb66b1 100644 --- a/ct/kubo.sh +++ b/ct/kubo.sh @@ -1,10 +1,10 @@ #!/usr/bin/env bash -source <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func) +source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) # Copyright (c) 2021-2024 tteck # Author: tteck (tteckster) # Co-Author: ulmentflam # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE function header_info { clear diff --git a/ct/lazylibrarian.sh b/ct/lazylibrarian.sh index 9f29dc43b..47f4f1b39 100644 --- a/ct/lazylibrarian.sh +++ b/ct/lazylibrarian.sh @@ -1,10 +1,10 @@ #!/usr/bin/env bash -source <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func) +source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) # Copyright (c) 2021-2024 tteck # Author: tteck # Co-Author: MountyMapleSyrup (MountyMapleSyrup) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE function header_info { clear diff --git a/ct/lidarr.sh b/ct/lidarr.sh index 9628b885c..ec04267bd 100644 --- a/ct/lidarr.sh +++ b/ct/lidarr.sh @@ -1,9 +1,9 @@ #!/usr/bin/env bash -source <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func) +source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) # Copyright (c) 2021-2024 tteck # Author: tteck (tteckster) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE function header_info { clear diff --git a/ct/linkwarden.sh b/ct/linkwarden.sh index 2054aa9bc..dd2f8ed7a 100644 --- a/ct/linkwarden.sh +++ b/ct/linkwarden.sh @@ -1,9 +1,9 @@ #!/usr/bin/env bash -source <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func) +source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) # Copyright (c) 2021-2024 tteck # Author: tteck (tteckster) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE function header_info { clear diff --git a/ct/lldap.sh b/ct/lldap.sh index 050b471d2..8f47ef2a9 100644 --- a/ct/lldap.sh +++ b/ct/lldap.sh @@ -1,10 +1,10 @@ #!/usr/bin/env bash -source <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func) +source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) # Copyright (c) 2021-2024 tteck # Author: tteck (tteckster) # Co-Author: remz1337 # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE function header_info { clear diff --git a/ct/mafl.sh b/ct/mafl.sh index 0859f8343..df3dc8f40 100644 --- a/ct/mafl.sh +++ b/ct/mafl.sh @@ -1,9 +1,9 @@ #!/usr/bin/env bash -source <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func) +source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) # Copyright (c) 2021-2024 tteck # Author: tteck (tteckster) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE function header_info { clear diff --git a/ct/magicmirror.sh b/ct/magicmirror.sh index bb5e0b7b6..55ef49051 100644 --- a/ct/magicmirror.sh +++ b/ct/magicmirror.sh @@ -1,9 +1,9 @@ #!/usr/bin/env bash -source <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func) +source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) # Copyright (c) 2021-2024 tteck # Author: tteck (tteckster) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE function header_info { clear diff --git a/ct/mariadb.sh b/ct/mariadb.sh index 2b3eef005..0341ddc77 100644 --- a/ct/mariadb.sh +++ b/ct/mariadb.sh @@ -1,9 +1,9 @@ #!/usr/bin/env bash -source <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func) +source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) # Copyright (c) 2021-2024 tteck # Author: tteck (tteckster) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE function header_info { clear diff --git a/ct/matterbridge.sh b/ct/matterbridge.sh index 48245bd51..63254c060 100644 --- a/ct/matterbridge.sh +++ b/ct/matterbridge.sh @@ -1,9 +1,9 @@ #!/usr/bin/env bash -source <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func) +source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) # Copyright (c) 2021-2024 tteck # Author: MickLesk (Canbiz) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE function header_info { clear diff --git a/ct/mediamtx.sh b/ct/mediamtx.sh index 83e660ebd..3992c0cb6 100644 --- a/ct/mediamtx.sh +++ b/ct/mediamtx.sh @@ -1,10 +1,10 @@ #!/usr/bin/env bash -source <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func) +source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) # Copyright (c) 2021-2024 tteck # Author: tteck (tteckster) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE function header_info { clear diff --git a/ct/medusa.sh b/ct/medusa.sh index d617a1142..f8ff50e41 100644 --- a/ct/medusa.sh +++ b/ct/medusa.sh @@ -1,9 +1,9 @@ #!/usr/bin/env bash -source <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func) +source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) # Copyright (c) 2021-2024 tteck # Author: tteck (tteckster) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE function header_info { clear diff --git a/ct/memos.sh b/ct/memos.sh index ceb1fd913..da4ae6156 100644 --- a/ct/memos.sh +++ b/ct/memos.sh @@ -1,10 +1,10 @@ #!/usr/bin/env bash -source <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func) +source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) # Copyright (c) 2021-2024 tteck # Author: tteck # Co-Author: MickLesk (Canbiz) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE function header_info { clear diff --git a/ct/meshcentral.sh b/ct/meshcentral.sh index 1040a7007..bdb3a648c 100644 --- a/ct/meshcentral.sh +++ b/ct/meshcentral.sh @@ -1,9 +1,9 @@ #!/usr/bin/env bash -source <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func) +source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) # Copyright (c) 2021-2024 tteck # Author: tteck (tteckster) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE function header_info { clear diff --git a/ct/metube.sh b/ct/metube.sh index 57d8b46be..425683c6e 100644 --- a/ct/metube.sh +++ b/ct/metube.sh @@ -1,9 +1,9 @@ #!/usr/bin/env bash -source <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func) +source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) # Copyright (c) 2021-2024 tteck # Author: MickLesk (Canbiz) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE function header_info { clear diff --git a/ct/mongodb.sh b/ct/mongodb.sh index 5b88ca4b2..e255b9a78 100644 --- a/ct/mongodb.sh +++ b/ct/mongodb.sh @@ -1,9 +1,9 @@ #!/usr/bin/env bash -source <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func) +source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) # Copyright (c) 2021-2024 tteck # Author: tteck (tteckster) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE function header_info { clear diff --git a/ct/motioneye.sh b/ct/motioneye.sh index d5a2579f5..545656112 100644 --- a/ct/motioneye.sh +++ b/ct/motioneye.sh @@ -1,9 +1,9 @@ #!/usr/bin/env bash -source <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func) +source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) # Copyright (c) 2021-2024 tteck # Author: tteck (tteckster) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE function header_info { clear diff --git a/ct/mqtt.sh b/ct/mqtt.sh index b79777df0..705096666 100644 --- a/ct/mqtt.sh +++ b/ct/mqtt.sh @@ -1,9 +1,9 @@ #!/usr/bin/env bash -source <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func) +source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) # Copyright (c) 2021-2024 tteck # Author: tteck (tteckster) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE function header_info { clear diff --git a/ct/myspeed.sh b/ct/myspeed.sh index 23c988784..99c7ef6c8 100644 --- a/ct/myspeed.sh +++ b/ct/myspeed.sh @@ -1,10 +1,10 @@ #!/usr/bin/env bash -source <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func) +source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) # Copyright (c) 2021-2024 tteck # Author: tteck (tteckster) # Co-Author: MickLesk (Canbiz) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE function header_info { clear diff --git a/ct/mysql.sh b/ct/mysql.sh index 321d01f78..02ffbb6df 100644 --- a/ct/mysql.sh +++ b/ct/mysql.sh @@ -1,10 +1,10 @@ #!/usr/bin/env bash -source <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func) +source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) # Copyright (c) 2021-2024 tteck # Author: tteck # Co-Author: MickLesk (Canbiz) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE function header_info { clear diff --git a/ct/n8n.sh b/ct/n8n.sh index b78f3ec6e..22a58c0d2 100644 --- a/ct/n8n.sh +++ b/ct/n8n.sh @@ -1,9 +1,9 @@ #!/usr/bin/env bash -source <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func) +source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) # Copyright (c) 2021-2024 tteck # Author: tteck (tteckster) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE function header_info { clear diff --git a/ct/navidrome.sh b/ct/navidrome.sh index b9af1d6f0..a6a0b38be 100644 --- a/ct/navidrome.sh +++ b/ct/navidrome.sh @@ -1,9 +1,9 @@ #!/usr/bin/env bash -source <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func) +source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) # Copyright (c) 2021-2024 tteck # Author: tteck (tteckster) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE function header_info { clear diff --git a/ct/neo4j.sh b/ct/neo4j.sh index 123625d57..a23f88821 100644 --- a/ct/neo4j.sh +++ b/ct/neo4j.sh @@ -1,10 +1,10 @@ #!/usr/bin/env bash -source <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func) +source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) # Copyright (c) 2021-2024 tteck # Author: tteck # Co-Author: havardthom # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE function header_info { clear diff --git a/ct/nextcloudpi.sh b/ct/nextcloudpi.sh index 7255de3d8..7eb52c7d9 100644 --- a/ct/nextcloudpi.sh +++ b/ct/nextcloudpi.sh @@ -1,9 +1,9 @@ #!/usr/bin/env bash -source <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func) +source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) # Copyright (c) 2021-2024 tteck # Author: tteck (tteckster) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE function header_info { clear diff --git a/ct/nginxproxymanager.sh b/ct/nginxproxymanager.sh index 030e7011b..bfaa82223 100644 --- a/ct/nginxproxymanager.sh +++ b/ct/nginxproxymanager.sh @@ -1,9 +1,9 @@ #!/usr/bin/env bash -source <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func) +source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) # Copyright (c) 2021-2024 tteck # Author: tteck (tteckster) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE function header_info { clear diff --git a/ct/nocodb.sh b/ct/nocodb.sh index 4f8ff0b77..e8fd6e710 100644 --- a/ct/nocodb.sh +++ b/ct/nocodb.sh @@ -1,9 +1,9 @@ #!/usr/bin/env bash -source <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func) +source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) # Copyright (c) 2021-2024 tteck # Author: tteck (tteckster) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE function header_info { clear diff --git a/ct/node-red.sh b/ct/node-red.sh index 1f68dc09c..c5ff805eb 100644 --- a/ct/node-red.sh +++ b/ct/node-red.sh @@ -1,9 +1,9 @@ #!/usr/bin/env bash -source <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func) +source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) # Copyright (c) 2021-2024 tteck # Author: tteck (tteckster) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE function header_info { clear diff --git a/ct/notifiarr.sh b/ct/notifiarr.sh index ac63e454a..ede2911c1 100644 --- a/ct/notifiarr.sh +++ b/ct/notifiarr.sh @@ -1,9 +1,9 @@ #!/usr/bin/env bash -source <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func) +source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) # Copyright (c) 2021-2024 tteck # Author: tteck (tteckster) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE function header_info { clear diff --git a/ct/ntfy.sh b/ct/ntfy.sh index d12e4b3de..9cde97edd 100644 --- a/ct/ntfy.sh +++ b/ct/ntfy.sh @@ -1,9 +1,9 @@ #!/usr/bin/env bash -source <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func) +source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) # Copyright (c) 2021-2024 tteck # Author: tteck (tteckster) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE function header_info { clear diff --git a/ct/nzbget.sh b/ct/nzbget.sh index d4caa8f60..da5c7d63a 100644 --- a/ct/nzbget.sh +++ b/ct/nzbget.sh @@ -1,10 +1,10 @@ #!/usr/bin/env bash -source <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func) +source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) # Copyright (c) 2021-2024 tteck # Author: tteck # Co-Author: havardthom # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE function header_info { clear diff --git a/ct/octoprint.sh b/ct/octoprint.sh index 75c2ccd91..f132db14d 100644 --- a/ct/octoprint.sh +++ b/ct/octoprint.sh @@ -1,9 +1,9 @@ #!/usr/bin/env bash -source <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func) +source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) # Copyright (c) 2021-2024 tteck # Author: tteck (tteckster) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE function header_info { clear diff --git a/ct/ollama.sh b/ct/ollama.sh index 1b275ab64..b8ad9a600 100644 --- a/ct/ollama.sh +++ b/ct/ollama.sh @@ -1,10 +1,10 @@ #!/usr/bin/env bash -source <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func) +source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) # Copyright (c) 2021-2024 tteck # Author: tteck # Co-Author: havardthom # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE function header_info { clear diff --git a/ct/omada.sh b/ct/omada.sh index 5c637de87..0ff1a8107 100644 --- a/ct/omada.sh +++ b/ct/omada.sh @@ -1,9 +1,9 @@ #!/usr/bin/env bash -source <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func) +source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) # Copyright (c) 2021-2024 tteck # Author: tteck (tteckster) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE function header_info { clear diff --git a/ct/ombi.sh b/ct/ombi.sh index 4e53aa6b5..70eeccdcb 100644 --- a/ct/ombi.sh +++ b/ct/ombi.sh @@ -1,9 +1,9 @@ #!/usr/bin/env bash -source <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func) +source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) # Copyright (c) 2021-2024 tteck # Author: tteck (tteckster) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE function header_info { clear diff --git a/ct/omv.sh b/ct/omv.sh index 525a35db1..e5ae9d14b 100644 --- a/ct/omv.sh +++ b/ct/omv.sh @@ -1,9 +1,9 @@ #!/usr/bin/env bash -source <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func) +source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) # Copyright (c) 2021-2024 tteck # Author: tteck (tteckster) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE function header_info { clear diff --git a/ct/openhab.sh b/ct/openhab.sh index 9546085af..7c9f32571 100644 --- a/ct/openhab.sh +++ b/ct/openhab.sh @@ -1,9 +1,9 @@ #!/usr/bin/env bash -source <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func) +source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) # Copyright (c) 2021-2024 tteck # Author: tteck (tteckster) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE function header_info { clear diff --git a/ct/openobserve.sh b/ct/openobserve.sh index cea4c29a8..d4f50109a 100644 --- a/ct/openobserve.sh +++ b/ct/openobserve.sh @@ -1,9 +1,9 @@ #!/usr/bin/env bash -source <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func) +source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) # Copyright (c) 2021-2024 tteck # Author: tteck (tteckster) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE function header_info { clear diff --git a/ct/openwebui.sh b/ct/openwebui.sh index daee783a0..ecbcb9b62 100644 --- a/ct/openwebui.sh +++ b/ct/openwebui.sh @@ -1,10 +1,10 @@ #!/usr/bin/env bash -source <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func) +source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) # Copyright (c) 2021-2024 tteck # Author: tteck # Co-Author: havardthom # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE function header_info { clear diff --git a/ct/overseerr.sh b/ct/overseerr.sh index a4a76bfc8..edd1c8e16 100644 --- a/ct/overseerr.sh +++ b/ct/overseerr.sh @@ -1,9 +1,9 @@ #!/usr/bin/env bash -source <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func) +source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) # Copyright (c) 2021-2024 tteck # Author: tteck (tteckster) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE function header_info { clear diff --git a/ct/owncast.sh b/ct/owncast.sh index c06ccfbb9..34306eb16 100644 --- a/ct/owncast.sh +++ b/ct/owncast.sh @@ -1,9 +1,9 @@ #!/usr/bin/env bash -source <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func) +source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) # Copyright (c) 2021-2024 tteck # Author: tteck (tteckster) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE function header_info { clear diff --git a/ct/pairdrop.sh b/ct/pairdrop.sh index a1680a8c6..28cf8a967 100644 --- a/ct/pairdrop.sh +++ b/ct/pairdrop.sh @@ -1,9 +1,9 @@ #!/usr/bin/env bash -source <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func) +source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) # Copyright (c) 2021-2024 tteck # Author: tteck (tteckster) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE function header_info { clear diff --git a/ct/paperless-ngx.sh b/ct/paperless-ngx.sh index a36824276..02e52d08a 100644 --- a/ct/paperless-ngx.sh +++ b/ct/paperless-ngx.sh @@ -1,9 +1,9 @@ #!/usr/bin/env bash -source <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func) +source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) # Copyright (c) 2021-2024 tteck # Author: tteck (tteckster) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE function header_info { clear diff --git a/ct/pbs.sh b/ct/pbs.sh index 97ffd5a46..a1f08711a 100644 --- a/ct/pbs.sh +++ b/ct/pbs.sh @@ -1,10 +1,10 @@ #!/usr/bin/env bash -source <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func) +source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) # Copyright (c) 2021-2024 tteck # Author: tteck (tteckster) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE function header_info { clear diff --git a/ct/peanut.sh b/ct/peanut.sh index f327e0e8d..0ec83da96 100644 --- a/ct/peanut.sh +++ b/ct/peanut.sh @@ -1,10 +1,10 @@ #!/usr/bin/env bash -source <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func) +source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) # Copyright (c) 2021-2024 tteck # Author: tteck (tteckster) # Co-Author: remz1337 # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE function header_info { clear diff --git a/ct/petio.sh b/ct/petio.sh index 040b0c9bb..a05b4e5d7 100644 --- a/ct/petio.sh +++ b/ct/petio.sh @@ -1,9 +1,9 @@ #!/usr/bin/env bash -source <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func) +source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) # Copyright (c) 2021-2024 tteck # Author: tteck (tteckster) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE function header_info { clear diff --git a/ct/photoprism.sh b/ct/photoprism.sh index 593fe362e..aeec30c25 100644 --- a/ct/photoprism.sh +++ b/ct/photoprism.sh @@ -1,9 +1,9 @@ #!/usr/bin/env bash -source <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func) +source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) # Copyright (c) 2021-2024 tteck # Author: tteck (tteckster) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE function header_info { clear diff --git a/ct/pialert.sh b/ct/pialert.sh index 7604d4443..6be4b07f7 100644 --- a/ct/pialert.sh +++ b/ct/pialert.sh @@ -1,9 +1,9 @@ #!/usr/bin/env bash -source <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func) +source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) # Copyright (c) 2021-2024 tteck # Author: tteck (tteckster) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE function header_info { clear diff --git a/ct/pihole.sh b/ct/pihole.sh index bd66c3131..4bf2be6e4 100644 --- a/ct/pihole.sh +++ b/ct/pihole.sh @@ -1,9 +1,9 @@ #!/usr/bin/env bash -source <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func) +source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) # Copyright (c) 2021-2024 tteck # Author: tteck (tteckster) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE function header_info { clear diff --git a/ct/pingvin.sh b/ct/pingvin.sh index c9a264cbb..29fec06f3 100644 --- a/ct/pingvin.sh +++ b/ct/pingvin.sh @@ -1,9 +1,9 @@ #!/usr/bin/env bash -source <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func) +source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) # Copyright (c) 2021-2024 tteck # Author: tteck (tteckster) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE function header_info { clear diff --git a/ct/plex.sh b/ct/plex.sh index c112078e6..ba79c08de 100644 --- a/ct/plex.sh +++ b/ct/plex.sh @@ -1,9 +1,9 @@ #!/usr/bin/env bash -source <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func) +source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) # Copyright (c) 2021-2024 tteck # Author: tteck (tteckster) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE function header_info { clear diff --git a/ct/pocketbase.sh b/ct/pocketbase.sh index d7cae7448..1a6066cba 100644 --- a/ct/pocketbase.sh +++ b/ct/pocketbase.sh @@ -1,9 +1,9 @@ #!/usr/bin/env bash -source <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func) +source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) # Copyright (c) 2021-2024 tteck # Author: tteck (tteckster) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE function header_info { clear diff --git a/ct/podman-homeassistant.sh b/ct/podman-homeassistant.sh index 779ea1ccd..34d42f157 100644 --- a/ct/podman-homeassistant.sh +++ b/ct/podman-homeassistant.sh @@ -1,9 +1,9 @@ #!/usr/bin/env bash -source <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func) +source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) # Copyright (c) 2021-2024 tteck # Author: tteck (tteckster) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE function header_info { clear diff --git a/ct/podman.sh b/ct/podman.sh index e1e65b56d..5e8d542d4 100644 --- a/ct/podman.sh +++ b/ct/podman.sh @@ -1,9 +1,9 @@ #!/usr/bin/env bash -source <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func) +source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) # Copyright (c) 2021-2024 tteck # Author: tteck (tteckster) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE function header_info { clear diff --git a/ct/postgresql.sh b/ct/postgresql.sh index 8ca8f1724..da2940a71 100644 --- a/ct/postgresql.sh +++ b/ct/postgresql.sh @@ -1,9 +1,9 @@ #!/usr/bin/env bash -source <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func) +source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) # Copyright (c) 2021-2024 tteck # Author: tteck (tteckster) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE function header_info { clear diff --git a/ct/prometheus.sh b/ct/prometheus.sh index a602cccd4..18b3dae15 100644 --- a/ct/prometheus.sh +++ b/ct/prometheus.sh @@ -1,9 +1,9 @@ #!/usr/bin/env bash -source <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func) +source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) # Copyright (c) 2021-2024 tteck # Author: tteck (tteckster) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE function header_info { clear diff --git a/ct/prowlarr.sh b/ct/prowlarr.sh index 610928f83..798cf319a 100644 --- a/ct/prowlarr.sh +++ b/ct/prowlarr.sh @@ -1,9 +1,9 @@ #!/usr/bin/env bash -source <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func) +source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) # Copyright (c) 2021-2024 tteck # Author: tteck (tteckster) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE function header_info { clear diff --git a/ct/qbittorrent.sh b/ct/qbittorrent.sh index 0a8b1db84..3474e606f 100644 --- a/ct/qbittorrent.sh +++ b/ct/qbittorrent.sh @@ -1,9 +1,9 @@ #!/usr/bin/env bash -source <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func) +source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) # Copyright (c) 2021-2024 tteck # Author: tteck (tteckster) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE function header_info { clear diff --git a/ct/rabbitmq.sh b/ct/rabbitmq.sh index ff31111ef..c422f9028 100644 --- a/ct/rabbitmq.sh +++ b/ct/rabbitmq.sh @@ -1,10 +1,10 @@ #!/usr/bin/env bash -source <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func) +source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) # Copyright (c) 2021-2024 tteck # Author: tteck # Co-Author: MickLesk (Canbiz) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE function header_info { clear diff --git a/ct/radarr.sh b/ct/radarr.sh index 8903135a9..62ada6efe 100644 --- a/ct/radarr.sh +++ b/ct/radarr.sh @@ -1,9 +1,9 @@ #!/usr/bin/env bash -source <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func) +source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) # Copyright (c) 2021-2024 tteck # Author: tteck (tteckster) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE function header_info { clear diff --git a/ct/rdtclient.sh b/ct/rdtclient.sh index 7168998e2..d36538e68 100755 --- a/ct/rdtclient.sh +++ b/ct/rdtclient.sh @@ -1,9 +1,9 @@ #!/usr/bin/env bash -source <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func) +source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) # Copyright (c) 2021-2024 tteck # Author: tteck (tteckster) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE function header_info { clear diff --git a/ct/readarr.sh b/ct/readarr.sh index 2e4494cf6..1c0cc4891 100644 --- a/ct/readarr.sh +++ b/ct/readarr.sh @@ -1,9 +1,9 @@ #!/usr/bin/env bash -source <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func) +source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) # Copyright (c) 2021-2024 tteck # Author: tteck (tteckster) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE function header_info { clear diff --git a/ct/readeck.sh b/ct/readeck.sh index cc5204ba4..1fb4e15a3 100644 --- a/ct/readeck.sh +++ b/ct/readeck.sh @@ -1,9 +1,9 @@ #!/usr/bin/env bash -source <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func) +source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) # Copyright (c) 2021-2024 tteck # Author: tteck (tteckster) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE function header_info { clear diff --git a/ct/redis.sh b/ct/redis.sh index c4621e206..66d470155 100644 --- a/ct/redis.sh +++ b/ct/redis.sh @@ -1,9 +1,9 @@ #!/usr/bin/env bash -source <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func) +source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) # Copyright (c) 2021-2024 tteck # Author: tteck (tteckster) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE function header_info { clear diff --git a/ct/rockylinux.sh b/ct/rockylinux.sh index 8285e2271..97dbc173a 100644 --- a/ct/rockylinux.sh +++ b/ct/rockylinux.sh @@ -1,9 +1,9 @@ #!/usr/bin/env bash -source <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func) +source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) # Copyright (c) 2021-2024 tteck # Author: tteck (tteckster) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE function header_info { clear diff --git a/ct/rtsptoweb.sh b/ct/rtsptoweb.sh index 56484a605..8bcf415e9 100644 --- a/ct/rtsptoweb.sh +++ b/ct/rtsptoweb.sh @@ -1,9 +1,9 @@ #!/usr/bin/env bash -source <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func) +source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) # Copyright (c) 2021-2024 tteck # Author: tteck (tteckster) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE function header_info { clear diff --git a/ct/runtipi.sh b/ct/runtipi.sh index 279230f3f..44d2e8d20 100644 --- a/ct/runtipi.sh +++ b/ct/runtipi.sh @@ -1,9 +1,9 @@ #!/usr/bin/env bash -source <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func) +source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) # Copyright (c) 2021-2024 tteck # Author: tteck (tteckster) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE function header_info { clear diff --git a/ct/sabnzbd.sh b/ct/sabnzbd.sh index d0656d6b8..65d7f7e85 100644 --- a/ct/sabnzbd.sh +++ b/ct/sabnzbd.sh @@ -1,9 +1,9 @@ #!/usr/bin/env bash -source <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func) +source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) # Copyright (c) 2021-2024 tteck # Author: tteck (tteckster) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE function header_info { clear diff --git a/ct/scrypted.sh b/ct/scrypted.sh index 306ab6202..0fc2547d1 100644 --- a/ct/scrypted.sh +++ b/ct/scrypted.sh @@ -1,9 +1,9 @@ #!/usr/bin/env bash -source <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func) +source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) # Copyright (c) 2021-2024 tteck # Author: tteck (tteckster) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE function header_info { clear diff --git a/ct/sftpgo.sh b/ct/sftpgo.sh index 2354fe7df..fc4061f66 100644 --- a/ct/sftpgo.sh +++ b/ct/sftpgo.sh @@ -1,9 +1,9 @@ #!/usr/bin/env bash -source <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func) +source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) # Copyright (c) 2021-2024 tteck # Author: tteck (tteckster) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE function header_info { clear diff --git a/ct/shinobi.sh b/ct/shinobi.sh index 410f94331..681823986 100644 --- a/ct/shinobi.sh +++ b/ct/shinobi.sh @@ -1,9 +1,9 @@ #!/usr/bin/env bash -source <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func) +source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) # Copyright (c) 2021-2024 tteck # Author: tteck (tteckster) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE function header_info { clear diff --git a/ct/smokeping.sh b/ct/smokeping.sh index 8da7d96cc..fa3ae66d4 100644 --- a/ct/smokeping.sh +++ b/ct/smokeping.sh @@ -1,10 +1,10 @@ #!/usr/bin/env bash -source <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func) +source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) # Copyright (c) 2021-2024 tteck # Author: tteck (tteckster) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE function header_info { clear diff --git a/ct/sonarr.sh b/ct/sonarr.sh index fe2c59390..d47faf3cb 100644 --- a/ct/sonarr.sh +++ b/ct/sonarr.sh @@ -1,9 +1,9 @@ #!/usr/bin/env bash -source <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func) +source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) # Copyright (c) 2021-2024 tteck # Author: tteck (tteckster) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE function header_info { clear diff --git a/ct/spoolman.sh b/ct/spoolman.sh index 53bb97a8e..b4e4be5b7 100644 --- a/ct/spoolman.sh +++ b/ct/spoolman.sh @@ -1,10 +1,10 @@ #!/usr/bin/env bash -source <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func) +source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) # Copyright (c) 2021-2024 tteck # Author: tteck # Co-Author: MickLesk (Canbiz) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE function header_info { clear diff --git a/ct/stirling-pdf.sh b/ct/stirling-pdf.sh index f15050543..06239f24a 100644 --- a/ct/stirling-pdf.sh +++ b/ct/stirling-pdf.sh @@ -1,9 +1,9 @@ #!/usr/bin/env bash -source <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func) +source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) # Copyright (c) 2021-2024 tteck # Author: tteck (tteckster) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE function header_info { clear diff --git a/ct/syncthing.sh b/ct/syncthing.sh index 5cf7765c6..65cc49859 100644 --- a/ct/syncthing.sh +++ b/ct/syncthing.sh @@ -1,9 +1,9 @@ #!/usr/bin/env bash -source <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func) +source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) # Copyright (c) 2021-2024 tteck # Author: tteck (tteckster) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE function header_info { clear diff --git a/ct/tandoor.sh b/ct/tandoor.sh index 29085af56..ac13153a5 100644 --- a/ct/tandoor.sh +++ b/ct/tandoor.sh @@ -1,10 +1,10 @@ #!/usr/bin/env bash -source <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func) +source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) # Copyright (c) 2021-2024 tteck # Author: tteck # Co-Author: MickLesk (Canbiz) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE function header_info { clear diff --git a/ct/tasmoadmin.sh b/ct/tasmoadmin.sh index 662c36f18..bc949cdb4 100644 --- a/ct/tasmoadmin.sh +++ b/ct/tasmoadmin.sh @@ -1,9 +1,9 @@ #!/usr/bin/env bash -source <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func) +source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) # Copyright (c) 2021-2024 tteck # Author: tteck (tteckster) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE function header_info { clear diff --git a/ct/tautulli.sh b/ct/tautulli.sh index 55a628d38..1e5924da5 100644 --- a/ct/tautulli.sh +++ b/ct/tautulli.sh @@ -1,9 +1,9 @@ #!/usr/bin/env bash -source <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func) +source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) # Copyright (c) 2021-2024 tteck # Author: tteck (tteckster) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE function header_info { clear diff --git a/ct/tdarr.sh b/ct/tdarr.sh index 11bc28805..96ed6878b 100644 --- a/ct/tdarr.sh +++ b/ct/tdarr.sh @@ -1,9 +1,9 @@ #!/usr/bin/env bash -source <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func) +source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) # Copyright (c) 2021-2024 tteck # Author: tteck (tteckster) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE function header_info { clear diff --git a/ct/technitiumdns.sh b/ct/technitiumdns.sh index 85775abdb..b7d6984ef 100644 --- a/ct/technitiumdns.sh +++ b/ct/technitiumdns.sh @@ -1,9 +1,9 @@ #!/usr/bin/env bash -source <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func) +source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) # Copyright (c) 2021-2024 tteck # Author: tteck (tteckster) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE function header_info { clear diff --git a/ct/threadfin.sh b/ct/threadfin.sh index e870e26ca..9ffbf8681 100644 --- a/ct/threadfin.sh +++ b/ct/threadfin.sh @@ -1,9 +1,9 @@ #!/usr/bin/env bash -source <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func) +source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) # Copyright (c) 2021-2024 tteck # Author: tteck (tteckster) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE function header_info { clear diff --git a/ct/tianji.sh b/ct/tianji.sh index f4d07f1d8..54edc90d3 100644 --- a/ct/tianji.sh +++ b/ct/tianji.sh @@ -1,10 +1,10 @@ #!/usr/bin/env bash -source <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func) +source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) # Copyright (c) 2021-2024 tteck # Author: tteck # Co-Author: MickLesk (Canbiz) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE function header_info { clear diff --git a/ct/traccar.sh b/ct/traccar.sh index 1b62939a9..497334aeb 100644 --- a/ct/traccar.sh +++ b/ct/traccar.sh @@ -1,9 +1,9 @@ #!/usr/bin/env bash -source <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func) +source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) # Copyright (c) 2021-2024 tteck # Author: tteck (tteckster) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE function header_info { clear diff --git a/ct/traefik.sh b/ct/traefik.sh index f711cb6a4..22dad2d9f 100644 --- a/ct/traefik.sh +++ b/ct/traefik.sh @@ -1,9 +1,9 @@ #!/usr/bin/env bash -source <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func) +source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) # Copyright (c) 2021-2024 tteck # Author: tteck (tteckster) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE function header_info { clear diff --git a/ct/transmission.sh b/ct/transmission.sh index a7e234e48..3fa4f0cbc 100644 --- a/ct/transmission.sh +++ b/ct/transmission.sh @@ -1,9 +1,9 @@ #!/usr/bin/env bash -source <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func) +source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) # Copyright (c) 2021-2024 tteck # Author: tteck (tteckster) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE function header_info { clear diff --git a/ct/trilium.sh b/ct/trilium.sh index 1b7b74caf..efc430aa4 100644 --- a/ct/trilium.sh +++ b/ct/trilium.sh @@ -1,9 +1,9 @@ #!/usr/bin/env bash -source <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func) +source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) # Copyright (c) 2021-2024 tteck # Author: tteck (tteckster) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE function header_info { clear diff --git a/ct/ubuntu.sh b/ct/ubuntu.sh index 448ca2439..3df8920e6 100644 --- a/ct/ubuntu.sh +++ b/ct/ubuntu.sh @@ -1,9 +1,9 @@ #!/usr/bin/env bash -source <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func) +source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) # Copyright (c) 2021-2024 tteck # Author: tteck (tteckster) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE function header_info { clear diff --git a/ct/umami.sh b/ct/umami.sh index 3d56fb567..f746f7e3d 100644 --- a/ct/umami.sh +++ b/ct/umami.sh @@ -1,9 +1,9 @@ #!/usr/bin/env bash -source <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func) +source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) # Copyright (c) 2021-2024 tteck # Author: tteck (tteckster) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE function header_info { clear diff --git a/ct/umbrel.sh b/ct/umbrel.sh index 62f9a4713..6e5ccf07a 100644 --- a/ct/umbrel.sh +++ b/ct/umbrel.sh @@ -1,9 +1,9 @@ #!/usr/bin/env bash -source <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func) +source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) # Copyright (c) 2021-2024 tteck # Author: tteck (tteckster) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE function header_info { clear diff --git a/ct/unifi.sh b/ct/unifi.sh index cec984c5b..4c092cfba 100644 --- a/ct/unifi.sh +++ b/ct/unifi.sh @@ -1,9 +1,9 @@ #!/usr/bin/env bash -source <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func) +source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) # Copyright (c) 2021-2024 tteck # Author: tteck (tteckster) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE function header_info { clear diff --git a/ct/unmanic.sh b/ct/unmanic.sh index 04134ceec..8cb594582 100644 --- a/ct/unmanic.sh +++ b/ct/unmanic.sh @@ -1,9 +1,9 @@ #!/usr/bin/env bash -source <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func) +source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) # Copyright (c) 2021-2024 tteck # Author: tteck (tteckster) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE function header_info { clear diff --git a/ct/uptimekuma.sh b/ct/uptimekuma.sh index 17289c24e..ca736b48d 100644 --- a/ct/uptimekuma.sh +++ b/ct/uptimekuma.sh @@ -1,9 +1,9 @@ #!/usr/bin/env bash -source <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func) +source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) # Copyright (c) 2021-2024 tteck # Author: tteck (tteckster) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE function header_info { clear diff --git a/ct/vaultwarden.sh b/ct/vaultwarden.sh index 95b92bbb9..d85bf4b8c 100644 --- a/ct/vaultwarden.sh +++ b/ct/vaultwarden.sh @@ -1,9 +1,9 @@ #!/usr/bin/env bash -source <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func) +source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) # Copyright (c) 2021-2024 tteck # Author: tteck (tteckster) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE function header_info { clear diff --git a/ct/wallos.sh b/ct/wallos.sh index 0bd4dc275..247eec40b 100644 --- a/ct/wallos.sh +++ b/ct/wallos.sh @@ -1,10 +1,10 @@ #!/usr/bin/env bash -source <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func) +source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) # Copyright (c) 2021-2024 tteck # Author: tteck # Co-Author: MickLesk (Canbiz) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE function header_info { clear diff --git a/ct/wastebin.sh b/ct/wastebin.sh index c76c428ed..c13d0d9f4 100644 --- a/ct/wastebin.sh +++ b/ct/wastebin.sh @@ -1,10 +1,10 @@ #!/usr/bin/env bash -source <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func) +source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) # Copyright (c) 2021-2024 tteck # Author: tteck # Co-Author: MickLesk (Canbiz) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE # Source: https://github.com/matze/wastebin diff --git a/ct/watchyourlan.sh b/ct/watchyourlan.sh index 93eba4d19..290ed72b5 100644 --- a/ct/watchyourlan.sh +++ b/ct/watchyourlan.sh @@ -1,9 +1,9 @@ #!/usr/bin/env bash -source <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func) +source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) # Copyright (c) 2021-2024 tteck # Author: tteck (tteckster) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE function header_info { clear diff --git a/ct/whisparr.sh b/ct/whisparr.sh index 1a8b9a017..583135747 100644 --- a/ct/whisparr.sh +++ b/ct/whisparr.sh @@ -1,9 +1,9 @@ #!/usr/bin/env bash -source <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func) +source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) # Copyright (c) 2021-2024 tteck # Author: tteck (tteckster) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE function header_info { clear diff --git a/ct/whoogle.sh b/ct/whoogle.sh index 92363c828..9db69dee5 100644 --- a/ct/whoogle.sh +++ b/ct/whoogle.sh @@ -1,9 +1,9 @@ #!/usr/bin/env bash -source <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func) +source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) # Copyright (c) 2021-2024 tteck # Author: tteck (tteckster) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE function header_info { clear diff --git a/ct/wikijs.sh b/ct/wikijs.sh index dedff2d67..0fc854edc 100644 --- a/ct/wikijs.sh +++ b/ct/wikijs.sh @@ -1,9 +1,9 @@ #!/usr/bin/env bash -source <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func) +source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) # Copyright (c) 2021-2024 tteck # Author: tteck (tteckster) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE function header_info { clear diff --git a/ct/wireguard.sh b/ct/wireguard.sh index dbb15b7fa..fe210f7dc 100644 --- a/ct/wireguard.sh +++ b/ct/wireguard.sh @@ -1,9 +1,9 @@ #!/usr/bin/env bash -source <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func) +source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) # Copyright (c) 2021-2024 tteck # Author: tteck (tteckster) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE function header_info { clear diff --git a/ct/yunohost.sh b/ct/yunohost.sh index 613de2f5f..c6c41ab29 100644 --- a/ct/yunohost.sh +++ b/ct/yunohost.sh @@ -1,9 +1,9 @@ #!/usr/bin/env bash -source <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func) +source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) # Copyright (c) 2021-2024 tteck # Author: tteck (tteckster) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE function header_info { clear diff --git a/ct/zabbix.sh b/ct/zabbix.sh index 370a0f583..aa5eaef6b 100644 --- a/ct/zabbix.sh +++ b/ct/zabbix.sh @@ -1,9 +1,9 @@ #!/usr/bin/env bash -source <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func) +source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) # Copyright (c) 2021-2024 tteck # Author: tteck (tteckster) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE function header_info { clear diff --git a/ct/zigbee2mqtt.sh b/ct/zigbee2mqtt.sh index e3ae7ee86..e78b5efe2 100644 --- a/ct/zigbee2mqtt.sh +++ b/ct/zigbee2mqtt.sh @@ -1,9 +1,9 @@ #!/usr/bin/env bash -source <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func) +source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) # Copyright (c) 2021-2024 tteck # Author: tteck (tteckster) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE function header_info { clear diff --git a/ct/zipline.sh b/ct/zipline.sh index 095cdbc7c..28da39d93 100644 --- a/ct/zipline.sh +++ b/ct/zipline.sh @@ -1,10 +1,10 @@ #!/usr/bin/env bash -source <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func) +source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) # Copyright (c) 2021-2024 tteck # Author: tteck # Co-Author: MickLesk (Canbiz) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE function header_info { clear diff --git a/ct/zoraxy.sh b/ct/zoraxy.sh index ed88e1e87..b91b77726 100644 --- a/ct/zoraxy.sh +++ b/ct/zoraxy.sh @@ -1,9 +1,9 @@ #!/usr/bin/env bash -source <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func) +source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) # Copyright (c) 2021-2024 tteck # Author: tteck (tteckster) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE function header_info { clear diff --git a/ct/zwave-js-ui.sh b/ct/zwave-js-ui.sh index 3be12b44b..51c130926 100644 --- a/ct/zwave-js-ui.sh +++ b/ct/zwave-js-ui.sh @@ -1,9 +1,9 @@ #!/usr/bin/env bash -source <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func) +source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) # Copyright (c) 2021-2024 tteck # Author: tteck (tteckster) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE function header_info { clear diff --git a/install/actualbudget-install.sh b/install/actualbudget-install.sh index 94ff1fb13..3ad15170d 100644 --- a/install/actualbudget-install.sh +++ b/install/actualbudget-install.sh @@ -3,7 +3,7 @@ # Copyright (c) 2021-2024 tteck # Author: tteck (tteckster) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE source /dev/stdin <<< "$FUNCTIONS_FILE_PATH" color diff --git a/install/adguard-install.sh b/install/adguard-install.sh index ef3688cf1..b4c4c3dc1 100644 --- a/install/adguard-install.sh +++ b/install/adguard-install.sh @@ -3,7 +3,7 @@ # Copyright (c) 2021-2024 tteck # Author: tteck (tteckster) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE source /dev/stdin <<< "$FUNCTIONS_FILE_PATH" color diff --git a/install/adventurelog-install.sh b/install/adventurelog-install.sh index f4913880b..e81205257 100644 --- a/install/adventurelog-install.sh +++ b/install/adventurelog-install.sh @@ -4,7 +4,7 @@ # Author: tteck # Co-Author: MickLesk (Canbiz) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE # Source: https://github.com/seanmorley15/AdventureLog source /dev/stdin <<< "$FUNCTIONS_FILE_PATH" diff --git a/install/agentdvr-install.sh b/install/agentdvr-install.sh index f0c431a04..74c1e6a48 100644 --- a/install/agentdvr-install.sh +++ b/install/agentdvr-install.sh @@ -3,7 +3,7 @@ # Copyright (c) 2021-2024 tteck # Author: tteck (tteckster) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE source /dev/stdin <<< "$FUNCTIONS_FILE_PATH" color diff --git a/install/alpine-docker-install.sh b/install/alpine-docker-install.sh index 58431201a..c594f6bf5 100644 --- a/install/alpine-docker-install.sh +++ b/install/alpine-docker-install.sh @@ -3,7 +3,7 @@ # Copyright (c) 2021-2024 tteck # Author: tteck (tteckster) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE source /dev/stdin <<< "$FUNCTIONS_FILE_PATH" color diff --git a/install/alpine-grafana-install.sh b/install/alpine-grafana-install.sh index 7d7e95ad5..93171e1e5 100644 --- a/install/alpine-grafana-install.sh +++ b/install/alpine-grafana-install.sh @@ -3,7 +3,7 @@ # Copyright (c) 2021-2024 tteck # Author: tteck (tteckster) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE source /dev/stdin <<< "$FUNCTIONS_FILE_PATH" color diff --git a/install/alpine-install.sh b/install/alpine-install.sh index b904c7a48..a6623386b 100644 --- a/install/alpine-install.sh +++ b/install/alpine-install.sh @@ -3,7 +3,7 @@ # Copyright (c) 2021-2024 tteck # Author: tteck (tteckster) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE source /dev/stdin <<< "$FUNCTIONS_FILE_PATH" color diff --git a/install/alpine-nextcloud-install.sh b/install/alpine-nextcloud-install.sh index 9b320546d..6d611ba3a 100644 --- a/install/alpine-nextcloud-install.sh +++ b/install/alpine-nextcloud-install.sh @@ -3,7 +3,7 @@ # Copyright (c) 2021-2024 tteck # Author: tteck (tteckster) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE source /dev/stdin <<< "$FUNCTIONS_FILE_PATH" color diff --git a/install/alpine-vaultwarden-install.sh b/install/alpine-vaultwarden-install.sh index 94956b709..1babe4277 100644 --- a/install/alpine-vaultwarden-install.sh +++ b/install/alpine-vaultwarden-install.sh @@ -3,7 +3,7 @@ # Copyright (c) 2021-2024 tteck # Author: tteck (tteckster) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE source /dev/stdin <<< "$FUNCTIONS_FILE_PATH" color diff --git a/install/alpine-zigbee2mqtt-install.sh b/install/alpine-zigbee2mqtt-install.sh index a98f1da54..0effd6c17 100644 --- a/install/alpine-zigbee2mqtt-install.sh +++ b/install/alpine-zigbee2mqtt-install.sh @@ -3,7 +3,7 @@ # Copyright (c) 2021-2024 tteck # Author: tteck (tteckster) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE source /dev/stdin <<< "$FUNCTIONS_FILE_PATH" color diff --git a/install/apache-cassandra-install.sh b/install/apache-cassandra-install.sh index 35c494865..e70f470d7 100644 --- a/install/apache-cassandra-install.sh +++ b/install/apache-cassandra-install.sh @@ -3,7 +3,7 @@ # Copyright (c) 2021-2024 tteck # Author: tteck (tteckster) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE source /dev/stdin <<< "$FUNCTIONS_FILE_PATH" color diff --git a/install/apache-couchdb-install.sh b/install/apache-couchdb-install.sh index 94902056f..af618efff 100644 --- a/install/apache-couchdb-install.sh +++ b/install/apache-couchdb-install.sh @@ -3,7 +3,7 @@ # Copyright (c) 2021-2024 tteck # Author: tteck (tteckster) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE source /dev/stdin <<< "$FUNCTIONS_FILE_PATH" color diff --git a/install/apt-cacher-ng-install.sh b/install/apt-cacher-ng-install.sh index b8e293167..7bb65c480 100644 --- a/install/apt-cacher-ng-install.sh +++ b/install/apt-cacher-ng-install.sh @@ -3,7 +3,7 @@ # Copyright (c) 2021-2024 tteck # Author: tteck (tteckster) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE source /dev/stdin <<< "$FUNCTIONS_FILE_PATH" color diff --git a/install/archivebox-install.sh b/install/archivebox-install.sh index df9e0967e..9d05a034c 100644 --- a/install/archivebox-install.sh +++ b/install/archivebox-install.sh @@ -3,7 +3,7 @@ # Copyright (c) 2021-2024 tteck # Author: tteck # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE source /dev/stdin <<< "$FUNCTIONS_FILE_PATH" color diff --git a/install/aria2-install.sh b/install/aria2-install.sh index f246bc9d6..48fd7ab25 100644 --- a/install/aria2-install.sh +++ b/install/aria2-install.sh @@ -3,7 +3,7 @@ # Copyright (c) 2021-2024 tteck # Author: tteck (tteckster) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE source /dev/stdin <<< "$FUNCTIONS_FILE_PATH" color diff --git a/install/audiobookshelf-install.sh b/install/audiobookshelf-install.sh index cd9346e38..eeea84505 100644 --- a/install/audiobookshelf-install.sh +++ b/install/audiobookshelf-install.sh @@ -3,7 +3,7 @@ # Copyright (c) 2021-2024 tteck # Author: tteck (tteckster) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE source /dev/stdin <<< "$FUNCTIONS_FILE_PATH" color diff --git a/install/autobrr-install.sh b/install/autobrr-install.sh index 510d1c0a9..a593d3f88 100644 --- a/install/autobrr-install.sh +++ b/install/autobrr-install.sh @@ -3,7 +3,7 @@ # Copyright (c) 2021-2024 tteck # Author: tteck (tteckster) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE source /dev/stdin <<< "$FUNCTIONS_FILE_PATH" color diff --git a/install/bazarr-install.sh b/install/bazarr-install.sh index a4ee4cbb4..b0e46e72b 100755 --- a/install/bazarr-install.sh +++ b/install/bazarr-install.sh @@ -3,7 +3,7 @@ # Copyright (c) 2021-2024 tteck # Author: tteck (tteckster) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE source /dev/stdin <<< "$FUNCTIONS_FILE_PATH" color diff --git a/install/blocky-install.sh b/install/blocky-install.sh index d3ba2b509..abf168731 100644 --- a/install/blocky-install.sh +++ b/install/blocky-install.sh @@ -3,7 +3,7 @@ # Copyright (c) 2021-2024 tteck # Author: tteck (tteckster) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE source /dev/stdin <<< "$FUNCTIONS_FILE_PATH" color diff --git a/install/bunkerweb-install.sh b/install/bunkerweb-install.sh index c195030e5..ca569ba99 100644 --- a/install/bunkerweb-install.sh +++ b/install/bunkerweb-install.sh @@ -3,7 +3,7 @@ # Copyright (c) 2021-2024 tteck # Author: tteck (tteckster) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE source /dev/stdin <<< "$FUNCTIONS_FILE_PATH" color diff --git a/install/caddy-install.sh b/install/caddy-install.sh index 88fb8b1a0..b435449c1 100644 --- a/install/caddy-install.sh +++ b/install/caddy-install.sh @@ -3,7 +3,7 @@ # Copyright (c) 2021-2024 tteck # Author: tteck (tteckster) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE source /dev/stdin <<< "$FUNCTIONS_FILE_PATH" color diff --git a/install/calibre-web-install.sh b/install/calibre-web-install.sh index 1f42bbaf0..f51714a73 100644 --- a/install/calibre-web-install.sh +++ b/install/calibre-web-install.sh @@ -4,7 +4,7 @@ # Author: tteck (tteckster) # Co-Author: remz1337 # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE source /dev/stdin <<< "$FUNCTIONS_FILE_PATH" color diff --git a/install/casaos-install.sh b/install/casaos-install.sh index e7e07a615..23e8d2895 100644 --- a/install/casaos-install.sh +++ b/install/casaos-install.sh @@ -3,7 +3,7 @@ # Copyright (c) 2021-2024 tteck # Author: tteck (tteckster) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE source /dev/stdin <<< "$FUNCTIONS_FILE_PATH" color diff --git a/install/changedetection-install.sh b/install/changedetection-install.sh index 9617d07ea..2eee9ec43 100644 --- a/install/changedetection-install.sh +++ b/install/changedetection-install.sh @@ -3,7 +3,7 @@ # Copyright (c) 2021-2024 tteck # Author: tteck (tteckster) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE source /dev/stdin <<< "$FUNCTIONS_FILE_PATH" color diff --git a/install/channels-install.sh b/install/channels-install.sh index 3c5e2d9d7..1ee8b6bf3 100644 --- a/install/channels-install.sh +++ b/install/channels-install.sh @@ -3,7 +3,7 @@ # Copyright (c) 2021-2024 tteck # Author: tteck (tteckster) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE source /dev/stdin <<< "$FUNCTIONS_FILE_PATH" color diff --git a/install/cloudflared-install.sh b/install/cloudflared-install.sh index abd45e474..2eb98f2a7 100644 --- a/install/cloudflared-install.sh +++ b/install/cloudflared-install.sh @@ -3,7 +3,7 @@ # Copyright (c) 2021-2024 tteck # Author: tteck (tteckster) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE source /dev/stdin <<< "$FUNCTIONS_FILE_PATH" color diff --git a/install/cockpit-install.sh b/install/cockpit-install.sh index adc328a48..126943e79 100644 --- a/install/cockpit-install.sh +++ b/install/cockpit-install.sh @@ -4,7 +4,7 @@ # Author: tteck # Co-Author: havardthom # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE # Source: https://github.com/cockpit-project/cockpit source /dev/stdin <<< "$FUNCTIONS_FILE_PATH" diff --git a/install/commafeed-install.sh b/install/commafeed-install.sh index 4806e863d..6beb62813 100644 --- a/install/commafeed-install.sh +++ b/install/commafeed-install.sh @@ -3,7 +3,7 @@ # Copyright (c) 2021-2024 tteck # Author: tteck (tteckster) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE source /dev/stdin <<< "$FUNCTIONS_FILE_PATH" color diff --git a/install/cronicle-install.sh b/install/cronicle-install.sh index c3ea5a8ab..ab87f7852 100644 --- a/install/cronicle-install.sh +++ b/install/cronicle-install.sh @@ -3,7 +3,7 @@ # Copyright (c) 2021-2024 tteck # Author: tteck (tteckster) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE source /dev/stdin <<< "$FUNCTIONS_FILE_PATH" color diff --git a/install/daemonsync-install.sh b/install/daemonsync-install.sh index 483e27aa8..f773bc0c8 100644 --- a/install/daemonsync-install.sh +++ b/install/daemonsync-install.sh @@ -3,7 +3,7 @@ # Copyright (c) 2021-2024 tteck # Author: tteck (tteckster) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE source /dev/stdin <<< "$FUNCTIONS_FILE_PATH" color @@ -21,7 +21,7 @@ $STD apt-get install -y g++-multilib msg_ok "Installed Dependencies" msg_info "Installing Daemon Sync Server" -wget -qL https://github.com/tteck/Proxmox/raw/main/misc/daemonsync_2.2.0.0059_amd64.deb +wget -qL https://github.com/community-scripts/ProxmoxVE/raw/main/misc/daemonsync_2.2.0.0059_amd64.deb $STD dpkg -i daemonsync_2.2.0.0059_amd64.deb msg_ok "Installed Daemon Sync Server" diff --git a/install/dashy-install.sh b/install/dashy-install.sh index a81749aef..cfad57bf7 100644 --- a/install/dashy-install.sh +++ b/install/dashy-install.sh @@ -3,7 +3,7 @@ # Copyright (c) 2021-2024 tteck # Author: tteck (tteckster) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE source /dev/stdin <<< "$FUNCTIONS_FILE_PATH" color diff --git a/install/debian-install.sh b/install/debian-install.sh index bb89300e1..3feb1f7f1 100644 --- a/install/debian-install.sh +++ b/install/debian-install.sh @@ -3,7 +3,7 @@ # Copyright (c) 2021-2024 tteck # Author: tteck (tteckster) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE source /dev/stdin <<< "$FUNCTIONS_FILE_PATH" color diff --git a/install/deconz-install.sh b/install/deconz-install.sh index 203f5191e..5d6b11592 100644 --- a/install/deconz-install.sh +++ b/install/deconz-install.sh @@ -3,7 +3,7 @@ # Copyright (c) 2021-2024 tteck # Author: tteck (tteckster) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE source /dev/stdin <<< "$FUNCTIONS_FILE_PATH" color diff --git a/install/deluge-install.sh b/install/deluge-install.sh index 979b22b65..6ff3f1c26 100644 --- a/install/deluge-install.sh +++ b/install/deluge-install.sh @@ -3,7 +3,7 @@ # Copyright (c) 2021-2024 tteck # Author: tteck (tteckster) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE source /dev/stdin <<< "$FUNCTIONS_FILE_PATH" color diff --git a/install/docker-install.sh b/install/docker-install.sh index b6b110ae2..70ebcebe0 100644 --- a/install/docker-install.sh +++ b/install/docker-install.sh @@ -3,7 +3,7 @@ # Copyright (c) 2021-2024 tteck # Author: tteck (tteckster) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE source /dev/stdin <<<"$FUNCTIONS_FILE_PATH" color diff --git a/install/dockge-install.sh b/install/dockge-install.sh index 3cb462455..8d9a211de 100644 --- a/install/dockge-install.sh +++ b/install/dockge-install.sh @@ -3,7 +3,7 @@ # Copyright (c) 2021-2024 tteck # Author: tteck (tteckster) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE source /dev/stdin <<<"$FUNCTIONS_FILE_PATH" color diff --git a/install/emby-install.sh b/install/emby-install.sh index bc6ba9be0..2e3cdc130 100644 --- a/install/emby-install.sh +++ b/install/emby-install.sh @@ -3,7 +3,7 @@ # Copyright (c) 2021-2024 tteck # Author: tteck (tteckster) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE source /dev/stdin <<< "$FUNCTIONS_FILE_PATH" color diff --git a/install/emqx-install.sh b/install/emqx-install.sh index 16475d530..85b7e41bb 100644 --- a/install/emqx-install.sh +++ b/install/emqx-install.sh @@ -3,7 +3,7 @@ # Copyright (c) 2021-2024 tteck # Author: tteck (tteckster) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE source /dev/stdin <<< "$FUNCTIONS_FILE_PATH" color diff --git a/install/ersatztv-install.sh b/install/ersatztv-install.sh index 125f8652a..ffaee5469 100644 --- a/install/ersatztv-install.sh +++ b/install/ersatztv-install.sh @@ -4,7 +4,7 @@ # Author: tteck # Co-Author: MickLesk (Canbiz) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE # Source: https://github.com/ErsatzTV/ErsatzTV source /dev/stdin <<< "$FUNCTIONS_FILE_PATH" diff --git a/install/esphome-install.sh b/install/esphome-install.sh index 301d9bbb8..708f32da8 100644 --- a/install/esphome-install.sh +++ b/install/esphome-install.sh @@ -3,7 +3,7 @@ # Copyright (c) 2021-2024 tteck # Author: tteck (tteckster) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE source /dev/stdin <<<"$FUNCTIONS_FILE_PATH" color diff --git a/install/evcc-install.sh b/install/evcc-install.sh index bd544ea5f..764cdf4ec 100644 --- a/install/evcc-install.sh +++ b/install/evcc-install.sh @@ -4,7 +4,7 @@ # Author: tteck # Co-Author: MickLesk (Canbiz) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE # Source: https://github.com/evcc-io/evcc source /dev/stdin <<< "$FUNCTIONS_FILE_PATH" diff --git a/install/fenrus-install.sh b/install/fenrus-install.sh index fa0f95007..60d358f47 100644 --- a/install/fenrus-install.sh +++ b/install/fenrus-install.sh @@ -4,7 +4,7 @@ # Author: tteck (tteckster) # Co-Author: Scorpoon # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE # Source: https://github.com/revenz/Fenrus diff --git a/install/fhem-install.sh b/install/fhem-install.sh index ccc078fe6..b9e53d26f 100644 --- a/install/fhem-install.sh +++ b/install/fhem-install.sh @@ -3,7 +3,7 @@ # Copyright (c) 2021-2024 tteck # Author: tteck (tteckster) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE source /dev/stdin <<< "$FUNCTIONS_FILE_PATH" color diff --git a/install/flaresolverr-install.sh b/install/flaresolverr-install.sh index 93c7fdd47..cc09e46cd 100644 --- a/install/flaresolverr-install.sh +++ b/install/flaresolverr-install.sh @@ -4,7 +4,7 @@ # Author: tteck (tteckster) # Co-Author: remz1337 # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE source /dev/stdin <<< "$FUNCTIONS_FILE_PATH" color diff --git a/install/flowiseai-install.sh b/install/flowiseai-install.sh index 318073653..84326e494 100644 --- a/install/flowiseai-install.sh +++ b/install/flowiseai-install.sh @@ -3,7 +3,7 @@ # Copyright (c) 2021-2024 tteck # Author: tteck (tteckster) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE source /dev/stdin <<< "$FUNCTIONS_FILE_PATH" color diff --git a/install/forgejo-install.sh b/install/forgejo-install.sh index a2e281694..7cacfb40b 100644 --- a/install/forgejo-install.sh +++ b/install/forgejo-install.sh @@ -3,7 +3,7 @@ # Copyright (c) 2021-2024 tteck # Author: tteck (tteckster) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE source /dev/stdin <<< "$FUNCTIONS_FILE_PATH" color diff --git a/install/frigate-install.sh b/install/frigate-install.sh index e7076b95e..b830cf58e 100644 --- a/install/frigate-install.sh +++ b/install/frigate-install.sh @@ -4,7 +4,7 @@ # Author: tteck (tteckster) # Co-Author: remz1337 # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE source /dev/stdin <<<"$FUNCTIONS_FILE_PATH" color diff --git a/install/gitea-install.sh b/install/gitea-install.sh index 02c8310e2..66f6a2119 100644 --- a/install/gitea-install.sh +++ b/install/gitea-install.sh @@ -4,7 +4,7 @@ # Author: tteck (tteckster) # Co-author: Rogue-King # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE source /dev/stdin <<< "$FUNCTIONS_FILE_PATH" color diff --git a/install/go2rtc-install.sh b/install/go2rtc-install.sh index 8c5f10727..43c0aa741 100644 --- a/install/go2rtc-install.sh +++ b/install/go2rtc-install.sh @@ -3,7 +3,7 @@ # Copyright (c) 2021-2024 tteck # Author: tteck (tteckster) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE source /dev/stdin <<< "$FUNCTIONS_FILE_PATH" color diff --git a/install/gokapi-install.sh b/install/gokapi-install.sh index 26fe63387..78be6810a 100644 --- a/install/gokapi-install.sh +++ b/install/gokapi-install.sh @@ -3,7 +3,7 @@ # Copyright (c) 2021-2024 tteck # Author: tteck (tteckster) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE source /dev/stdin <<< "$FUNCTIONS_FILE_PATH" color diff --git a/install/gotify-install.sh b/install/gotify-install.sh index d18f46e11..acff502e1 100644 --- a/install/gotify-install.sh +++ b/install/gotify-install.sh @@ -3,7 +3,7 @@ # Copyright (c) 2021-2024 tteck # Author: tteck (tteckster) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE source /dev/stdin <<< "$FUNCTIONS_FILE_PATH" color diff --git a/install/grafana-install.sh b/install/grafana-install.sh index 886277309..c6e656caf 100644 --- a/install/grafana-install.sh +++ b/install/grafana-install.sh @@ -3,7 +3,7 @@ # Copyright (c) 2021-2024 tteck # Author: tteck (tteckster) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE source /dev/stdin <<< "$FUNCTIONS_FILE_PATH" color diff --git a/install/grocy-install.sh b/install/grocy-install.sh index e47eb8bc4..35b5365dc 100644 --- a/install/grocy-install.sh +++ b/install/grocy-install.sh @@ -3,7 +3,7 @@ # Copyright (c) 2021-2024 tteck # Author: tteck (tteckster) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE source /dev/stdin <<< "$FUNCTIONS_FILE_PATH" color diff --git a/install/headscale-install.sh b/install/headscale-install.sh index cead9fb73..c4ffaf409 100644 --- a/install/headscale-install.sh +++ b/install/headscale-install.sh @@ -3,7 +3,7 @@ # Copyright (c) 2021-2024 tteck # Author: tteck (tteckster) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE source /dev/stdin <<< "$FUNCTIONS_FILE_PATH" color diff --git a/install/heimdall-dashboard-install.sh b/install/heimdall-dashboard-install.sh index 951bef8be..ee5083425 100644 --- a/install/heimdall-dashboard-install.sh +++ b/install/heimdall-dashboard-install.sh @@ -3,7 +3,7 @@ # Copyright (c) 2021-2024 tteck # Author: tteck (tteckster) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE source /dev/stdin <<< "$FUNCTIONS_FILE_PATH" color diff --git a/install/hivemq-install.sh b/install/hivemq-install.sh index 5234a49bf..7d225567a 100644 --- a/install/hivemq-install.sh +++ b/install/hivemq-install.sh @@ -3,7 +3,7 @@ # Copyright (c) 2021-2024 tteck # Author: tteck (tteckster) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE source /dev/stdin <<< "$FUNCTIONS_FILE_PATH" color diff --git a/install/homarr-install.sh b/install/homarr-install.sh index c1dcf22eb..791c37a77 100644 --- a/install/homarr-install.sh +++ b/install/homarr-install.sh @@ -3,7 +3,7 @@ # Copyright (c) 2021-2024 tteck # Author: tteck (tteckster) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE source /dev/stdin <<< "$FUNCTIONS_FILE_PATH" color diff --git a/install/homeassistant-core-install.sh b/install/homeassistant-core-install.sh index e66e66c14..3c794b32f 100644 --- a/install/homeassistant-core-install.sh +++ b/install/homeassistant-core-install.sh @@ -3,7 +3,7 @@ # Copyright (c) 2021-2024 tteck # Author: tteck (tteckster) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE source /dev/stdin <<<"$FUNCTIONS_FILE_PATH" color diff --git a/install/homeassistant-install.sh b/install/homeassistant-install.sh index 088fc4d3e..9d1ce31b2 100644 --- a/install/homeassistant-install.sh +++ b/install/homeassistant-install.sh @@ -3,7 +3,7 @@ # Copyright (c) 2021-2024 tteck # Author: tteck (tteckster) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE source /dev/stdin <<<"$FUNCTIONS_FILE_PATH" color diff --git a/install/homebox-install.sh b/install/homebox-install.sh index 43969234b..f0d1c8cd6 100644 --- a/install/homebox-install.sh +++ b/install/homebox-install.sh @@ -4,7 +4,7 @@ # Author: tteck # Co-Author: MickLesk (Canbiz) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE # Source: https://github.com/sysadminsmedia/homebox source /dev/stdin <<< "$FUNCTIONS_FILE_PATH" diff --git a/install/homebridge-install.sh b/install/homebridge-install.sh index 76ac86fc4..890128184 100644 --- a/install/homebridge-install.sh +++ b/install/homebridge-install.sh @@ -3,7 +3,7 @@ # Copyright (c) 2021-2024 tteck # Author: tteck (tteckster) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE source /dev/stdin <<< "$FUNCTIONS_FILE_PATH" color diff --git a/install/homepage-install.sh b/install/homepage-install.sh index 3221324f7..96b7b2ce3 100644 --- a/install/homepage-install.sh +++ b/install/homepage-install.sh @@ -3,7 +3,7 @@ # Copyright (c) 2021-2024 tteck # Author: tteck (tteckster) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE source /dev/stdin <<< "$FUNCTIONS_FILE_PATH" color diff --git a/install/homer-install.sh b/install/homer-install.sh index cab3080c4..594860d73 100644 --- a/install/homer-install.sh +++ b/install/homer-install.sh @@ -3,7 +3,7 @@ # Copyright (c) 2021-2024 tteck # Author: tteck (tteckster) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE source /dev/stdin <<< "$FUNCTIONS_FILE_PATH" color diff --git a/install/hyperhdr-install.sh b/install/hyperhdr-install.sh index 05759f546..122838945 100644 --- a/install/hyperhdr-install.sh +++ b/install/hyperhdr-install.sh @@ -3,7 +3,7 @@ # Copyright (c) 2021-2024 tteck # Author: tteck (tteckster) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE source /dev/stdin <<< "$FUNCTIONS_FILE_PATH" color diff --git a/install/hyperion-install.sh b/install/hyperion-install.sh index 3ac24e5ac..f967e414b 100644 --- a/install/hyperion-install.sh +++ b/install/hyperion-install.sh @@ -3,7 +3,7 @@ # Copyright (c) 2021-2024 tteck # Author: tteck (tteckster) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE source /dev/stdin <<< "$FUNCTIONS_FILE_PATH" color diff --git a/install/influxdb-install.sh b/install/influxdb-install.sh index a1edf8207..a15de6f58 100644 --- a/install/influxdb-install.sh +++ b/install/influxdb-install.sh @@ -3,7 +3,7 @@ # Copyright (c) 2021-2024 tteck # Author: tteck (tteckster) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE source /dev/stdin <<< "$FUNCTIONS_FILE_PATH" color diff --git a/install/iobroker-install.sh b/install/iobroker-install.sh index 8673c135c..9f2612c9e 100644 --- a/install/iobroker-install.sh +++ b/install/iobroker-install.sh @@ -3,7 +3,7 @@ # Copyright (c) 2021-2024 tteck # Author: tteck (tteckster) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE source /dev/stdin <<< "$FUNCTIONS_FILE_PATH" color diff --git a/install/iventoy-install.sh b/install/iventoy-install.sh index ea58b59d6..586e588b6 100644 --- a/install/iventoy-install.sh +++ b/install/iventoy-install.sh @@ -3,7 +3,7 @@ # Copyright (c) 2021-2024 tteck # Author: tteck (tteckster) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE source /dev/stdin <<< "$FUNCTIONS_FILE_PATH" color diff --git a/install/jackett-install.sh b/install/jackett-install.sh index 8dd591677..1f2f5d05b 100644 --- a/install/jackett-install.sh +++ b/install/jackett-install.sh @@ -3,7 +3,7 @@ # Copyright (c) 2021-2024 tteck # Author: tteck (tteckster) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE source /dev/stdin <<< "$FUNCTIONS_FILE_PATH" color diff --git a/install/jellyfin-install.sh b/install/jellyfin-install.sh index 590b9cd26..d2a04a47e 100644 --- a/install/jellyfin-install.sh +++ b/install/jellyfin-install.sh @@ -3,7 +3,7 @@ # Copyright (c) 2021-2024 tteck # Author: tteck (tteckster) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE source /dev/stdin <<< "$FUNCTIONS_FILE_PATH" color diff --git a/install/jellyseerr-install.sh b/install/jellyseerr-install.sh index 5905d7401..fe39f0944 100644 --- a/install/jellyseerr-install.sh +++ b/install/jellyseerr-install.sh @@ -3,7 +3,7 @@ # Copyright (c) 2021-2024 tteck # Author: tteck (tteckster) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE source /dev/stdin <<< "$FUNCTIONS_FILE_PATH" color diff --git a/install/kavita-install.sh b/install/kavita-install.sh index b354f171d..daf513376 100644 --- a/install/kavita-install.sh +++ b/install/kavita-install.sh @@ -3,7 +3,7 @@ # Copyright (c) 2021-2024 tteck # Author: tteck (tteckster) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE source /dev/stdin <<< "$FUNCTIONS_FILE_PATH" color diff --git a/install/keycloak-install.sh b/install/keycloak-install.sh index 536a2bb86..ba9a0ec96 100644 --- a/install/keycloak-install.sh +++ b/install/keycloak-install.sh @@ -3,7 +3,7 @@ # Copyright (c) 2021-2024 tteck # Author: tteck (tteckster) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE source /dev/stdin <<< "$FUNCTIONS_FILE_PATH" color diff --git a/install/kubo-install.sh b/install/kubo-install.sh index 390674c1e..5dbc65c4f 100644 --- a/install/kubo-install.sh +++ b/install/kubo-install.sh @@ -4,7 +4,7 @@ # Author: tteck (tteckster) # Co-Author: ulmentflam # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE source /dev/stdin <<< "$FUNCTIONS_FILE_PATH" color diff --git a/install/lazylibrarian-install.sh b/install/lazylibrarian-install.sh index ce10041e3..271dc41af 100644 --- a/install/lazylibrarian-install.sh +++ b/install/lazylibrarian-install.sh @@ -4,7 +4,7 @@ # Author: tteck # Co-Author: MountyMapleSyrup (MountyMapleSyrup) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE source /dev/stdin <<< "$FUNCTIONS_FILE_PATH" color diff --git a/install/lidarr-install.sh b/install/lidarr-install.sh index 0970ef18f..310135e47 100644 --- a/install/lidarr-install.sh +++ b/install/lidarr-install.sh @@ -3,7 +3,7 @@ # Copyright (c) 2021-2024 tteck # Author: tteck (tteckster) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE source /dev/stdin <<< "$FUNCTIONS_FILE_PATH" color diff --git a/install/linkwarden-install.sh b/install/linkwarden-install.sh index 378343d57..ccbda4737 100644 --- a/install/linkwarden-install.sh +++ b/install/linkwarden-install.sh @@ -3,7 +3,7 @@ # Copyright (c) 2021-2024 tteck # Author: tteck (tteckster) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE source /dev/stdin <<< "$FUNCTIONS_FILE_PATH" color diff --git a/install/lldap-install.sh b/install/lldap-install.sh index 0bdebe94d..8def2e23a 100644 --- a/install/lldap-install.sh +++ b/install/lldap-install.sh @@ -4,7 +4,7 @@ # Author: tteck (tteckster) # Co-Author: remz1337 # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE source /dev/stdin <<< "$FUNCTIONS_FILE_PATH" color diff --git a/install/mafl-install.sh b/install/mafl-install.sh index da27b2661..51ac1e106 100644 --- a/install/mafl-install.sh +++ b/install/mafl-install.sh @@ -3,7 +3,7 @@ # Copyright (c) 2021-2024 tteck # Author: tteck (tteckster) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE source /dev/stdin <<< "$FUNCTIONS_FILE_PATH" color diff --git a/install/magicmirror-install.sh b/install/magicmirror-install.sh index 5ba0dff20..7c884ab41 100644 --- a/install/magicmirror-install.sh +++ b/install/magicmirror-install.sh @@ -3,7 +3,7 @@ # Copyright (c) 2021-2024 tteck # Author: tteck (tteckster) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE source /dev/stdin <<< "$FUNCTIONS_FILE_PATH" color diff --git a/install/mariadb-install.sh b/install/mariadb-install.sh index a10ce0bef..d5ad1c4be 100644 --- a/install/mariadb-install.sh +++ b/install/mariadb-install.sh @@ -3,7 +3,7 @@ # Copyright (c) 2021-2024 tteck # Author: tteck (tteckster) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE source /dev/stdin <<< "$FUNCTIONS_FILE_PATH" color diff --git a/install/matterbridge-install.sh b/install/matterbridge-install.sh index 2d895e251..99e609af8 100644 --- a/install/matterbridge-install.sh +++ b/install/matterbridge-install.sh @@ -4,7 +4,7 @@ # Author: tteck # Co-Author: MickLesk (Canbiz) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE # Source: https://github.com/Luligu/matterbridge/ source /dev/stdin <<< "$FUNCTIONS_FILE_PATH" diff --git a/install/mediamtx-install.sh b/install/mediamtx-install.sh index 66db30476..db6dc3fbd 100644 --- a/install/mediamtx-install.sh +++ b/install/mediamtx-install.sh @@ -3,7 +3,7 @@ # Copyright (c) 2021-2024 tteck # Author: tteck (tteckster) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE source /dev/stdin <<< "$FUNCTIONS_FILE_PATH" color diff --git a/install/medusa-install.sh b/install/medusa-install.sh index 34bed0af4..4dda222bc 100644 --- a/install/medusa-install.sh +++ b/install/medusa-install.sh @@ -3,7 +3,7 @@ # Copyright (c) 2021-2024 tteck # Author: tteck (tteckster) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE source /dev/stdin <<< "$FUNCTIONS_FILE_PATH" color diff --git a/install/memos-install.sh b/install/memos-install.sh index f41d6f275..f7c72e153 100644 --- a/install/memos-install.sh +++ b/install/memos-install.sh @@ -4,7 +4,7 @@ # Author: tteck # Co-Author: MickLesk (Canbiz) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE # Source: https://github.com/usememos/memos source /dev/stdin <<< "$FUNCTIONS_FILE_PATH" diff --git a/install/meshcentral-install.sh b/install/meshcentral-install.sh index c482f9a2e..b0dc2c756 100644 --- a/install/meshcentral-install.sh +++ b/install/meshcentral-install.sh @@ -3,7 +3,7 @@ # Copyright (c) 2021-2024 tteck # Author: tteck (tteckster) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE source /dev/stdin <<< "$FUNCTIONS_FILE_PATH" color diff --git a/install/metube-install.sh b/install/metube-install.sh index 726f3f770..208c35af9 100644 --- a/install/metube-install.sh +++ b/install/metube-install.sh @@ -4,7 +4,7 @@ # Author: tteck # Co-Author: MickLesk (Canbiz) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE # Source: https://github.com/alexta69/metube source /dev/stdin <<<"$FUNCTIONS_FILE_PATH" diff --git a/install/mongodb-install.sh b/install/mongodb-install.sh index 6839ae51a..6b682e9ee 100644 --- a/install/mongodb-install.sh +++ b/install/mongodb-install.sh @@ -3,7 +3,7 @@ # Copyright (c) 2021-2024 tteck # Author: tteck (tteckster) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE source /dev/stdin <<< "$FUNCTIONS_FILE_PATH" color diff --git a/install/motioneye-install.sh b/install/motioneye-install.sh index 99e244134..2f9150951 100644 --- a/install/motioneye-install.sh +++ b/install/motioneye-install.sh @@ -3,7 +3,7 @@ # Copyright (c) 2021-2024 tteck # Author: tteck (tteckster) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE source /dev/stdin <<< "$FUNCTIONS_FILE_PATH" color diff --git a/install/mqtt-install.sh b/install/mqtt-install.sh index 61a01fbe3..bb11b4898 100644 --- a/install/mqtt-install.sh +++ b/install/mqtt-install.sh @@ -3,7 +3,7 @@ # Copyright (c) 2021-2024 tteck # Author: tteck (tteckster) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE source /dev/stdin <<< "$FUNCTIONS_FILE_PATH" color diff --git a/install/myspeed-install.sh b/install/myspeed-install.sh index 45ef62a6c..e0596490f 100644 --- a/install/myspeed-install.sh +++ b/install/myspeed-install.sh @@ -4,7 +4,7 @@ # Author: tteck # Co-Author: MickLesk (Canbiz) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE # Source: https://github.com/gnmyt/myspeed source /dev/stdin <<<"$FUNCTIONS_FILE_PATH" diff --git a/install/mysql-install.sh b/install/mysql-install.sh index 0a46b9278..6c8ef1920 100644 --- a/install/mysql-install.sh +++ b/install/mysql-install.sh @@ -4,7 +4,7 @@ # Author: tteck # Co-Author: MickLesk (Canbiz) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE # Source: https://www.mysql.com/products/community | https://www.phpmyadmin.net source /dev/stdin <<< "$FUNCTIONS_FILE_PATH" diff --git a/install/n8n-install.sh b/install/n8n-install.sh index 811c166da..059a0726f 100644 --- a/install/n8n-install.sh +++ b/install/n8n-install.sh @@ -3,7 +3,7 @@ # Copyright (c) 2021-2024 tteck # Author: tteck (tteckster) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE source /dev/stdin <<< "$FUNCTIONS_FILE_PATH" color diff --git a/install/navidrome-install.sh b/install/navidrome-install.sh index 42235dc83..a78f5e917 100644 --- a/install/navidrome-install.sh +++ b/install/navidrome-install.sh @@ -3,7 +3,7 @@ # Copyright (c) 2021-2024 tteck # Author: tteck (tteckster) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE source /dev/stdin <<< "$FUNCTIONS_FILE_PATH" color diff --git a/install/neo4j-install.sh b/install/neo4j-install.sh index f5e8b8675..fdd22cf0c 100644 --- a/install/neo4j-install.sh +++ b/install/neo4j-install.sh @@ -4,7 +4,7 @@ # Author: tteck # Co-Author: havardthom # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE source /dev/stdin <<< "$FUNCTIONS_FILE_PATH" color diff --git a/install/nextcloudpi-install.sh b/install/nextcloudpi-install.sh index ca1871dd0..55f493870 100644 --- a/install/nextcloudpi-install.sh +++ b/install/nextcloudpi-install.sh @@ -3,7 +3,7 @@ # Copyright (c) 2021-2024 tteck # Author: tteck (tteckster) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE source /dev/stdin <<< "$FUNCTIONS_FILE_PATH" color diff --git a/install/nginxproxymanager-install.sh b/install/nginxproxymanager-install.sh index 4314e293c..0eeae45a4 100644 --- a/install/nginxproxymanager-install.sh +++ b/install/nginxproxymanager-install.sh @@ -3,7 +3,7 @@ # Copyright (c) 2021-2024 tteck # Author: tteck (tteckster) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE source /dev/stdin <<<"$FUNCTIONS_FILE_PATH" color diff --git a/install/nocodb-install.sh b/install/nocodb-install.sh index 612d79834..64a2c05d2 100644 --- a/install/nocodb-install.sh +++ b/install/nocodb-install.sh @@ -3,7 +3,7 @@ # Copyright (c) 2021-2024 tteck # Author: tteck (tteckster) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE source /dev/stdin <<< "$FUNCTIONS_FILE_PATH" color diff --git a/install/node-red-install.sh b/install/node-red-install.sh index 8ca280be8..01e3862ab 100644 --- a/install/node-red-install.sh +++ b/install/node-red-install.sh @@ -3,7 +3,7 @@ # Copyright (c) 2021-2024 tteck # Author: tteck (tteckster) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE source /dev/stdin <<< "$FUNCTIONS_FILE_PATH" color diff --git a/install/notifiarr-install.sh b/install/notifiarr-install.sh index a90217c0e..2790f5442 100644 --- a/install/notifiarr-install.sh +++ b/install/notifiarr-install.sh @@ -3,7 +3,7 @@ # Copyright (c) 2021-2024 tteck # Author: tteck (tteckster) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE source /dev/stdin <<< "$FUNCTIONS_FILE_PATH" color diff --git a/install/ntfy-install.sh b/install/ntfy-install.sh index 578e89663..f05c4c84f 100644 --- a/install/ntfy-install.sh +++ b/install/ntfy-install.sh @@ -3,7 +3,7 @@ # Copyright (c) 2021-2024 tteck # Author: tteck (tteckster) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE source /dev/stdin <<< "$FUNCTIONS_FILE_PATH" color diff --git a/install/nzbget-install.sh b/install/nzbget-install.sh index b4f95b912..ef548922a 100644 --- a/install/nzbget-install.sh +++ b/install/nzbget-install.sh @@ -4,7 +4,7 @@ # Author: tteck # Co-Author: havardthom # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE source /dev/stdin <<< "$FUNCTIONS_FILE_PATH" color diff --git a/install/octoprint-install.sh b/install/octoprint-install.sh index 878762fa9..a1c5c5ee8 100644 --- a/install/octoprint-install.sh +++ b/install/octoprint-install.sh @@ -3,7 +3,7 @@ # Copyright (c) 2021-2024 tteck # Author: tteck (tteckster) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE source /dev/stdin <<< "$FUNCTIONS_FILE_PATH" color diff --git a/install/ollama-install.sh b/install/ollama-install.sh index ea8a849a2..95e2803a6 100644 --- a/install/ollama-install.sh +++ b/install/ollama-install.sh @@ -4,7 +4,7 @@ # Author: tteck # Co-Author: havardthom # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE source /dev/stdin <<< "$FUNCTIONS_FILE_PATH" color diff --git a/install/omada-install.sh b/install/omada-install.sh index 8bd0f1f9a..318851048 100644 --- a/install/omada-install.sh +++ b/install/omada-install.sh @@ -3,7 +3,7 @@ # Copyright (c) 2021-2024 tteck # Author: tteck (tteckster) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE source /dev/stdin <<< "$FUNCTIONS_FILE_PATH" color diff --git a/install/ombi-install.sh b/install/ombi-install.sh index f42e528b1..86d869f45 100644 --- a/install/ombi-install.sh +++ b/install/ombi-install.sh @@ -3,7 +3,7 @@ # Copyright (c) 2021-2024 tteck # Author: tteck (tteckster) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE source /dev/stdin <<< "$FUNCTIONS_FILE_PATH" color diff --git a/install/omv-install.sh b/install/omv-install.sh index 2fb700ae3..f89007f16 100644 --- a/install/omv-install.sh +++ b/install/omv-install.sh @@ -3,7 +3,7 @@ # Copyright (c) 2021-2024 tteck # Author: tteck (tteckster) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE source /dev/stdin <<< "$FUNCTIONS_FILE_PATH" color diff --git a/install/openhab-install.sh b/install/openhab-install.sh index 40661c6c2..f9c7dbd75 100644 --- a/install/openhab-install.sh +++ b/install/openhab-install.sh @@ -3,7 +3,7 @@ # Copyright (c) 2021-2024 tteck # Author: tteck (tteckster) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE source /dev/stdin <<< "$FUNCTIONS_FILE_PATH" color diff --git a/install/openobserve-install.sh b/install/openobserve-install.sh index 7fff763e3..a6b07b918 100644 --- a/install/openobserve-install.sh +++ b/install/openobserve-install.sh @@ -3,7 +3,7 @@ # Copyright (c) 2021-2024 tteck # Author: tteck (tteckster) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE source /dev/stdin <<< "$FUNCTIONS_FILE_PATH" color diff --git a/install/openwebui-install.sh b/install/openwebui-install.sh index 31930cb59..16cf2ad91 100644 --- a/install/openwebui-install.sh +++ b/install/openwebui-install.sh @@ -4,7 +4,7 @@ # Author: tteck # Co-Author: havardthom # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE source /dev/stdin <<< "$FUNCTIONS_FILE_PATH" color diff --git a/install/overseerr-install.sh b/install/overseerr-install.sh index dd65cd671..3739eaea0 100644 --- a/install/overseerr-install.sh +++ b/install/overseerr-install.sh @@ -3,7 +3,7 @@ # Copyright (c) 2021-2024 tteck # Author: tteck (tteckster) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE source /dev/stdin <<< "$FUNCTIONS_FILE_PATH" color diff --git a/install/owncast-install.sh b/install/owncast-install.sh index ca6f30c30..69d2d3912 100644 --- a/install/owncast-install.sh +++ b/install/owncast-install.sh @@ -3,7 +3,7 @@ # Copyright (c) 2021-2024 tteck # Author: tteck (tteckster) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE source /dev/stdin <<< "$FUNCTIONS_FILE_PATH" color diff --git a/install/pairdrop-install.sh b/install/pairdrop-install.sh index 75070cd7d..e8e52392d 100644 --- a/install/pairdrop-install.sh +++ b/install/pairdrop-install.sh @@ -3,7 +3,7 @@ # Copyright (c) 2021-2024 tteck # Author: tteck (tteckster) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE source /dev/stdin <<< "$FUNCTIONS_FILE_PATH" color diff --git a/install/paperless-ngx-install.sh b/install/paperless-ngx-install.sh index 134772a07..47b36b5e1 100644 --- a/install/paperless-ngx-install.sh +++ b/install/paperless-ngx-install.sh @@ -3,7 +3,7 @@ # Copyright (c) 2021-2024 tteck # Author: tteck (tteckster) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE source /dev/stdin <<<"$FUNCTIONS_FILE_PATH" color diff --git a/install/pbs-install.sh b/install/pbs-install.sh index 5f5dc0173..3fdc090de 100644 --- a/install/pbs-install.sh +++ b/install/pbs-install.sh @@ -3,7 +3,7 @@ # Copyright (c) 2021-2024 tteck # Author: tteck (tteckster) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE source /dev/stdin <<< "$FUNCTIONS_FILE_PATH" color diff --git a/install/peanut-install.sh b/install/peanut-install.sh index fa4a6215f..bba32d87a 100644 --- a/install/peanut-install.sh +++ b/install/peanut-install.sh @@ -4,7 +4,7 @@ # Author: tteck (tteckster) # Co-Author: remz1337 # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE source /dev/stdin <<< "$FUNCTIONS_FILE_PATH" color diff --git a/install/petio-install.sh b/install/petio-install.sh index 0de03f158..0b2d403a2 100644 --- a/install/petio-install.sh +++ b/install/petio-install.sh @@ -3,7 +3,7 @@ # Copyright (c) 2021-2024 tteck # Author: tteck (tteckster) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE source /dev/stdin <<< "$FUNCTIONS_FILE_PATH" color diff --git a/install/photoprism-install.sh b/install/photoprism-install.sh index e88d16618..6fdd9a6d6 100644 --- a/install/photoprism-install.sh +++ b/install/photoprism-install.sh @@ -3,7 +3,7 @@ # Copyright (c) 2021-2024 tteck # Author: tteck (tteckster) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE source /dev/stdin <<< "$FUNCTIONS_FILE_PATH" color @@ -46,7 +46,7 @@ PHOTOPRISM_AUTH_MODE='password' PHOTOPRISM_ADMIN_PASSWORD='helper-scripts.com' PHOTOPRISM_HTTP_HOST='0.0.0.0' PHOTOPRISM_HTTP_PORT='2342' -PHOTOPRISM_SITE_CAPTION='https://tteck.github.io/Proxmox/' +PHOTOPRISM_SITE_CAPTION='https://Helper-Scripts.com' PHOTOPRISM_STORAGE_PATH='/opt/photoprism/storage' PHOTOPRISM_ORIGINALS_PATH='/opt/photoprism/photos/originals' PHOTOPRISM_IMPORT_PATH='/opt/photoprism/photos/import' diff --git a/install/pialert-install.sh b/install/pialert-install.sh index ff5ff2ee8..579dd8501 100644 --- a/install/pialert-install.sh +++ b/install/pialert-install.sh @@ -3,7 +3,7 @@ # Copyright (c) 2021-2024 tteck # Author: tteck (tteckster) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE source /dev/stdin <<< "$FUNCTIONS_FILE_PATH" color diff --git a/install/pihole-install.sh b/install/pihole-install.sh index 5b869d0d9..00be591d7 100644 --- a/install/pihole-install.sh +++ b/install/pihole-install.sh @@ -3,7 +3,7 @@ # Copyright (c) 2021-2024 tteck # Author: tteck (tteckster) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE source /dev/stdin <<< "$FUNCTIONS_FILE_PATH" color diff --git a/install/pingvin-install.sh b/install/pingvin-install.sh index 2997bbbcc..6007b45bd 100644 --- a/install/pingvin-install.sh +++ b/install/pingvin-install.sh @@ -3,7 +3,7 @@ # Copyright (c) 2021-2024 tteck # Author: tteck (tteckster) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE source /dev/stdin <<< "$FUNCTIONS_FILE_PATH" color diff --git a/install/plex-install.sh b/install/plex-install.sh index d456be026..5dfa87272 100644 --- a/install/plex-install.sh +++ b/install/plex-install.sh @@ -3,7 +3,7 @@ # Copyright (c) 2021-2024 tteck # Author: tteck (tteckster) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE source /dev/stdin <<< "$FUNCTIONS_FILE_PATH" color diff --git a/install/pocketbase-install.sh b/install/pocketbase-install.sh index 29bf8813b..3f0db3a92 100644 --- a/install/pocketbase-install.sh +++ b/install/pocketbase-install.sh @@ -3,7 +3,7 @@ # Copyright (c) 2021-2024 tteck # Author: tteck (tteckster) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE source /dev/stdin <<< "$FUNCTIONS_FILE_PATH" color diff --git a/install/podman-homeassistant-install.sh b/install/podman-homeassistant-install.sh index a82d852e0..77d9cf343 100644 --- a/install/podman-homeassistant-install.sh +++ b/install/podman-homeassistant-install.sh @@ -3,7 +3,7 @@ # Copyright (c) 2021-2024 tteck # Author: tteck (tteckster) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE source /dev/stdin <<< "$FUNCTIONS_FILE_PATH" color diff --git a/install/podman-install.sh b/install/podman-install.sh index 1ef11fddb..8cc75ecf4 100644 --- a/install/podman-install.sh +++ b/install/podman-install.sh @@ -3,7 +3,7 @@ # Copyright (c) 2021-2024 tteck # Author: tteck (tteckster) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE source /dev/stdin <<< "$FUNCTIONS_FILE_PATH" color diff --git a/install/postgresql-install.sh b/install/postgresql-install.sh index 4a7fcc728..b816e7720 100644 --- a/install/postgresql-install.sh +++ b/install/postgresql-install.sh @@ -3,7 +3,7 @@ # Copyright (c) 2021-2024 tteck # Author: tteck (tteckster) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE source /dev/stdin <<< "$FUNCTIONS_FILE_PATH" color diff --git a/install/prometheus-install.sh b/install/prometheus-install.sh index 33a0a37ed..169532587 100644 --- a/install/prometheus-install.sh +++ b/install/prometheus-install.sh @@ -3,7 +3,7 @@ # Copyright (c) 2021-2024 tteck # Author: tteck (tteckster) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE source /dev/stdin <<< "$FUNCTIONS_FILE_PATH" color diff --git a/install/prowlarr-install.sh b/install/prowlarr-install.sh index 39a56fac2..9b5d2d901 100644 --- a/install/prowlarr-install.sh +++ b/install/prowlarr-install.sh @@ -3,7 +3,7 @@ # Copyright (c) 2021-2024 tteck # Author: tteck (tteckster) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE source /dev/stdin <<< "$FUNCTIONS_FILE_PATH" color diff --git a/install/qbittorrent-install.sh b/install/qbittorrent-install.sh index a1c0064f8..6181abbad 100644 --- a/install/qbittorrent-install.sh +++ b/install/qbittorrent-install.sh @@ -3,7 +3,7 @@ # Copyright (c) 2021-2024 tteck # Author: tteck (tteckster) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE source /dev/stdin <<< "$FUNCTIONS_FILE_PATH" color diff --git a/install/rabbitmq-install.sh b/install/rabbitmq-install.sh index 5824c0f5e..905186141 100644 --- a/install/rabbitmq-install.sh +++ b/install/rabbitmq-install.sh @@ -4,7 +4,7 @@ # Author: tteck # Co-Author: MickLesk (Canbiz) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE # Source: https://www.rabbitmq.com/ source /dev/stdin <<<"$FUNCTIONS_FILE_PATH" diff --git a/install/radarr-install.sh b/install/radarr-install.sh index dc0742517..d1d947456 100644 --- a/install/radarr-install.sh +++ b/install/radarr-install.sh @@ -3,7 +3,7 @@ # Copyright (c) 2021-2024 tteck # Author: tteck (tteckster) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE source /dev/stdin <<< "$FUNCTIONS_FILE_PATH" color diff --git a/install/rdtclient-install.sh b/install/rdtclient-install.sh index 652998aa3..58fcc5566 100644 --- a/install/rdtclient-install.sh +++ b/install/rdtclient-install.sh @@ -3,7 +3,7 @@ # Copyright (c) 2021-2024 tteck # Author: tteck (tteckster) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE source /dev/stdin <<< "$FUNCTIONS_FILE_PATH" color diff --git a/install/readarr-install.sh b/install/readarr-install.sh index c3afc66d8..143d60e5e 100644 --- a/install/readarr-install.sh +++ b/install/readarr-install.sh @@ -3,7 +3,7 @@ # Copyright (c) 2021-2024 tteck # Author: tteck (tteckster) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE source /dev/stdin <<< "$FUNCTIONS_FILE_PATH" color diff --git a/install/readeck-install.sh b/install/readeck-install.sh index dbc1d5e8e..9b74231c1 100644 --- a/install/readeck-install.sh +++ b/install/readeck-install.sh @@ -3,7 +3,7 @@ # Copyright (c) 2021-2024 tteck # Author: tteck (tteckster) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE source /dev/stdin <<< "$FUNCTIONS_FILE_PATH" color diff --git a/install/redis-install.sh b/install/redis-install.sh index 488d787af..26ddec18d 100644 --- a/install/redis-install.sh +++ b/install/redis-install.sh @@ -3,7 +3,7 @@ # Copyright (c) 2021-2024 tteck # Author: tteck (tteckster) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE source /dev/stdin <<< "$FUNCTIONS_FILE_PATH" color diff --git a/install/rtsptoweb-install.sh b/install/rtsptoweb-install.sh index d8e5ecab8..8c4859346 100644 --- a/install/rtsptoweb-install.sh +++ b/install/rtsptoweb-install.sh @@ -3,7 +3,7 @@ # Copyright (c) 2021-2024 tteck # Author: tteck (tteckster) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE source /dev/stdin <<< "$FUNCTIONS_FILE_PATH" color diff --git a/install/runtipi-install.sh b/install/runtipi-install.sh index f39bb3af7..e553daea1 100644 --- a/install/runtipi-install.sh +++ b/install/runtipi-install.sh @@ -3,7 +3,7 @@ # Copyright (c) 2021-2024 tteck # Author: tteck (tteckster) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE source /dev/stdin <<< "$FUNCTIONS_FILE_PATH" color diff --git a/install/sabnzbd-install.sh b/install/sabnzbd-install.sh index 55f640355..9f6e71b19 100644 --- a/install/sabnzbd-install.sh +++ b/install/sabnzbd-install.sh @@ -3,7 +3,7 @@ # Copyright (c) 2021-2024 tteck # Author: tteck (tteckster) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE source /dev/stdin <<< "$FUNCTIONS_FILE_PATH" color diff --git a/install/scrypted-install.sh b/install/scrypted-install.sh index ad71ba925..7d1c04ff2 100644 --- a/install/scrypted-install.sh +++ b/install/scrypted-install.sh @@ -3,7 +3,7 @@ # Copyright (c) 2021-2024 tteck # Author: tteck (tteckster) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE source /dev/stdin <<< "$FUNCTIONS_FILE_PATH" color diff --git a/install/sftpgo-install.sh b/install/sftpgo-install.sh index 809ac74cc..9930904fc 100644 --- a/install/sftpgo-install.sh +++ b/install/sftpgo-install.sh @@ -3,7 +3,7 @@ # Copyright (c) 2021-2024 tteck # Author: tteck (tteckster) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE source /dev/stdin <<< "$FUNCTIONS_FILE_PATH" color diff --git a/install/shinobi-install.sh b/install/shinobi-install.sh index 825458353..ef5965d34 100644 --- a/install/shinobi-install.sh +++ b/install/shinobi-install.sh @@ -3,7 +3,7 @@ # Copyright (c) 2021-2024 tteck # Author: tteck (tteckster) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE source /dev/stdin <<< "$FUNCTIONS_FILE_PATH" color diff --git a/install/smokeping-install.sh b/install/smokeping-install.sh index 0df5c8421..20af44935 100644 --- a/install/smokeping-install.sh +++ b/install/smokeping-install.sh @@ -3,7 +3,7 @@ # Copyright (c) 2021-2024 tteck # Author: tteck (tteckster) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE source /dev/stdin <<< "$FUNCTIONS_FILE_PATH" color diff --git a/install/sonarr-install.sh b/install/sonarr-install.sh index 79060e790..e7a6bf382 100644 --- a/install/sonarr-install.sh +++ b/install/sonarr-install.sh @@ -3,7 +3,7 @@ # Copyright (c) 2021-2024 tteck # Author: tteck (tteckster) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE source /dev/stdin <<< "$FUNCTIONS_FILE_PATH" color diff --git a/install/spoolman-install.sh b/install/spoolman-install.sh index 79465dfbf..5f5d118a7 100644 --- a/install/spoolman-install.sh +++ b/install/spoolman-install.sh @@ -4,7 +4,7 @@ # Author: tteck # Co-Author: MickLesk (Canbiz) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE # Source: https://github.com/Donkie/Spoolman source /dev/stdin <<<"$FUNCTIONS_FILE_PATH" diff --git a/install/stirling-pdf-install.sh b/install/stirling-pdf-install.sh index 40accb5cb..6b4a8d51a 100644 --- a/install/stirling-pdf-install.sh +++ b/install/stirling-pdf-install.sh @@ -3,7 +3,7 @@ # Copyright (c) 2021-2024 tteck # Author: tteck (tteckster) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE source /dev/stdin <<< "$FUNCTIONS_FILE_PATH" color diff --git a/install/syncthing-install.sh b/install/syncthing-install.sh index 11b456738..221ac563f 100644 --- a/install/syncthing-install.sh +++ b/install/syncthing-install.sh @@ -3,7 +3,7 @@ # Copyright (c) 2021-2024 tteck # Author: tteck (tteckster) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE source /dev/stdin <<< "$FUNCTIONS_FILE_PATH" color diff --git a/install/tandoor-install.sh b/install/tandoor-install.sh index 53f88333b..459dd6b2e 100644 --- a/install/tandoor-install.sh +++ b/install/tandoor-install.sh @@ -4,7 +4,7 @@ # Author: tteck # Co-Author: MickLesk (Canbiz) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE source /dev/stdin <<< "$FUNCTIONS_FILE_PATH" color diff --git a/install/tasmoadmin-install.sh b/install/tasmoadmin-install.sh index f0302945b..680cc0843 100644 --- a/install/tasmoadmin-install.sh +++ b/install/tasmoadmin-install.sh @@ -3,7 +3,7 @@ # Copyright (c) 2021-2024 tteck # Author: tteck (tteckster) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE source /dev/stdin <<< "$FUNCTIONS_FILE_PATH" color diff --git a/install/tautulli-install.sh b/install/tautulli-install.sh index 234083908..0ba446c4c 100644 --- a/install/tautulli-install.sh +++ b/install/tautulli-install.sh @@ -3,7 +3,7 @@ # Copyright (c) 2021-2024 tteck # Author: tteck (tteckster) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE source /dev/stdin <<< "$FUNCTIONS_FILE_PATH" color diff --git a/install/tdarr-install.sh b/install/tdarr-install.sh index dccd94280..8447a6c4a 100644 --- a/install/tdarr-install.sh +++ b/install/tdarr-install.sh @@ -3,7 +3,7 @@ # Copyright (c) 2021-2024 tteck # Author: tteck (tteckster) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE source /dev/stdin <<< "$FUNCTIONS_FILE_PATH" color diff --git a/install/technitiumdns-install.sh b/install/technitiumdns-install.sh index 12ea927d4..8dc37ae1a 100644 --- a/install/technitiumdns-install.sh +++ b/install/technitiumdns-install.sh @@ -3,7 +3,7 @@ # Copyright (c) 2021-2024 tteck # Author: tteck (tteckster) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE source /dev/stdin <<< "$FUNCTIONS_FILE_PATH" color diff --git a/install/threadfin-install.sh b/install/threadfin-install.sh index 5fb8211d4..a4c08e014 100644 --- a/install/threadfin-install.sh +++ b/install/threadfin-install.sh @@ -3,7 +3,7 @@ # Copyright (c) 2021-2024 tteck # Author: tteck (tteckster) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE source /dev/stdin <<< "$FUNCTIONS_FILE_PATH" color diff --git a/install/tianji-install.sh b/install/tianji-install.sh index 3d476444f..26b05eb3e 100644 --- a/install/tianji-install.sh +++ b/install/tianji-install.sh @@ -4,7 +4,7 @@ # Author: tteck # Co-Author: MickLesk (Canbiz) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE # Source: https://github.com/msgbyte/tianji source /dev/stdin <<< "$FUNCTIONS_FILE_PATH" diff --git a/install/traccar-install.sh b/install/traccar-install.sh index f68d365e0..c6c65034c 100644 --- a/install/traccar-install.sh +++ b/install/traccar-install.sh @@ -3,7 +3,7 @@ # Copyright (c) 2021-2024 tteck # Author: tteck (tteckster) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE source /dev/stdin <<< "$FUNCTIONS_FILE_PATH" color diff --git a/install/traefik-install.sh b/install/traefik-install.sh index f418b68b2..7c98163da 100644 --- a/install/traefik-install.sh +++ b/install/traefik-install.sh @@ -3,7 +3,7 @@ # Copyright (c) 2021-2024 tteck # Author: tteck (tteckster) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE source /dev/stdin <<< "$FUNCTIONS_FILE_PATH" color diff --git a/install/transmission-install.sh b/install/transmission-install.sh index 2550bb002..b2e9e152b 100644 --- a/install/transmission-install.sh +++ b/install/transmission-install.sh @@ -3,7 +3,7 @@ # Copyright (c) 2021-2024 tteck # Author: tteck (tteckster) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE source /dev/stdin <<< "$FUNCTIONS_FILE_PATH" color diff --git a/install/trilium-install.sh b/install/trilium-install.sh index 9f8938ab5..e8c447915 100644 --- a/install/trilium-install.sh +++ b/install/trilium-install.sh @@ -3,7 +3,7 @@ # Copyright (c) 2021-2024 tteck # Author: tteck (tteckster) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE source /dev/stdin <<< "$FUNCTIONS_FILE_PATH" color diff --git a/install/ubuntu-install.sh b/install/ubuntu-install.sh index 841dd3f3e..cb2010c51 100644 --- a/install/ubuntu-install.sh +++ b/install/ubuntu-install.sh @@ -3,7 +3,7 @@ # Copyright (c) 2021-2024 tteck # Author: tteck (tteckster) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE source /dev/stdin <<< "$FUNCTIONS_FILE_PATH" color diff --git a/install/umami-install.sh b/install/umami-install.sh index 8fd103b28..f913128fb 100644 --- a/install/umami-install.sh +++ b/install/umami-install.sh @@ -3,7 +3,7 @@ # Copyright (c) 2021-2024 tteck # Author: tteck (tteckster) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE source /dev/stdin <<< "$FUNCTIONS_FILE_PATH" color diff --git a/install/umbrel-install.sh b/install/umbrel-install.sh index f0411f49e..519f1c7c6 100644 --- a/install/umbrel-install.sh +++ b/install/umbrel-install.sh @@ -3,7 +3,7 @@ # Copyright (c) 2021-2024 tteck # Author: tteck (tteckster) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE source /dev/stdin <<< "$FUNCTIONS_FILE_PATH" color diff --git a/install/unifi-install.sh b/install/unifi-install.sh index 5341ee583..90a712473 100644 --- a/install/unifi-install.sh +++ b/install/unifi-install.sh @@ -3,7 +3,7 @@ # Copyright (c) 2021-2024 tteck # Author: tteck (tteckster) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE source /dev/stdin <<< "$FUNCTIONS_FILE_PATH" color diff --git a/install/unmanic-install.sh b/install/unmanic-install.sh index 70b73dc82..8034abc7b 100644 --- a/install/unmanic-install.sh +++ b/install/unmanic-install.sh @@ -3,7 +3,7 @@ # Copyright (c) 2021-2024 tteck # Author: tteck (tteckster) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE source /dev/stdin <<< "$FUNCTIONS_FILE_PATH" color diff --git a/install/uptimekuma-install.sh b/install/uptimekuma-install.sh index 4a4291917..5571166d6 100644 --- a/install/uptimekuma-install.sh +++ b/install/uptimekuma-install.sh @@ -3,7 +3,7 @@ # Copyright (c) 2021-2024 tteck # Author: tteck (tteckster) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE source /dev/stdin <<< "$FUNCTIONS_FILE_PATH" color diff --git a/install/vaultwarden-install.sh b/install/vaultwarden-install.sh index c76297e3a..e5703f929 100644 --- a/install/vaultwarden-install.sh +++ b/install/vaultwarden-install.sh @@ -3,7 +3,7 @@ # Copyright (c) 2021-2024 tteck # Author: tteck (tteckster) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE source /dev/stdin <<<"$FUNCTIONS_FILE_PATH" color diff --git a/install/wallos-install.sh b/install/wallos-install.sh index 0407b05fb..c1f52295f 100644 --- a/install/wallos-install.sh +++ b/install/wallos-install.sh @@ -4,7 +4,7 @@ # Author: tteck # Co-Author: MickLesk (Canbiz) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE # Source: https://github.com/ellite/wallos source /dev/stdin <<< "$FUNCTIONS_FILE_PATH" diff --git a/install/wastebin-install.sh b/install/wastebin-install.sh index b9faec802..12e255a5c 100644 --- a/install/wastebin-install.sh +++ b/install/wastebin-install.sh @@ -4,7 +4,7 @@ # Author: tteck # Co-Author: MickLesk (Canbiz) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE # Source: https://github.com/matze/wastebin source /dev/stdin <<< "$FUNCTIONS_FILE_PATH" diff --git a/install/watchyourlan-install.sh b/install/watchyourlan-install.sh index c54342c5d..e93bfa2a5 100644 --- a/install/watchyourlan-install.sh +++ b/install/watchyourlan-install.sh @@ -3,7 +3,7 @@ # Copyright (c) 2021-2024 tteck # Author: tteck (tteckster) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE source /dev/stdin <<< "$FUNCTIONS_FILE_PATH" color diff --git a/install/whisparr-install.sh b/install/whisparr-install.sh index 16d208930..3401374fc 100644 --- a/install/whisparr-install.sh +++ b/install/whisparr-install.sh @@ -3,7 +3,7 @@ # Copyright (c) 2021-2024 tteck # Author: tteck (tteckster) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE source /dev/stdin <<< "$FUNCTIONS_FILE_PATH" color diff --git a/install/whoogle-install.sh b/install/whoogle-install.sh index f3516d322..c2f80be7e 100644 --- a/install/whoogle-install.sh +++ b/install/whoogle-install.sh @@ -3,7 +3,7 @@ # Copyright (c) 2021-2024 tteck # Author: tteck (tteckster) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE source /dev/stdin <<< "$FUNCTIONS_FILE_PATH" color diff --git a/install/wikijs-install.sh b/install/wikijs-install.sh index fe95122ed..f572752e2 100644 --- a/install/wikijs-install.sh +++ b/install/wikijs-install.sh @@ -3,7 +3,7 @@ # Copyright (c) 2021-2024 tteck # Author: tteck (tteckster) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE source /dev/stdin <<< "$FUNCTIONS_FILE_PATH" color diff --git a/install/wireguard-install.sh b/install/wireguard-install.sh index 1b12dfbf5..b5704e1e9 100644 --- a/install/wireguard-install.sh +++ b/install/wireguard-install.sh @@ -3,7 +3,7 @@ # Copyright (c) 2021-2024 tteck # Author: tteck (tteckster) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE source /dev/stdin <<< "$FUNCTIONS_FILE_PATH" color diff --git a/install/yunohost-install.sh b/install/yunohost-install.sh index 75cdc55c4..3012db34e 100644 --- a/install/yunohost-install.sh +++ b/install/yunohost-install.sh @@ -3,7 +3,7 @@ # Copyright (c) 2021-2024 tteck # Author: tteck (tteckster) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE source /dev/stdin <<< "$FUNCTIONS_FILE_PATH" color diff --git a/install/zabbix-install.sh b/install/zabbix-install.sh index c7123dea9..33cf2d59b 100644 --- a/install/zabbix-install.sh +++ b/install/zabbix-install.sh @@ -3,7 +3,7 @@ # Copyright (c) 2021-2024 tteck # Author: tteck (tteckster) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE source /dev/stdin <<< "$FUNCTIONS_FILE_PATH" color diff --git a/install/zigbee2mqtt-install.sh b/install/zigbee2mqtt-install.sh index 55acdcbcf..f6b8e97c5 100644 --- a/install/zigbee2mqtt-install.sh +++ b/install/zigbee2mqtt-install.sh @@ -3,7 +3,7 @@ # Copyright (c) 2021-2024 tteck # Author: tteck (tteckster) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE source /dev/stdin <<< "$FUNCTIONS_FILE_PATH" color diff --git a/install/zipline-install.sh b/install/zipline-install.sh index 2c47d0351..f7f5c6a67 100644 --- a/install/zipline-install.sh +++ b/install/zipline-install.sh @@ -4,7 +4,7 @@ # Author: tteck # Co-Author: MickLesk (Canbiz) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE # Source: https://github.com/diced/zipline source /dev/stdin <<< "$FUNCTIONS_FILE_PATH" diff --git a/install/zoraxy-install.sh b/install/zoraxy-install.sh index b0f7d6c8e..5d7dd9b79 100644 --- a/install/zoraxy-install.sh +++ b/install/zoraxy-install.sh @@ -3,7 +3,7 @@ # Copyright (c) 2021-2024 tteck # Author: tteck (tteckster) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE source /dev/stdin <<< "$FUNCTIONS_FILE_PATH" color diff --git a/install/zwave-js-ui-install.sh b/install/zwave-js-ui-install.sh index c1966ed4c..02036ea0b 100644 --- a/install/zwave-js-ui-install.sh +++ b/install/zwave-js-ui-install.sh @@ -3,7 +3,7 @@ # Copyright (c) 2021-2024 tteck # Author: tteck (tteckster) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE source /dev/stdin <<< "$FUNCTIONS_FILE_PATH" color diff --git a/misc/add-netbird-lxc.sh b/misc/add-netbird-lxc.sh index 054271060..098e7692f 100644 --- a/misc/add-netbird-lxc.sh +++ b/misc/add-netbird-lxc.sh @@ -3,7 +3,7 @@ # Copyright (c) 2021-2024 tteck # Author: tteck (tteckster) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE function header_info { clear diff --git a/misc/add-tailscale-lxc.sh b/misc/add-tailscale-lxc.sh index 133073333..73a944974 100644 --- a/misc/add-tailscale-lxc.sh +++ b/misc/add-tailscale-lxc.sh @@ -3,7 +3,7 @@ # Copyright (c) 2021-2024 tteck # Author: tteck (tteckster) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE function header_info { clear diff --git a/misc/all-templates.sh b/misc/all-templates.sh index ab430e7c8..3581768df 100644 --- a/misc/all-templates.sh +++ b/misc/all-templates.sh @@ -2,7 +2,7 @@ # Copyright (c) 2021-2024 tteck # Author: tteck (tteckster) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE function header_info { clear diff --git a/misc/alpine-install.func b/misc/alpine-install.func index 3820d637a..175b8ca76 100644 --- a/misc/alpine-install.func +++ b/misc/alpine-install.func @@ -103,7 +103,7 @@ update_os() { motd_ssh() { echo "export TERM='xterm-256color'" >>/root/.bashrc - echo -e "$APPLICATION LXC provided by https://tteck.github.io/Proxmox/\n" >/etc/motd + echo -e "$APPLICATION LXC provided by https://Helper-Scripts.com/\n" >/etc/motd if [[ "${SSH_ROOT}" == "yes" ]]; then $STD rc-update add sshd sed -i "s/#PermitRootLogin prohibit-password/PermitRootLogin yes/g" /etc/ssh/sshd_config diff --git a/misc/build.func b/misc/build.func index b838ef1ad..ea73f0b45 100644 --- a/misc/build.func +++ b/misc/build.func @@ -640,7 +640,7 @@ EOF' # This function sets the description of the container. description() { IP=$(pct exec "$CTID" ip a s dev eth0 | awk '/inet / {print $2}' | cut -d/ -f1) - pct set "$CTID" -description "
+ pct set "$CTID" -description "
# ${APP} LXC diff --git a/misc/clean-lxcs.sh b/misc/clean-lxcs.sh index 17f4fe743..129071f58 100644 --- a/misc/clean-lxcs.sh +++ b/misc/clean-lxcs.sh @@ -3,7 +3,7 @@ # Copyright (c) 2021-2024 tteck # Author: tteck (tteckster) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE function header_info() { clear @@ -40,7 +40,7 @@ function clean_container() { header_info name=$(pct exec "$container" hostname) echo -e "${BL}[Info]${GN} Cleaning ${name} ${CL} \n" - pct exec $container -- bash -c "apt-get -y --purge autoremove && apt-get -y autoclean && bash <(curl -fsSL https://github.com/tteck/Proxmox/raw/main/misc/clean.sh) && rm -rf /var/lib/apt/lists/* && apt-get update" + pct exec $container -- bash -c "apt-get -y --purge autoremove && apt-get -y autoclean && bash <(curl -fsSL https://github.com/community-scripts/ProxmoxVE/raw/main/misc/clean.sh) && rm -rf /var/lib/apt/lists/* && apt-get update" } for container in $(pct list | awk '{if(NR>1) print $1}'); do if [[ " ${excluded_containers[@]} " =~ " $container " ]]; then diff --git a/misc/clean.sh b/misc/clean.sh index 4f6923664..82a8ded8e 100644 --- a/misc/clean.sh +++ b/misc/clean.sh @@ -3,7 +3,7 @@ # Copyright (c) 2021-2024 tteck # Author: tteck (tteckster) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE function header_info() { clear diff --git a/misc/code-server.sh b/misc/code-server.sh index 0eb46dcfb..5f2541347 100644 --- a/misc/code-server.sh +++ b/misc/code-server.sh @@ -3,7 +3,7 @@ # Copyright (c) 2021-2024 tteck # Author: tteck (tteckster) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE function header_info { cat <<"EOF" diff --git a/misc/container-restore-from-backup.sh b/misc/container-restore-from-backup.sh index c491e18a1..ebd222902 100644 --- a/misc/container-restore-from-backup.sh +++ b/misc/container-restore-from-backup.sh @@ -3,7 +3,7 @@ # Copyright (c) 2021-2024 tteck # Author: tteck (tteckster) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE clear if command -v pveversion >/dev/null 2>&1; then echo -e "⚠️ Can't Run from the Proxmox Shell"; exit; fi diff --git a/misc/copy-data/README.md b/misc/copy-data/README.md index e24677c36..3257c80f2 100644 --- a/misc/copy-data/README.md +++ b/misc/copy-data/README.md @@ -2,45 +2,45 @@
To copy data from Home Assistant Container to Home Assistant Container
``` -bash -c "$(wget -qLO - https://github.com/tteck/Proxmox/raw/main/misc/copy-data/home-assistant-container-copy-data-home-assistant-container.sh)" +bash -c "$(wget -qLO - https://github.com/community-scripts/ProxmoxVE/raw/main/misc/copy-data/home-assistant-container-copy-data-home-assistant-container.sh)" ```
To copy data from Home Assistant Container to Home Assistant Core
``` -bash -c "$(wget -qLO - https://github.com/tteck/Proxmox/raw/main/misc/copy-data/home-assistant-container-copy-data-home-assistant-core.sh)" +bash -c "$(wget -qLO - https://github.com/community-scripts/ProxmoxVE/raw/main/misc/copy-data/home-assistant-container-copy-data-home-assistant-core.sh)" ```
To copy data from Home Assistant Container to Podman Home Assistant
``` -bash -c "$(wget -qLO - https://github.com/tteck/Proxmox/raw/main/misc/copy-data/home-assistant-container-copy-data-podman-home-assistant.sh)" +bash -c "$(wget -qLO - https://github.com/community-scripts/ProxmoxVE/raw/main/misc/copy-data/home-assistant-container-copy-data-podman-home-assistant.sh)" ```
To copy data from Podman Home Assistant to Home Assistant Container
``` -bash -c "$(wget -qLO - https://github.com/tteck/Proxmox/raw/main/misc/copy-data/podman-home-assistant-copy-data-home-assistant-container.sh)" +bash -c "$(wget -qLO - https://github.com/community-scripts/ProxmoxVE/raw/main/misc/copy-data/podman-home-assistant-copy-data-home-assistant-container.sh)" ```
To copy data from Home Assistant Core to Home Assistant Container
``` -bash -c "$(wget -qLO - https://github.com/tteck/Proxmox/raw/main/misc/copy-data/home-assistant-core-copy-data-home-assistant-container.sh)" +bash -c "$(wget -qLO - https://github.com/community-scripts/ProxmoxVE/raw/main/misc/copy-data/home-assistant-core-copy-data-home-assistant-container.sh)" ```
To copy data from Home Assistant Core to Home Assistant Core
``` -bash -c "$(wget -qLO - https://github.com/tteck/Proxmox/raw/main/misc/copy-data/home-assistant-core-copy-data-home-assistant-core.sh)" +bash -c "$(wget -qLO - https://github.com/community-scripts/ProxmoxVE/raw/main/misc/copy-data/home-assistant-core-copy-data-home-assistant-core.sh)" ```
To copy data from Plex to Plex
``` -bash -c "$(wget -qLO - https://github.com/tteck/Proxmox/raw/main/misc/copy-data/plex-copy-data-plex.sh)" +bash -c "$(wget -qLO - https://github.com/community-scripts/ProxmoxVE/raw/main/misc/copy-data/plex-copy-data-plex.sh)" ```
To copy data from Zigbee2MQTT to Zigbee2MQTT
``` -bash -c "$(wget -qLO - https://github.com/tteck/Proxmox/raw/main/misc/copy-data/z2m-copy-data-z2m.sh)" +bash -c "$(wget -qLO - https://github.com/community-scripts/ProxmoxVE/raw/main/misc/copy-data/z2m-copy-data-z2m.sh)" ```
To copy data from Zwavejs2MQTT to Zwave JS UI
``` -bash -c "$(wget -qLO - https://github.com/tteck/Proxmox/raw/main/misc/copy-data/zwavejs2mqtt-copy-data-zwavejsui.sh)" +bash -c "$(wget -qLO - https://github.com/community-scripts/ProxmoxVE/raw/main/misc/copy-data/zwavejs2mqtt-copy-data-zwavejsui.sh)" ``` diff --git a/misc/copy-data/home-assistant-container-copy-data-home-assistant-container.sh b/misc/copy-data/home-assistant-container-copy-data-home-assistant-container.sh index 7b5fe050b..02060ae33 100644 --- a/misc/copy-data/home-assistant-container-copy-data-home-assistant-container.sh +++ b/misc/copy-data/home-assistant-container-copy-data-home-assistant-container.sh @@ -3,7 +3,7 @@ # Copyright (c) 2021-2024 tteck # Author: tteck (tteckster) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE # Use to copy all data from one Home Assistant LXC to another # run from the Proxmox Shell @@ -125,4 +125,4 @@ info "Successfully Transferred Data." # Use to copy all data from one Home Assistant LXC to another # run from the Proxmox Shell -# bash -c "$(wget -qLO - https://raw.githubusercontent.com/tteck/Proxmox/main/misc/copy-data/home-assistant-container-copy-data-home-assistant-container.sh)" +# bash -c "$(wget -qLO - https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/copy-data/home-assistant-container-copy-data-home-assistant-container.sh)" diff --git a/misc/copy-data/home-assistant-container-copy-data-home-assistant-core.sh b/misc/copy-data/home-assistant-container-copy-data-home-assistant-core.sh index 36af3259a..8ca7b409f 100644 --- a/misc/copy-data/home-assistant-container-copy-data-home-assistant-core.sh +++ b/misc/copy-data/home-assistant-container-copy-data-home-assistant-core.sh @@ -3,7 +3,7 @@ # Copyright (c) 2021-2024 tteck # Author: tteck (tteckster) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE clear if ! command -v pveversion >/dev/null 2>&1; then echo -e "⚠️ Run from the Proxmox Shell"; exit; fi @@ -121,4 +121,4 @@ info "Successfully Transferred Data." # Use to copy all data from a Home Assistant Container LXC to a Home Assistant Core LXC # run from the Proxmox Shell -# bash -c "$(wget -qLO - https://raw.githubusercontent.com/tteck/Proxmox/main/misc/copy-data/home-assistant-container-copy-data-home-assistant-core.sh)" +# bash -c "$(wget -qLO - https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/copy-data/home-assistant-container-copy-data-home-assistant-core.sh)" diff --git a/misc/copy-data/home-assistant-container-copy-data-podman-home-assistant.sh b/misc/copy-data/home-assistant-container-copy-data-podman-home-assistant.sh index 2423f8963..cc3482842 100644 --- a/misc/copy-data/home-assistant-container-copy-data-podman-home-assistant.sh +++ b/misc/copy-data/home-assistant-container-copy-data-podman-home-assistant.sh @@ -3,7 +3,7 @@ # Copyright (c) 2021-2024 tteck # Author: tteck (tteckster) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE # Use to copy all data from a Home Assistant LXC to a Podman Home Assistant LXC. # run from the Proxmox Shell @@ -126,4 +126,4 @@ info "Successfully Transferred Data." # Use to copy all data from a Home Assistant LXC to a Podman Home Assistant LXC # run from the Proxmox Shell -# bash -c "$(wget -qLO - https://raw.githubusercontent.com/tteck/Proxmox/main/misc/copy-data/home-assistant-container-copy-data-podman-home-assistant.sh)" +# bash -c "$(wget -qLO - https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/copy-data/home-assistant-container-copy-data-podman-home-assistant.sh)" diff --git a/misc/copy-data/home-assistant-core-copy-data-home-assistant-container.sh b/misc/copy-data/home-assistant-core-copy-data-home-assistant-container.sh index 387450fcf..bdf8e55b9 100644 --- a/misc/copy-data/home-assistant-core-copy-data-home-assistant-container.sh +++ b/misc/copy-data/home-assistant-core-copy-data-home-assistant-container.sh @@ -3,7 +3,7 @@ # Copyright (c) 2021-2024 tteck # Author: tteck (tteckster) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE clear if ! command -v pveversion >/dev/null 2>&1; then echo -e "⚠️ Run from the Proxmox Shell"; exit; fi @@ -121,4 +121,4 @@ info "Successfully Transferred Data." # Use to copy all data from a Home Assistant Core LXC to a Home Assistant Container LXC # run from the Proxmox Shell -# bash -c "$(wget -qLO - https://raw.githubusercontent.com/tteck/Proxmox/main/misc/copy-data/home-assistant-core-copy-data-home-assistant-container.sh)" +# bash -c "$(wget -qLO - https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/copy-data/home-assistant-core-copy-data-home-assistant-container.sh)" diff --git a/misc/copy-data/home-assistant-core-copy-data-home-assistant-core.sh b/misc/copy-data/home-assistant-core-copy-data-home-assistant-core.sh index 68c388ed0..bca88f362 100644 --- a/misc/copy-data/home-assistant-core-copy-data-home-assistant-core.sh +++ b/misc/copy-data/home-assistant-core-copy-data-home-assistant-core.sh @@ -3,7 +3,7 @@ # Copyright (c) 2021-2024 tteck # Author: tteck (tteckster) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE clear if ! command -v pveversion >/dev/null 2>&1; then echo -e "⚠️ Run from the Proxmox Shell"; exit; fi @@ -120,4 +120,4 @@ info "Successfully Transferred Data." # Use to copy all data from a Home Assistant Core LXC to a Home Assistant Container LXC # run from the Proxmox Shell -# bash -c "$(wget -qLO - https://raw.githubusercontent.com/tteck/Proxmox/main/misc/copy-data/home-assistant-core-copy-data-home-assistant-core.sh)" +# bash -c "$(wget -qLO - https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/copy-data/home-assistant-core-copy-data-home-assistant-core.sh)" diff --git a/misc/copy-data/plex-copy-data-plex.sh b/misc/copy-data/plex-copy-data-plex.sh index dbf80f184..4ada54d54 100644 --- a/misc/copy-data/plex-copy-data-plex.sh +++ b/misc/copy-data/plex-copy-data-plex.sh @@ -3,7 +3,7 @@ # Copyright (c) 2021-2024 tteck # Author: tteck (tteckster) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE # Use to copy all data from one Plex Media Server LXC to another # run from the Proxmox Shell @@ -125,4 +125,4 @@ info "Successfully Transferred Data." # Use to copy all data from one Plex Media Server LXC to another # run from the Proxmox Shell -# bash -c "$(wget -qLO - https://raw.githubusercontent.com/tteck/Proxmox/main/misc/copy-data/plex-copy-data-plex.sh)" +# bash -c "$(wget -qLO - https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/copy-data/plex-copy-data-plex.sh)" diff --git a/misc/copy-data/podman-home-assistant-copy-data-home-assistant-container.sh b/misc/copy-data/podman-home-assistant-copy-data-home-assistant-container.sh index ef65e9e6e..56e9aabdd 100644 --- a/misc/copy-data/podman-home-assistant-copy-data-home-assistant-container.sh +++ b/misc/copy-data/podman-home-assistant-copy-data-home-assistant-container.sh @@ -3,7 +3,7 @@ # Copyright (c) 2021-2024 tteck # Author: tteck (tteckster) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE # Use to copy all data from a Podman Home Assistant LXC to a Docker Home Assistant LXC. # run from the Proxmox Shell @@ -126,4 +126,4 @@ info "Successfully Transferred Data." # Use to copy all data from a Podman Home Assistant LXC to a Docker Home Assistant LXC. # run from the Proxmox Shell -# bash -c "$(wget -qLO - https://raw.githubusercontent.com/tteck/Proxmox/main/misc/copy-data/podman-home-assistant-copy-data-home-assistant-container.sh)" +# bash -c "$(wget -qLO - https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/copy-data/podman-home-assistant-copy-data-home-assistant-container.sh)" diff --git a/misc/copy-data/z2m-copy-data-z2m.sh b/misc/copy-data/z2m-copy-data-z2m.sh index 6e804de58..35b8a3397 100644 --- a/misc/copy-data/z2m-copy-data-z2m.sh +++ b/misc/copy-data/z2m-copy-data-z2m.sh @@ -3,7 +3,7 @@ # Copyright (c) 2021-2024 tteck # Author: tteck (tteckster) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE # Use to copy all data from one Zigbee2MQTT LXC to another # run from the Proxmox Shell @@ -125,4 +125,4 @@ info "Successfully Transferred Data." # Use to copy all data from one Zigbee2MQTT LXC to another # run from the Proxmox Shell -# bash -c "$(wget -qLO - https://raw.githubusercontent.com/tteck/Proxmox/main/misc/copy-data/z2m-copy-data-z2m.sh)" +# bash -c "$(wget -qLO - https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/copy-data/z2m-copy-data-z2m.sh)" diff --git a/misc/copy-data/zwavejs2mqtt-copy-data-zwavejsui.sh b/misc/copy-data/zwavejs2mqtt-copy-data-zwavejsui.sh index 8d5529820..e42adf7d6 100644 --- a/misc/copy-data/zwavejs2mqtt-copy-data-zwavejsui.sh +++ b/misc/copy-data/zwavejs2mqtt-copy-data-zwavejsui.sh @@ -3,7 +3,7 @@ # Copyright (c) 2021-2024 tteck # Author: tteck (tteckster) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE # Use to copy all data from a Zwavejs2MQTT LXC to a Z-wave JS UI LXC # run from the Proxmox Shell @@ -127,4 +127,4 @@ info "Successfully Transferred Data." # Use to copy all data from a Zwavejs2MQTT LXC to a Z-wave JS UI LXC # run from the Proxmox Shell -# bash -c "$(wget -qLO - https://raw.githubusercontent.com/tteck/Proxmox/main/misc/copy-data/zwavejs2mqtt-copy-data-zwavejsui.sh)" +# bash -c "$(wget -qLO - https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/copy-data/zwavejs2mqtt-copy-data-zwavejsui.sh)" diff --git a/misc/core-restore-from-backup.sh b/misc/core-restore-from-backup.sh index 885eda9c5..fd7fab0e0 100644 --- a/misc/core-restore-from-backup.sh +++ b/misc/core-restore-from-backup.sh @@ -3,7 +3,7 @@ # Copyright (c) 2021-2024 tteck # Author: tteck (tteckster) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE clear if command -v pveversion >/dev/null 2>&1; then echo -e "⚠️ Can't Run from the Proxmox Shell"; exit; fi diff --git a/misc/cron-update-lxcs.sh b/misc/cron-update-lxcs.sh index 97fb4e6cf..04bbfb11c 100644 --- a/misc/cron-update-lxcs.sh +++ b/misc/cron-update-lxcs.sh @@ -3,8 +3,8 @@ # Copyright (c) 2021-2024 tteck # Author: tteck (tteckster) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE -# bash -c "$(wget -qLO - https://github.com/tteck/Proxmox/raw/main/misc/cron-update-lxcs.sh)" +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE +# bash -c "$(wget -qLO - https://github.com/community-scripts/ProxmoxVE/raw/main/misc/cron-update-lxcs.sh)" clear cat <<"EOF" @@ -25,13 +25,13 @@ add() { *) echo "Please answer yes or no." ;; esac done - sh -c '(crontab -l -u root 2>/dev/null; echo "0 0 * * 0 PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin /bin/bash -c \"\$(wget -qLO - https://github.com/tteck/Proxmox/raw/main/misc/update-lxcs-cron.sh)\" >>/var/log/update-lxcs-cron.log 2>/dev/null") | crontab -u root -' + sh -c '(crontab -l -u root 2>/dev/null; echo "0 0 * * 0 PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin /bin/bash -c \"\$(wget -qLO - https://github.com/community-scripts/ProxmoxVE/raw/main/misc/update-lxcs-cron.sh)\" >>/var/log/update-lxcs-cron.log 2>/dev/null") | crontab -u root -' clear echo -e "\n To view Cron Update LXCs logs: cat /var/log/update-lxcs-cron.log" } remove() { - (crontab -l | grep -v "github.com/tteck/Proxmox/raw/main/misc/update-lxcs-cron.sh") | crontab - + (crontab -l | grep -v "github.com/community-scripts/ProxmoxVE/raw/main/misc/update-lxcs-cron.sh") | crontab - rm -rf /var/log/update-lxcs-cron.log echo "Removed Crontab Schedule from Proxmox VE" } diff --git a/misc/crowdsec.sh b/misc/crowdsec.sh index 12a20f043..07577e220 100644 --- a/misc/crowdsec.sh +++ b/misc/crowdsec.sh @@ -3,7 +3,7 @@ # Copyright (c) 2021-2024 tteck # Author: tteck (tteckster) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE YW=$(echo "\033[33m") BL=$(echo "\033[36m") diff --git a/misc/filebrowser.sh b/misc/filebrowser.sh index f831ccce7..d8912b7ff 100644 --- a/misc/filebrowser.sh +++ b/misc/filebrowser.sh @@ -3,7 +3,7 @@ # Copyright (c) 2021-2024 tteck # Author: tteck (tteckster) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE function header_info { clear diff --git a/misc/frigate-support.sh b/misc/frigate-support.sh index 8dbdc5635..981ba3a96 100644 --- a/misc/frigate-support.sh +++ b/misc/frigate-support.sh @@ -3,7 +3,7 @@ # Copyright (c) 2021-2024 tteck # Author: tteck (tteckster) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE function header_info { clear @@ -89,5 +89,5 @@ EOF echo -e "\e[1;33m \nFinished....Reboot ${CTID} LXC to apply the changes.\n \e[0m" # In the Proxmox web shell run -# bash -c "$(wget -qLO - https://github.com/tteck/Proxmox/raw/main/misc/frigate-support.sh)" +# bash -c "$(wget -qLO - https://github.com/community-scripts/ProxmoxVE/raw/main/misc/frigate-support.sh)" # Reboot the LXC to apply the changes \ No newline at end of file diff --git a/misc/fstrim.sh b/misc/fstrim.sh index 5c0e2ae66..de604bdd5 100644 --- a/misc/fstrim.sh +++ b/misc/fstrim.sh @@ -3,7 +3,7 @@ # Copyright (c) 2021-2024 tteck # Author: tteck (tteckster) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE function header_info() { clear diff --git a/misc/glances.sh b/misc/glances.sh index 318409776..51cf5d6bf 100644 --- a/misc/glances.sh +++ b/misc/glances.sh @@ -3,7 +3,7 @@ # Copyright (c) 2021-2024 tteck # Author: tteck (tteckster) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE function header_info { clear diff --git a/misc/host-backup.sh b/misc/host-backup.sh index 31b67bfa8..f9405b1ee 100644 --- a/misc/host-backup.sh +++ b/misc/host-backup.sh @@ -3,7 +3,7 @@ # Copyright (c) 2021-2024 tteck # Author: tteck (tteckster) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE function header_info { clear diff --git a/misc/hw-acceleration.sh b/misc/hw-acceleration.sh index 19a0b1409..97ca7de97 100644 --- a/misc/hw-acceleration.sh +++ b/misc/hw-acceleration.sh @@ -3,9 +3,9 @@ # Copyright (c) 2021-2024 tteck # Author: tteck (tteckster) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE # Execute within the Proxmox shell -# bash -c "$(wget -qLO - https://github.com/tteck/Proxmox/raw/main/misc/hw-acceleration.sh)" +# bash -c "$(wget -qLO - https://github.com/community-scripts/ProxmoxVE/raw/main/misc/hw-acceleration.sh)" set -e function header_info { diff --git a/misc/install.func b/misc/install.func index 4bdc932cb..2a22e2ff9 100644 --- a/misc/install.func +++ b/misc/install.func @@ -198,6 +198,6 @@ EOF systemctl restart $(basename $(dirname $GETTY_OVERRIDE) | sed 's/\.d//') msg_ok "Customized Container" fi - echo "bash -c \"\$(wget -qLO - https://github.com/tteck/Proxmox/raw/main/ct/${app}.sh)\"" >/usr/bin/update + echo "bash -c \"\$(wget -qLO - https://github.com/community-scripts/ProxmoxVE/raw/main/ct/${app}.sh)\"" >/usr/bin/update chmod +x /usr/bin/update } diff --git a/misc/kernel-clean.sh b/misc/kernel-clean.sh index ca31cc2f9..adee9d3fa 100644 --- a/misc/kernel-clean.sh +++ b/misc/kernel-clean.sh @@ -3,7 +3,7 @@ # Copyright (c) 2021-2024 tteck # Author: tteck (tteckster) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE function header_info { clear diff --git a/misc/kernel-pin.sh b/misc/kernel-pin.sh index a2a15edee..cd4891c95 100644 --- a/misc/kernel-pin.sh +++ b/misc/kernel-pin.sh @@ -3,7 +3,7 @@ # Copyright (c) 2021-2024 tteck # Author: tteck (tteckster) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE function header_info { clear diff --git a/misc/microcode.sh b/misc/microcode.sh index 44ad9b54c..232bcd48e 100644 --- a/misc/microcode.sh +++ b/misc/microcode.sh @@ -2,7 +2,7 @@ # Copyright (c) 2021-2024 tteck # Author: tteck (tteckster) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE function header_info { clear diff --git a/misc/monitor-all.sh b/misc/monitor-all.sh index 79bf0df00..a624dbd6c 100644 --- a/misc/monitor-all.sh +++ b/misc/monitor-all.sh @@ -3,7 +3,7 @@ # Copyright (c) 2021-2024 tteck # Author: tteck (tteckster) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE clear cat <<"EOF" diff --git a/misc/netdata.sh b/misc/netdata.sh index 885cd42d6..9c3ee42fa 100644 --- a/misc/netdata.sh +++ b/misc/netdata.sh @@ -3,7 +3,7 @@ # Copyright (c) 2021-2024 tteck # Author: tteck (tteckster) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE function header_info { clear diff --git a/misc/olivetin.sh b/misc/olivetin.sh index f3909ad99..d3e0adeee 100644 --- a/misc/olivetin.sh +++ b/misc/olivetin.sh @@ -3,7 +3,7 @@ # Copyright (c) 2021-2024 tteck # Author: tteck (tteckster) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE function header_info { clear diff --git a/misc/pbs3-upgrade.sh b/misc/pbs3-upgrade.sh index 4565811e0..789c07edb 100644 --- a/misc/pbs3-upgrade.sh +++ b/misc/pbs3-upgrade.sh @@ -3,7 +3,7 @@ # Copyright (c) 2021-2024 tteck # Author: tteck (tteckster) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE header_info() { clear diff --git a/misc/post-pbs-install.sh b/misc/post-pbs-install.sh index 550626be3..31a15b7c1 100644 --- a/misc/post-pbs-install.sh +++ b/misc/post-pbs-install.sh @@ -3,7 +3,7 @@ # Copyright (c) 2021-2024 tteck # Author: tteck (tteckster) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE header_info() { clear diff --git a/misc/post-pve-install.sh b/misc/post-pve-install.sh index f142b8509..123929f24 100644 --- a/misc/post-pve-install.sh +++ b/misc/post-pve-install.sh @@ -3,7 +3,7 @@ # Copyright (c) 2021-2024 tteck # Author: tteck (tteckster) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE header_info() { clear diff --git a/misc/pve8-upgrade.sh b/misc/pve8-upgrade.sh index 360b339b1..a530ee548 100644 --- a/misc/pve8-upgrade.sh +++ b/misc/pve8-upgrade.sh @@ -3,7 +3,7 @@ # Copyright (c) 2021-2024 tteck # Author: tteck (tteckster) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE header_info() { clear diff --git a/misc/pyenv.sh b/misc/pyenv.sh index 0a548e785..d8e36b0b2 100644 --- a/misc/pyenv.sh +++ b/misc/pyenv.sh @@ -3,7 +3,7 @@ # Copyright (c) 2021-2024 tteck # Author: tteck (tteckster) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE set -e YW=$(echo "\033[33m") @@ -113,7 +113,7 @@ cat </srv/esphome/start.sh # Copyright (c) 2021-2024 tteck # Author: tteck (tteckster) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE source /srv/esphome/bin/activate esphome dashboard /srv/esphome/ diff --git a/misc/scaling-governor.sh b/misc/scaling-governor.sh index 3523ab2c2..646206e40 100644 --- a/misc/scaling-governor.sh +++ b/misc/scaling-governor.sh @@ -3,7 +3,7 @@ # Copyright (c) 2021-2024 tteck # Author: tteck (tteckster) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE set -e header_info() { clear diff --git a/misc/update-lxcs-cron.sh b/misc/update-lxcs-cron.sh index ec397b5b8..d3ddee7ca 100644 --- a/misc/update-lxcs-cron.sh +++ b/misc/update-lxcs-cron.sh @@ -3,7 +3,7 @@ # Copyright (c) 2021-2024 tteck # Author: tteck (tteckster) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE echo -e "\n $(date)" excluded_containers=("$@") diff --git a/misc/update-lxcs.sh b/misc/update-lxcs.sh index c4ea80f92..36892a9c7 100644 --- a/misc/update-lxcs.sh +++ b/misc/update-lxcs.sh @@ -3,7 +3,7 @@ # Copyright (c) 2021-2024 tteck # Author: tteck (tteckster) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE function header_info { clear diff --git a/misc/usb-passthrough.sh b/misc/usb-passthrough.sh index 25ceb3e67..b8cb42cf4 100644 --- a/misc/usb-passthrough.sh +++ b/misc/usb-passthrough.sh @@ -3,7 +3,7 @@ # Copyright (c) 2021-2024 tteck # Author: tteck (tteckster) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE echo -e "\e[1;33m This script will allow USB passthrough to a PRIVILEGED LXC Container ONLY\e[0m" while true; do diff --git a/misc/webmin.sh b/misc/webmin.sh index a7188b01f..260e806c6 100644 --- a/misc/webmin.sh +++ b/misc/webmin.sh @@ -3,7 +3,7 @@ # Copyright (c) 2021-2024 tteck # Author: tteck (tteckster) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE function header_info { clear diff --git a/turnkey/turnkey.sh b/turnkey/turnkey.sh index 202143cf0..bf269223f 100644 --- a/turnkey/turnkey.sh +++ b/turnkey/turnkey.sh @@ -2,7 +2,7 @@ # Copyright (c) 2021-2024 tteck # Author: tteck (tteckster) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE function header_info { clear diff --git a/vm/debian-vm.sh b/vm/debian-vm.sh index d61593171..c38203ec0 100644 --- a/vm/debian-vm.sh +++ b/vm/debian-vm.sh @@ -3,7 +3,7 @@ # Copyright (c) 2021-2024 tteck # Author: tteck (tteckster) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE function header_info { clear @@ -410,7 +410,7 @@ qm set $VMID \ -scsi0 ${DISK1_REF},${DISK_CACHE}${THIN}size=2G \ -boot order=scsi0 \ -serial0 socket \ - -description "
+ -description "
# Debian 12 VM @@ -423,4 +423,4 @@ if [ "$START_VM" == "yes" ]; then msg_ok "Started Debian 12 VM" fi msg_ok "Completed Successfully!\n" -echo "More Info at https://github.com/tteck/Proxmox/discussions/1988" +echo "More Info at https://github.com/community-scripts/ProxmoxVE/discussions/1988" diff --git a/vm/haos-vm.sh b/vm/haos-vm.sh index 90bb9751e..36b989c11 100644 --- a/vm/haos-vm.sh +++ b/vm/haos-vm.sh @@ -3,7 +3,7 @@ # Copyright (c) 2021-2024 tteck # Author: tteck (tteckster) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE function header_info { clear @@ -451,7 +451,7 @@ qm set $VMID \ -efidisk0 ${DISK0_REF}${FORMAT} \ -scsi0 ${DISK1_REF},${DISK_CACHE}${THIN}size=32G \ -boot order=scsi0 \ - -description "
+ -description "
# Home Assistant OS diff --git a/vm/mikrotik-routeros.sh b/vm/mikrotik-routeros.sh index 4b0978fa3..ffe43608c 100644 --- a/vm/mikrotik-routeros.sh +++ b/vm/mikrotik-routeros.sh @@ -3,7 +3,7 @@ # Copyright (c) 2021-2024 tteck # Author: tteck (tteckster) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE function header_info { cat <<"EOF" @@ -270,7 +270,7 @@ qm importdisk $VMID ${FILE%.*} $STORAGE ${DISK_IMPORT:-} 1>&/dev/null qm set $VMID \ -scsi0 "$DISK_REF" \ -boot order=scsi0 \ - -description "
+ -description "
# Mikrotik RouterOS CHR diff --git a/vm/nextcloud-vm.sh b/vm/nextcloud-vm.sh index 1e50c37dc..8ffc81300 100644 --- a/vm/nextcloud-vm.sh +++ b/vm/nextcloud-vm.sh @@ -3,7 +3,7 @@ # Copyright (c) 2021-2024 tteck # Author: tteck (tteckster) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE function header_info { clear @@ -408,7 +408,7 @@ qm set $VMID \ -efidisk0 ${DISK0_REF}${FORMAT} \ -scsi0 ${DISK1_REF},${DISK_CACHE}${THIN}size=12G \ -boot order=scsi0 \ - -description "
+ -description "
# $NAME diff --git a/vm/openwrt.sh b/vm/openwrt.sh index 3cdd38f3c..26d234932 100644 --- a/vm/openwrt.sh +++ b/vm/openwrt.sh @@ -4,7 +4,7 @@ # Author: tteck (tteckster) # Jon Spriggs (jontheniceguy) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE # Based on work from https://i12bretro.github.io/tutorials/0405.html function header_info { @@ -476,7 +476,7 @@ qm set $VMID \ -scsi0 ${DISK1_REF},size=512M \ -boot order=scsi0 \ -tags proxmox-helper-scripts \ - -description "
+ -description "
# OpenWRT diff --git a/vm/owncloud-vm.sh b/vm/owncloud-vm.sh index 871f5eeba..61d0f753d 100644 --- a/vm/owncloud-vm.sh +++ b/vm/owncloud-vm.sh @@ -3,7 +3,7 @@ # Copyright (c) 2021-2024 tteck # Author: tteck (tteckster) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE function header_info { clear @@ -408,7 +408,7 @@ qm set $VMID \ -efidisk0 ${DISK0_REF}${FORMAT} \ -scsi0 ${DISK1_REF},${DISK_CACHE}${THIN}size=12G \ -boot order=scsi0 \ - -description "
+ -description "
# TurnKey ownCloud VM diff --git a/vm/pimox-haos-vm.sh b/vm/pimox-haos-vm.sh index 4e1c47660..d1206031f 100644 --- a/vm/pimox-haos-vm.sh +++ b/vm/pimox-haos-vm.sh @@ -3,7 +3,7 @@ # Copyright (c) 2021-2024 tteck # Author: tteck (tteckster) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE function header_info { cat <<"EOF" @@ -310,7 +310,7 @@ qm set $VMID \ -scsi0 ${DISK1_REF},size=32G >/dev/null qm set $VMID \ -boot order=scsi0 \ - -description "
+ -description "
# Home Assistant OS diff --git a/vm/ubuntu2204-vm.sh b/vm/ubuntu2204-vm.sh index cb6884d80..afe89d837 100644 --- a/vm/ubuntu2204-vm.sh +++ b/vm/ubuntu2204-vm.sh @@ -3,7 +3,7 @@ # Copyright (c) 2021-2024 tteck # Author: tteck (tteckster) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE function header_info { clear @@ -411,7 +411,7 @@ qm set $VMID \ -ide2 ${STORAGE}:cloudinit \ -boot order=scsi0 \ -serial0 socket \ - -description "
+ -description "
# Ubuntu 22.04 VM @@ -425,4 +425,4 @@ if [ "$START_VM" == "yes" ]; then fi msg_ok "Completed Successfully!\n" echo -e "Setup Cloud-Init before starting \n -More info at https://github.com/tteck/Proxmox/discussions/2072 \n" +More info at https://github.com/community-scripts/ProxmoxVE/discussions/2072 \n" diff --git a/vm/ubuntu2404-vm.sh b/vm/ubuntu2404-vm.sh index 920af0194..f608f7c63 100644 --- a/vm/ubuntu2404-vm.sh +++ b/vm/ubuntu2404-vm.sh @@ -3,7 +3,7 @@ # Copyright (c) 2021-2024 tteck # Author: tteck (tteckster) # License: MIT -# https://github.com/tteck/Proxmox/raw/main/LICENSE +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE function header_info { clear @@ -401,7 +401,7 @@ qm set $VMID \ -ide2 ${STORAGE}:cloudinit \ -boot order=scsi0 \ -serial0 socket \ - -description "
+ -description "
# Ubuntu 24.04 VM @@ -410,4 +410,4 @@ qm set $VMID \ msg_ok "Created a Ubuntu 24.04 VM ${CL}${BL}(${HN})" msg_ok "Completed Successfully!\n" echo -e "Setup Cloud-Init before starting \n -More info at https://github.com/tteck/Proxmox/discussions/2072 \n" +More info at https://github.com/community-scripts/ProxmoxVE/discussions/2072 \n" From cb1df814f0d80681b1a3d919020d740f9bb715c8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?H=C3=A5vard=20Thom?= Date: Sat, 2 Nov 2024 23:22:44 +0100 Subject: [PATCH 008/631] Add a discussion template for script requests --- .../DISCUSSION_TEMPLATE/request-script.yml | 35 +++++++++++++++++++ .github/pull_request_template.md | 2 +- 2 files changed, 36 insertions(+), 1 deletion(-) create mode 100644 .github/DISCUSSION_TEMPLATE/request-script.yml diff --git a/.github/DISCUSSION_TEMPLATE/request-script.yml b/.github/DISCUSSION_TEMPLATE/request-script.yml new file mode 100644 index 000000000..91a982c42 --- /dev/null +++ b/.github/DISCUSSION_TEMPLATE/request-script.yml @@ -0,0 +1,35 @@ +title: "[Script request] " +labels: ["enhancement"] +body: +- type: input + attributes: + label: Application Name + description: Enter the application name. + placeholder: "e.g., Home Assistant" + validations: + required: true +- type: input + attributes: + label: Website + description: Official website or github page. + placeholder: "e.g., https://www.home-assistant.io/" + validations: + required: true +- type: textarea + attributes: + label: Description + description: Explain what the application does and why it should be added to Proxmox VE Helper-Scripts. + placeholder: "e.g., Home Assistant is a popular open-source platform that brings all your smart home devices together in one place. Adding it to Proxmox VE Helper-Scripts would make setup and management on Proxmox easy, letting users quickly get a powerful, self-hosted smart home system up and running." + validations: + required: true +- type: checkboxes + attributes: + label: Due Diligence + options: + - label: "I have searched existing [scripts](https://community-scripts.github.io/Proxmox/scripts) and found no duplicates." + required: true + - label: "I have searched existing [discussions](https://github.com/community-scripts/ProxmoxVE/discussions?discussions_q=) and found no duplicate requests." + required: true +- type: markdown + attributes: + value: "Thanks for submitting your request! The team will review it and reach out if we need more information." \ No newline at end of file diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md index 02d33ee1b..e8491e015 100644 --- a/.github/pull_request_template.md +++ b/.github/pull_request_template.md @@ -1,5 +1,5 @@ > [!NOTE] -I am meticulous when it comes to merging code into the main branch, so please understand that I may reject pull requests that do not meet the project's standards. It's never personal. Also, game-related scripts have a lower chance of being merged. +We are meticulous when it comes to merging code into the main branch, so please understand that we may reject pull requests that do not meet the project's standards. It's never personal. Also, game-related scripts have a lower chance of being merged. ## Description From cbaf2c2f19618bc4e7cdb789ebd8ff31e7ea0573 Mon Sep 17 00:00:00 2001 From: David R Date: Sun, 3 Nov 2024 09:08:08 -0500 Subject: [PATCH 009/631] Update request-script.yml The request form needs to alert people to the no game requests rule. Signed-off-by: David R --- .github/DISCUSSION_TEMPLATE/request-script.yml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/.github/DISCUSSION_TEMPLATE/request-script.yml b/.github/DISCUSSION_TEMPLATE/request-script.yml index 91a982c42..aac84df60 100644 --- a/.github/DISCUSSION_TEMPLATE/request-script.yml +++ b/.github/DISCUSSION_TEMPLATE/request-script.yml @@ -30,6 +30,8 @@ body: required: true - label: "I have searched existing [discussions](https://github.com/community-scripts/ProxmoxVE/discussions?discussions_q=) and found no duplicate requests." required: true + - label: "This is not a game-related request." + required: true - type: markdown attributes: - value: "Thanks for submitting your request! The team will review it and reach out if we need more information." \ No newline at end of file + value: "Thanks for submitting your request! The team will review it and reach out if we need more information." From 2fe24389d7adaa65b275644887e18bf5fb55f1d1 Mon Sep 17 00:00:00 2001 From: tteckster Date: Sun, 3 Nov 2024 14:53:24 -0500 Subject: [PATCH 010/631] Update zoraxy.sh add `-rf` llags Signed-off-by: tteckster --- ct/zoraxy.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ct/zoraxy.sh b/ct/zoraxy.sh index b91b77726..463e98dc2 100644 --- a/ct/zoraxy.sh +++ b/ct/zoraxy.sh @@ -60,7 +60,7 @@ if [[ ! -f /opt/${APP}_version.txt ]] || [[ "${RELEASE}" != "$(cat /opt/${APP}_v msg_info "Updating $APP to ${RELEASE}" systemctl stop zoraxy wget -q "https://github.com/tobychui/zoraxy/releases/download/${RELEASE}/zoraxy_linux_amd64" - rm /opt/zoraxy/zoraxy + rm -rf /opt/zoraxy/zoraxy mv zoraxy_linux_amd64 /opt/zoraxy/zoraxy chmod +x /opt/zoraxy/zoraxy systemctl start zoraxy From a95fc2d07d4b641cffa9c09dd40e388ba330d693 Mon Sep 17 00:00:00 2001 From: CanbiZ <47820557+MickLesk@users.noreply.github.com> Date: Mon, 4 Nov 2024 15:57:46 +0100 Subject: [PATCH 011/631] Update pull_request_template.md Signed-off-by: CanbiZ <47820557+MickLesk@users.noreply.github.com> --- .github/pull_request_template.md | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md index e8491e015..c8169f255 100644 --- a/.github/pull_request_template.md +++ b/.github/pull_request_template.md @@ -1,5 +1,5 @@ > [!NOTE] -We are meticulous when it comes to merging code into the main branch, so please understand that we may reject pull requests that do not meet the project's standards. It's never personal. Also, game-related scripts have a lower chance of being merged. +> We are meticulous when it comes to merging code into the main branch, so please understand that we may reject pull requests that do not meet the project's standards. It's never personal. Also, game-related scripts have a lower chance of being merged. ## Description @@ -8,7 +8,6 @@ Provide a summary of the changes made and/or reference the issue being addressed Fixes # (issue) ## Type of change - Please check the relevant option(s): - [ ] Bug fix (non-breaking change that resolves an issue) @@ -18,3 +17,18 @@ Please check the relevant option(s): - [ ] Self-review performed (I have reviewed my code, ensuring it follows established patterns and conventions) - [ ] Documentation update required (this change requires an update to the documentation) +## Additional Information (optional) +Provide any additional context or screenshots about the feature or fix here. + + +## Related Pull Requests / Discussions + +If there are other pull requests or discussions related to this change, please link them here: +- Related PR #1 +- Related PR #2 + +## Review Guidelines + +- [ ] This PR requires review and approval by at least **two contributors**. +- [ ] If changes affect critical functionality, please notify the project maintainers. +- [ ] For major updates, ensure all conversations on this PR are resolved before merging. From fab6cfc6cd1e64703be8e38e0e3b94fbca28c3f8 Mon Sep 17 00:00:00 2001 From: CanbiZ <47820557+MickLesk@users.noreply.github.com> Date: Mon, 4 Nov 2024 16:07:38 +0100 Subject: [PATCH 012/631] Create pr-review.yml Signed-off-by: CanbiZ <47820557+MickLesk@users.noreply.github.com> --- .github/pr-review.yml | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) create mode 100644 .github/pr-review.yml diff --git a/.github/pr-review.yml b/.github/pr-review.yml new file mode 100644 index 000000000..44c3cea57 --- /dev/null +++ b/.github/pr-review.yml @@ -0,0 +1,28 @@ +name: Pull Request Review Enforcement + +on: + pull_request: + types: [opened, reopened, synchronize] + +jobs: + enforce-review-requirements: + runs-on: ubuntu-latest + + steps: + - name: Check out the code + uses: actions/checkout@v2 + + - name: Verify Reviewer Approvals + id: review-check + run: | + reviews=$(gh api repos/$GITHUB_REPOSITORY/pulls/$GITHUB_EVENT_NUMBER/reviews --jq '[.[] | select(.state == "APPROVED") | .user.login] | unique | length') + if [ "$reviews" -lt 2 ]; then + echo "PR requires at least 2 approvals from the Contributor team." + exit 1 + fi + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + + - name: Confirm Ready to Merge + if: ${{ steps.review-check.outputs.reviews == '2' }} + run: echo "PR is ready to be merged." From 0f2a1fdb45b7934bf4faadec24268b281224f06c Mon Sep 17 00:00:00 2001 From: CanbiZ <47820557+MickLesk@users.noreply.github.com> Date: Mon, 4 Nov 2024 16:14:49 +0100 Subject: [PATCH 013/631] Create check-script.yml Signed-off-by: CanbiZ <47820557+MickLesk@users.noreply.github.com> --- .github/check-script.yml | 54 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 54 insertions(+) create mode 100644 .github/check-script.yml diff --git a/.github/check-script.yml b/.github/check-script.yml new file mode 100644 index 000000000..560bc3965 --- /dev/null +++ b/.github/check-script.yml @@ -0,0 +1,54 @@ +name: Check Shell Scripts + +on: + pull_request: + paths: + - '**/*.sh' # Führt den Check nur für Shell-Skripte aus + +jobs: + check-scripts: + runs-on: ubuntu-latest + + steps: + - name: Checkout Code + uses: actions/checkout@v3 + + - name: Check `source` Line in Scripts + shell: bash + run: | + set -e + ERROR_COUNT=0 + FILES=$(find . -name "*.sh") + + for FILE in $FILES; do + # Check for exact match of the source line in line 2 + if [[ $(sed -n '2p' "$FILE") =~ ^source[[:space:]]+<(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) ]]; then + echo "Check passed for: $FILE" + else + echo "Error in $FILE: Line 2 must be exactly 'source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)' if a source line is used." + ERROR_COUNT=$((ERROR_COUNT + 1)) + fi + + # Check for shebang line at the top + if [[ $(head -n 1 "$FILE") != "#!/usr/bin/env bash" ]]; then + echo "Error in $FILE: The first line must be '#!/usr/bin/env bash'." + ERROR_COUNT=$((ERROR_COUNT + 1)) + fi + + # Check for executable permissions + if [[ ! -x "$FILE" ]]; then + echo "Warning in $FILE: This script is not executable. Consider running 'chmod +x $FILE'." + fi + + # Check for empty lines at the beginning of the script + if [[ $(head -n 10 "$FILE" | grep -c '^$') -gt 0 ]]; then + echo "Warning in $FILE: There are empty lines at the beginning of the script. Consider removing them." + fi + done + + if [[ "$ERROR_COUNT" -gt 0 ]]; then + echo "$ERROR_COUNT script(s) failed validation." + exit 1 + else + echo "All scripts passed." + fi From 14d2386717cb93965204d3039b695fefebed18bc Mon Sep 17 00:00:00 2001 From: CanbiZ <47820557+MickLesk@users.noreply.github.com> Date: Mon, 4 Nov 2024 17:01:47 +0100 Subject: [PATCH 014/631] Add Script to Refresh Repositories (Update) --- misc/update-repo.sh | 59 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 59 insertions(+) create mode 100644 misc/update-repo.sh diff --git a/misc/update-repo.sh b/misc/update-repo.sh new file mode 100644 index 000000000..db8335abd --- /dev/null +++ b/misc/update-repo.sh @@ -0,0 +1,59 @@ +#!/usr/bin/env bash + +# Copyright (c) 2021-2024 tteck +# Author: MickLesk +# License: MIT +# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE + +function header_info { + clear + cat <<"EOF" + __ __ __ __ ____ + / / / /___ ____/ /___ _/ /____ / __ \___ ____ ____ + / / / / __ \/ __ / __ `/ __/ _ \ / /_/ / _ \/ __ \/ __ \ +/ /_/ / /_/ / /_/ / /_/ / /_/ __/ / _, _/ __/ /_/ / /_/ / +\____/ .___/\__,_/\__,_/\__/\___/ /_/ |_|\___/ .___/\____/ + /_/ /_/ +EOF +} + +set -eEuo pipefail +BL=$(echo "\033[36m") +RD=$(echo "\033[01;31m") +GN=$(echo "\033[1;92m") +CL=$(echo "\033[m") + +header_info +echo "Loading..." +NODE=$(hostname) + +function update_container() { + container=$1 + os=$(pct config "$container" | awk '/^ostype/ {print $2}') + + if [[ "$os" == "ubuntu" || "$os" == "debian" ]]; then + echo -e "${BL}[Info]${GN} Checking /usr/bin/update in ${BL}$container${CL} (OS: ${GN}$os${CL})" + + if pct exec "$container" -- [ -e /usr/bin/update ]; then + pct exec "$container" -- bash -c "sed -i 's/tteck\\/Proxmox/community-scripts\\/ProxmoxVE/g' /usr/bin/update" + + if pct exec "$container" -- grep -q "community-scripts/ProxmoxVE" /usr/bin/update; then + echo -e "${GN}[Success]${CL} /usr/bin/update updated in ${BL}$container${CL}.\n" + else + echo -e "${RD}[No Change]${CL} No updates made to /usr/bin/update in ${BL}$container${CL}.\n" + fi + else + echo -e "${RD}[Error]${CL} /usr/bin/update not found in container ${BL}$container${CL}.\n" + fi + else + echo -e "${BL}[Info]${GN} Skipping ${BL}$container${CL} (not Debian/Ubuntu)\n" + fi +} + +header_info +for container in $(pct list | awk '{if(NR>1) print $1}'); do + update_container "$container" +done + +header_info +echo -e "${GN}The process is complete. The repositories have been switched to community-scripts/ProxmoxVE.${CL}\n" \ No newline at end of file From 56334616dc486ad92b744a77b7c64a2db0968f27 Mon Sep 17 00:00:00 2001 From: CanbiZ <47820557+MickLesk@users.noreply.github.com> Date: Mon, 4 Nov 2024 17:08:07 +0100 Subject: [PATCH 015/631] Update update-repo.sh --- misc/update-repo.sh | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/misc/update-repo.sh b/misc/update-repo.sh index db8335abd..38774d0f3 100644 --- a/misc/update-repo.sh +++ b/misc/update-repo.sh @@ -35,12 +35,11 @@ function update_container() { echo -e "${BL}[Info]${GN} Checking /usr/bin/update in ${BL}$container${CL} (OS: ${GN}$os${CL})" if pct exec "$container" -- [ -e /usr/bin/update ]; then - pct exec "$container" -- bash -c "sed -i 's/tteck\\/Proxmox/community-scripts\\/ProxmoxVE/g' /usr/bin/update" - if pct exec "$container" -- grep -q "community-scripts/ProxmoxVE" /usr/bin/update; then - echo -e "${GN}[Success]${CL} /usr/bin/update updated in ${BL}$container${CL}.\n" + echo -e "${RD}[No Change]${CL} /usr/bin/update is already up to date in ${BL}$container${CL}.\n" else - echo -e "${RD}[No Change]${CL} No updates made to /usr/bin/update in ${BL}$container${CL}.\n" + pct exec "$container" -- bash -c "sed -i 's/tteck\\/Proxmox/community-scripts\\/ProxmoxVE/g' /usr/bin/update" + echo -e "${GN}[Success]${CL} /usr/bin/update updated in ${BL}$container${CL}.\n" fi else echo -e "${RD}[Error]${CL} /usr/bin/update not found in container ${BL}$container${CL}.\n" From c290c1008335004b125c56ee2d9110be0f3e3f0c Mon Sep 17 00:00:00 2001 From: CanbiZ <47820557+MickLesk@users.noreply.github.com> Date: Mon, 4 Nov 2024 17:09:45 +0100 Subject: [PATCH 016/631] Update update-repo.sh --- misc/update-repo.sh | 2 ++ 1 file changed, 2 insertions(+) diff --git a/misc/update-repo.sh b/misc/update-repo.sh index 38774d0f3..0f08e6c95 100644 --- a/misc/update-repo.sh +++ b/misc/update-repo.sh @@ -37,6 +37,8 @@ function update_container() { if pct exec "$container" -- [ -e /usr/bin/update ]; then if pct exec "$container" -- grep -q "community-scripts/ProxmoxVE" /usr/bin/update; then echo -e "${RD}[No Change]${CL} /usr/bin/update is already up to date in ${BL}$container${CL}.\n" + elif pct exec "$container" -- grep -q "tteck" /usr/bin/update; then + echo -e "${RD}[Warning]${CL} /usr/bin/update in ${BL}$container${CL} contains a different entry (${RD}tteck${CL}). No changes made.\n" else pct exec "$container" -- bash -c "sed -i 's/tteck\\/Proxmox/community-scripts\\/ProxmoxVE/g' /usr/bin/update" echo -e "${GN}[Success]${CL} /usr/bin/update updated in ${BL}$container${CL}.\n" From e0dbe419da0ab0d0247dc7646f474a940bd1128a Mon Sep 17 00:00:00 2001 From: CanbiZ <47820557+MickLesk@users.noreply.github.com> Date: Mon, 4 Nov 2024 17:11:00 +0100 Subject: [PATCH 017/631] Update update-repo.sh --- misc/update-repo.sh | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/misc/update-repo.sh b/misc/update-repo.sh index 0f08e6c95..aee7b661c 100644 --- a/misc/update-repo.sh +++ b/misc/update-repo.sh @@ -41,7 +41,12 @@ function update_container() { echo -e "${RD}[Warning]${CL} /usr/bin/update in ${BL}$container${CL} contains a different entry (${RD}tteck${CL}). No changes made.\n" else pct exec "$container" -- bash -c "sed -i 's/tteck\\/Proxmox/community-scripts\\/ProxmoxVE/g' /usr/bin/update" - echo -e "${GN}[Success]${CL} /usr/bin/update updated in ${BL}$container${CL}.\n" + + if pct exec "$container" -- grep -q "community-scripts/ProxmoxVE" /usr/bin/update; then + echo -e "${GN}[Success]${CL} /usr/bin/update updated in ${BL}$container${CL}.\n" + else + echo -e "${RD}[Error]${CL} /usr/bin/update in ${BL}$container${CL} could not be updated properly.\n" + fi fi else echo -e "${RD}[Error]${CL} /usr/bin/update not found in container ${BL}$container${CL}.\n" From a5462367a3ad5e83b47026c9956b1ebb18c02702 Mon Sep 17 00:00:00 2001 From: CanbiZ <47820557+MickLesk@users.noreply.github.com> Date: Mon, 4 Nov 2024 17:24:42 +0100 Subject: [PATCH 018/631] Update CHANGELOG.md Signed-off-by: CanbiZ <47820557+MickLesk@users.noreply.github.com> --- CHANGELOG.md | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 4d99a84ba..cd2db6bfa 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -13,6 +13,14 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit > [!NOTE] All LXC instances created using this repository come pre-installed with Midnight Commander, which is a command-line tool (`mc`) that offers a user-friendly file and directory management interface for the terminal environment. +## 2024-11-04 + +### Breaking Change +- **Automatic Update of Repository:** The update function now uses the new repository `community-scripts/ProxmoxVE` for Debian/Ubuntu LXC containers. + + ```bash + bash -c "$(wget -qLO - https://github.com/community-scripts/ProxmoxVE/raw/main/misc/update-repo.sh)" + ## 2024-10-27 ### Changed From af9f103e528c7b568984388d2ad436dd42a41b5c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?H=C3=A5vard=20Thom?= Date: Mon, 4 Nov 2024 17:48:41 +0100 Subject: [PATCH 019/631] Remove unnecessary code --- .github/pr-review.yml | 28 ---------------------------- .github/pull_request_template.md | 5 ----- 2 files changed, 33 deletions(-) delete mode 100644 .github/pr-review.yml diff --git a/.github/pr-review.yml b/.github/pr-review.yml deleted file mode 100644 index 44c3cea57..000000000 --- a/.github/pr-review.yml +++ /dev/null @@ -1,28 +0,0 @@ -name: Pull Request Review Enforcement - -on: - pull_request: - types: [opened, reopened, synchronize] - -jobs: - enforce-review-requirements: - runs-on: ubuntu-latest - - steps: - - name: Check out the code - uses: actions/checkout@v2 - - - name: Verify Reviewer Approvals - id: review-check - run: | - reviews=$(gh api repos/$GITHUB_REPOSITORY/pulls/$GITHUB_EVENT_NUMBER/reviews --jq '[.[] | select(.state == "APPROVED") | .user.login] | unique | length') - if [ "$reviews" -lt 2 ]; then - echo "PR requires at least 2 approvals from the Contributor team." - exit 1 - fi - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - - - name: Confirm Ready to Merge - if: ${{ steps.review-check.outputs.reviews == '2' }} - run: echo "PR is ready to be merged." diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md index c8169f255..16aa8d602 100644 --- a/.github/pull_request_template.md +++ b/.github/pull_request_template.md @@ -27,8 +27,3 @@ If there are other pull requests or discussions related to this change, please l - Related PR #1 - Related PR #2 -## Review Guidelines - -- [ ] This PR requires review and approval by at least **two contributors**. -- [ ] If changes affect critical functionality, please notify the project maintainers. -- [ ] For major updates, ensure all conversations on this PR are resolved before merging. From 504fccdb219179f56cbfe206d7bb8b949850839f Mon Sep 17 00:00:00 2001 From: tteckster Date: Mon, 4 Nov 2024 14:34:43 -0500 Subject: [PATCH 020/631] Add files via upload Signed-off-by: tteckster --- misc/images/2025approved.png | Bin 0 -> 414809 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 misc/images/2025approved.png diff --git a/misc/images/2025approved.png b/misc/images/2025approved.png new file mode 100644 index 0000000000000000000000000000000000000000..aa7133c942a2966b5d045a5136e3b15fac286480 GIT binary patch literal 414809 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

uy@T?R!-xCtc?ByEK>!==k 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 z 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

~e-Y#j;6-j>__RZO3%WnU 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�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

j$rwLj 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

c8KL)e&>&lXKdeVf8MP4cS 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 literal 0 HcmV?d00001 From 55061d4281fa8f9c34fd0841a7782a6eb89a8379 Mon Sep 17 00:00:00 2001 From: tteckster Date: Mon, 4 Nov 2024 14:54:48 -0500 Subject: [PATCH 021/631] Update README.md tweak Signed-off-by: tteckster --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 240dca682..6efd58afa 100644 --- a/README.md +++ b/README.md @@ -16,8 +16,8 @@ --- From 56837d7dcdaf0f25e3be4c8d783c6cb020544092 Mon Sep 17 00:00:00 2001 From: Bram Suurd <78373894+BramSuurdje@users.noreply.github.com> Date: Mon, 4 Nov 2024 23:55:08 +0100 Subject: [PATCH 024/631] merge frontend website into scripts repo --- .github/workflows/nextjs.yml | 83 + frontend/.env.local | 3 + frontend/.eslintrc.json | 5 + frontend/.gitignore | 39 + frontend/.prettierignore | 5 + frontend/.prettierrc | 3 + frontend/LICENSE | 21 + frontend/components.json | 17 + frontend/example.env | 4 + frontend/next.config.mjs | 21 + frontend/package-lock.json | 7546 +++++++++++++++++ frontend/package.json | 73 + frontend/postcss.config.mjs | 8 + frontend/public/defaultimg.png | Bin 0 -> 77312 bytes frontend/public/logo.png | Bin 0 -> 64142 bytes frontend/public/metadata/docker.json | 23 + .../public/metadata/nginxproxymanager.json | 20 + frontend/src/app/api/categories/route.ts | 23 + frontend/src/app/favicon.ico | Bin 0 -> 1841 bytes frontend/src/app/layout.tsx | 88 + frontend/src/app/manifest.ts | 27 + frontend/src/app/not-found.tsx | 20 + frontend/src/app/page.tsx | 123 + frontend/src/app/robots.ts | 13 + .../scripts/_components/ScriptAccordion.tsx | 147 + .../scripts/_components/ScriptInfoBlocks.tsx | 219 + .../app/scripts/_components/ScriptItem.tsx | 95 + .../_components/ScriptItems/Alerts.tsx | 19 + .../_components/ScriptItems/Buttons.tsx | 74 + .../ScriptItems/DefaultPassword.tsx | 51 + .../ScriptItems/DefaultSettings.tsx | 38 + .../_components/ScriptItems/Description.tsx | 13 + .../ScriptItems/InstallCommand.tsx | 68 + .../_components/ScriptItems/InterFaces.tsx | 45 + .../_components/ScriptItems/Tooltips.tsx | 49 + .../src/app/scripts/_components/Sidebar.tsx | 34 + frontend/src/app/scripts/page.tsx | 98 + frontend/src/app/sitemap.ts | 20 + frontend/src/components/CommandMenu.tsx | 130 + frontend/src/components/Footer.tsx | 23 + frontend/src/components/Navbar.tsx | 113 + frontend/src/components/TextCopyBlock.tsx | 28 + frontend/src/components/handleCopy.tsx | 10 + frontend/src/components/theme-provider.tsx | 8 + frontend/src/components/ui/accordion.tsx | 57 + .../components/ui/animated-gradient-text.tsx | 26 + frontend/src/components/ui/badge.tsx | 39 + frontend/src/components/ui/button.tsx | 108 + frontend/src/components/ui/card.tsx | 89 + .../src/components/ui/code-copy-button.tsx | 66 + frontend/src/components/ui/codeblock.tsx | 137 + frontend/src/components/ui/command.tsx | 155 + frontend/src/components/ui/dialog.tsx | 122 + frontend/src/components/ui/dropdown-menu.tsx | 200 + frontend/src/components/ui/input.tsx | 25 + .../src/components/ui/navigation-menu.tsx | 128 + frontend/src/components/ui/number-ticker.tsx | 61 + frontend/src/components/ui/particles.tsx | 283 + frontend/src/components/ui/separator.tsx | 31 + frontend/src/components/ui/sheet.tsx | 140 + frontend/src/components/ui/sonner.tsx | 31 + .../components/ui/star-on-github-button.tsx | 53 + frontend/src/components/ui/tabs.tsx | 55 + frontend/src/components/ui/tooltip.tsx | 30 + frontend/src/config/siteConfig.tsx | 23 + frontend/src/lib/pocketbase.ts | 10 + frontend/src/lib/time.ts | 7 + frontend/src/lib/types.ts | 55 + frontend/src/lib/utils.ts | 6 + frontend/src/styles/globals.css | 82 + frontend/tailwind.config.ts | 180 + frontend/tsconfig.json | 33 + 72 files changed, 11679 insertions(+) create mode 100644 .github/workflows/nextjs.yml create mode 100644 frontend/.env.local create mode 100644 frontend/.eslintrc.json create mode 100644 frontend/.gitignore create mode 100644 frontend/.prettierignore create mode 100644 frontend/.prettierrc create mode 100644 frontend/LICENSE create mode 100644 frontend/components.json create mode 100644 frontend/example.env create mode 100644 frontend/next.config.mjs create mode 100644 frontend/package-lock.json create mode 100644 frontend/package.json create mode 100644 frontend/postcss.config.mjs create mode 100644 frontend/public/defaultimg.png create mode 100644 frontend/public/logo.png create mode 100644 frontend/public/metadata/docker.json create mode 100644 frontend/public/metadata/nginxproxymanager.json create mode 100644 frontend/src/app/api/categories/route.ts create mode 100644 frontend/src/app/favicon.ico create mode 100644 frontend/src/app/layout.tsx create mode 100644 frontend/src/app/manifest.ts create mode 100644 frontend/src/app/not-found.tsx create mode 100644 frontend/src/app/page.tsx create mode 100644 frontend/src/app/robots.ts create mode 100644 frontend/src/app/scripts/_components/ScriptAccordion.tsx create mode 100644 frontend/src/app/scripts/_components/ScriptInfoBlocks.tsx create mode 100644 frontend/src/app/scripts/_components/ScriptItem.tsx create mode 100644 frontend/src/app/scripts/_components/ScriptItems/Alerts.tsx create mode 100644 frontend/src/app/scripts/_components/ScriptItems/Buttons.tsx create mode 100644 frontend/src/app/scripts/_components/ScriptItems/DefaultPassword.tsx create mode 100644 frontend/src/app/scripts/_components/ScriptItems/DefaultSettings.tsx create mode 100644 frontend/src/app/scripts/_components/ScriptItems/Description.tsx create mode 100644 frontend/src/app/scripts/_components/ScriptItems/InstallCommand.tsx create mode 100644 frontend/src/app/scripts/_components/ScriptItems/InterFaces.tsx create mode 100644 frontend/src/app/scripts/_components/ScriptItems/Tooltips.tsx create mode 100644 frontend/src/app/scripts/_components/Sidebar.tsx create mode 100644 frontend/src/app/scripts/page.tsx create mode 100644 frontend/src/app/sitemap.ts create mode 100644 frontend/src/components/CommandMenu.tsx create mode 100644 frontend/src/components/Footer.tsx create mode 100644 frontend/src/components/Navbar.tsx create mode 100644 frontend/src/components/TextCopyBlock.tsx create mode 100644 frontend/src/components/handleCopy.tsx create mode 100644 frontend/src/components/theme-provider.tsx create mode 100644 frontend/src/components/ui/accordion.tsx create mode 100644 frontend/src/components/ui/animated-gradient-text.tsx create mode 100644 frontend/src/components/ui/badge.tsx create mode 100644 frontend/src/components/ui/button.tsx create mode 100644 frontend/src/components/ui/card.tsx create mode 100644 frontend/src/components/ui/code-copy-button.tsx create mode 100644 frontend/src/components/ui/codeblock.tsx create mode 100644 frontend/src/components/ui/command.tsx create mode 100644 frontend/src/components/ui/dialog.tsx create mode 100644 frontend/src/components/ui/dropdown-menu.tsx create mode 100644 frontend/src/components/ui/input.tsx create mode 100644 frontend/src/components/ui/navigation-menu.tsx create mode 100644 frontend/src/components/ui/number-ticker.tsx create mode 100644 frontend/src/components/ui/particles.tsx create mode 100644 frontend/src/components/ui/separator.tsx create mode 100644 frontend/src/components/ui/sheet.tsx create mode 100644 frontend/src/components/ui/sonner.tsx create mode 100644 frontend/src/components/ui/star-on-github-button.tsx create mode 100644 frontend/src/components/ui/tabs.tsx create mode 100644 frontend/src/components/ui/tooltip.tsx create mode 100644 frontend/src/config/siteConfig.tsx create mode 100644 frontend/src/lib/pocketbase.ts create mode 100644 frontend/src/lib/time.ts create mode 100644 frontend/src/lib/types.ts create mode 100644 frontend/src/lib/utils.ts create mode 100644 frontend/src/styles/globals.css create mode 100644 frontend/tailwind.config.ts create mode 100644 frontend/tsconfig.json diff --git a/.github/workflows/nextjs.yml b/.github/workflows/nextjs.yml new file mode 100644 index 000000000..6d7032ea7 --- /dev/null +++ b/.github/workflows/nextjs.yml @@ -0,0 +1,83 @@ +# Sample workflow for building and deploying a Next.js site to GitHub Pages +# +# To get started with Next.js see: https://nextjs.org/docs/getting-started +# +name: Deploy Next.js site to Pages + +on: + push: + branches: ["main"] + workflow_dispatch: + +permissions: + contents: read + pages: write + id-token: write + +concurrency: + group: "pages" + cancel-in-progress: false + +jobs: + build: + runs-on: ubuntu-latest + defaults: + run: + working-directory: frontend # Set default working directory for all run steps + steps: + - name: Checkout + uses: actions/checkout@v4 + - name: Detect package manager + id: detect-package-manager + run: | + if [ -f "${{ github.workspace }}/frontend/yarn.lock" ]; then + echo "manager=yarn" >> $GITHUB_OUTPUT + echo "command=install" >> $GITHUB_OUTPUT + echo "runner=yarn" >> $GITHUB_OUTPUT + exit 0 + elif [ -f "${{ github.workspace }}/frontend/package.json" ]; then + echo "manager=npm" >> $GITHUB_OUTPUT + echo "command=ci" >> $GITHUB_OUTPUT + echo "runner=npx --no-install" >> $GITHUB_OUTPUT + exit 0 + else + echo "Unable to determine package manager" + exit 1 + fi + - name: Setup Node + uses: actions/setup-node@v4 + with: + node-version: "20" + cache: ${{ steps.detect-package-manager.outputs.manager }} + cache-dependency-path: frontend/package-lock.json # Specify the path to package-lock.json + - name: Setup Pages + uses: actions/configure-pages@v5 + with: + static_site_generator: next + - name: Restore cache + uses: actions/cache@v4 + with: + path: | + frontend/.next/cache + key: ${{ runner.os }}-nextjs-${{ hashFiles('frontend/**/package-lock.json', 'frontend/**/yarn.lock') }}-${{ hashFiles('frontend/**.[jt]s', 'frontend/**.[jt]sx') }} + restore-keys: | + ${{ runner.os }}-nextjs-${{ hashFiles('frontend/**/package-lock.json', 'frontend/**/yarn.lock') }}- + - name: Install dependencies + run: ${{ steps.detect-package-manager.outputs.manager }} ${{ steps.detect-package-manager.outputs.command }} --legacy-peer-deps + - name: Build with Next.js + run: ${{ steps.detect-package-manager.outputs.runner }} next build + - name: Upload artifact + uses: actions/upload-pages-artifact@v3 + with: + path: frontend/out + + deploy: + environment: + name: github-pages + url: ${{ steps.deployment.outputs.page_url }} + runs-on: ubuntu-latest + needs: build + steps: + - name: Deploy to GitHub Pages + id: deployment + uses: actions/deploy-pages@v4 diff --git a/frontend/.env.local b/frontend/.env.local new file mode 100644 index 000000000..478cdb202 --- /dev/null +++ b/frontend/.env.local @@ -0,0 +1,3 @@ +NEXT_PUBLIC_ANALYTICS_TOKEN="b60d3032-1a11-4244-a100-81d26c5c49a7" +NEXT_PUBLIC_ANALYTICS_URL="analytics.proxmoxve-scripts.com" +NEXT_PUBLIC_POCKETBASE_URL="https://pocketbase.proxmoxve-scripts.com" diff --git a/frontend/.eslintrc.json b/frontend/.eslintrc.json new file mode 100644 index 000000000..32ef36a56 --- /dev/null +++ b/frontend/.eslintrc.json @@ -0,0 +1,5 @@ +{ + "extends": ["next/core-web-vitals"], + "parser": "@typescript-eslint/parser", + "plugins": ["@typescript-eslint"] +} diff --git a/frontend/.gitignore b/frontend/.gitignore new file mode 100644 index 000000000..4a2000d19 --- /dev/null +++ b/frontend/.gitignore @@ -0,0 +1,39 @@ +# See https://help.github.com/articles/ignoring-files/ for more about ignoring files. + +# dependencies +/node_modules +/.pnp +.pnp.js +.yarn/install-state.gz + +# wrangler +.worker-next +.wrangler + +# testing +/coverage + +# next.js +/.next/ +out +# production +/build + +# misc +.DS_Store +*.pem + +# debug +npm-debug.log* +yarn-debug.log* +yarn-error.log* + +# # local env files +# .env*.local +# .env +# vercel +.vercel + +# typescript +*.tsbuildinfo +next-env.d.ts diff --git a/frontend/.prettierignore b/frontend/.prettierignore new file mode 100644 index 000000000..3aea320e0 --- /dev/null +++ b/frontend/.prettierignore @@ -0,0 +1,5 @@ +dist +node_modules +.next +build +.contentlayer \ No newline at end of file diff --git a/frontend/.prettierrc b/frontend/.prettierrc new file mode 100644 index 000000000..490e839f5 --- /dev/null +++ b/frontend/.prettierrc @@ -0,0 +1,3 @@ +{ + "plugins": ["prettier-plugin-tailwindcss", "prettier-plugin-organize-imports"] +} diff --git a/frontend/LICENSE b/frontend/LICENSE new file mode 100644 index 000000000..83fb1d42f --- /dev/null +++ b/frontend/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2024 Bram Suurd + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/frontend/components.json b/frontend/components.json new file mode 100644 index 000000000..380285be3 --- /dev/null +++ b/frontend/components.json @@ -0,0 +1,17 @@ +{ + "$schema": "https://ui.shadcn.com/schema.json", + "style": "default", + "rsc": true, + "tsx": true, + "tailwind": { + "config": "tailwind.config.ts", + "css": "@/styles/globals.css", + "baseColor": "slate", + "cssVariables": true, + "prefix": "" + }, + "aliases": { + "components": "@/components", + "utils": "@/lib/utils" + } +} diff --git a/frontend/example.env b/frontend/example.env new file mode 100644 index 000000000..fcdd4567f --- /dev/null +++ b/frontend/example.env @@ -0,0 +1,4 @@ +NEXT_PUBLIC_POCKETBASE_URL=https://pocketbase.proxmoxve-scripts.com +NEXT_PUBLIC_ANALYTICS_URL=https://analytics.proxmoxve-scripts.com +NEXT_PUBLIC_ANALYTICS_TOKEN=b60d130323-1a11-4244-a1010-81d263c5c49a7 +NODE_ENV=production diff --git a/frontend/next.config.mjs b/frontend/next.config.mjs new file mode 100644 index 000000000..6078b15b2 --- /dev/null +++ b/frontend/next.config.mjs @@ -0,0 +1,21 @@ +/** @type {import('next').NextConfig} */ +const nextConfig = { + webpack: (config) => { + config.resolve.alias.canvas = false; + + return config; + }, + images: { + remotePatterns: [ + { + protocol: "https", + hostname: "**", + }, + ], + }, + + output: "export", + // basePath: "/proxmox-helper-scripts", +}; + +export default nextConfig; diff --git a/frontend/package-lock.json b/frontend/package-lock.json new file mode 100644 index 000000000..d0ac45ee3 --- /dev/null +++ b/frontend/package-lock.json @@ -0,0 +1,7546 @@ +{ + "name": "proxmox-helper-scripts-website", + "version": "1.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "proxmox-helper-scripts-website", + "version": "1.0.0", + "license": "MIT", + "dependencies": { + "@radix-ui/react-accordion": "^1.1.2", + "@radix-ui/react-dialog": "^1.0.5", + "@radix-ui/react-dropdown-menu": "^2.0.6", + "@radix-ui/react-navigation-menu": "^1.1.4", + "@radix-ui/react-separator": "^1.1.0", + "@radix-ui/react-slot": "^1.1.0", + "@radix-ui/react-tabs": "^1.1.0", + "@radix-ui/react-tooltip": "^1.1.2", + "@vercel/analytics": "^1.2.2", + "class-variance-authority": "^0.7.0", + "clsx": "^2.1.1", + "cmdk": "^1.0.0", + "framer-motion": "^11.11.10", + "fuse.js": "^7.0.0", + "lucide-react": "^0.453.0", + "mini-svg-data-uri": "^1.4.4", + "next": "15.0.2", + "next-themes": "^0.3.0", + "nuqs": "^2.1.1", + "pocketbase": "^0.21.4", + "prettier-plugin-organize-imports": "^4.1.0", + "react": "19.0.0-rc-02c0e824-20241028", + "react-code-blocks": "^0.1.6", + "react-dom": "19.0.0-rc-02c0e824-20241028", + "react-icons": "^5.1.0", + "react-simple-typewriter": "^5.0.1", + "sharp": "^0.33.5", + "simple-icons": "^13.5.0", + "sonner": "^1.5.0", + "tailwind-merge": "^2.3.0" + }, + "devDependencies": { + "@types/node": "^22", + "@types/react": "npm:types-react@19.0.0-rc.1", + "@types/react-dom": "npm:types-react-dom@19.0.0-rc.1", + "@typescript-eslint/eslint-plugin": "^8.8.1", + "@typescript-eslint/parser": "^8.8.1", + "eslint": "^9.13.0", + "eslint-config-next": "15.0.2", + "postcss": "^8", + "prettier": "^3.2.5", + "prettier-plugin-tailwindcss": "^0.6.5", + "tailwindcss": "^3.4.9", + "tailwindcss-animate": "^1.0.7", + "tailwindcss-animated": "^1.1.2", + "typescript": "^5" + } + }, + "node_modules/@alloc/quick-lru": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@alloc/quick-lru/-/quick-lru-5.2.0.tgz", + "integrity": "sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@babel/runtime": { + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.26.0.tgz", + "integrity": "sha512-FDSOghenHTiToteC/QRlv2q3DhPZ/oOXTBoirfWNx1Cx3TMVcGWQtMMmQcSvb/JjpNeGzx8Pq/b4fKEJuWm1sw==", + "license": "MIT", + "dependencies": { + "regenerator-runtime": "^0.14.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@emnapi/runtime": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.3.1.tgz", + "integrity": "sha512-kEBmG8KyqtxJZv+ygbEim+KCGtIq1fC22Ms3S4ziXmYKm8uyoLX0MHONVKwp+9opg390VaKRNt4a7A9NwmpNhw==", + "license": "MIT", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@emotion/is-prop-valid": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@emotion/is-prop-valid/-/is-prop-valid-1.2.2.tgz", + "integrity": "sha512-uNsoYd37AFmaCdXlg6EYD1KaPOaRWRByMCYzbKUX4+hhMfrxdVSelShywL4JVaAeM/eHUOSprYBQls+/neX3pw==", + "license": "MIT", + "dependencies": { + "@emotion/memoize": "^0.8.1" + } + }, + "node_modules/@emotion/memoize": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.8.1.tgz", + "integrity": "sha512-W2P2c/VRW1/1tLox0mVUalvnWXxavmv/Oum2aPsRcoDJuob75FC3Y8FbpfLwUegRcxINtGUMPq0tFCvYNTBXNA==", + "license": "MIT" + }, + "node_modules/@emotion/unitless": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/@emotion/unitless/-/unitless-0.8.1.tgz", + "integrity": "sha512-KOEGMu6dmJZtpadb476IsZBclKvILjopjUii3V+7MnXIQCYh8W3NgNcgwo21n9LXZX6EDIKvqfjYxXebDwxKmQ==", + "license": "MIT" + }, + "node_modules/@eslint-community/eslint-utils": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.1.tgz", + "integrity": "sha512-s3O3waFUrMV8P/XaF/+ZTp1X9XBZW1a4B97ZnjQF2KYWaFD2A8KyFBsrsfSjEmjn3RGWAIuvlneuZm3CUK3jbA==", + "dev": true, + "license": "MIT", + "dependencies": { + "eslint-visitor-keys": "^3.4.3" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" + } + }, + "node_modules/@eslint-community/regexpp": { + "version": "4.12.1", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.1.tgz", + "integrity": "sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + } + }, + "node_modules/@eslint/config-array": { + "version": "0.18.0", + "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.18.0.tgz", + "integrity": "sha512-fTxvnS1sRMu3+JjXwJG0j/i4RT9u4qJ+lqS/yCGap4lH4zZGzQ7tu+xZqQmcMZq5OBZDL4QRxQzRjkWcGt8IVw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@eslint/object-schema": "^2.1.4", + "debug": "^4.3.1", + "minimatch": "^3.1.2" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/config-array/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/@eslint/config-array/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/@eslint/core": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.7.0.tgz", + "integrity": "sha512-xp5Jirz5DyPYlPiKat8jaq0EmYvDXKKpzTbxXMpT9eqlRJkRKIz9AGMdlvYjih+im+QlhWrpvVjl8IPC/lHlUw==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/eslintrc": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.1.0.tgz", + "integrity": "sha512-4Bfj15dVJdoy3RfZmmo86RK1Fwzn6SstsvK9JS+BaVKqC6QQQQyXekNaC+g+LKNgkQ+2VhGAzm6hO40AhMR3zQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^10.0.1", + "globals": "^14.0.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint/eslintrc/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/@eslint/eslintrc/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/@eslint/js": { + "version": "9.13.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.13.0.tgz", + "integrity": "sha512-IFLyoY4d72Z5y/6o/BazFBezupzI/taV8sGumxTAVw3lXG9A6md1Dc34T9s1FoD/an9pJH8RHbAxsaEbBed9lA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/object-schema": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.4.tgz", + "integrity": "sha512-BsWiH1yFGjXXS2yvrf5LyuoSIIbPrGUWob917o+BTKuZ7qJdxX8aJLRxs1fS9n6r7vESrq1OUqb68dANcFXuQQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/plugin-kit": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.2.2.tgz", + "integrity": "sha512-CXtq5nR4Su+2I47WPOlWud98Y5Lv8Kyxp2ukhgFx/eW6Blm18VXJO5WuQylPugRo8nbluoi6GvvxBLqHcvqUUw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "levn": "^0.4.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@floating-ui/core": { + "version": "1.6.8", + "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.6.8.tgz", + "integrity": "sha512-7XJ9cPU+yI2QeLS+FCSlqNFZJq8arvswefkZrYI1yQBbftw6FyrZOxYSh+9S7z7TpeWlRt9zJ5IhM1WIL334jA==", + "license": "MIT", + "dependencies": { + "@floating-ui/utils": "^0.2.8" + } + }, + "node_modules/@floating-ui/dom": { + "version": "1.6.12", + "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.6.12.tgz", + "integrity": "sha512-NP83c0HjokcGVEMeoStg317VD9W7eDlGK7457dMBANbKA6GJZdc7rjujdgqzTaz93jkGgc5P/jeWbaCHnMNc+w==", + "license": "MIT", + "dependencies": { + "@floating-ui/core": "^1.6.0", + "@floating-ui/utils": "^0.2.8" + } + }, + "node_modules/@floating-ui/react-dom": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@floating-ui/react-dom/-/react-dom-2.1.2.tgz", + "integrity": "sha512-06okr5cgPzMNBy+Ycse2A6udMi4bqwW/zgBF/rwjcNqWkyr82Mcg8b0vjX8OJpZFy/FKjJmw6wV7t44kK6kW7A==", + "license": "MIT", + "dependencies": { + "@floating-ui/dom": "^1.0.0" + }, + "peerDependencies": { + "react": ">=16.8.0", + "react-dom": ">=16.8.0" + } + }, + "node_modules/@floating-ui/utils": { + "version": "0.2.8", + "resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.2.8.tgz", + "integrity": "sha512-kym7SodPp8/wloecOpcmSnWJsK7M0E5Wg8UcFA+uO4B9s5d0ywXOEro/8HM9x0rW+TljRzul/14UYz3TleT3ig==", + "license": "MIT" + }, + "node_modules/@humanfs/core": { + "version": "0.19.1", + "resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.1.tgz", + "integrity": "sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=18.18.0" + } + }, + "node_modules/@humanfs/node": { + "version": "0.16.6", + "resolved": "https://registry.npmjs.org/@humanfs/node/-/node-0.16.6.tgz", + "integrity": "sha512-YuI2ZHQL78Q5HbhDiBA1X4LmYdXCKCMQIfw0pw7piHJwyREFebJUvrQN4cMssyES6x+vfUbx1CIpaQUKYdQZOw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@humanfs/core": "^0.19.1", + "@humanwhocodes/retry": "^0.3.0" + }, + "engines": { + "node": ">=18.18.0" + } + }, + "node_modules/@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=12.22" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@humanwhocodes/retry": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.3.1.tgz", + "integrity": "sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=18.18" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@img/sharp-darwin-arm64": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-darwin-arm64/-/sharp-darwin-arm64-0.33.5.tgz", + "integrity": "sha512-UT4p+iz/2H4twwAoLCqfA9UH5pI6DggwKEGuaPy7nCVQ8ZsiY5PIcrRvD1DzuY3qYL07NtIQcWnBSY/heikIFQ==", + "cpu": [ + "arm64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-darwin-arm64": "1.0.4" + } + }, + "node_modules/@img/sharp-darwin-x64": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-darwin-x64/-/sharp-darwin-x64-0.33.5.tgz", + "integrity": "sha512-fyHac4jIc1ANYGRDxtiqelIbdWkIuQaI84Mv45KvGRRxSAa7o7d1ZKAOBaYbnepLC1WqxfpimdeWfvqqSGwR2Q==", + "cpu": [ + "x64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-darwin-x64": "1.0.4" + } + }, + "node_modules/@img/sharp-libvips-darwin-arm64": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-arm64/-/sharp-libvips-darwin-arm64-1.0.4.tgz", + "integrity": "sha512-XblONe153h0O2zuFfTAbQYAX2JhYmDHeWikp1LM9Hul9gVPjFY427k6dFEcOL72O01QxQsWi761svJ/ev9xEDg==", + "cpu": [ + "arm64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "darwin" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-darwin-x64": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-x64/-/sharp-libvips-darwin-x64-1.0.4.tgz", + "integrity": "sha512-xnGR8YuZYfJGmWPvmlunFaWJsb9T/AO2ykoP3Fz/0X5XV2aoYBPkX6xqCQvUTKKiLddarLaxpzNe+b1hjeWHAQ==", + "cpu": [ + "x64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "darwin" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-arm": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm/-/sharp-libvips-linux-arm-1.0.5.tgz", + "integrity": "sha512-gvcC4ACAOPRNATg/ov8/MnbxFDJqf/pDePbBnuBDcjsI8PssmjoKMAz4LtLaVi+OnSb5FK/yIOamqDwGmXW32g==", + "cpu": [ + "arm" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-arm64": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm64/-/sharp-libvips-linux-arm64-1.0.4.tgz", + "integrity": "sha512-9B+taZ8DlyyqzZQnoeIvDVR/2F4EbMepXMc/NdVbkzsJbzkUjhXv/70GQJ7tdLA4YJgNP25zukcxpX2/SueNrA==", + "cpu": [ + "arm64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-s390x": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-s390x/-/sharp-libvips-linux-s390x-1.0.4.tgz", + "integrity": "sha512-u7Wz6ntiSSgGSGcjZ55im6uvTrOxSIS8/dgoVMoiGE9I6JAfU50yH5BoDlYA1tcuGS7g/QNtetJnxA6QEsCVTA==", + "cpu": [ + "s390x" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-x64": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-x64/-/sharp-libvips-linux-x64-1.0.4.tgz", + "integrity": "sha512-MmWmQ3iPFZr0Iev+BAgVMb3ZyC4KeFc3jFxnNbEPas60e1cIfevbtuyf9nDGIzOaW9PdnDciJm+wFFaTlj5xYw==", + "cpu": [ + "x64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linuxmusl-arm64": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-arm64/-/sharp-libvips-linuxmusl-arm64-1.0.4.tgz", + "integrity": "sha512-9Ti+BbTYDcsbp4wfYib8Ctm1ilkugkA/uscUn6UXK1ldpC1JjiXbLfFZtRlBhjPZ5o1NCLiDbg8fhUPKStHoTA==", + "cpu": [ + "arm64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linuxmusl-x64": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-x64/-/sharp-libvips-linuxmusl-x64-1.0.4.tgz", + "integrity": "sha512-viYN1KX9m+/hGkJtvYYp+CCLgnJXwiQB39damAO7WMdKWlIhmYTfHjwSbQeUK/20vY154mwezd9HflVFM1wVSw==", + "cpu": [ + "x64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-linux-arm": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm/-/sharp-linux-arm-0.33.5.tgz", + "integrity": "sha512-JTS1eldqZbJxjvKaAkxhZmBqPRGmxgu+qFKSInv8moZ2AmT5Yib3EQ1c6gp493HvrvV8QgdOXdyaIBrhvFhBMQ==", + "cpu": [ + "arm" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-arm": "1.0.5" + } + }, + "node_modules/@img/sharp-linux-arm64": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm64/-/sharp-linux-arm64-0.33.5.tgz", + "integrity": "sha512-JMVv+AMRyGOHtO1RFBiJy/MBsgz0x4AWrT6QoEVVTyh1E39TrCUpTRI7mx9VksGX4awWASxqCYLCV4wBZHAYxA==", + "cpu": [ + "arm64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-arm64": "1.0.4" + } + }, + "node_modules/@img/sharp-linux-s390x": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-s390x/-/sharp-linux-s390x-0.33.5.tgz", + "integrity": "sha512-y/5PCd+mP4CA/sPDKl2961b+C9d+vPAveS33s6Z3zfASk2j5upL6fXVPZi7ztePZ5CuH+1kW8JtvxgbuXHRa4Q==", + "cpu": [ + "s390x" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-s390x": "1.0.4" + } + }, + "node_modules/@img/sharp-linux-x64": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-x64/-/sharp-linux-x64-0.33.5.tgz", + "integrity": "sha512-opC+Ok5pRNAzuvq1AG0ar+1owsu842/Ab+4qvU879ippJBHvyY5n2mxF1izXqkPYlGuP/M556uh53jRLJmzTWA==", + "cpu": [ + "x64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-x64": "1.0.4" + } + }, + "node_modules/@img/sharp-linuxmusl-arm64": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-arm64/-/sharp-linuxmusl-arm64-0.33.5.tgz", + "integrity": "sha512-XrHMZwGQGvJg2V/oRSUfSAfjfPxO+4DkiRh6p2AFjLQztWUuY/o8Mq0eMQVIY7HJ1CDQUJlxGGZRw1a5bqmd1g==", + "cpu": [ + "arm64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linuxmusl-arm64": "1.0.4" + } + }, + "node_modules/@img/sharp-linuxmusl-x64": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-x64/-/sharp-linuxmusl-x64-0.33.5.tgz", + "integrity": "sha512-WT+d/cgqKkkKySYmqoZ8y3pxx7lx9vVejxW/W4DOFMYVSkErR+w7mf2u8m/y4+xHe7yY9DAXQMWQhpnMuFfScw==", + "cpu": [ + "x64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linuxmusl-x64": "1.0.4" + } + }, + "node_modules/@img/sharp-wasm32": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-wasm32/-/sharp-wasm32-0.33.5.tgz", + "integrity": "sha512-ykUW4LVGaMcU9lu9thv85CbRMAwfeadCJHRsg2GmeRa/cJxsVY9Rbd57JcMxBkKHag5U/x7TSBpScF4U8ElVzg==", + "cpu": [ + "wasm32" + ], + "license": "Apache-2.0 AND LGPL-3.0-or-later AND MIT", + "optional": true, + "dependencies": { + "@emnapi/runtime": "^1.2.0" + }, + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-win32-ia32": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-win32-ia32/-/sharp-win32-ia32-0.33.5.tgz", + "integrity": "sha512-T36PblLaTwuVJ/zw/LaH0PdZkRz5rd3SmMHX8GSmR7vtNSP5Z6bQkExdSK7xGWyxLw4sUknBuugTelgw2faBbQ==", + "cpu": [ + "ia32" + ], + "license": "Apache-2.0 AND LGPL-3.0-or-later", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-win32-x64": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-win32-x64/-/sharp-win32-x64-0.33.5.tgz", + "integrity": "sha512-MpY/o8/8kj+EcnxwvrP4aTJSWw/aZ7JIGR4aBeZkZw5B7/Jn+tY9/VNwtcoGmdT7GfggGIU4kygOMSbYnOrAbg==", + "cpu": [ + "x64" + ], + "license": "Apache-2.0 AND LGPL-3.0-or-later", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@isaacs/cliui": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", + "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", + "dev": true, + "license": "ISC", + "dependencies": { + "string-width": "^5.1.2", + "string-width-cjs": "npm:string-width@^4.2.0", + "strip-ansi": "^7.0.1", + "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", + "wrap-ansi": "^8.1.0", + "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", + "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/set-array": "^1.2.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.24" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/set-array": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", + "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", + "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.25", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", + "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@next/env": { + "version": "15.0.2", + "resolved": "https://registry.npmjs.org/@next/env/-/env-15.0.2.tgz", + "integrity": "sha512-c0Zr0ModK5OX7D4ZV8Jt/wqoXtitLNPwUfG9zElCZztdaZyNVnN40rDXVZ/+FGuR4CcNV5AEfM6N8f+Ener7Dg==", + "license": "MIT" + }, + "node_modules/@next/eslint-plugin-next": { + "version": "15.0.2", + "resolved": "https://registry.npmjs.org/@next/eslint-plugin-next/-/eslint-plugin-next-15.0.2.tgz", + "integrity": "sha512-R9Jc7T6Ge0txjmqpPwqD8vx6onQjynO9JT73ArCYiYPvSrwYXepH/UY/WdKDY8JPWJl72sAE4iGMHPeQ5xdEWg==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-glob": "3.3.1" + } + }, + "node_modules/@next/eslint-plugin-next/node_modules/fast-glob": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.1.tgz", + "integrity": "sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/@next/eslint-plugin-next/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/@next/swc-darwin-arm64": { + "version": "15.0.2", + "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-15.0.2.tgz", + "integrity": "sha512-GK+8w88z+AFlmt+ondytZo2xpwlfAR8U6CRwXancHImh6EdGfHMIrTSCcx5sOSBei00GyLVL0ioo1JLKTfprgg==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-darwin-x64": { + "version": "15.0.2", + "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-15.0.2.tgz", + "integrity": "sha512-KUpBVxIbjzFiUZhiLIpJiBoelqzQtVZbdNNsehhUn36e2YzKHphnK8eTUW1s/4aPy5kH/UTid8IuVbaOpedhpw==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-linux-arm64-gnu": { + "version": "15.0.2", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-15.0.2.tgz", + "integrity": "sha512-9J7TPEcHNAZvwxXRzOtiUvwtTD+fmuY0l7RErf8Yyc7kMpE47MIQakl+3jecmkhOoIyi/Rp+ddq7j4wG6JDskQ==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-linux-arm64-musl": { + "version": "15.0.2", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-15.0.2.tgz", + "integrity": "sha512-BjH4ZSzJIoTTZRh6rG+a/Ry4SW0HlizcPorqNBixBWc3wtQtj4Sn9FnRZe22QqrPnzoaW0ctvSz4FaH4eGKMww==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-linux-x64-gnu": { + "version": "15.0.2", + "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-15.0.2.tgz", + "integrity": "sha512-i3U2TcHgo26sIhcwX/Rshz6avM6nizrZPvrDVDY1bXcLH1ndjbO8zuC7RoHp0NSK7wjJMPYzm7NYL1ksSKFreA==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-linux-x64-musl": { + "version": "15.0.2", + "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-15.0.2.tgz", + "integrity": "sha512-AMfZfSVOIR8fa+TXlAooByEF4OB00wqnms1sJ1v+iu8ivwvtPvnkwdzzFMpsK5jA2S9oNeeQ04egIWVb4QWmtQ==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-win32-arm64-msvc": { + "version": "15.0.2", + "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-15.0.2.tgz", + "integrity": "sha512-JkXysDT0/hEY47O+Hvs8PbZAeiCQVxKfGtr4GUpNAhlG2E0Mkjibuo8ryGD29Qb5a3IOnKYNoZlh/MyKd2Nbww==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-win32-x64-msvc": { + "version": "15.0.2", + "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-15.0.2.tgz", + "integrity": "sha512-foaUL0NqJY/dX0Pi/UcZm5zsmSk5MtP/gxx3xOPyREkMFN+CTjctPfu3QaqrQHinaKdPnMWPJDKt4VjDfTBe/Q==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nolyfill/is-core-module": { + "version": "1.0.39", + "resolved": "https://registry.npmjs.org/@nolyfill/is-core-module/-/is-core-module-1.0.39.tgz", + "integrity": "sha512-nn5ozdjYQpUCZlWGuxcJY/KpxkWQs4DcbMCmKojjyrYDEAGy4Ce19NN4v5MduafTwJlbKc99UA8YhSVqq9yPZA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12.4.0" + } + }, + "node_modules/@pkgjs/parseargs": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", + "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", + "dev": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">=14" + } + }, + "node_modules/@radix-ui/primitive": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/primitive/-/primitive-1.1.0.tgz", + "integrity": "sha512-4Z8dn6Upk0qk4P74xBhZ6Hd/w0mPEzOOLxy4xiPXOXqjF7jZS0VAKk7/x/H6FyY2zCkYJqePf1G5KmkmNJ4RBA==", + "license": "MIT" + }, + "node_modules/@radix-ui/react-accordion": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-accordion/-/react-accordion-1.2.1.tgz", + "integrity": "sha512-bg/l7l5QzUjgsh8kjwDFommzAshnUsuVMV5NM56QVCm+7ZckYdd9P/ExR8xG/Oup0OajVxNLaHJ1tb8mXk+nzQ==", + "license": "MIT", + "dependencies": { + "@radix-ui/primitive": "1.1.0", + "@radix-ui/react-collapsible": "1.1.1", + "@radix-ui/react-collection": "1.1.0", + "@radix-ui/react-compose-refs": "1.1.0", + "@radix-ui/react-context": "1.1.1", + "@radix-ui/react-direction": "1.1.0", + "@radix-ui/react-id": "1.1.0", + "@radix-ui/react-primitive": "2.0.0", + "@radix-ui/react-use-controllable-state": "1.1.0" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-arrow": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-arrow/-/react-arrow-1.1.0.tgz", + "integrity": "sha512-FmlW1rCg7hBpEBwFbjHwCW6AmWLQM6g/v0Sn8XbP9NvmSZ2San1FpQeyPtufzOMSIx7Y4dzjlHoifhp+7NkZhw==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-primitive": "2.0.0" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-collapsible": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-collapsible/-/react-collapsible-1.1.1.tgz", + "integrity": "sha512-1///SnrfQHJEofLokyczERxQbWfCGQlQ2XsCZMucVs6it+lq9iw4vXy+uDn1edlb58cOZOWSldnfPAYcT4O/Yg==", + "license": "MIT", + "dependencies": { + "@radix-ui/primitive": "1.1.0", + "@radix-ui/react-compose-refs": "1.1.0", + "@radix-ui/react-context": "1.1.1", + "@radix-ui/react-id": "1.1.0", + "@radix-ui/react-presence": "1.1.1", + "@radix-ui/react-primitive": "2.0.0", + "@radix-ui/react-use-controllable-state": "1.1.0", + "@radix-ui/react-use-layout-effect": "1.1.0" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-collection": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-collection/-/react-collection-1.1.0.tgz", + "integrity": "sha512-GZsZslMJEyo1VKm5L1ZJY8tGDxZNPAoUeQUIbKeJfoi7Q4kmig5AsgLMYYuyYbfjd8fBmFORAIwYAkXMnXZgZw==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-compose-refs": "1.1.0", + "@radix-ui/react-context": "1.1.0", + "@radix-ui/react-primitive": "2.0.0", + "@radix-ui/react-slot": "1.1.0" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-collection/node_modules/@radix-ui/react-context": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-context/-/react-context-1.1.0.tgz", + "integrity": "sha512-OKrckBy+sMEgYM/sMmqmErVn0kZqrHPJze+Ql3DzYsDDp0hl0L62nx/2122/Bvps1qz645jlcu2tD9lrRSdf8A==", + "license": "MIT", + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-compose-refs": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-compose-refs/-/react-compose-refs-1.1.0.tgz", + "integrity": "sha512-b4inOtiaOnYf9KWyO3jAeeCG6FeyfY6ldiEPanbUjWd+xIk5wZeHa8yVwmrJ2vderhu/BQvzCrJI0lHd+wIiqw==", + "license": "MIT", + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-context": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-context/-/react-context-1.1.1.tgz", + "integrity": "sha512-UASk9zi+crv9WteK/NU4PLvOoL3OuE6BWVKNF6hPRBtYBDXQ2u5iu3O59zUlJiTVvkyuycnqrztsHVJwcK9K+Q==", + "license": "MIT", + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-dialog": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-dialog/-/react-dialog-1.1.2.tgz", + "integrity": "sha512-Yj4dZtqa2o+kG61fzB0H2qUvmwBA2oyQroGLyNtBj1beo1khoQ3q1a2AO8rrQYjd8256CO9+N8L9tvsS+bnIyA==", + "license": "MIT", + "dependencies": { + "@radix-ui/primitive": "1.1.0", + "@radix-ui/react-compose-refs": "1.1.0", + "@radix-ui/react-context": "1.1.1", + "@radix-ui/react-dismissable-layer": "1.1.1", + "@radix-ui/react-focus-guards": "1.1.1", + "@radix-ui/react-focus-scope": "1.1.0", + "@radix-ui/react-id": "1.1.0", + "@radix-ui/react-portal": "1.1.2", + "@radix-ui/react-presence": "1.1.1", + "@radix-ui/react-primitive": "2.0.0", + "@radix-ui/react-slot": "1.1.0", + "@radix-ui/react-use-controllable-state": "1.1.0", + "aria-hidden": "^1.1.1", + "react-remove-scroll": "2.6.0" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-direction": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-direction/-/react-direction-1.1.0.tgz", + "integrity": "sha512-BUuBvgThEiAXh2DWu93XsT+a3aWrGqolGlqqw5VU1kG7p/ZH2cuDlM1sRLNnY3QcBS69UIz2mcKhMxDsdewhjg==", + "license": "MIT", + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-dismissable-layer": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-dismissable-layer/-/react-dismissable-layer-1.1.1.tgz", + "integrity": "sha512-QSxg29lfr/xcev6kSz7MAlmDnzbP1eI/Dwn3Tp1ip0KT5CUELsxkekFEMVBEoykI3oV39hKT4TKZzBNMbcTZYQ==", + "license": "MIT", + "dependencies": { + "@radix-ui/primitive": "1.1.0", + "@radix-ui/react-compose-refs": "1.1.0", + "@radix-ui/react-primitive": "2.0.0", + "@radix-ui/react-use-callback-ref": "1.1.0", + "@radix-ui/react-use-escape-keydown": "1.1.0" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-dropdown-menu": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-dropdown-menu/-/react-dropdown-menu-2.1.2.tgz", + "integrity": "sha512-GVZMR+eqK8/Kes0a36Qrv+i20bAPXSn8rCBTHx30w+3ECnR5o3xixAlqcVaYvLeyKUsm0aqyhWfmUcqufM8nYA==", + "license": "MIT", + "dependencies": { + "@radix-ui/primitive": "1.1.0", + "@radix-ui/react-compose-refs": "1.1.0", + "@radix-ui/react-context": "1.1.1", + "@radix-ui/react-id": "1.1.0", + "@radix-ui/react-menu": "2.1.2", + "@radix-ui/react-primitive": "2.0.0", + "@radix-ui/react-use-controllable-state": "1.1.0" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-focus-guards": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-focus-guards/-/react-focus-guards-1.1.1.tgz", + "integrity": "sha512-pSIwfrT1a6sIoDASCSpFwOasEwKTZWDw/iBdtnqKO7v6FeOzYJ7U53cPzYFVR3geGGXgVHaH+CdngrrAzqUGxg==", + "license": "MIT", + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-focus-scope": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-focus-scope/-/react-focus-scope-1.1.0.tgz", + "integrity": "sha512-200UD8zylvEyL8Bx+z76RJnASR2gRMuxlgFCPAe/Q/679a/r0eK3MBVYMb7vZODZcffZBdob1EGnky78xmVvcA==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-compose-refs": "1.1.0", + "@radix-ui/react-primitive": "2.0.0", + "@radix-ui/react-use-callback-ref": "1.1.0" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-id": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-id/-/react-id-1.1.0.tgz", + "integrity": "sha512-EJUrI8yYh7WOjNOqpoJaf1jlFIH2LvtgAl+YcFqNCa+4hj64ZXmPkAKOFs/ukjz3byN6bdb/AVUqHkI8/uWWMA==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-use-layout-effect": "1.1.0" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-menu": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-menu/-/react-menu-2.1.2.tgz", + "integrity": "sha512-lZ0R4qR2Al6fZ4yCCZzu/ReTFrylHFxIqy7OezIpWF4bL0o9biKo0pFIvkaew3TyZ9Fy5gYVrR5zCGZBVbO1zg==", + "license": "MIT", + "dependencies": { + "@radix-ui/primitive": "1.1.0", + "@radix-ui/react-collection": "1.1.0", + "@radix-ui/react-compose-refs": "1.1.0", + "@radix-ui/react-context": "1.1.1", + "@radix-ui/react-direction": "1.1.0", + "@radix-ui/react-dismissable-layer": "1.1.1", + "@radix-ui/react-focus-guards": "1.1.1", + "@radix-ui/react-focus-scope": "1.1.0", + "@radix-ui/react-id": "1.1.0", + "@radix-ui/react-popper": "1.2.0", + "@radix-ui/react-portal": "1.1.2", + "@radix-ui/react-presence": "1.1.1", + "@radix-ui/react-primitive": "2.0.0", + "@radix-ui/react-roving-focus": "1.1.0", + "@radix-ui/react-slot": "1.1.0", + "@radix-ui/react-use-callback-ref": "1.1.0", + "aria-hidden": "^1.1.1", + "react-remove-scroll": "2.6.0" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-navigation-menu": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-navigation-menu/-/react-navigation-menu-1.2.1.tgz", + "integrity": "sha512-egDo0yJD2IK8L17gC82vptkvW1jLeni1VuqCyzY727dSJdk5cDjINomouLoNk8RVF7g2aNIfENKWL4UzeU9c8Q==", + "license": "MIT", + "dependencies": { + "@radix-ui/primitive": "1.1.0", + "@radix-ui/react-collection": "1.1.0", + "@radix-ui/react-compose-refs": "1.1.0", + "@radix-ui/react-context": "1.1.1", + "@radix-ui/react-direction": "1.1.0", + "@radix-ui/react-dismissable-layer": "1.1.1", + "@radix-ui/react-id": "1.1.0", + "@radix-ui/react-presence": "1.1.1", + "@radix-ui/react-primitive": "2.0.0", + "@radix-ui/react-use-callback-ref": "1.1.0", + "@radix-ui/react-use-controllable-state": "1.1.0", + "@radix-ui/react-use-layout-effect": "1.1.0", + "@radix-ui/react-use-previous": "1.1.0", + "@radix-ui/react-visually-hidden": "1.1.0" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-popper": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-popper/-/react-popper-1.2.0.tgz", + "integrity": "sha512-ZnRMshKF43aBxVWPWvbj21+7TQCvhuULWJ4gNIKYpRlQt5xGRhLx66tMp8pya2UkGHTSlhpXwmjqltDYHhw7Vg==", + "license": "MIT", + "dependencies": { + "@floating-ui/react-dom": "^2.0.0", + "@radix-ui/react-arrow": "1.1.0", + "@radix-ui/react-compose-refs": "1.1.0", + "@radix-ui/react-context": "1.1.0", + "@radix-ui/react-primitive": "2.0.0", + "@radix-ui/react-use-callback-ref": "1.1.0", + "@radix-ui/react-use-layout-effect": "1.1.0", + "@radix-ui/react-use-rect": "1.1.0", + "@radix-ui/react-use-size": "1.1.0", + "@radix-ui/rect": "1.1.0" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-popper/node_modules/@radix-ui/react-context": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-context/-/react-context-1.1.0.tgz", + "integrity": "sha512-OKrckBy+sMEgYM/sMmqmErVn0kZqrHPJze+Ql3DzYsDDp0hl0L62nx/2122/Bvps1qz645jlcu2tD9lrRSdf8A==", + "license": "MIT", + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-portal": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-portal/-/react-portal-1.1.2.tgz", + "integrity": "sha512-WeDYLGPxJb/5EGBoedyJbT0MpoULmwnIPMJMSldkuiMsBAv7N1cRdsTWZWht9vpPOiN3qyiGAtbK2is47/uMFg==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-primitive": "2.0.0", + "@radix-ui/react-use-layout-effect": "1.1.0" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-presence": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-presence/-/react-presence-1.1.1.tgz", + "integrity": "sha512-IeFXVi4YS1K0wVZzXNrbaaUvIJ3qdY+/Ih4eHFhWA9SwGR9UDX7Ck8abvL57C4cv3wwMvUE0OG69Qc3NCcTe/A==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-compose-refs": "1.1.0", + "@radix-ui/react-use-layout-effect": "1.1.0" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-primitive": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-2.0.0.tgz", + "integrity": "sha512-ZSpFm0/uHa8zTvKBDjLFWLo8dkr4MBsiDLz0g3gMUwqgLHz9rTaRRGYDgvZPtBJgYCBKXkS9fzmoySgr8CO6Cw==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-slot": "1.1.0" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-roving-focus": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-roving-focus/-/react-roving-focus-1.1.0.tgz", + "integrity": "sha512-EA6AMGeq9AEeQDeSH0aZgG198qkfHSbvWTf1HvoDmOB5bBG/qTxjYMWUKMnYiV6J/iP/J8MEFSuB2zRU2n7ODA==", + "license": "MIT", + "dependencies": { + "@radix-ui/primitive": "1.1.0", + "@radix-ui/react-collection": "1.1.0", + "@radix-ui/react-compose-refs": "1.1.0", + "@radix-ui/react-context": "1.1.0", + "@radix-ui/react-direction": "1.1.0", + "@radix-ui/react-id": "1.1.0", + "@radix-ui/react-primitive": "2.0.0", + "@radix-ui/react-use-callback-ref": "1.1.0", + "@radix-ui/react-use-controllable-state": "1.1.0" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-roving-focus/node_modules/@radix-ui/react-context": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-context/-/react-context-1.1.0.tgz", + "integrity": "sha512-OKrckBy+sMEgYM/sMmqmErVn0kZqrHPJze+Ql3DzYsDDp0hl0L62nx/2122/Bvps1qz645jlcu2tD9lrRSdf8A==", + "license": "MIT", + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-separator": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-separator/-/react-separator-1.1.0.tgz", + "integrity": "sha512-3uBAs+egzvJBDZAzvb/n4NxxOYpnspmWxO2u5NbZ8Y6FM/NdrGSF9bop3Cf6F6C71z1rTSn8KV0Fo2ZVd79lGA==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-primitive": "2.0.0" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-slot": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.1.0.tgz", + "integrity": "sha512-FUCf5XMfmW4dtYl69pdS4DbxKy8nj4M7SafBgPllysxmdachynNflAdp/gCsnYWNDnge6tI9onzMp5ARYc1KNw==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-compose-refs": "1.1.0" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-tabs": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-tabs/-/react-tabs-1.1.1.tgz", + "integrity": "sha512-3GBUDmP2DvzmtYLMsHmpA1GtR46ZDZ+OreXM/N+kkQJOPIgytFWWTfDQmBQKBvaFS0Vno0FktdbVzN28KGrMdw==", + "license": "MIT", + "dependencies": { + "@radix-ui/primitive": "1.1.0", + "@radix-ui/react-context": "1.1.1", + "@radix-ui/react-direction": "1.1.0", + "@radix-ui/react-id": "1.1.0", + "@radix-ui/react-presence": "1.1.1", + "@radix-ui/react-primitive": "2.0.0", + "@radix-ui/react-roving-focus": "1.1.0", + "@radix-ui/react-use-controllable-state": "1.1.0" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-tooltip": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-tooltip/-/react-tooltip-1.1.3.tgz", + "integrity": "sha512-Z4w1FIS0BqVFI2c1jZvb/uDVJijJjJ2ZMuPV81oVgTZ7g3BZxobplnMVvXtFWgtozdvYJ+MFWtwkM5S2HnAong==", + "license": "MIT", + "dependencies": { + "@radix-ui/primitive": "1.1.0", + "@radix-ui/react-compose-refs": "1.1.0", + "@radix-ui/react-context": "1.1.1", + "@radix-ui/react-dismissable-layer": "1.1.1", + "@radix-ui/react-id": "1.1.0", + "@radix-ui/react-popper": "1.2.0", + "@radix-ui/react-portal": "1.1.2", + "@radix-ui/react-presence": "1.1.1", + "@radix-ui/react-primitive": "2.0.0", + "@radix-ui/react-slot": "1.1.0", + "@radix-ui/react-use-controllable-state": "1.1.0", + "@radix-ui/react-visually-hidden": "1.1.0" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-use-callback-ref": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-callback-ref/-/react-use-callback-ref-1.1.0.tgz", + "integrity": "sha512-CasTfvsy+frcFkbXtSJ2Zu9JHpN8TYKxkgJGWbjiZhFivxaeW7rMeZt7QELGVLaYVfFMsKHjb7Ak0nMEe+2Vfw==", + "license": "MIT", + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-use-controllable-state": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-controllable-state/-/react-use-controllable-state-1.1.0.tgz", + "integrity": "sha512-MtfMVJiSr2NjzS0Aa90NPTnvTSg6C/JLCV7ma0W6+OMV78vd8OyRpID+Ng9LxzsPbLeuBnWBA1Nq30AtBIDChw==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-use-callback-ref": "1.1.0" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-use-escape-keydown": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-escape-keydown/-/react-use-escape-keydown-1.1.0.tgz", + "integrity": "sha512-L7vwWlR1kTTQ3oh7g1O0CBF3YCyyTj8NmhLR+phShpyA50HCfBFKVJTpshm9PzLiKmehsrQzTYTpX9HvmC9rhw==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-use-callback-ref": "1.1.0" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-use-layout-effect": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-layout-effect/-/react-use-layout-effect-1.1.0.tgz", + "integrity": "sha512-+FPE0rOdziWSrH9athwI1R0HDVbWlEhd+FR+aSDk4uWGmSJ9Z54sdZVDQPZAinJhJXwfT+qnj969mCsT2gfm5w==", + "license": "MIT", + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-use-previous": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-previous/-/react-use-previous-1.1.0.tgz", + "integrity": "sha512-Z/e78qg2YFnnXcW88A4JmTtm4ADckLno6F7OXotmkQfeuCVaKuYzqAATPhVzl3delXE7CxIV8shofPn3jPc5Og==", + "license": "MIT", + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-use-rect": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-rect/-/react-use-rect-1.1.0.tgz", + "integrity": "sha512-0Fmkebhr6PiseyZlYAOtLS+nb7jLmpqTrJyv61Pe68MKYW6OWdRE2kI70TaYY27u7H0lajqM3hSMMLFq18Z7nQ==", + "license": "MIT", + "dependencies": { + "@radix-ui/rect": "1.1.0" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-use-size": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-size/-/react-use-size-1.1.0.tgz", + "integrity": "sha512-XW3/vWuIXHa+2Uwcc2ABSfcCledmXhhQPlGbfcRXbiUQI5Icjcg19BGCZVKKInYbvUCut/ufbbLLPFC5cbb1hw==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-use-layout-effect": "1.1.0" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-visually-hidden": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-visually-hidden/-/react-visually-hidden-1.1.0.tgz", + "integrity": "sha512-N8MDZqtgCgG5S3aV60INAB475osJousYpZ4cTJ2cFbMpdHS5Y6loLTH8LPtkj2QN0x93J30HT/M3qJXM0+lyeQ==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-primitive": "2.0.0" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/rect": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/rect/-/rect-1.1.0.tgz", + "integrity": "sha512-A9+lCBZoaMJlVKcRBz2YByCG+Cp2t6nAnMnNba+XiWxnj6r4JUFqfsgwocMBZU9LPtdxC6wB56ySYpc7LQIoJg==", + "license": "MIT" + }, + "node_modules/@rtsao/scc": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@rtsao/scc/-/scc-1.1.0.tgz", + "integrity": "sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g==", + "dev": true, + "license": "MIT" + }, + "node_modules/@rushstack/eslint-patch": { + "version": "1.10.4", + "resolved": "https://registry.npmjs.org/@rushstack/eslint-patch/-/eslint-patch-1.10.4.tgz", + "integrity": "sha512-WJgX9nzTqknM393q1QJDJmoW28kUfEnybeTfVNcNAPnIx210RXm2DiXiHzfNPJNIUUb1tJnz/l4QGtJ30PgWmA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@swc/counter": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@swc/counter/-/counter-0.1.3.tgz", + "integrity": "sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ==", + "license": "Apache-2.0" + }, + "node_modules/@swc/helpers": { + "version": "0.5.13", + "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.13.tgz", + "integrity": "sha512-UoKGxQ3r5kYI9dALKJapMmuK+1zWM/H17Z1+iwnNmzcJRnfFuevZs375TA5rW31pu4BS4NoSy1fRsexDXfWn5w==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@types/estree": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.6.tgz", + "integrity": "sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/hast": { + "version": "2.3.10", + "resolved": "https://registry.npmjs.org/@types/hast/-/hast-2.3.10.tgz", + "integrity": "sha512-McWspRw8xx8J9HurkVBfYj0xKoE25tOFlHGdx4MJ5xORQrMGZNqJhVQWaIbm6Oyla5kYOXtDiopzKRJzEOkwJw==", + "license": "MIT", + "dependencies": { + "@types/unist": "^2" + } + }, + "node_modules/@types/json-schema": { + "version": "7.0.15", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/json5": { + "version": "0.0.29", + "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", + "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/node": { + "version": "22.8.6", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.8.6.tgz", + "integrity": "sha512-tosuJYKrIqjQIlVCM4PEGxOmyg3FCPa/fViuJChnGeEIhjA46oy8FMVoF9su1/v8PNs2a8Q0iFNyOx0uOF91nw==", + "dev": true, + "license": "MIT", + "dependencies": { + "undici-types": "~6.19.8" + } + }, + "node_modules/@types/react": { + "name": "types-react", + "version": "19.0.0-rc.1", + "resolved": "https://registry.npmjs.org/types-react/-/types-react-19.0.0-rc.1.tgz", + "integrity": "sha512-RshndUfqTW6K3STLPis8BtAYCGOkMbtvYsi90gmVNDZBXUyUc5juf2PE9LfS/JmOlUIRO8cWTS/1MTnmhjDqyQ==", + "dev": true, + "dependencies": { + "csstype": "^3.0.2" + } + }, + "node_modules/@types/react-dom": { + "name": "types-react-dom", + "version": "19.0.0-rc.1", + "resolved": "https://registry.npmjs.org/types-react-dom/-/types-react-dom-19.0.0-rc.1.tgz", + "integrity": "sha512-VSLZJl8VXCD0fAWp7DUTFUDCcZ8DVXOQmjhJMD03odgeFmu14ZQJHCXeETm3BEAhJqfgJaFkLnGkQv88sRx0fQ==", + "dev": true, + "dependencies": { + "@types/react": "*" + } + }, + "node_modules/@types/stylis": { + "version": "4.2.5", + "resolved": "https://registry.npmjs.org/@types/stylis/-/stylis-4.2.5.tgz", + "integrity": "sha512-1Xve+NMN7FWjY14vLoY5tL3BVEQ/n42YLwaqJIPYhotZ9uBHt87VceMwWQpzmdEt2TNXIorIFG+YeCUUW7RInw==", + "license": "MIT" + }, + "node_modules/@types/unist": { + "version": "2.0.11", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.11.tgz", + "integrity": "sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA==", + "license": "MIT" + }, + "node_modules/@typescript-eslint/eslint-plugin": { + "version": "8.12.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.12.2.tgz", + "integrity": "sha512-gQxbxM8mcxBwaEmWdtLCIGLfixBMHhQjBqR8sVWNTPpcj45WlYL2IObS/DNMLH1DBP0n8qz+aiiLTGfopPEebw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/regexpp": "^4.10.0", + "@typescript-eslint/scope-manager": "8.12.2", + "@typescript-eslint/type-utils": "8.12.2", + "@typescript-eslint/utils": "8.12.2", + "@typescript-eslint/visitor-keys": "8.12.2", + "graphemer": "^1.4.0", + "ignore": "^5.3.1", + "natural-compare": "^1.4.0", + "ts-api-utils": "^1.3.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "@typescript-eslint/parser": "^8.0.0 || ^8.0.0-alpha.0", + "eslint": "^8.57.0 || ^9.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/parser": { + "version": "8.12.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.12.2.tgz", + "integrity": "sha512-MrvlXNfGPLH3Z+r7Tk+Z5moZAc0dzdVjTgUgwsdGweH7lydysQsnSww3nAmsq8blFuRD5VRlAr9YdEFw3e6PBw==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "@typescript-eslint/scope-manager": "8.12.2", + "@typescript-eslint/types": "8.12.2", + "@typescript-eslint/typescript-estree": "8.12.2", + "@typescript-eslint/visitor-keys": "8.12.2", + "debug": "^4.3.4" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/scope-manager": { + "version": "8.12.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.12.2.tgz", + "integrity": "sha512-gPLpLtrj9aMHOvxJkSbDBmbRuYdtiEbnvO25bCMza3DhMjTQw0u7Y1M+YR5JPbMsXXnSPuCf5hfq0nEkQDL/JQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "8.12.2", + "@typescript-eslint/visitor-keys": "8.12.2" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/type-utils": { + "version": "8.12.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.12.2.tgz", + "integrity": "sha512-bwuU4TAogPI+1q/IJSKuD4shBLc/d2vGcRT588q+jzayQyjVK2X6v/fbR4InY2U2sgf8MEvVCqEWUzYzgBNcGQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/typescript-estree": "8.12.2", + "@typescript-eslint/utils": "8.12.2", + "debug": "^4.3.4", + "ts-api-utils": "^1.3.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/types": { + "version": "8.12.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.12.2.tgz", + "integrity": "sha512-VwDwMF1SZ7wPBUZwmMdnDJ6sIFk4K4s+ALKLP6aIQsISkPv8jhiw65sAK6SuWODN/ix+m+HgbYDkH+zLjrzvOA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/typescript-estree": { + "version": "8.12.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.12.2.tgz", + "integrity": "sha512-mME5MDwGe30Pq9zKPvyduyU86PH7aixwqYR2grTglAdB+AN8xXQ1vFGpYaUSJ5o5P/5znsSBeNcs5g5/2aQwow==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "@typescript-eslint/types": "8.12.2", + "@typescript-eslint/visitor-keys": "8.12.2", + "debug": "^4.3.4", + "fast-glob": "^3.3.2", + "is-glob": "^4.0.3", + "minimatch": "^9.0.4", + "semver": "^7.6.0", + "ts-api-utils": "^1.3.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/utils": { + "version": "8.12.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.12.2.tgz", + "integrity": "sha512-UTTuDIX3fkfAz6iSVa5rTuSfWIYZ6ATtEocQ/umkRSyC9O919lbZ8dcH7mysshrCdrAM03skJOEYaBugxN+M6A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/eslint-utils": "^4.4.0", + "@typescript-eslint/scope-manager": "8.12.2", + "@typescript-eslint/types": "8.12.2", + "@typescript-eslint/typescript-estree": "8.12.2" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0" + } + }, + "node_modules/@typescript-eslint/visitor-keys": { + "version": "8.12.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.12.2.tgz", + "integrity": "sha512-PChz8UaKQAVNHghsHcPyx1OMHoFRUEA7rJSK/mDhdq85bk+PLsUHUBqTQTFt18VJZbmxBovM65fezlheQRsSDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "8.12.2", + "eslint-visitor-keys": "^3.4.3" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@vercel/analytics": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@vercel/analytics/-/analytics-1.3.2.tgz", + "integrity": "sha512-n/Ws7skBbW+fUBMeg+jrT30+GP00jTHvCcL4fuVrShuML0uveEV/4vVUdvqEVnDgXIGfLm0GXW5EID2mCcRXhg==", + "license": "MPL-2.0", + "dependencies": { + "server-only": "^0.0.1" + }, + "peerDependencies": { + "next": ">= 13", + "react": "^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "next": { + "optional": true + }, + "react": { + "optional": true + } + } + }, + "node_modules/acorn": { + "version": "8.14.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.0.tgz", + "integrity": "sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==", + "dev": true, + "license": "MIT", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ansi-regex": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", + "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/any-promise": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", + "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==", + "dev": true, + "license": "MIT" + }, + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dev": true, + "license": "ISC", + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/arg": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz", + "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==", + "dev": true, + "license": "MIT" + }, + "node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true, + "license": "Python-2.0" + }, + "node_modules/aria-hidden": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/aria-hidden/-/aria-hidden-1.2.4.tgz", + "integrity": "sha512-y+CcFFwelSXpLZk/7fMB2mUbGtX9lKycf1MWJ7CaTIERyitVlyQx6C+sxcROU2BAJ24OiZyK+8wj2i8AlBoS3A==", + "license": "MIT", + "dependencies": { + "tslib": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/aria-query": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.2.tgz", + "integrity": "sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/array-buffer-byte-length": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.1.tgz", + "integrity": "sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.5", + "is-array-buffer": "^3.0.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array-includes": { + "version": "3.1.8", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.8.tgz", + "integrity": "sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-object-atoms": "^1.0.0", + "get-intrinsic": "^1.2.4", + "is-string": "^1.0.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.findlast": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/array.prototype.findlast/-/array.prototype.findlast-1.2.5.tgz", + "integrity": "sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "es-shim-unscopables": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.findlastindex": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.5.tgz", + "integrity": "sha512-zfETvRFA8o7EiNn++N5f/kaCw221hrpGsDmcpndVupkPzEc1Wuf3VgC0qby1BbHs7f5DVYjgtEU2LLh5bqeGfQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "es-shim-unscopables": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.flat": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.2.tgz", + "integrity": "sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "es-shim-unscopables": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.flatmap": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.2.tgz", + "integrity": "sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "es-shim-unscopables": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.tosorted": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/array.prototype.tosorted/-/array.prototype.tosorted-1.1.4.tgz", + "integrity": "sha512-p6Fx8B7b7ZhL/gmUsAy0D15WhvDccw3mnGNbZpi3pmeJdxtWsj2jEaI4Y6oo3XiHfzuSgPwKc04MYt6KgvC/wA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.3", + "es-errors": "^1.3.0", + "es-shim-unscopables": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/arraybuffer.prototype.slice": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.3.tgz", + "integrity": "sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A==", + "dev": true, + "license": "MIT", + "dependencies": { + "array-buffer-byte-length": "^1.0.1", + "call-bind": "^1.0.5", + "define-properties": "^1.2.1", + "es-abstract": "^1.22.3", + "es-errors": "^1.2.1", + "get-intrinsic": "^1.2.3", + "is-array-buffer": "^3.0.4", + "is-shared-array-buffer": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/ast-types-flow": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.8.tgz", + "integrity": "sha512-OH/2E5Fg20h2aPrbe+QL8JZQFko0YZaF+j4mnQ7BGhfavO7OpSLa8a0y9sBwomHdSbkhTS8TQNayBfnW5DwbvQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/available-typed-arrays": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", + "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "possible-typed-array-names": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/axe-core": { + "version": "4.10.2", + "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.10.2.tgz", + "integrity": "sha512-RE3mdQ7P3FRSe7eqCWoeQ/Z9QXrtniSjp1wUjt5nRC3WIpz5rSCve6o3fsZ2aCpJtrZjSZgjwXAoTO5k4tEI0w==", + "dev": true, + "license": "MPL-2.0", + "engines": { + "node": ">=4" + } + }, + "node_modules/axobject-query": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-4.1.0.tgz", + "integrity": "sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true, + "license": "MIT" + }, + "node_modules/binary-extensions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", + "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "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, + "license": "MIT", + "dependencies": { + "fill-range": "^7.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/busboy": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/busboy/-/busboy-1.6.0.tgz", + "integrity": "sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==", + "dependencies": { + "streamsearch": "^1.1.0" + }, + "engines": { + "node": ">=10.16.0" + } + }, + "node_modules/call-bind": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", + "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "set-function-length": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/camelcase-css": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz", + "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "node_modules/camelize": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/camelize/-/camelize-1.0.1.tgz", + "integrity": "sha512-dU+Tx2fsypxTgtLoE36npi3UqcjSSMNYfkqgmoEhtZrraP5VWq0K7FkWVTYa8eMPtnU/G2txVsfdCJTn9uzpuQ==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001676", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001676.tgz", + "integrity": "sha512-Qz6zwGCiPghQXGJvgQAem79esjitvJ+CxSbSQkW9H/UX5hg8XM88d4lp2W+MEQ81j+Hip58Il+jGVdazk1z9cw==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "CC-BY-4.0" + }, + "node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/character-entities": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-1.2.4.tgz", + "integrity": "sha512-iBMyeEHxfVnIakwOuDXpVkc54HijNgCyQB2w0VfGQThle6NXn50zU6V/u+LDhxHcDUPojn6Kpga3PTAD8W1bQw==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/character-entities-legacy": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-1.1.4.tgz", + "integrity": "sha512-3Xnr+7ZFS1uxeiUDvV02wQ+QDbc55o97tIV5zHScSPJpcLm/r0DFPcoY3tYRp+VZukxuMeKgXYmsXQHO05zQeA==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/character-reference-invalid": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/character-reference-invalid/-/character-reference-invalid-1.1.4.tgz", + "integrity": "sha512-mKKUkUbhPpQlCOfIuZkvSEgktjPFIsZKRRbC6KWVEMvlzblj3i3asQv5ODsrwt0N3pHAEvjP8KTQPHkp0+6jOg==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/chokidar": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", + "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", + "dev": true, + "license": "MIT", + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/chokidar/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/class-variance-authority": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/class-variance-authority/-/class-variance-authority-0.7.0.tgz", + "integrity": "sha512-jFI8IQw4hczaL4ALINxqLEXQbWcNjoSkloa4IaufXCJr6QawJyw7tuRysRsrE8w2p/4gGaxKIt/hX3qz/IbD1A==", + "license": "Apache-2.0", + "dependencies": { + "clsx": "2.0.0" + }, + "funding": { + "url": "https://joebell.co.uk" + } + }, + "node_modules/class-variance-authority/node_modules/clsx": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.0.0.tgz", + "integrity": "sha512-rQ1+kcj+ttHG0MKVGBUXwayCCF1oh39BF5COIpRzuCEv8Mwjv0XucrI2ExNTOn9IlLifGClWQcU9BrZORvtw6Q==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/client-only": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/client-only/-/client-only-0.0.1.tgz", + "integrity": "sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==", + "license": "MIT" + }, + "node_modules/clsx": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.1.tgz", + "integrity": "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/cmdk": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/cmdk/-/cmdk-1.0.3.tgz", + "integrity": "sha512-2c3uTjwT4YeHj60q2k8S1B0WHSoGR6t5CPnec6PMFD2QF4gwid0t1VSPNeEmL02EwBwNky/A3gwPCOViKTtoPA==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-dialog": "^1.1.2", + "@radix-ui/react-id": "^1.1.0", + "@radix-ui/react-primitive": "^2.0.0", + "use-sync-external-store": "^1.2.2" + }, + "peerDependencies": { + "react": "^18 || ^19 || ^19.0.0-rc", + "react-dom": "^18 || ^19 || ^19.0.0-rc" + } + }, + "node_modules/color": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/color/-/color-4.2.3.tgz", + "integrity": "sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==", + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1", + "color-string": "^1.9.0" + }, + "engines": { + "node": ">=12.5.0" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "license": "MIT" + }, + "node_modules/color-string": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.9.1.tgz", + "integrity": "sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==", + "license": "MIT", + "dependencies": { + "color-name": "^1.0.0", + "simple-swizzle": "^0.2.2" + } + }, + "node_modules/comma-separated-tokens": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-1.0.8.tgz", + "integrity": "sha512-GHuDRO12Sypu2cV70d1dkA2EUmXHgntrzbpvOB+Qy+49ypNfGgFQIC2fhhXbnyrJRynDCAARsT7Ou0M6hirpfw==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/commander": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", + "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true, + "license": "MIT" + }, + "node_modules/cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "license": "MIT", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/css-color-keywords": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/css-color-keywords/-/css-color-keywords-1.0.0.tgz", + "integrity": "sha512-FyyrDHZKEjXDpNJYvVsV960FiqQyXc/LlYmsxl2BcdMb2WPx0OGRVgTg55rPSyLSNMqP52R9r8geSp7apN3Ofg==", + "license": "ISC", + "engines": { + "node": ">=4" + } + }, + "node_modules/css-to-react-native": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/css-to-react-native/-/css-to-react-native-3.2.0.tgz", + "integrity": "sha512-e8RKaLXMOFii+02mOlqwjbD00KSEKqblnpO9e++1aXS1fPQOpS1YoqdVHBqPjHNoxeF2mimzVqawm2KCbEdtHQ==", + "license": "MIT", + "dependencies": { + "camelize": "^1.0.0", + "css-color-keywords": "^1.0.0", + "postcss-value-parser": "^4.0.2" + } + }, + "node_modules/cssesc": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", + "dev": true, + "license": "MIT", + "bin": { + "cssesc": "bin/cssesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/csstype": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", + "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==", + "license": "MIT" + }, + "node_modules/damerau-levenshtein": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz", + "integrity": "sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==", + "dev": true, + "license": "BSD-2-Clause" + }, + "node_modules/data-view-buffer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.1.tgz", + "integrity": "sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.6", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/data-view-byte-length": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.1.tgz", + "integrity": "sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/data-view-byte-offset": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.0.tgz", + "integrity": "sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.6", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/debug": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", + "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/define-data-property": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", + "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "gopd": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/define-properties": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", + "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", + "dev": true, + "license": "MIT", + "dependencies": { + "define-data-property": "^1.0.1", + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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==", + "license": "Apache-2.0", + "engines": { + "node": ">=8" + } + }, + "node_modules/detect-node-es": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/detect-node-es/-/detect-node-es-1.1.0.tgz", + "integrity": "sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ==", + "license": "MIT" + }, + "node_modules/didyoumean": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz", + "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==", + "dev": true, + "license": "Apache-2.0" + }, + "node_modules/dlv": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz", + "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==", + "dev": true, + "license": "MIT" + }, + "node_modules/doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", + "dev": true, + "license": "MIT" + }, + "node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "dev": true, + "license": "MIT" + }, + "node_modules/enhanced-resolve": { + "version": "5.17.1", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.17.1.tgz", + "integrity": "sha512-LMHl3dXhTcfv8gM4kEzIUeTQ+7fpdA0l2tUf34BddXPkz2A5xJ5L/Pchd5BL6rdccM9QGvu0sWZzK1Z1t4wwyg==", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.4", + "tapable": "^2.2.0" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/es-abstract": { + "version": "1.23.3", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.23.3.tgz", + "integrity": "sha512-e+HfNH61Bj1X9/jLc5v1owaLYuHdeHHSQlkhCBiTK8rBvKaULl/beGMxwrMXjpYrv4pz22BlY570vVePA2ho4A==", + "dev": true, + "license": "MIT", + "dependencies": { + "array-buffer-byte-length": "^1.0.1", + "arraybuffer.prototype.slice": "^1.0.3", + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.7", + "data-view-buffer": "^1.0.1", + "data-view-byte-length": "^1.0.1", + "data-view-byte-offset": "^1.0.0", + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "es-set-tostringtag": "^2.0.3", + "es-to-primitive": "^1.2.1", + "function.prototype.name": "^1.1.6", + "get-intrinsic": "^1.2.4", + "get-symbol-description": "^1.0.2", + "globalthis": "^1.0.3", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.2", + "has-proto": "^1.0.3", + "has-symbols": "^1.0.3", + "hasown": "^2.0.2", + "internal-slot": "^1.0.7", + "is-array-buffer": "^3.0.4", + "is-callable": "^1.2.7", + "is-data-view": "^1.0.1", + "is-negative-zero": "^2.0.3", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.3", + "is-string": "^1.0.7", + "is-typed-array": "^1.1.13", + "is-weakref": "^1.0.2", + "object-inspect": "^1.13.1", + "object-keys": "^1.1.1", + "object.assign": "^4.1.5", + "regexp.prototype.flags": "^1.5.2", + "safe-array-concat": "^1.1.2", + "safe-regex-test": "^1.0.3", + "string.prototype.trim": "^1.2.9", + "string.prototype.trimend": "^1.0.8", + "string.prototype.trimstart": "^1.0.8", + "typed-array-buffer": "^1.0.2", + "typed-array-byte-length": "^1.0.1", + "typed-array-byte-offset": "^1.0.2", + "typed-array-length": "^1.0.6", + "unbox-primitive": "^1.0.2", + "which-typed-array": "^1.1.15" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/es-define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", + "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "get-intrinsic": "^1.2.4" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-iterator-helpers": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.1.0.tgz", + "integrity": "sha512-/SurEfycdyssORP/E+bj4sEu1CWw4EmLDsHynHwSXQ7utgbrMRWW195pTrCjFgFCddf/UkYm3oqKPRq5i8bJbw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.3", + "es-errors": "^1.3.0", + "es-set-tostringtag": "^2.0.3", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "globalthis": "^1.0.4", + "has-property-descriptors": "^1.0.2", + "has-proto": "^1.0.3", + "has-symbols": "^1.0.3", + "internal-slot": "^1.0.7", + "iterator.prototype": "^1.1.3", + "safe-array-concat": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-object-atoms": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.0.0.tgz", + "integrity": "sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-set-tostringtag": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.3.tgz", + "integrity": "sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "get-intrinsic": "^1.2.4", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.1" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-shim-unscopables": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.2.tgz", + "integrity": "sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==", + "dev": true, + "license": "MIT", + "dependencies": { + "hasown": "^2.0.0" + } + }, + "node_modules/es-to-primitive": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint": { + "version": "9.13.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.13.0.tgz", + "integrity": "sha512-EYZK6SX6zjFHST/HRytOdA/zE72Cq/bfw45LSyuwrdvcclb/gqV8RRQxywOBEWO2+WDpva6UZa4CcDeJKzUCFA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/eslint-utils": "^4.2.0", + "@eslint-community/regexpp": "^4.11.0", + "@eslint/config-array": "^0.18.0", + "@eslint/core": "^0.7.0", + "@eslint/eslintrc": "^3.1.0", + "@eslint/js": "9.13.0", + "@eslint/plugin-kit": "^0.2.0", + "@humanfs/node": "^0.16.5", + "@humanwhocodes/module-importer": "^1.0.1", + "@humanwhocodes/retry": "^0.3.1", + "@types/estree": "^1.0.6", + "@types/json-schema": "^7.0.15", + "ajv": "^6.12.4", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.3.2", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^8.1.0", + "eslint-visitor-keys": "^4.1.0", + "espree": "^10.2.0", + "esquery": "^1.5.0", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^8.0.0", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "ignore": "^5.2.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", + "natural-compare": "^1.4.0", + "optionator": "^0.9.3", + "text-table": "^0.2.0" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://eslint.org/donate" + }, + "peerDependencies": { + "jiti": "*" + }, + "peerDependenciesMeta": { + "jiti": { + "optional": true + } + } + }, + "node_modules/eslint-config-next": { + "version": "15.0.2", + "resolved": "https://registry.npmjs.org/eslint-config-next/-/eslint-config-next-15.0.2.tgz", + "integrity": "sha512-N8o6cyUXzlMmQbdc2Kc83g1qomFi3ITqrAZfubipVKET2uR2mCStyGRcx/r8WiAIVMul2KfwRiCHBkTpBvGBmA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@next/eslint-plugin-next": "15.0.2", + "@rushstack/eslint-patch": "^1.10.3", + "@typescript-eslint/eslint-plugin": "^5.4.2 || ^6.0.0 || ^7.0.0 || ^8.0.0", + "@typescript-eslint/parser": "^5.4.2 || ^6.0.0 || ^7.0.0 || ^8.0.0", + "eslint-import-resolver-node": "^0.3.6", + "eslint-import-resolver-typescript": "^3.5.2", + "eslint-plugin-import": "^2.31.0", + "eslint-plugin-jsx-a11y": "^6.10.0", + "eslint-plugin-react": "^7.35.0", + "eslint-plugin-react-hooks": "^5.0.0" + }, + "peerDependencies": { + "eslint": "^7.23.0 || ^8.0.0 || ^9.0.0", + "typescript": ">=3.3.1" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/eslint-import-resolver-node": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz", + "integrity": "sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "^3.2.7", + "is-core-module": "^2.13.0", + "resolve": "^1.22.4" + } + }, + "node_modules/eslint-import-resolver-node/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/eslint-import-resolver-typescript": { + "version": "3.6.3", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-3.6.3.tgz", + "integrity": "sha512-ud9aw4szY9cCT1EWWdGv1L1XR6hh2PaRWif0j2QjQ0pgTY/69iw+W0Z4qZv5wHahOl8isEr+k/JnyAqNQkLkIA==", + "dev": true, + "license": "ISC", + "dependencies": { + "@nolyfill/is-core-module": "1.0.39", + "debug": "^4.3.5", + "enhanced-resolve": "^5.15.0", + "eslint-module-utils": "^2.8.1", + "fast-glob": "^3.3.2", + "get-tsconfig": "^4.7.5", + "is-bun-module": "^1.0.2", + "is-glob": "^4.0.3" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/unts/projects/eslint-import-resolver-ts" + }, + "peerDependencies": { + "eslint": "*", + "eslint-plugin-import": "*", + "eslint-plugin-import-x": "*" + }, + "peerDependenciesMeta": { + "eslint-plugin-import": { + "optional": true + }, + "eslint-plugin-import-x": { + "optional": true + } + } + }, + "node_modules/eslint-module-utils": { + "version": "2.12.0", + "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.12.0.tgz", + "integrity": "sha512-wALZ0HFoytlyh/1+4wuZ9FJCD/leWHQzzrxJ8+rebyReSLk7LApMyd3WJaLVoN+D5+WIdJyDK1c6JnE65V4Zyg==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "^3.2.7" + }, + "engines": { + "node": ">=4" + }, + "peerDependenciesMeta": { + "eslint": { + "optional": true + } + } + }, + "node_modules/eslint-module-utils/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/eslint-plugin-import": { + "version": "2.31.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.31.0.tgz", + "integrity": "sha512-ixmkI62Rbc2/w8Vfxyh1jQRTdRTF52VxwRVHl/ykPAmqG+Nb7/kNn+byLP0LxPgI7zWA16Jt82SybJInmMia3A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@rtsao/scc": "^1.1.0", + "array-includes": "^3.1.8", + "array.prototype.findlastindex": "^1.2.5", + "array.prototype.flat": "^1.3.2", + "array.prototype.flatmap": "^1.3.2", + "debug": "^3.2.7", + "doctrine": "^2.1.0", + "eslint-import-resolver-node": "^0.3.9", + "eslint-module-utils": "^2.12.0", + "hasown": "^2.0.2", + "is-core-module": "^2.15.1", + "is-glob": "^4.0.3", + "minimatch": "^3.1.2", + "object.fromentries": "^2.0.8", + "object.groupby": "^1.0.3", + "object.values": "^1.2.0", + "semver": "^6.3.1", + "string.prototype.trimend": "^1.0.8", + "tsconfig-paths": "^3.15.0" + }, + "engines": { + "node": ">=4" + }, + "peerDependencies": { + "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 || ^9" + } + }, + "node_modules/eslint-plugin-import/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/eslint-plugin-import/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/eslint-plugin-import/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/eslint-plugin-import/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/eslint-plugin-jsx-a11y": { + "version": "6.10.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.10.2.tgz", + "integrity": "sha512-scB3nz4WmG75pV8+3eRUQOHZlNSUhFNq37xnpgRkCCELU3XMvXAxLk1eqWWyE22Ki4Q01Fnsw9BA3cJHDPgn2Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "aria-query": "^5.3.2", + "array-includes": "^3.1.8", + "array.prototype.flatmap": "^1.3.2", + "ast-types-flow": "^0.0.8", + "axe-core": "^4.10.0", + "axobject-query": "^4.1.0", + "damerau-levenshtein": "^1.0.8", + "emoji-regex": "^9.2.2", + "hasown": "^2.0.2", + "jsx-ast-utils": "^3.3.5", + "language-tags": "^1.0.9", + "minimatch": "^3.1.2", + "object.fromentries": "^2.0.8", + "safe-regex-test": "^1.0.3", + "string.prototype.includes": "^2.0.1" + }, + "engines": { + "node": ">=4.0" + }, + "peerDependencies": { + "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9" + } + }, + "node_modules/eslint-plugin-jsx-a11y/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/eslint-plugin-jsx-a11y/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/eslint-plugin-react": { + "version": "7.37.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.37.2.tgz", + "integrity": "sha512-EsTAnj9fLVr/GZleBLFbj/sSuXeWmp1eXIN60ceYnZveqEaUCyW4X+Vh4WTdUhCkW4xutXYqTXCUSyqD4rB75w==", + "dev": true, + "license": "MIT", + "dependencies": { + "array-includes": "^3.1.8", + "array.prototype.findlast": "^1.2.5", + "array.prototype.flatmap": "^1.3.2", + "array.prototype.tosorted": "^1.1.4", + "doctrine": "^2.1.0", + "es-iterator-helpers": "^1.1.0", + "estraverse": "^5.3.0", + "hasown": "^2.0.2", + "jsx-ast-utils": "^2.4.1 || ^3.0.0", + "minimatch": "^3.1.2", + "object.entries": "^1.1.8", + "object.fromentries": "^2.0.8", + "object.values": "^1.2.0", + "prop-types": "^15.8.1", + "resolve": "^2.0.0-next.5", + "semver": "^6.3.1", + "string.prototype.matchall": "^4.0.11", + "string.prototype.repeat": "^1.0.0" + }, + "engines": { + "node": ">=4" + }, + "peerDependencies": { + "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9.7" + } + }, + "node_modules/eslint-plugin-react-hooks": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-5.0.0.tgz", + "integrity": "sha512-hIOwI+5hYGpJEc4uPRmz2ulCjAGD/N13Lukkh8cLV0i2IRk/bdZDYjgLVHj+U9Z704kLIdIO6iueGvxNur0sgw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 || ^9.0.0" + } + }, + "node_modules/eslint-plugin-react/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/eslint-plugin-react/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/eslint-plugin-react/node_modules/resolve": { + "version": "2.0.0-next.5", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.5.tgz", + "integrity": "sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-core-module": "^2.13.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/eslint-plugin-react/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/eslint-scope": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.2.0.tgz", + "integrity": "sha512-PHlWUfG6lvPc3yvP5A4PNyBL1W8fkDUccmI21JUu/+GKZBoH/W5u6usENXUrWFRsyoW5ACUjFGgAFQp5gUlb/A==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/eslint/node_modules/eslint-visitor-keys": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.0.tgz", + "integrity": "sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/espree": { + "version": "10.3.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-10.3.0.tgz", + "integrity": "sha512-0QYC8b24HWY8zjRnDTL6RiHfDbAWn63qb4LMj1Z4b076A4une81+z03Kg7l7mn/48PUTqoLptSXez8oknU8Clg==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "acorn": "^8.14.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^4.2.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/espree/node_modules/eslint-visitor-keys": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.0.tgz", + "integrity": "sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/esquery": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz", + "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "estraverse": "^5.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-glob": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", + "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/fast-glob/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "dev": true, + "license": "MIT" + }, + "node_modules/fastq": { + "version": "1.17.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz", + "integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==", + "dev": true, + "license": "ISC", + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/fault": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/fault/-/fault-1.0.4.tgz", + "integrity": "sha512-CJ0HCB5tL5fYTEA7ToAq5+kTwd++Borf1/bifxd9iT70QcXr4MRrO3Llf8Ifs70q+SJcGHFtnIE/Nw6giCtECA==", + "license": "MIT", + "dependencies": { + "format": "^0.2.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/file-entry-cache": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz", + "integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "flat-cache": "^4.0.0" + }, + "engines": { + "node": ">=16.0.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, + "license": "MIT", + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "license": "MIT", + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/flat-cache": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz", + "integrity": "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==", + "dev": true, + "license": "MIT", + "dependencies": { + "flatted": "^3.2.9", + "keyv": "^4.5.4" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/flatted": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.1.tgz", + "integrity": "sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==", + "dev": true, + "license": "ISC" + }, + "node_modules/for-each": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", + "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-callable": "^1.1.3" + } + }, + "node_modules/foreground-child": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.0.tgz", + "integrity": "sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==", + "dev": true, + "license": "ISC", + "dependencies": { + "cross-spawn": "^7.0.0", + "signal-exit": "^4.0.1" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/format": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/format/-/format-0.2.2.tgz", + "integrity": "sha512-wzsgA6WOq+09wrU1tsJ09udeR/YZRaeArL9e1wPbFg3GG2yDnC2ldKpxs4xunpFF9DgqCqOIra3bc1HWrJ37Ww==", + "engines": { + "node": ">=0.4.x" + } + }, + "node_modules/framer-motion": { + "version": "11.11.11", + "resolved": "https://registry.npmjs.org/framer-motion/-/framer-motion-11.11.11.tgz", + "integrity": "sha512-tuDH23ptJAKUHGydJQII9PhABNJBpB+z0P1bmgKK9QFIssHGlfPd6kxMq00LSKwE27WFsb2z0ovY0bpUyMvfRw==", + "license": "MIT", + "dependencies": { + "tslib": "^2.4.0" + }, + "peerDependencies": { + "@emotion/is-prop-valid": "*", + "react": "^18.0.0", + "react-dom": "^18.0.0" + }, + "peerDependenciesMeta": { + "@emotion/is-prop-valid": { + "optional": true + }, + "react": { + "optional": true + }, + "react-dom": { + "optional": true + } + } + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/function.prototype.name": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.6.tgz", + "integrity": "sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "functions-have-names": "^1.2.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/functions-have-names": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", + "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/fuse.js": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/fuse.js/-/fuse.js-7.0.0.tgz", + "integrity": "sha512-14F4hBIxqKvD4Zz/XjDc3y94mNZN6pRv3U13Udo0lNLCWRBUsrMv2xwcF/y/Z5sV6+FQW+/ow68cHpm4sunt8Q==", + "license": "Apache-2.0", + "engines": { + "node": ">=10" + } + }, + "node_modules/get-intrinsic": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", + "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "hasown": "^2.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-nonce": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/get-nonce/-/get-nonce-1.0.1.tgz", + "integrity": "sha512-FJhYRoDaiatfEkUK8HKlicmu/3SGFD51q3itKDGoSTysQJBnfOcxU5GxnhE1E6soB76MbT0MBtnKJuXyAx+96Q==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/get-symbol-description": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.2.tgz", + "integrity": "sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.5", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-tsconfig": { + "version": "4.8.1", + "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.8.1.tgz", + "integrity": "sha512-k9PN+cFBmaLWtVz29SkUoqU5O0slLuHJXt/2P+tMVFT+phsSGXGkp9t3rQIqdz0e+06EHNGs3oM6ZX1s2zHxRg==", + "dev": true, + "license": "MIT", + "dependencies": { + "resolve-pkg-maps": "^1.0.0" + }, + "funding": { + "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1" + } + }, + "node_modules/glob": { + "version": "10.4.5", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", + "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", + "dev": true, + "license": "ISC", + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^1.11.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/globals": { + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-14.0.0.tgz", + "integrity": "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/globalthis": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.4.tgz", + "integrity": "sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "define-properties": "^1.2.1", + "gopd": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/gopd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", + "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "dev": true, + "license": "MIT", + "dependencies": { + "get-intrinsic": "^1.1.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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, + "license": "ISC" + }, + "node_modules/graphemer": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", + "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", + "dev": true, + "license": "MIT" + }, + "node_modules/has-bigints": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", + "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/has-property-descriptors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", + "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-define-property": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-proto": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz", + "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-tostringtag": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-symbols": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/hast-util-parse-selector": { + "version": "2.2.5", + "resolved": "https://registry.npmjs.org/hast-util-parse-selector/-/hast-util-parse-selector-2.2.5.tgz", + "integrity": "sha512-7j6mrk/qqkSehsM92wQjdIgWM2/BW61u/53G6xmC8i1OmEdKLHbk419QKQUjz6LglWsfqoiHmyMRkP1BGjecNQ==", + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hastscript": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/hastscript/-/hastscript-6.0.0.tgz", + "integrity": "sha512-nDM6bvd7lIqDUiYEiu5Sl/+6ReP0BMk/2f4U/Rooccxkj0P5nm+acM5PrGJ/t5I8qPGiqZSE6hVAwZEdZIvP4w==", + "license": "MIT", + "dependencies": { + "@types/hast": "^2.0.0", + "comma-separated-tokens": "^1.0.0", + "hast-util-parse-selector": "^2.0.0", + "property-information": "^5.0.0", + "space-separated-tokens": "^1.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/highlight.js": { + "version": "10.7.3", + "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-10.7.3.tgz", + "integrity": "sha512-tzcUFauisWKNHaRkN4Wjl/ZA07gENAjFl3J/c480dprkGTg5EQstgaNFqBfUqCq54kZRIEcreTsAgF/m2quD7A==", + "license": "BSD-3-Clause", + "engines": { + "node": "*" + } + }, + "node_modules/highlightjs-vue": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/highlightjs-vue/-/highlightjs-vue-1.0.0.tgz", + "integrity": "sha512-PDEfEF102G23vHmPhLyPboFCD+BkMGu+GuJe2d9/eH4FsCwvgBpnc9n0pGE+ffKdph38s6foEZiEjdgHdzp+IA==", + "license": "CC0-1.0" + }, + "node_modules/ignore": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", + "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "dev": true, + "license": "MIT", + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/internal-slot": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.7.tgz", + "integrity": "sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "hasown": "^2.0.0", + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/invariant": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", + "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", + "license": "MIT", + "dependencies": { + "loose-envify": "^1.0.0" + } + }, + "node_modules/is-alphabetical": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-1.0.4.tgz", + "integrity": "sha512-DwzsA04LQ10FHTZuL0/grVDk4rFoVH1pjAToYwBrHSxcrBIGQuXrQMtD5U1b0U2XVgKZCTLLP8u2Qxqhy3l2Vg==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/is-alphanumerical": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-1.0.4.tgz", + "integrity": "sha512-UzoZUr+XfVz3t3v4KyGEniVL9BDRoQtY7tOyrRybkVNjDFWyo1yhXNGrrBTQxp3ib9BLAWs7k2YKBQsFRkZG9A==", + "license": "MIT", + "dependencies": { + "is-alphabetical": "^1.0.0", + "is-decimal": "^1.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/is-array-buffer": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.4.tgz", + "integrity": "sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-arrayish": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", + "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==", + "license": "MIT" + }, + "node_modules/is-async-function": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-async-function/-/is-async-function-2.0.0.tgz", + "integrity": "sha512-Y1JXKrfykRJGdlDwdKlLpLyMIiWqWvuSd17TvZk68PLAOGOoF4Xyav1z0Xhoi+gCYjZVeC5SI+hYFOfvXmGRCA==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-bigint": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", + "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-bigints": "^1.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "license": "MIT", + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-boolean-object": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", + "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-bun-module": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/is-bun-module/-/is-bun-module-1.2.1.tgz", + "integrity": "sha512-AmidtEM6D6NmUiLOvvU7+IePxjEjOzra2h0pSrsfSAcXwl/83zLLXDByafUJy9k/rKK0pvXMLdwKwGHlX2Ke6Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "semver": "^7.6.3" + } + }, + "node_modules/is-callable": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", + "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-core-module": { + "version": "2.15.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.15.1.tgz", + "integrity": "sha512-z0vtXSwucUJtANQWldhbtbt7BnL0vxiFjIdDLAatwhDYty2bad6s+rijD6Ri4YuYJubLzIJLUidCh09e1djEVQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-data-view": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.1.tgz", + "integrity": "sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-date-object": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", + "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-decimal": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-decimal/-/is-decimal-1.0.4.tgz", + "integrity": "sha512-RGdriMmQQvZ2aqaQq3awNA6dCGtKpiDFcOzrTWrDAT2MiWrKQVPmxLGHl7Y2nNu6led0kEyoX0enY0qXYsv9zw==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "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, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-finalizationregistry": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-finalizationregistry/-/is-finalizationregistry-1.0.2.tgz", + "integrity": "sha512-0by5vtUJs8iFQb5TYUHHPudOR+qXYIMKtiUzvLIZITZUjknFmziyBJuLhVRc+Ds0dREFlskDNJKYIdIzu/9pfw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-generator-function": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz", + "integrity": "sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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, + "license": "MIT", + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-hexadecimal": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-1.0.4.tgz", + "integrity": "sha512-gyPJuv83bHMpocVYoqof5VDiZveEoGoFL8m3BXNb2VW8Xs+rz9kqO8LOQ5DH6EsuvilT1ApazU0pyl+ytbPtlw==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/is-map": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.3.tgz", + "integrity": "sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-negative-zero": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.3.tgz", + "integrity": "sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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, + "license": "MIT", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-number-object": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", + "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-regex": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", + "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-set": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.3.tgz", + "integrity": "sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-shared-array-buffer": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.3.tgz", + "integrity": "sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-string": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", + "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-symbol": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", + "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-symbols": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-typed-array": { + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.13.tgz", + "integrity": "sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==", + "dev": true, + "license": "MIT", + "dependencies": { + "which-typed-array": "^1.1.14" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-weakmap": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.2.tgz", + "integrity": "sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-weakref": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", + "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-weakset": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.3.tgz", + "integrity": "sha512-LvIm3/KWzS9oRFHugab7d+M/GcBXuXX5xZkzPmN+NxihdQlZUQ4dWuSV1xR/sq6upL1TJEDrfBgRepHFdBtSNQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "get-intrinsic": "^1.2.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "dev": true, + "license": "MIT" + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true, + "license": "ISC" + }, + "node_modules/iterator.prototype": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/iterator.prototype/-/iterator.prototype-1.1.3.tgz", + "integrity": "sha512-FW5iMbeQ6rBGm/oKgzq2aW4KvAGpxPzYES8N4g4xNXUKpL1mclMvOe+76AcLDTvD+Ze+sOpVhgdAQEKF4L9iGQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "define-properties": "^1.2.1", + "get-intrinsic": "^1.2.1", + "has-symbols": "^1.0.3", + "reflect.getprototypeof": "^1.0.4", + "set-function-name": "^2.0.1" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/jackspeak": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", + "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "@isaacs/cliui": "^8.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + }, + "optionalDependencies": { + "@pkgjs/parseargs": "^0.11.0" + } + }, + "node_modules/jiti": { + "version": "1.21.6", + "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.6.tgz", + "integrity": "sha512-2yTgeWTWzMWkHu6Jp9NKgePDaYHbntiwvYuuJLbbN9vl7DC9DvXKOB2BC3ZZ92D3cvV/aflH0osDfwpHepQ53w==", + "dev": true, + "license": "MIT", + "bin": { + "jiti": "bin/jiti.js" + } + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "license": "MIT" + }, + "node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "license": "MIT", + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/json-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true, + "license": "MIT" + }, + "node_modules/json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", + "dev": true, + "license": "MIT" + }, + "node_modules/json5": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", + "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", + "dev": true, + "license": "MIT", + "dependencies": { + "minimist": "^1.2.0" + }, + "bin": { + "json5": "lib/cli.js" + } + }, + "node_modules/jsx-ast-utils": { + "version": "3.3.5", + "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.5.tgz", + "integrity": "sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "array-includes": "^3.1.6", + "array.prototype.flat": "^1.3.1", + "object.assign": "^4.1.4", + "object.values": "^1.1.6" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/keyv": { + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", + "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", + "dev": true, + "license": "MIT", + "dependencies": { + "json-buffer": "3.0.1" + } + }, + "node_modules/language-subtag-registry": { + "version": "0.3.23", + "resolved": "https://registry.npmjs.org/language-subtag-registry/-/language-subtag-registry-0.3.23.tgz", + "integrity": "sha512-0K65Lea881pHotoGEa5gDlMxt3pctLi2RplBb7Ezh4rRdLEOtgi7n4EwK9lamnUCkKBqaeKRVebTq6BAxSkpXQ==", + "dev": true, + "license": "CC0-1.0" + }, + "node_modules/language-tags": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/language-tags/-/language-tags-1.0.9.tgz", + "integrity": "sha512-MbjN408fEndfiQXbFQ1vnd+1NoLDsnQW41410oQBXiyXDMYH5z505juWa4KUE1LqxRC7DgOgZDbKLxHIwm27hA==", + "dev": true, + "license": "MIT", + "dependencies": { + "language-subtag-registry": "^0.3.20" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/lilconfig": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz", + "integrity": "sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + } + }, + "node_modules/lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", + "dev": true, + "license": "MIT" + }, + "node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/loose-envify": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "license": "MIT", + "dependencies": { + "js-tokens": "^3.0.0 || ^4.0.0" + }, + "bin": { + "loose-envify": "cli.js" + } + }, + "node_modules/lowlight": { + "version": "1.20.0", + "resolved": "https://registry.npmjs.org/lowlight/-/lowlight-1.20.0.tgz", + "integrity": "sha512-8Ktj+prEb1RoCPkEOrPMYUN/nCggB7qAWe3a7OpMjWQkh3l2RD5wKRQ+o8Q8YuI9RG/xs95waaI/E6ym/7NsTw==", + "license": "MIT", + "dependencies": { + "fault": "^1.0.0", + "highlight.js": "~10.7.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/lucide-react": { + "version": "0.453.0", + "resolved": "https://registry.npmjs.org/lucide-react/-/lucide-react-0.453.0.tgz", + "integrity": "sha512-kL+RGZCcJi9BvJtzg2kshO192Ddy9hv3ij+cPrVPWSRzgCWCVazoQJxOjAwgK53NomL07HB7GPHW120FimjNhQ==", + "license": "ISC", + "peerDependencies": { + "react": "^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0-rc" + } + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true, + "license": "MIT", + "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, + "license": "MIT", + "dependencies": { + "braces": "^3.0.3", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/mini-svg-data-uri": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/mini-svg-data-uri/-/mini-svg-data-uri-1.4.4.tgz", + "integrity": "sha512-r9deDe9p5FJUPZAk3A59wGH7Ii9YrjjWw0jmw/liSbHl2CHiyXj6FcDXDu2K3TjVAXqiJdaw3xxwlZZr9E6nHg==", + "license": "MIT", + "bin": { + "mini-svg-data-uri": "cli.js" + } + }, + "node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/mitt": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/mitt/-/mitt-3.0.1.tgz", + "integrity": "sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw==", + "license": "MIT" + }, + "node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true, + "license": "MIT" + }, + "node_modules/mz": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", + "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "any-promise": "^1.0.0", + "object-assign": "^4.0.1", + "thenify-all": "^1.0.0" + } + }, + "node_modules/nanoid": { + "version": "3.3.7", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", + "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "dev": true, + "license": "MIT" + }, + "node_modules/next": { + "version": "15.0.2", + "resolved": "https://registry.npmjs.org/next/-/next-15.0.2.tgz", + "integrity": "sha512-rxIWHcAu4gGSDmwsELXacqAPUk+j8dV/A9cDF5fsiCMpkBDYkO2AEaL1dfD+nNmDiU6QMCFN8Q30VEKapT9UHQ==", + "license": "MIT", + "dependencies": { + "@next/env": "15.0.2", + "@swc/counter": "0.1.3", + "@swc/helpers": "0.5.13", + "busboy": "1.6.0", + "caniuse-lite": "^1.0.30001579", + "postcss": "8.4.31", + "styled-jsx": "5.1.6" + }, + "bin": { + "next": "dist/bin/next" + }, + "engines": { + "node": ">=18.18.0" + }, + "optionalDependencies": { + "@next/swc-darwin-arm64": "15.0.2", + "@next/swc-darwin-x64": "15.0.2", + "@next/swc-linux-arm64-gnu": "15.0.2", + "@next/swc-linux-arm64-musl": "15.0.2", + "@next/swc-linux-x64-gnu": "15.0.2", + "@next/swc-linux-x64-musl": "15.0.2", + "@next/swc-win32-arm64-msvc": "15.0.2", + "@next/swc-win32-x64-msvc": "15.0.2", + "sharp": "^0.33.5" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.1.0", + "@playwright/test": "^1.41.2", + "babel-plugin-react-compiler": "*", + "react": "^18.2.0 || 19.0.0-rc-02c0e824-20241028", + "react-dom": "^18.2.0 || 19.0.0-rc-02c0e824-20241028", + "sass": "^1.3.0" + }, + "peerDependenciesMeta": { + "@opentelemetry/api": { + "optional": true + }, + "@playwright/test": { + "optional": true + }, + "babel-plugin-react-compiler": { + "optional": true + }, + "sass": { + "optional": true + } + } + }, + "node_modules/next-themes": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/next-themes/-/next-themes-0.3.0.tgz", + "integrity": "sha512-/QHIrsYpd6Kfk7xakK4svpDI5mmXP0gfvCoJdGpZQ2TOrQZmsW0QxjaiLn8wbIKjtm4BTSqLoix4lxYYOnLJ/w==", + "license": "MIT", + "peerDependencies": { + "react": "^16.8 || ^17 || ^18", + "react-dom": "^16.8 || ^17 || ^18" + } + }, + "node_modules/next/node_modules/postcss": { + "version": "8.4.31", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.31.tgz", + "integrity": "sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "nanoid": "^3.3.6", + "picocolors": "^1.0.0", + "source-map-js": "^1.0.2" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/nuqs": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/nuqs/-/nuqs-2.1.1.tgz", + "integrity": "sha512-iM2H8lMmhvk9bxupUs2oRle9usRNEAqppOkTMXOxD/uK85gOKAubU7T2zmPo8fnYQS4n5e/XswTiq+gLYGpy3w==", + "license": "MIT", + "dependencies": { + "mitt": "^3.0.1" + }, + "peerDependencies": { + "@remix-run/react": ">= 2", + "next": ">= 14.2.0", + "react": ">= 18.2.0", + "react-router-dom": ">= 6" + }, + "peerDependenciesMeta": { + "@remix-run/react": { + "optional": true + }, + "next": { + "optional": true + }, + "react-router-dom": { + "optional": true + } + } + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-hash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz", + "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "node_modules/object-inspect": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.2.tgz", + "integrity": "sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.assign": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.5.tgz", + "integrity": "sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.5", + "define-properties": "^1.2.1", + "has-symbols": "^1.0.3", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.entries": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.8.tgz", + "integrity": "sha512-cmopxi8VwRIAw/fkijJohSfpef5PdN0pMQJN6VC/ZKvn0LIknWD8KtgY6KlQdEc4tIjcQ3HxSMmnvtzIscdaYQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.fromentries": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.8.tgz", + "integrity": "sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.groupby": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/object.groupby/-/object.groupby-1.0.3.tgz", + "integrity": "sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.values": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.2.0.tgz", + "integrity": "sha512-yBYjY9QX2hnRmZHAjG/f13MzmBzxzYgQhFrke06TTyKY5zSTEqkOeukBzIdVA3j3ulu8Qa3MbVFShV7T2RmGtQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/optionator": { + "version": "0.9.4", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", + "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", + "dev": true, + "license": "MIT", + "dependencies": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.5" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/package-json-from-dist": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz", + "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==", + "dev": true, + "license": "BlueOak-1.0.0" + }, + "node_modules/parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "license": "MIT", + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/parse-entities": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-2.0.0.tgz", + "integrity": "sha512-kkywGpCcRYhqQIchaWqZ875wzpS/bMKhz5HnN3p7wveJTkTtyAB/AlnS0f8DFSqYW1T82t6yEAkEcB+A1I3MbQ==", + "license": "MIT", + "dependencies": { + "character-entities": "^1.0.0", + "character-entities-legacy": "^1.0.0", + "character-reference-invalid": "^1.0.0", + "is-alphanumerical": "^1.0.0", + "is-decimal": "^1.0.0", + "is-hexadecimal": "^1.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true, + "license": "MIT" + }, + "node_modules/path-scurry": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", + "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "lru-cache": "^10.2.0", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" + }, + "engines": { + "node": ">=16 || 14 >=14.18" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "license": "ISC" + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/pirates": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz", + "integrity": "sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "node_modules/pocketbase": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/pocketbase/-/pocketbase-0.21.5.tgz", + "integrity": "sha512-bnI/uinnQps+ElSlzxkc4yvwuSFfKcoszDtXH/4QT2FhGq2mJVUvDlxn+rjRXVntUjPfmMG5LEPZ1eGqV6ssog==", + "license": "MIT" + }, + "node_modules/possible-typed-array-names": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz", + "integrity": "sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/postcss": { + "version": "8.4.47", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.47.tgz", + "integrity": "sha512-56rxCq7G/XfB4EkXq9Egn5GCqugWvDFjafDOThIdMBsI15iqPqR5r15TfSr1YPYeEI19YeaXMCbY6u88Y76GLQ==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "nanoid": "^3.3.7", + "picocolors": "^1.1.0", + "source-map-js": "^1.2.1" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/postcss-import": { + "version": "15.1.0", + "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-15.1.0.tgz", + "integrity": "sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==", + "dev": true, + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.0.0", + "read-cache": "^1.0.0", + "resolve": "^1.1.7" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "postcss": "^8.0.0" + } + }, + "node_modules/postcss-js": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.0.1.tgz", + "integrity": "sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==", + "dev": true, + "license": "MIT", + "dependencies": { + "camelcase-css": "^2.0.1" + }, + "engines": { + "node": "^12 || ^14 || >= 16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + "peerDependencies": { + "postcss": "^8.4.21" + } + }, + "node_modules/postcss-load-config": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-4.0.2.tgz", + "integrity": "sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "lilconfig": "^3.0.0", + "yaml": "^2.3.4" + }, + "engines": { + "node": ">= 14" + }, + "peerDependencies": { + "postcss": ">=8.0.9", + "ts-node": ">=9.0.0" + }, + "peerDependenciesMeta": { + "postcss": { + "optional": true + }, + "ts-node": { + "optional": true + } + } + }, + "node_modules/postcss-load-config/node_modules/lilconfig": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.2.tgz", + "integrity": "sha512-eop+wDAvpItUys0FWkHIKeC9ybYrTGbU41U5K7+bttZZeohvnY7M9dZ5kB21GNWiFT2q1OoPTvncPCgSOVO5ow==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/antonk52" + } + }, + "node_modules/postcss-nested": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-6.2.0.tgz", + "integrity": "sha512-HQbt28KulC5AJzG+cZtj9kvKB93CFCdLvog1WFLf1D+xmMvPGlBstkpTEZfK5+AN9hfJocyBFCNiqyS48bpgzQ==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "postcss-selector-parser": "^6.1.1" + }, + "engines": { + "node": ">=12.0" + }, + "peerDependencies": { + "postcss": "^8.2.14" + } + }, + "node_modules/postcss-selector-parser": { + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz", + "integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==", + "dev": true, + "license": "MIT", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-value-parser": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", + "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", + "license": "MIT" + }, + "node_modules/prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/prettier": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.3.3.tgz", + "integrity": "sha512-i2tDNA0O5IrMO757lfrdQZCc2jPNDVntV0m/+4whiDfWaTKfMNgR7Qz0NAeGz/nRqF4m5/6CLzbP4/liHt12Ew==", + "dev": true, + "license": "MIT", + "bin": { + "prettier": "bin/prettier.cjs" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" + } + }, + "node_modules/prettier-plugin-organize-imports": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/prettier-plugin-organize-imports/-/prettier-plugin-organize-imports-4.1.0.tgz", + "integrity": "sha512-5aWRdCgv645xaa58X8lOxzZoiHAldAPChljr/MT0crXVOWTZ+Svl4hIWlz+niYSlO6ikE5UXkN1JrRvIP2ut0A==", + "license": "MIT", + "peerDependencies": { + "prettier": ">=2.0", + "typescript": ">=2.9", + "vue-tsc": "^2.1.0" + }, + "peerDependenciesMeta": { + "vue-tsc": { + "optional": true + } + } + }, + "node_modules/prettier-plugin-tailwindcss": { + "version": "0.6.8", + "resolved": "https://registry.npmjs.org/prettier-plugin-tailwindcss/-/prettier-plugin-tailwindcss-0.6.8.tgz", + "integrity": "sha512-dGu3kdm7SXPkiW4nzeWKCl3uoImdd5CTZEJGxyypEPL37Wj0HT2pLqjrvSei1nTeuQfO4PUfjeW5cTUNRLZ4sA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14.21.3" + }, + "peerDependencies": { + "@ianvs/prettier-plugin-sort-imports": "*", + "@prettier/plugin-pug": "*", + "@shopify/prettier-plugin-liquid": "*", + "@trivago/prettier-plugin-sort-imports": "*", + "@zackad/prettier-plugin-twig-melody": "*", + "prettier": "^3.0", + "prettier-plugin-astro": "*", + "prettier-plugin-css-order": "*", + "prettier-plugin-import-sort": "*", + "prettier-plugin-jsdoc": "*", + "prettier-plugin-marko": "*", + "prettier-plugin-multiline-arrays": "*", + "prettier-plugin-organize-attributes": "*", + "prettier-plugin-organize-imports": "*", + "prettier-plugin-sort-imports": "*", + "prettier-plugin-style-order": "*", + "prettier-plugin-svelte": "*" + }, + "peerDependenciesMeta": { + "@ianvs/prettier-plugin-sort-imports": { + "optional": true + }, + "@prettier/plugin-pug": { + "optional": true + }, + "@shopify/prettier-plugin-liquid": { + "optional": true + }, + "@trivago/prettier-plugin-sort-imports": { + "optional": true + }, + "@zackad/prettier-plugin-twig-melody": { + "optional": true + }, + "prettier-plugin-astro": { + "optional": true + }, + "prettier-plugin-css-order": { + "optional": true + }, + "prettier-plugin-import-sort": { + "optional": true + }, + "prettier-plugin-jsdoc": { + "optional": true + }, + "prettier-plugin-marko": { + "optional": true + }, + "prettier-plugin-multiline-arrays": { + "optional": true + }, + "prettier-plugin-organize-attributes": { + "optional": true + }, + "prettier-plugin-organize-imports": { + "optional": true + }, + "prettier-plugin-sort-imports": { + "optional": true + }, + "prettier-plugin-style-order": { + "optional": true + }, + "prettier-plugin-svelte": { + "optional": true + } + } + }, + "node_modules/prismjs": { + "version": "1.29.0", + "resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.29.0.tgz", + "integrity": "sha512-Kx/1w86q/epKcmte75LNrEoT+lX8pBpavuAbvJWRXar7Hz8jrtF+e3vY751p0R8H9HdArwaCTNDDzHg/ScJK1Q==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/prop-types": { + "version": "15.8.1", + "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", + "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", + "dev": true, + "license": "MIT", + "dependencies": { + "loose-envify": "^1.4.0", + "object-assign": "^4.1.1", + "react-is": "^16.13.1" + } + }, + "node_modules/property-information": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/property-information/-/property-information-5.6.0.tgz", + "integrity": "sha512-YUHSPk+A30YPv+0Qf8i9Mbfe/C0hdPXk1s1jPVToV8pk8BQtpw10ct89Eo7OWkutrwqvT0eicAxlOg3dOAu8JA==", + "license": "MIT", + "dependencies": { + "xtend": "^4.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/react": { + "version": "19.0.0-rc-02c0e824-20241028", + "resolved": "https://registry.npmjs.org/react/-/react-19.0.0-rc-02c0e824-20241028.tgz", + "integrity": "sha512-GbZ7hpPHQMiEu53BqEaPQVM/4GG4hARo+mqEEnx4rYporDvNvUjutiAFxYFSbu6sgHwcr7LeFv8htEOwALVA2A==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-code-blocks": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/react-code-blocks/-/react-code-blocks-0.1.6.tgz", + "integrity": "sha512-ENNuxG07yO+OuX1ChRje3ieefPRz6yrIpHmebQlaFQgzcAHbUfVeTINpOpoI9bSRSObeYo/OdHsporeToZ7fcg==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.10.4", + "react-syntax-highlighter": "^15.5.0", + "styled-components": "^6.1.0", + "tslib": "^2.6.0" + }, + "engines": { + "node": ">=16" + }, + "peerDependencies": { + "react": ">=16" + } + }, + "node_modules/react-dom": { + "version": "19.0.0-rc-02c0e824-20241028", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.0.0-rc-02c0e824-20241028.tgz", + "integrity": "sha512-LrZf3DfHL6Fs07wwlUCHrzFTCMM19yA99MvJpfLokN4I2nBAZvREGZjZAn8VPiSfN72+i9j1eL4wB8gC695F3Q==", + "license": "MIT", + "dependencies": { + "scheduler": "0.25.0-rc-02c0e824-20241028" + }, + "peerDependencies": { + "react": "19.0.0-rc-02c0e824-20241028" + } + }, + "node_modules/react-icons": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/react-icons/-/react-icons-5.3.0.tgz", + "integrity": "sha512-DnUk8aFbTyQPSkCfF8dbX6kQjXA9DktMeJqfjrg6cK9vwQVMxmcA3BfP4QoiztVmEHtwlTgLFsPuH2NskKT6eg==", + "license": "MIT", + "peerDependencies": { + "react": "*" + } + }, + "node_modules/react-is": { + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/react-remove-scroll": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/react-remove-scroll/-/react-remove-scroll-2.6.0.tgz", + "integrity": "sha512-I2U4JVEsQenxDAKaVa3VZ/JeJZe0/2DxPWL8Tj8yLKctQJQiZM52pn/GWFpSp8dftjM3pSAHVJZscAnC/y+ySQ==", + "license": "MIT", + "dependencies": { + "react-remove-scroll-bar": "^2.3.6", + "react-style-singleton": "^2.2.1", + "tslib": "^2.1.0", + "use-callback-ref": "^1.3.0", + "use-sidecar": "^1.1.2" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/react-remove-scroll-bar": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/react-remove-scroll-bar/-/react-remove-scroll-bar-2.3.6.tgz", + "integrity": "sha512-DtSYaao4mBmX+HDo5YWYdBWQwYIQQshUV/dVxFxK+KM26Wjwp1gZ6rv6OC3oujI6Bfu6Xyg3TwK533AQutsn/g==", + "license": "MIT", + "dependencies": { + "react-style-singleton": "^2.2.1", + "tslib": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/react-simple-typewriter": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/react-simple-typewriter/-/react-simple-typewriter-5.0.1.tgz", + "integrity": "sha512-vA5HkABwJKL/DJ4RshSlY/igdr+FiVY4MLsSQYJX6FZG/f1/VwN4y1i3mPXRyfaswrvI8xii1kOVe1dYtO2Row==", + "license": "MIT", + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "react": ">=18.0.0", + "react-dom": ">=18.0.0" + } + }, + "node_modules/react-style-singleton": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/react-style-singleton/-/react-style-singleton-2.2.1.tgz", + "integrity": "sha512-ZWj0fHEMyWkHzKYUr2Bs/4zU6XLmq9HsgBURm7g5pAVfyn49DgUiNgY2d4lXRlYSiCif9YBGpQleewkcqddc7g==", + "license": "MIT", + "dependencies": { + "get-nonce": "^1.0.0", + "invariant": "^2.2.4", + "tslib": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/react-syntax-highlighter": { + "version": "15.6.1", + "resolved": "https://registry.npmjs.org/react-syntax-highlighter/-/react-syntax-highlighter-15.6.1.tgz", + "integrity": "sha512-OqJ2/vL7lEeV5zTJyG7kmARppUjiB9h9udl4qHQjjgEos66z00Ia0OckwYfRxCSFrW8RJIBnsBwQsHZbVPspqg==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.3.1", + "highlight.js": "^10.4.1", + "highlightjs-vue": "^1.0.0", + "lowlight": "^1.17.0", + "prismjs": "^1.27.0", + "refractor": "^3.6.0" + }, + "peerDependencies": { + "react": ">= 0.14.0" + } + }, + "node_modules/read-cache": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", + "integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==", + "dev": true, + "license": "MIT", + "dependencies": { + "pify": "^2.3.0" + } + }, + "node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "license": "MIT", + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/reflect.getprototypeof": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.6.tgz", + "integrity": "sha512-fmfw4XgoDke3kdI6h4xcUz1dG8uaiv5q9gcEwLS4Pnth2kxT+GZ7YehS1JTMGBQmtV7Y4GFGbs2re2NqhdozUg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.1", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.4", + "globalthis": "^1.0.3", + "which-builtin-type": "^1.1.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/refractor": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/refractor/-/refractor-3.6.0.tgz", + "integrity": "sha512-MY9W41IOWxxk31o+YvFCNyNzdkc9M20NoZK5vq6jkv4I/uh2zkWcfudj0Q1fovjUQJrNewS9NMzeTtqPf+n5EA==", + "license": "MIT", + "dependencies": { + "hastscript": "^6.0.0", + "parse-entities": "^2.0.0", + "prismjs": "~1.27.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/refractor/node_modules/prismjs": { + "version": "1.27.0", + "resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.27.0.tgz", + "integrity": "sha512-t13BGPUlFDR7wRB5kQDG4jjl7XeuH6jbJGt11JHPL96qwsEHNX2+68tFXqc1/k+/jALsbSWJKUOT/hcYAZ5LkA==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/regenerator-runtime": { + "version": "0.14.1", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz", + "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==", + "license": "MIT" + }, + "node_modules/regexp.prototype.flags": { + "version": "1.5.3", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.3.tgz", + "integrity": "sha512-vqlC04+RQoFalODCbCumG2xIOvapzVMHwsyIGM/SIE8fRhFFsXeH8/QQ+s0T0kDAhKc4k30s73/0ydkHQz6HlQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-errors": "^1.3.0", + "set-function-name": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/resolve": { + "version": "1.22.8", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", + "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-core-module": "^2.13.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/resolve-pkg-maps": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz", + "integrity": "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/privatenumber/resolve-pkg-maps?sponsor=1" + } + }, + "node_modules/reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dev": true, + "license": "MIT", + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/safe-array-concat": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.2.tgz", + "integrity": "sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "get-intrinsic": "^1.2.4", + "has-symbols": "^1.0.3", + "isarray": "^2.0.5" + }, + "engines": { + "node": ">=0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/safe-regex-test": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.3.tgz", + "integrity": "sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.6", + "es-errors": "^1.3.0", + "is-regex": "^1.1.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/scheduler": { + "version": "0.25.0-rc-02c0e824-20241028", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.25.0-rc-02c0e824-20241028.tgz", + "integrity": "sha512-GysnKjmMSaWcwsKTLzeJO0IhU3EyIiC0ivJKE6yDNLqt3IMxDByx8b6lSNXRNdN+ULUY0WLLjSPaZ0LuU/GnTg==", + "license": "MIT" + }, + "node_modules/semver": { + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/server-only": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/server-only/-/server-only-0.0.1.tgz", + "integrity": "sha512-qepMx2JxAa5jjfzxG79yPPq+8BuFToHd1hm7kI+Z4zAq1ftQiP7HcxMhDDItrbtwVeLg/cY2JnKnrcFkmiswNA==", + "license": "MIT" + }, + "node_modules/set-function-length": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", + "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", + "dev": true, + "license": "MIT", + "dependencies": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/set-function-name": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.2.tgz", + "integrity": "sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "functions-have-names": "^1.2.3", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/shallowequal": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/shallowequal/-/shallowequal-1.1.0.tgz", + "integrity": "sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ==", + "license": "MIT" + }, + "node_modules/sharp": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.33.5.tgz", + "integrity": "sha512-haPVm1EkS9pgvHrQ/F3Xy+hgcuMV0Wm9vfIBSiwZ05k+xgb0PkBQpGsAA/oWdDobNaZTH5ppvHtzCFbnSEwHVw==", + "hasInstallScript": true, + "license": "Apache-2.0", + "dependencies": { + "color": "^4.2.3", + "detect-libc": "^2.0.3", + "semver": "^7.6.3" + }, + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-darwin-arm64": "0.33.5", + "@img/sharp-darwin-x64": "0.33.5", + "@img/sharp-libvips-darwin-arm64": "1.0.4", + "@img/sharp-libvips-darwin-x64": "1.0.4", + "@img/sharp-libvips-linux-arm": "1.0.5", + "@img/sharp-libvips-linux-arm64": "1.0.4", + "@img/sharp-libvips-linux-s390x": "1.0.4", + "@img/sharp-libvips-linux-x64": "1.0.4", + "@img/sharp-libvips-linuxmusl-arm64": "1.0.4", + "@img/sharp-libvips-linuxmusl-x64": "1.0.4", + "@img/sharp-linux-arm": "0.33.5", + "@img/sharp-linux-arm64": "0.33.5", + "@img/sharp-linux-s390x": "0.33.5", + "@img/sharp-linux-x64": "0.33.5", + "@img/sharp-linuxmusl-arm64": "0.33.5", + "@img/sharp-linuxmusl-x64": "0.33.5", + "@img/sharp-wasm32": "0.33.5", + "@img/sharp-win32-ia32": "0.33.5", + "@img/sharp-win32-x64": "0.33.5" + } + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/side-channel": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz", + "integrity": "sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.4", + "object-inspect": "^1.13.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/simple-icons": { + "version": "13.15.0", + "resolved": "https://registry.npmjs.org/simple-icons/-/simple-icons-13.15.0.tgz", + "integrity": "sha512-8SzFj9CvPlDnjDLISsAWTvpCs7om2zbSJZ1hNLRo6quWKLqFwjCD9opS24Q/yD0bdsnVHPpF0N3hitpHrY5u9w==", + "license": "CC0-1.0", + "engines": { + "node": ">=0.12.18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/simple-icons" + } + }, + "node_modules/simple-swizzle": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", + "integrity": "sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==", + "license": "MIT", + "dependencies": { + "is-arrayish": "^0.3.1" + } + }, + "node_modules/sonner": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/sonner/-/sonner-1.5.0.tgz", + "integrity": "sha512-FBjhG/gnnbN6FY0jaNnqZOMmB73R+5IiyYAw8yBj7L54ER7HB3fOSE5OFiQiE2iXWxeXKvg6fIP4LtVppHEdJA==", + "license": "MIT", + "peerDependencies": { + "react": "^18.0.0", + "react-dom": "^18.0.0" + } + }, + "node_modules/source-map-js": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/space-separated-tokens": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-1.1.5.tgz", + "integrity": "sha512-q/JSVd1Lptzhf5bkYm4ob4iWPjx0KiRe3sRFBNrVqbJkFaBm5vbbowy1mymoPNLRa52+oadOhJ+K49wsSeSjTA==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/streamsearch": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-1.1.0.tgz", + "integrity": "sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==", + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "dev": true, + "license": "MIT", + "dependencies": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/string-width-cjs": { + "name": "string-width", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width-cjs/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width-cjs/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true, + "license": "MIT" + }, + "node_modules/string-width-cjs/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string.prototype.includes": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/string.prototype.includes/-/string.prototype.includes-2.0.1.tgz", + "integrity": "sha512-o7+c9bW6zpAdJHTtujeePODAhkuicdAryFsfVKwA+wGw89wJ4GTY484WTucM9hLtDEOpOvI+aHnzqnC5lHp4Rg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.3" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/string.prototype.matchall": { + "version": "4.0.11", + "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.11.tgz", + "integrity": "sha512-NUdh0aDavY2og7IbBPenWqR9exH+E26Sv8e0/eTe1tltDGZL+GtBkDAnnyBtmekfK6/Dq3MkcGtzXFEd1LQrtg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "get-intrinsic": "^1.2.4", + "gopd": "^1.0.1", + "has-symbols": "^1.0.3", + "internal-slot": "^1.0.7", + "regexp.prototype.flags": "^1.5.2", + "set-function-name": "^2.0.2", + "side-channel": "^1.0.6" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.repeat": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/string.prototype.repeat/-/string.prototype.repeat-1.0.0.tgz", + "integrity": "sha512-0u/TldDbKD8bFCQ/4f5+mNRrXwZ8hg2w7ZR8wa16e8z9XpePWl3eGEcUD0OXpEH/VJH/2G3gjUtR3ZOiBe2S/w==", + "dev": true, + "license": "MIT", + "dependencies": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.5" + } + }, + "node_modules/string.prototype.trim": { + "version": "1.2.9", + "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.9.tgz", + "integrity": "sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.0", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimend": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.8.tgz", + "integrity": "sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimstart": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz", + "integrity": "sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/strip-ansi-cjs": { + "name": "strip-ansi", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi-cjs/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/styled-components": { + "version": "6.1.13", + "resolved": "https://registry.npmjs.org/styled-components/-/styled-components-6.1.13.tgz", + "integrity": "sha512-M0+N2xSnAtwcVAQeFEsGWFFxXDftHUD7XrKla06QbpUMmbmtFBMMTcKWvFXtWxuD5qQkB8iU5gk6QASlx2ZRMw==", + "license": "MIT", + "dependencies": { + "@emotion/is-prop-valid": "1.2.2", + "@emotion/unitless": "0.8.1", + "@types/stylis": "4.2.5", + "css-to-react-native": "3.2.0", + "csstype": "3.1.3", + "postcss": "8.4.38", + "shallowequal": "1.1.0", + "stylis": "4.3.2", + "tslib": "2.6.2" + }, + "engines": { + "node": ">= 16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/styled-components" + }, + "peerDependencies": { + "react": ">= 16.8.0", + "react-dom": ">= 16.8.0" + } + }, + "node_modules/styled-components/node_modules/postcss": { + "version": "8.4.38", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.38.tgz", + "integrity": "sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "nanoid": "^3.3.7", + "picocolors": "^1.0.0", + "source-map-js": "^1.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/styled-components/node_modules/tslib": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", + "license": "0BSD" + }, + "node_modules/styled-jsx": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/styled-jsx/-/styled-jsx-5.1.6.tgz", + "integrity": "sha512-qSVyDTeMotdvQYoHWLNGwRFJHC+i+ZvdBRYosOFgC+Wg1vx4frN2/RG/NA7SYqqvKNLf39P2LSRA2pu6n0XYZA==", + "license": "MIT", + "dependencies": { + "client-only": "0.0.1" + }, + "engines": { + "node": ">= 12.0.0" + }, + "peerDependencies": { + "react": ">= 16.8.0 || 17.x.x || ^18.0.0-0 || ^19.0.0-0" + }, + "peerDependenciesMeta": { + "@babel/core": { + "optional": true + }, + "babel-plugin-macros": { + "optional": true + } + } + }, + "node_modules/stylis": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/stylis/-/stylis-4.3.2.tgz", + "integrity": "sha512-bhtUjWd/z6ltJiQwg0dUfxEJ+W+jdqQd8TbWLWyeIJHlnsqmGLRFFd8e5mA0AZi/zx90smXRlN66YMTcaSFifg==", + "license": "MIT" + }, + "node_modules/sucrase": { + "version": "3.35.0", + "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.35.0.tgz", + "integrity": "sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.2", + "commander": "^4.0.0", + "glob": "^10.3.10", + "lines-and-columns": "^1.1.6", + "mz": "^2.7.0", + "pirates": "^4.0.1", + "ts-interface-checker": "^0.1.9" + }, + "bin": { + "sucrase": "bin/sucrase", + "sucrase-node": "bin/sucrase-node" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/tailwind-merge": { + "version": "2.5.4", + "resolved": "https://registry.npmjs.org/tailwind-merge/-/tailwind-merge-2.5.4.tgz", + "integrity": "sha512-0q8cfZHMu9nuYP/b5Shb7Y7Sh1B7Nnl5GqNr1U+n2p6+mybvRtayrQ+0042Z5byvTA8ihjlP8Odo8/VnHbZu4Q==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/dcastil" + } + }, + "node_modules/tailwindcss": { + "version": "3.4.14", + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.4.14.tgz", + "integrity": "sha512-IcSvOcTRcUtQQ7ILQL5quRDg7Xs93PdJEk1ZLbhhvJc7uj/OAhYOnruEiwnGgBvUtaUAJ8/mhSw1o8L2jCiENA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@alloc/quick-lru": "^5.2.0", + "arg": "^5.0.2", + "chokidar": "^3.5.3", + "didyoumean": "^1.2.2", + "dlv": "^1.1.3", + "fast-glob": "^3.3.0", + "glob-parent": "^6.0.2", + "is-glob": "^4.0.3", + "jiti": "^1.21.0", + "lilconfig": "^2.1.0", + "micromatch": "^4.0.5", + "normalize-path": "^3.0.0", + "object-hash": "^3.0.0", + "picocolors": "^1.0.0", + "postcss": "^8.4.23", + "postcss-import": "^15.1.0", + "postcss-js": "^4.0.1", + "postcss-load-config": "^4.0.1", + "postcss-nested": "^6.0.1", + "postcss-selector-parser": "^6.0.11", + "resolve": "^1.22.2", + "sucrase": "^3.32.0" + }, + "bin": { + "tailwind": "lib/cli.js", + "tailwindcss": "lib/cli.js" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/tailwindcss-animate": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/tailwindcss-animate/-/tailwindcss-animate-1.0.7.tgz", + "integrity": "sha512-bl6mpH3T7I3UFxuvDEXLxy/VuFxBk5bbzplh7tXI68mwMokNYd1t9qPBHlnyTwfa4JGC4zP516I1hYYtQ/vspA==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "tailwindcss": ">=3.0.0 || insiders" + } + }, + "node_modules/tailwindcss-animated": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/tailwindcss-animated/-/tailwindcss-animated-1.1.2.tgz", + "integrity": "sha512-SI4owS5ojserhgEYIZA/uFVdNjU2GMB2P3sjtjmFA52VxoUi+Hht6oR5+RdT+CxrX9cNNYEa+vbTWHvN9zbj3w==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "tailwindcss": ">=3.1.0" + } + }, + "node_modules/tapable": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", + "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", + "dev": true, + "license": "MIT" + }, + "node_modules/thenify": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz", + "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==", + "dev": true, + "license": "MIT", + "dependencies": { + "any-promise": "^1.0.0" + } + }, + "node_modules/thenify-all": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz", + "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==", + "dev": true, + "license": "MIT", + "dependencies": { + "thenify": ">= 3.1.0 < 4" + }, + "engines": { + "node": ">=0.8" + } + }, + "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, + "license": "MIT", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/ts-api-utils": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.4.0.tgz", + "integrity": "sha512-032cPxaEKwM+GT3vA5JXNzIaizx388rhsSW79vGRNGXfRRAdEAn2mvk36PvK5HnOchyWZ7afLEXqYCvPCrzuzQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=16" + }, + "peerDependencies": { + "typescript": ">=4.2.0" + } + }, + "node_modules/ts-interface-checker": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz", + "integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==", + "dev": true, + "license": "Apache-2.0" + }, + "node_modules/tsconfig-paths": { + "version": "3.15.0", + "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz", + "integrity": "sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/json5": "^0.0.29", + "json5": "^1.0.2", + "minimist": "^1.2.6", + "strip-bom": "^3.0.0" + } + }, + "node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "license": "0BSD" + }, + "node_modules/type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "license": "MIT", + "dependencies": { + "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/typed-array-buffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.2.tgz", + "integrity": "sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "is-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/typed-array-byte-length": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.1.tgz", + "integrity": "sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-proto": "^1.0.3", + "is-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typed-array-byte-offset": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.2.tgz", + "integrity": "sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA==", + "dev": true, + "license": "MIT", + "dependencies": { + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.7", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-proto": "^1.0.3", + "is-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typed-array-length": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.6.tgz", + "integrity": "sha512-/OxDN6OtAk5KBpGb28T+HZc2M+ADtvRxXrKKbUwtsLgdoxgX13hyy7ek6bFRl5+aBs2yZzB0c4CnQfAtVypW/g==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-proto": "^1.0.3", + "is-typed-array": "^1.1.13", + "possible-typed-array-names": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typescript": { + "version": "5.6.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.6.3.tgz", + "integrity": "sha512-hjcS1mhfuyi4WW8IWtjP7brDrG2cuDZukyrYrSauoXGNgx0S7zceP07adYkJycEr56BOUTNPzbInooiN3fn1qw==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/unbox-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", + "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "has-bigints": "^1.0.2", + "has-symbols": "^1.0.3", + "which-boxed-primitive": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/undici-types": { + "version": "6.19.8", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.19.8.tgz", + "integrity": "sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==", + "dev": true, + "license": "MIT" + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/use-callback-ref": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/use-callback-ref/-/use-callback-ref-1.3.2.tgz", + "integrity": "sha512-elOQwe6Q8gqZgDA8mrh44qRTQqpIHDcZ3hXTLjBe1i4ph8XpNJnO+aQf3NaG+lriLopI4HMx9VjQLfPQ6vhnoA==", + "license": "MIT", + "dependencies": { + "tslib": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/use-sidecar": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/use-sidecar/-/use-sidecar-1.1.2.tgz", + "integrity": "sha512-epTbsLuzZ7lPClpz2TyryBfztm7m+28DlEv2ZCQ3MDr5ssiwyOwGH/e5F9CkfWjJ1t4clvI58yF822/GUkjjhw==", + "license": "MIT", + "dependencies": { + "detect-node-es": "^1.1.0", + "tslib": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "@types/react": "^16.9.0 || ^17.0.0 || ^18.0.0", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/use-sync-external-store": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.2.2.tgz", + "integrity": "sha512-PElTlVMwpblvbNqQ82d2n6RjStvdSoNe9FG28kNfz3WiXilJm4DdNkEzRhCZuIDwY8U08WVihhGR5iRqAwfDiw==", + "license": "MIT", + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "dev": true, + "license": "MIT" + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/which-boxed-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", + "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-bigint": "^1.0.1", + "is-boolean-object": "^1.1.0", + "is-number-object": "^1.0.4", + "is-string": "^1.0.5", + "is-symbol": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-builtin-type": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/which-builtin-type/-/which-builtin-type-1.1.4.tgz", + "integrity": "sha512-bppkmBSsHFmIMSl8BO9TbsyzsvGjVoppt8xUiGzwiu/bhDCGxnpOKCxgqj6GuyHE0mINMDecBFPlOm2hzY084w==", + "dev": true, + "license": "MIT", + "dependencies": { + "function.prototype.name": "^1.1.6", + "has-tostringtag": "^1.0.2", + "is-async-function": "^2.0.0", + "is-date-object": "^1.0.5", + "is-finalizationregistry": "^1.0.2", + "is-generator-function": "^1.0.10", + "is-regex": "^1.1.4", + "is-weakref": "^1.0.2", + "isarray": "^2.0.5", + "which-boxed-primitive": "^1.0.2", + "which-collection": "^1.0.2", + "which-typed-array": "^1.1.15" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-collection": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.2.tgz", + "integrity": "sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-map": "^2.0.3", + "is-set": "^2.0.3", + "is-weakmap": "^2.0.2", + "is-weakset": "^2.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-typed-array": { + "version": "1.1.15", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.15.tgz", + "integrity": "sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==", + "dev": true, + "license": "MIT", + "dependencies": { + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.7", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/word-wrap": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", + "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/wrap-ansi": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs": { + "name": "wrap-ansi", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true, + "license": "MIT" + }, + "node_modules/wrap-ansi-cjs/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi/node_modules/ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "license": "MIT", + "engines": { + "node": ">=0.4" + } + }, + "node_modules/yaml": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.6.0.tgz", + "integrity": "sha512-a6ae//JvKDEra2kdi1qzCyrJW/WZCgFi8ydDV+eXExl95t+5R+ijnqHJbz9tmMh8FUjx3iv2fCQ4dclAQlO2UQ==", + "dev": true, + "license": "ISC", + "bin": { + "yaml": "bin.mjs" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + } + } +} diff --git a/frontend/package.json b/frontend/package.json new file mode 100644 index 000000000..be0c307b4 --- /dev/null +++ b/frontend/package.json @@ -0,0 +1,73 @@ +{ + "name": "proxmox-helper-scripts-website", + "version": "1.0.0", + "license": "MIT", + "private": true, + "author": { + "name": "Bram Suurd", + "url": "https://github.com/community-scripts" + }, + "type": "module", + "scripts": { + "dev": "next dev --turbopack", + "build": "next build", + "start": "next start", + "lint": "next lint", + "deploy": "next build && touch out/.nojekyll && git add out/ && git commit -m \"Deploy\" && git subtree push --prefix out origin gh-pages", + "format:write": "prettier --write \"**/*.{ts,tsx,mdx}\" --cache", + "format:check": "prettier --check \"**/*.{ts,tsx,mdx}\" --cache", + "typecheck": "tsc --noEmit" + }, + "dependencies": { + "@radix-ui/react-accordion": "^1.1.2", + "@radix-ui/react-dialog": "^1.0.5", + "@radix-ui/react-dropdown-menu": "^2.0.6", + "@radix-ui/react-navigation-menu": "^1.1.4", + "@radix-ui/react-separator": "^1.1.0", + "@radix-ui/react-slot": "^1.1.0", + "@radix-ui/react-tabs": "^1.1.0", + "@radix-ui/react-tooltip": "^1.1.2", + "@vercel/analytics": "^1.2.2", + "class-variance-authority": "^0.7.0", + "clsx": "^2.1.1", + "cmdk": "^1.0.0", + "framer-motion": "^11.11.10", + "fuse.js": "^7.0.0", + "lucide-react": "^0.453.0", + "mini-svg-data-uri": "^1.4.4", + "next": "15.0.2", + "next-themes": "^0.3.0", + "nuqs": "^2.1.1", + "pocketbase": "^0.21.4", + "prettier-plugin-organize-imports": "^4.1.0", + "react": "19.0.0-rc-02c0e824-20241028", + "react-code-blocks": "^0.1.6", + "react-dom": "19.0.0-rc-02c0e824-20241028", + "react-icons": "^5.1.0", + "react-simple-typewriter": "^5.0.1", + "sharp": "^0.33.5", + "simple-icons": "^13.5.0", + "sonner": "^1.5.0", + "tailwind-merge": "^2.3.0" + }, + "devDependencies": { + "@types/node": "^22", + "@types/react": "npm:types-react@19.0.0-rc.1", + "@types/react-dom": "npm:types-react-dom@19.0.0-rc.1", + "@typescript-eslint/eslint-plugin": "^8.8.1", + "@typescript-eslint/parser": "^8.8.1", + "eslint-config-next": "15.0.2", + "postcss": "^8", + "eslint": "^9.13.0", + "prettier": "^3.2.5", + "prettier-plugin-tailwindcss": "^0.6.5", + "tailwindcss": "^3.4.9", + "tailwindcss-animate": "^1.0.7", + "tailwindcss-animated": "^1.1.2", + "typescript": "^5" + }, + "overrides": { + "@types/react": "npm:types-react@19.0.0-rc.1", + "@types/react-dom": "npm:types-react-dom@19.0.0-rc.1" + } +} diff --git a/frontend/postcss.config.mjs b/frontend/postcss.config.mjs new file mode 100644 index 000000000..1a69fd2a4 --- /dev/null +++ b/frontend/postcss.config.mjs @@ -0,0 +1,8 @@ +/** @type {import('postcss-load-config').Config} */ +const config = { + plugins: { + tailwindcss: {}, + }, +}; + +export default config; diff --git a/frontend/public/defaultimg.png b/frontend/public/defaultimg.png new file mode 100644 index 0000000000000000000000000000000000000000..4aac77d5c835d4f5b0242329b9f8bb0e142faf07 GIT binary patch literal 77312 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�%8kbxKQLgho=Qq=*ZMXfrpL+N6 z{_~zc=UnET^L)?qJm)#T=XsoqC)vhqGX=M_kC-D9{IdHMC&ku#GWfmjM7H`cpTZuO z!PC-?O+WW+q0tqSG}Zerck+rMiUvnK^j4_fNPwd*@73y5-n~(gVSTGODEG zym8rWgIY!lo2_~a}crTNAbg)Qj%>! zdYHRnxj_z(BShLu65q;ex&W7_Gh33n#MFuzE%$oKbCw}o zUoNAnc~W|GA6=&-q{>QqV4ValRQ)5drVjp@5oP)$y|nh|nxi*rREX1(-;w=(a$?oe z`Td?__LWz-kAEUUH0aY~PqJpK7hZ->|L%45aGXipc&|2>Q~BD5Xu5>gZf5!}K2ur8 z3SH#a+)>X7+Abg$KN{5G)4zpsG%Fln`yTmzwq20mJ&(M3APPMC*TZnJlS zh!>I(W{uN~PtveMggh-|>#~kWifyh}jHypM*#rD&|>M+tA%pV})Px zf}k1*bFlT+Ub=0mvCbN!hSr^Ieg}y1CuNzWGjDy^lPeMx= z03|THBJs}*kxFSeF;x&YLz^5%S>8r((;rW4y*>PE-N-|OKxG|wRS*m z;&b6vL2|FlzDE8(a$YgzVOv{@{PHZAHo;Bz$g=vdrK!u`D>}+;$xI9N=dWjWRn~^g zb6|ZWH@;Af`Adxp?Szmk3so#J(Al*ApjQR>oUBSvHw+`FOA@pf9TgcxX6xUpcI5-0 zUzYF#@&&3DQrsbdhhreupk!HyEmA#AsdKX2AuCEN z&_+sJ&}Lj-trjU$QnFW6RJv8i`?VgoKJeH5y~4RLpdB>Z_}(Zqle5@_@efCqu4nfo zOlkyfB*w2>kVac9ua1J`TS~#$mrxLKT%t&gGN1pp&n;GWZp{B8o*fg@noKiM+&S3h zwjplGL|_N&h71c^uv<8TTk+FU zJJdT-1nov*phXcS7f*bVX=RLd4Q$$r&?50DeF$sh)l+u77MNI31r9HQYOwNO_^4w2 z|Ni@q+BXOQC^&gkR8)x)`WM1l479rw^Yfcs+VVM(QBh6%$Ke`MqJ>pU3#zXd7Pbzw zv0bY_ekR0Je^d<|N zeb+Sgs}6kVj9dA#_NH-evF3-Y65;**PO6TzYg&}1(TW%!P=V188}!Sm6qZHpP0GE`oq|oJ?uR?zA`MPl3gMxAj1wK9C>FLSS#eTp^&HEgD^xJ}mt{(`Pr6rJ0 z2`gg3TgFvXof|f(+LbTKv3vHfPB;=+3D%35iiy>9zm6xuSr=kkFb8>6X=&+{j11P1 zB8oajKj?u?S;~-IkF^Yl}x-nxV9A1B#?>cJijaPR*2#XaIz1m0hO6Hj{fUy|o7nuvPguml1 zi0&6a?sLo}4hJeKE7@Fj92*ifupuMidGk>8K@L{*Ze+tY*A-L!u%l}GbTKkybjH8L z%nPVVbt)0dl&5hV; zLT_du*u=1xMwmOWw{x@kh`q(`pymT>S)!n|f9L-ItHM40JVrD%f4gUY4^nd^Y9&gb+=3`EG&er^!iXEIHb1AHXX7qt%saJ3!zm@ zTYa;8zD*@$gIM| z8*anTXa(?A71u-eZ0ZGwZ}^X(-}iQDPw>A>k@30d48@0&rc?@Q6{c2d3}uAIeLkuDSAk7K%!xMAee_k`DnGuDoXe z;tBJnKte-;s8QqDOetQgKV7AT-A{LICgPR<=KfL>2K(8`g`|P(aEGv6? z{U4^xavm@GMnkC|@A4PTJWf(h`NUSG;URI9h{wuH1O}W_QzOSgHnMy7x1@TX;LwxS z_kIy<1`pe`+`WfUGF2kffyV&>KO&J>F1J7PNG=0pEz~I-h%3JOL(7*66YKCMth1q^ z5vIDAxxw9=x5h6k_Q`(LoEMWJqvVapTcq9)#N#8U8kl`<{j>E>(op!z%&d;=2w|n> zov==WL+~a3fobpI8S&!%SwU%qp~7{`5W^N-c3`m7DaS zweCsld$Fd*@cJ811m8o65O=K%k$v|S$szyFctKD05`_f(Cr?F_#st2rB?)w!>Ej{85}*2(j!AWX-nA5cX73OTcd*Y07;JnwM? zRX~<^@1xE65Tk{dmcXmjEYy2WKjrKB@-r>?gxU3sOb zE`QAzejn+s`HJ-TI3XJXfF1G)J~+XyG=o0RcV!62g*pkMmNJH#aAU`~UrFur_T-M= z#V|IR4B2Gb7EkhsQXuvUzum;(CqxFoUNs3l1k4=E@35mb@z1Ht0!-mcbqx`_a_ykNqFy5zDl15_$~SKK_A!jFCV@p&XI)Qki(mSOf{+ z$@gLmFSP%qp+)Z*I`nIA@Go2;9JZ$-L$}SH)9mMSmVG&(IRBl%;xL*|NK)8l;r=E2 z9!y756{#5CSJ2uBMV8P^Ns6f-o1PLKg=cW2JAA^*js}nAa#FnOe(n8>P}AJ}GoIT6 z>f#(2fB1=GT<8mA`T!-Qz05(2Un23NTgWK#d*Zw<8OobNB8&+0;A0X>6>~83^TQ5b z2mc*ijg(p=V$_i-p^||jn~|lG@O}&cxXYl*0z3g8Ld+iAO`dx#9_<_XY49zDJgKiA z3FrX99t*dHed3N6sAA#*kux-q4&WTOo_yGj_7#`H68jZj(GxlWx|`nQNcTtPE@GVY zG!RQR@DZyn83_*V6SjH?=b6ZPN~?YYCLvl&nKVk#BSkUst;esVq#HVnCMnY$nhf(2 zQQ@&8!p<^!AMAZY{Vy7c#iN&77{#By9|p0j4|W~BQw_RJnx~HV5Bf+$nOR* zzx?=~fi05#-zC_$`7Na*SKj!F=fcgzB?1Nqj-d=lA^fm+cFqCk__|UQ@9aD|M%bC@ zm@CVO*#d!~~kI(7)NAAxz#|vjd z2@x)`yzPu;nJ^OW)L`QniQQHFgwl(T2LG6AMpsxz^kn_r$4tfkKFt3qX^fNF_f~9T zS~$n&bJZ@-3>8`or10q|E_(g`YOKLHkZ-SYq~{)z>#=w*V8Z8u>36^Ug}#5J+urx0 zNsJJsmhR(nRJ0i=_~Q48*{)*2bs!oBB^)diH;{XOnm3+{^Qy0C39&&JLC^bv4+m2}cLAz{CU|NvLucc%1J?nKR=uM=$0wS-Z(eIFxh@oiP9Q-WQ z{M?gGiiWrcUPxbwQuhup)M5gYHuw7AfXrwtXbtb7Psh63rSa!K}mnCBA_;vnRrkxO-C6BbQOj_?VIi-S&68#0s_ zQ72aWXhp8m&*efAn*Zk3>9AtujbqEl6)w6XAk;=B7ZeSU4zb^zqyP9ftnipXm6)cS z28(`E$E#upD=Yw}M=#}G_$LhKMk6x~L^#ex`yt{Px+cx zDfhpaOXf77;*<+Ww^rE=h)WT%?XkDJKG1%QZ(&9DuY(?8tC3c1XtAkpmT-|H*LM}U z6|B30rC>h=TPFf#H1;Rtlgt-ApTie5UywYQPC7R~IJ@<9>)k##P0#G2_Z=9UhF?BR zeSP;OjKRfCPeW+a+Kf@PTo)%T4OEe>@JQs(fBaw^Us${(31~B`-(KbMOfp| z)Kh)n;FpcaH{0}x`)(Wa#*O3X`g##$C5JqTRH`YQfxxED$@e2{Rg<m|`SuTpI8o2e<+oX2v1*NvO|Pp! zV#C~ZPr)VaJ$NJKuB}aI9SEr+5$EtBkaF*o3KSR4xok0@Lg1Ar3A9}*j)BP4eQ%xD zO4AOwsdOvSnT)3pHUVm&?(<@sw@2e6I88LZ<71hiG$IL9Y?#6!xwJgg4~Z_!2+RRq zl+A{upIyzO<8wnZ?@~c74fU|BHgivgDO)xS=^!0qf=%mnv~M?6)Y!<&$9cTYgA8AL z`#v6fYpOK&(t=bsveH1Rgu9F6NeD7D(6DXiO@}y~=6M(M3~65id716>7*~EKcbD^w zk93z~z>ct=0kma!!6$}+0^CjeQs=+>13xoKq=>d-2c>agl40L^eUf;(oMvjITUFiX zqK~uYIIrXJ*9hPKhIy$TBWe#xZ+;}B>VMMRz9OEH{R=5r=Jt>O=igUeA(E?|U0tx# z=rPm36P$@Mi!TJfxf#_XH0`4ZigVcvy(!?}F)l9&r$cNHUKh5o``ZCR1oDIp?#I1> zA@aMki&COCf5Yw&nJ)b+6F|y+DvIb1?7u6&ULCZ{6=p_2j3Z{qA4a@7v1MdE;26uRLlSXQR6U^RWWNjCCiyCs@_Q=awJ;$>5gP4w z>@OLIAYU>YFK7|4z}E0n4BD$~82YJLF@F2esl_`YhY6GE+=7AFuO~Z}7`~HNFc!k)E?k-Ex;zp=Nkl+ka#1c?Is{awX8aG5 zzEqg7#Kx4CWQL-I+22af3INhaoS}s%b?maE$;&`RosSjQbw2)O^k8$HPDU(EW^a-9 zxsnO6Zx%zTZS=UkRW!>Md3tO%1CJ`DE7lL?eoh3O1(e2o15e!q@fpAvmvy9IWU^_C z$4g!9DFFyn0n^Qc2oPcAa_`rF=hkA|$qL+%$hx}ZOgk`8!P&%&QWI_oknf=U!TjExSj!#&|pb|~gMK?_}) z4gdqr3p8Z=jT0)Yjwl zP|T2}A*bhsR;yN+26Eh-IQs=h7;GJW&_38hzjB<{vIUOiBTKBy8Y3#G{f-@gW`;+! z2aYE~slFW{NAqeIVs(;!88coJ{LmBsX_Hsgk^Ia1`vKMCS$3(?!7n~X9ndRFfpBQe1z6m!!+mkm4b1gQ}YQXft*|Am7Faoo!} zbfg7YE(|ne=yYu5utgLnPmfB^3rMGIYE4KQEv0JIvxYdj@w%Wd+^5#ZBBETq$XWDt zozEV4>iv~;ok{gd366|D9ej?O6-cLq0Snq4e|YnkfhD7SEg#<)DdR|b!OJ%cP1tCk zdiGsq-D9%xRNvN@9shHzX)@_Co;C7kxac>tA;RI)UDiDQ(_xd%PVWWLm(px4HQY~~ z=#4~NQpxf=B>B4Gm$Rk9PW<}D$Fh%o&XUso=jzB`|t|rMM&RF7o zpseS*H!Bx5_-~-LVaOk`#hq}b9q-%EZ0T3h3zu|gg8b^CI~^E?G$78p>EI>_O+Y^& zdGydRHZJNT@w;^7w;|hI!UHQt4~1=Jo;zGDi0Bc((cmZ^n+96UJ{Ww=ECWBCHGAQ! zBWh{kv17|l6{4j)T#1Z`j2b&i5$7NU)2yBFd&nWi&IT#SnmfgWF%F{&h2Pci1?vcB zU+2ln^I}Dk$MNr~k5}<`t=Bsa+Dz9^ci!-?f9~9FAeS-;GWYtJt%c)Duqi@jtshCp z;cDNcD`DgCHl{Of_>VGK==)Z$NpNI++lgwdy#Gv%2a?%2B~3Ed%PSy8e&$gRWqrnT*Z#)BWa*@h9QpyK#dT1skkr4k1~_Sl@;Ejyl%NrG=q|h@te}u33ix?8E&wJJ2eUl1VPN=k z87)9WimVAUC1kaG2(ZqTzuFoxUR*clbdFJ5@Nfn7y{`LE<~5sbSo(1^a4JnWQ6>U_ z>1uR|lUP9M{6~ezqI{_rNolTEU$(`7(a0S9Dtg=?26!pG+1@)mlJP8HgNNL7+-m$P%|>NHtzQGh|=}$ zgIm5+DHf*VkA$1|ACmf!|FdF+Cc+|dSnRBUjp>Z&jg|SNf*d z&Bvv8H?W$MN{@g_8&bMHcTL_R=Fu$<(PnG5_yy{i^UGB(op|9_C9DJ3s0J=gs!_#Y zULEJ!Qe8LgoxH1?C%)8;!u9o-@xu-LznB)0stE%-PuhPN1C21;W-;?08VCgEWaq3A z^mpX~xh^6nnyHSGqNDn}aaJ>6M{zNM!sBf+B)4bbCNdgP4#A7xZrdHdM7FgOvsxog zvkefPYu!R{w|F#&SI^TgPQ_@p;0q)tWvi5cc926A`|dNhl*# z=%JTCRa3J>qqPwdjQbY*`;wpb=7PL`y@`P9uJX3|qT%jI@zx)>UlvWQd^TD;66_Fj zY>MAlrI?%7`h(qAuJK~xcu0LPIp`#mHc!H~y}vwT@bPi zxTwv*>n#zRI!Dy*1szV8LiC8%%zpK-+2;p%;JmC5AHU!C7SxY%NNi2GJ(27IcM%0p z;sxnRgYW$OWqf2;GYnd1$~UgRcx&%(U;9?0lY^NxjJVYlEZx4Ln5S-yh@vQmzh5Q} zEtAb8#fZa_NoRN!US6fR#8BH}Qfr?!N8BI@7B6oj$T?#veH#btqnm+xu^ z$d48W-|5{D7?Q;l|-3G|czc#3qo4%^kR4cd~>9Oa^aFvfsl8*^Rd89_5;i`rZXz!p^esvNDD}_Z(-}RUA^^SM&q$2vLg)kS4Y*ZYd ztgJOa>%dWz*&#U$#zF{I>s)z*<&g%bNh?<9hXHI-g};oYzOv0#Y^v4h{sbepquIIWJCoT5=_Jc} z3?q+Q=XDU74|gy8fUbvzSX(fFm&nW{kFysQ%!Bu#x~dVQ-i7>7Zjkz3>>vWK4# zPP=aQ2+6%PNLnMz#xxelp(+_gc7*RYiaWo;u!e>vGIX<>y!nO}UKTSh18$@Pz7Pl< z^R#29fxRHTHVBEV5&8iC$yM1X_mOGOHH;wXNQNFjE{h>adKHZ!--uMiOonnVZ7s$2 z2fqrY^OhoKjM-+8BBc7;sQRr>@?N;^0=DuSy$}-Rw*+i{$-%={m*O;UbNH0yV>qPc z=w|z|LJi9_$j}<`zPnkVlZ_vHKP?kJm_HrR7D((Hh7yA;IpPcF$)1~K*m`2$C6wQT zKK)r%G(%L7p84xsIl5}COUkz`x%H7{Bj-lx+$g;mvs1-c#)FXVKE2qocQ3)s_@X4p zK@|PPKS{z+j0Cr26)4%sY7N7GycT4T>l0EThyaMIcwq*{5XFk<1-`Q1N=SbJK0Gci z8~7V|lVY?ad5N=#qx1!N{tbNgf49nNLC=Eim zD&K;nr2T%_-Rtz3h|)vXK;+QZ(&>zu2PfKPHI>@wMrny!D&Gq!qYSv)nkxM5tvGPs1d5QOyOw}CrhKme4hC@5oGULcg zbnoF`I+R})k@V3_7Lzc{CbUV@*klb1J=2I8D1S3FWZAU(S%$)98yA{_mkQA!jeJMA|0G7Ya> z#+B*&Q`m=C29L;UF=|_L4mh`(zI=AQJpR1LSIMKYil?p5#E(z9FX&g~Gtq-5@SfXD zc#<;F9=;@C&4Px%7v#3Vf}JXJYSC(qjJO#3bXGENa9HC|SWL+?8gy^etp9W=MZEI- z=jbZ)bV|Yc#j+EZAR|SYgG4)RQAPT7asnU2glVQtnFkqB6)%4~K+>d}s7C1BfDX|& z6zQbPpA1#GGZdGS2SHaqrlA%@IBA`S;>g8x3fxZ&m3lMUO+= zhe^qPHElCy?o)K}HR=ShuT<~=aNk2^M;5j**mi;s(nFvAB^@ciV(wkJH6Cl_5DvOe zA@E8hR$>Sax?NU`g>dZY4J@Q#DC4(@ODoHib$`kl6^sQQ`Tz_MnZc%;12`TD<5RR+ zq2FbxQ$L|neYXQQsu=N*u-!>ASZiYuM&PBXF)D{0Mbs))(rcZ=M{x~1gNRKQbSABN zF$kp~WbZHx(bR3@%K{JZTPH>ub-c6AqQi#7^--3Ka2a0xj2>;YFQVjRVAeL9Z1$O1 zLEY~wX#_Cp{452`3Lm{7!r_TOl?ikm%o%?A`}ZvGoR0?VlQ<>+wug!3^26skK}rsJ zL|5-?;Bll8wxZC-HKJFs&8|dsJK|2ve!9CVdMdvhOqex0`M}NubcD9rgnB#o$a@q6 zkZwGh5snMO7xVC$QHgx)S2Ag<#ZX8mvO%p;v}RVlJom4(4vx{@@Heg{F=nY-(jl+4 znrT5%Y1dpiAAU{UGczl5jZfvZat4ZUGslS=II(wCl#!X*Y$#S202|9tQa^_sjeV2D z?6n;z_Q^n+tyZiuP0XEo^*5K+L~L6|W7oNv0Pbvz=z}Ag@9*x(`J`YznG%10Zjf&* z7X4EylSeHYCz!HPk9qZkzI@8-tpJ^)j|tNJ+=6yPqh?r%!EVL-HTH6x$sktQGzw~A z8bV3k3}VB8>jWVKREv@O(+L@n>Ph;EQ4I^QjVkz+;vl5$T9%nt(#roNA-?oZ`U(~T zMRqB8E+S`h8wnk-_QGp&w3-{c{5}~wAfo!W%bQ2ph%L)_^7G%j=?iGRFL032Oxb9k z;DuR#acRO?T<^{JUo8Os0<6LrlIQIF(|U5eRTeo;VTiqG9q&!>we9}ij75i*I>GM#_OC^68%rh1yj}1HUiZc6EfciNF5tIAIKI|)ALBy z-bioC`*n>g)L_?W^t#IA0C&U1{h#T4WHnwcnQy`x?NO>p^(@4xr*WG{c6Uon!;H`@XOn1btN^2iGO~aE|ASvd@QLDwsvU;V5?8i>b zLKAbt**GY6wEGWxk2FXw+ZD3`MOHPRh(+nwDUOkw}|n;Du!THk()K%&x>@ z6pb(|`NQ}`mg$w0RPW`!qAzg$?E)9A{MPeChpMJTB5el$36ZNW((Jf8dFtLlt*yqK zY~^$aAnpcnakdsi-d`Er2%6f|Y%Sjl8e86Js*fu|{XIP#BY16UfcY^fnKnDB=#(g= zszN72B^j?b(XdwEL;$o6)G&rCuH=zJ%ldI;5uNLOTML!lD!{;q4ZS@Uqq^d9!*6rc zurnEaiR^ltz_U2jpocMSAxQwn6$_@6Fv@?`E?=3GGxxwxAUN^Y;QJp?^al(s1~88@ zM!ONjt@2O9AH}%I90r5h4B{NcPA?A|G8OEEgxb%l``XqTzzH4lDlxFr2mj^4PG>K} zW+&>#-PwUWf~ttZGIED7nW{5-Dly;yKRvh{>2)Ojiq9s8^~ez)3vdZLSjQ&lsf>+@8e-onFJCYMf)*ofS56V~p{K&d2k2aAi_;c zrI?GO*4~`A0-e;7z-T2Ea7rXY%r-X1t|5~IFLoJ%eQj-eENRX;dLbCmAH}GJ**AIr z%Z4o0|Jw+WG$2tjgy>f3#_Uva(d^&YQE%`MUya?m7T8VTGB%>MaS|EuS~4r<{@+<0 zwbaFfywBoD6L-kIw-(nrQDq9`0vtO)5IR5rM~B8CT6@T$wXm!x8tG>#cRA zVSU;Grd3Vvq^RJ)vb>Tk!Bgaa6THV9&>Mh@A|G7@`9_UhT|$3uLsrazZqsL&B0$(k z0nqJ1l}LSmO51n2hMBzTy{8*SH?;9y{WXJBF2gh!;j?wHZ7JzbStAY?O;fSQy_~{? zYUL}9GG$pz6N)JGMej|*4kjH}Q3}t2CI>#n1@8dYvEq|9O5~oW^Kxo(M>t^_&?&>aUB@QLt~M1V3Xz`Im)m4= zuVt8VN0g*zaD=bPihg$NfCBUM=e3aWYRVJFtAGFb81&*}!MG2oA4Csj38VlIn8B1Gce5VbA5)9;sBR?o8hw=nP+p!Fqf1MT2R8T1T?#ak7oTHc2j{CnS-H|@AH(a z(TtFsvW^|AT20ZdGhyE${+dbUt4{k++`dTb-rQQN@EYb65wQ#}5?Ha8haI@&qVgrn z;eL86w3D02mPlkVoTnNxiY|HQPEA(7jt0fNk?n_UxN))4S2oUez^liY#l7yzcR;}P z8PegeXCDzk>g*%mOu~g0@bUOcV5egIy>D>%g8G!U9rYJ~-J92TU%o-azM2k8UH-aR zpDJ^NDQ_m|<-S9vEN2#cDk6I5#=m_$1!k1a@rjOlg6Tery3>67u%^Ii*!mgNA-%9^ z{W^s}_WmaGHSHbTIZN_;Y&YCv;OlYw^Ml(xbf+P`cyc=%8;`IHA*uJWLAwg?ry0cF z!5CPi&TMIcgKi_%VyPg;4wBPoZY5p^hdofa1j3xeWiCjW30+&pq=-MOu)znzzBGkfGgxNZhzlZE^hVlo`>Gyof90tBD9 z)D#9dpAPuDzZVL`mx4v1+mfoPC;F&zs0aSqrt|pgC7;=YY`B931A$3$Y&y$&`nfo` zp6-~kOh6A1_u|$njPpwolpoLh6v486YsVkXd*(GY3NBy3!AGGE-yAeH#@?o}!x-#r zuHbWnwmnwEEFR0No`DXZWJE5vX@a10fiaD4diwQ$R(2qEJUzz)!Cwg?Zf#}0^K4^~ z{8yJqiT`%=z0toRY{anL*oDgSbShbVl%Ybl$W$iP;IHaPt8|==rnP&UKspL$nu0J6X)~x^~wc z%7|!`*;2csX+`$HUAv0)hi<<#Jua0+xpU5@@Tqsvlmk^SgSbPd?q{kP2<_i|z&L}J z-l~i4?9S3`MwkKP3-DVk5KMy{NB^!s$%vybzx8h{8z1?qX`LQpm^B;U7*;I~$%2w> zSnfZD3KC!>mJLL>^)gkYgHDGY%*y6}Q=H}jz{u?nAMgHE6#}u7N~U%{9-8Iu^`*)( zS@w~*tZ0)&_|BMi)}W8U+56FLc^Q*u+{E+U`>$`DmD$FV@1;SzFJI9!@hMzwJc2>i zRC0=!oSug&f9zEE%Ra-Vre3H54s>!4jTyhe&&r$G-8qb<$Z64;{y*y+IOEgU3-LZ8jv&j-xS@AI=; zN^=Qrgq=Ddnzsmv6h%fd{~x!&Lxap0y4A5a&67jjPM8Z~wqmL9N0y3|PMuL1yN3d{ zS*Dof*^!a~P8>)8c52K{G){r%WDKDd2RplOrs~T_s`FyfD8z;aTt$!V2*FQ(d-OHC z#r+>8jOqYe>?2>`;Mo}Lgz@AQ=T)=bSB@uWz3w;)&^DiyFdG9RTHDbE$#-OXHM0-D zB`z1*iN+Y|!}u+W0hL2=)X}%VN*P2WQgsZDkLFiwtznFzN2o%CJ;Ko}R?WKmg>~T4 zyON;qyRv;+eR2x0$iMl{4BHOwQZWN~7%n zN{Hd_BgXOLywVe!w~fxeO@Eb~ij=7OkpvR`JA)IM46uS-ps|S>uy1Lgg63SSVpV2y zGXmadd871f%&%vD1oEMK<^H{c>uKX%Q3amc9u?I7+rkBVGg$Fi8zpPcq59MG+0%D~ zWH})4&oTn;4}hAQdrkge>WoJLDE%R)4Yr z4MPfV!BOzqNQlhQ2}nPQ{YvFv>vjXU%uE$gW@D^U+HGM?nFZ`|DVV!zm*QnSB$fQ# zl8ct~`Gd*w5TVLVeT@1&TKCPf9wn;!M6;|mL#n6EVIcl&idLVC8CTH}p?v!kLU9Lf z5{Jp%f^{Xa^g~ZKoR02+q}&`!p-yzAKzHpOHs6LXJiXqDH}a)UnLAfFr?tPs3OnMQ(gIj9v*ER0eYkHE{qkESIb20*ampFbD6wn6UZi3VRlvFg{CAiBY{}vkDS0v{>y^vpIYGOeXlq%J~}1;<4_2@ zZiBK+cw3|C&M|uQSwc5zxt{BfOemSF%P7Os-io>8<8zZix8k3YwY_c{9PD5AlEgK7 zKvOx6rq{TYx}u`-<{Njc)B;V%@Q(w=YBwx-Xu@>z5S{|`B*)I|rc2;JZTY@z!Q(28 zk%IkAV=XIwk9l8E@Xf+EOYyOCk$#xt@{7;~n|NC-jj>9ns%Kk6*T;C%aLcL(QYot&9_|=%$a9!$RFpDZ!q;F0 zIJK1&x8@sX`g1E5aKoRNKUApevh$XRU-3oZ(hdq-wdTJJ`nMp1Xh9rp{@(2(0QbR8 zKV$Mt-QG{u{+d`FOcqZ=C#mjCH=Z{6Fh$>hqoA`ANuXF`^d*N_yH9WS<-9-PZRCiG zlbb+oYbpPazconCytV3`A@I(j+>+W9R_>>Y4e+Y$9ZC30oIKzC5f%^J9%TqDZ3Xq2 z@`i{yd-qn;Hf+iRIi zrfP2q;J9ToVq~Jt8<#5#N=FDB1A z12JUoIKaQ{VNbjJ08t8pPNy;Fdv9x*-3Dh%@!Y#bK1V*++V=s>`reNlhmHl=u*a-_ z2JvjOX?oH+bOZ7!%5pR6tkuZzFo?1(JwqLeD(oN4s*h^hmas&k5w1kGy@Ait4@^JQ z-i*rc{?`)c%3tzcIpFH?-I&1*0(R_u>;JI&>WRLx=g8;CwUKHf-z&aT<6)7tgCD@f zJyT79Lm()xtW#8Bc8Nj+=>+qMM@XX_*?HM@3 zrQ8HNhbTbGb1{w+nKjj?=i5^VavD$jF|1(~|3M1_7A%#ANXaf%%~=ta+wiu`#Nd-b zCZGA7o^h%@@N7_SRwT(C_zt)mh8_Wg0{3@YW;|odP29DQMs~R(U;5Q6wp47x{{-E2 zZ&8!x(qZ@WWhhebo`~d}jmqHzqUGh&Emj0Q_2v446xGH5rRyS6^y}cDo0I>FEd}6e zage8-{Bq*QtBY!F0oegam9oJHo;07#vjMxGnrAk8} z|EO$Ny;d8BHAEeUlzQ2gcQw)binyLLBUvR1La+GM=Uq~;{bX1d-}}fz2xeyS2Sy@@ zfZnsH3^2lxu1a$z5VhN({-l_cdrY-FkU4{M_NOP(qQCJitrzMY zFW)>KHCfs~^|kKhz&8cI0w0V$9;$)`y6E1HGe}*f6-dEvh=00ET@6Sv+>b9jYvDMo zR4CzNvkM42-46Tcv-sy4xeMa}q+tDSTfWF+3{zlEnxBNeP?TcSSojSxa>tDTU@si^ zqOcSENd4i1exF2)crfl>rtaZmtl#H{JD3Szl0|B6&Vx5uln7M&{e?Uf2<7a0fz05o zAE&&2{l@9{^nr$$8&nfysm&2wbaR5Gu&GrD4RaaNM5_comD|@acT4&|=Ffka8MogH zQL~T6`yXxPtlI7$E@>t^V3?G*JR?$$!g>ra$8PlT0dnXmcYZNjaC8A`B{>tgTD8N9 z8LIj|1T!I`-_t&uq~fvY6wWyiaG#kx{Jj^gVN9(j!XCkiZ%VI&k3uEn3)$sUNTM1% z@xV4TyH7Xxk5yzwWA1xMiOoJ=ADVhObZoJ74if9pWrY{15GdPup)fblecV-C_f1Qi zKqpjWYy%F!Lq|-2F}b6?mO;C^4!4%7PIj+NUwx=t4;fSS-p=^LaM7|T9NnFgHJR2y z@bm(#X^}8I%t)EDHym9Y4a}DJ=_4Y?VI8Jxz*252p70AH%Fc-Vy)2(Bso|7b&Ne|Yr)#I$iH`KL`eMkk;lZGi7f1^?RiYL)c-ELvQh8~f@ znnmR+$(Jp%YxPfoj%RQ7rH~E=X#IW1u^WB!1e3M0TYLmA=gheFFa)IG@pa-OoH@Byz^`qN+#c(%X~q>1Xqjl z2`h|j2eaQl@8-)3XKMqVPPi?Wt20ut7c3;-#61|3X0?!{h~J{t|S~ewBz^>mA!$5Qg%14y=?FM?=N-VzeMD5u70pulNrcy>BeWjjzXU+ z8}pq?KQos;sa5iE_!uLX@0DbhSxW5(GfufHDsNGuTCIUGfk3T8wj#z(W?D-m0SqIv zZcSz;gly892B}d|LV%6S4B4x(6u`=-RJytz8y}@-eT&@^n_3j=u$y~t_%~X$n_bM$ zI*3*3iZ}}Av+uGzdGa9}#-T0pbB)Z8j98R9Qq4tGdJFG`OU=(dQJ=@ky!ADNL@V#) zyAlP&#(~~}H!MYbBv+;^kp}pk&9XB zidYR2#x8T=3u{a-H&paWnYGT#Gi2w3c8PRqW4nzXVgx)oU8LpJ)Pz{#k$GTAnDUTf zoDJ+HvJmd2N@?m|iT2??R(bh7MBeJLkfCe2G>~F)KYoNWeGrsUJ>PdGHVwh`KbU|( zAm^GX;y!vsI)x%!!y*qWRp8^F=4;K~H-YOt*S0M@gXhIs1>vq_T@(f|J%8g*S!y_p9NFS&Tv zjdt=v5fIpks+x%n!7sR+5XP{SV;Sgcr^VqJAk*dRQh=1w$U3*v8`n~rz;r5<7(KR`NCER%^*MaLF@c!Zf9`w=so7KsWFx?HF^j+ZZh>67y2o?k{*4^W|BO;5a zbmvD)lKR_zpdoQs_Od-obxRdoX!QK%BX)nR{qC8wA1rd|@=Wch98=MNl{Io4k~?}P zkEW)ZB%vR`mTCBbNW7o#qelum-(@s2+W3zY9o%TBQMa}SW17LFs=*FP6HSh^wSDwa z9@?Xh5Aae458Kz=8|%W8PFhcidk|s zd8m5RM&LhiUGCxrvywyM8v<`17#OJFU`Fw8eO2{{N03*FBpvwo^Ov_$o;TXaM5N@n z6mML&JF@b4>t!n|rRF4V`aICE2dRzl<}Z!499o!D2AGP4B9 zV3)94h(owIm5E*0hC+vUPFEK4wf<~=nX?J9fL(=G>lJa}J*G%Ou zytHAuiF)2Flhkv8lYQ&naO#6h%%j)IJ4c&TcU3%vmId$g+glR0vyv|01 zbUp>B+c9|fy<@*)k@6J%`&Ult?{9jZfTLaA;d9O`L8I@cr(Y27mcH2=cidYOAU4b4 zdrGP`NOdJ4&P0XUVi|POlzaj9FdF9gAGz-I(N+RgBTY;)5_YK8>AeZTe@mCac- z5kbK}gH;&FV>}h=nkq8qY++r{(l#4Z%^a*d2Z&b^=tYLqC-@ZGJe?1gBU#@p@gjH0>VC~~`Jg6dQ`ddH{uwjvfb*3; zPep;G6kV)uBLZ(a9G>!n zlNKqbRlQuXKoJ7}s|5%u!7}ecH~T6=ge$W;S2B@VhtDdxi8dV=&a@x%8EvXMicD{- zg!p!x+T$eBC*TeVSU^igc)LACc5k~hO4_Cp$C)}Vn~FVxPjlqec?b2hrcqEZxti=c z_OxI6mi_?ISoAQ-^F*YLNh-lGV!zzFy?Qq*jeY+KKKorBbz{Cq#7p#RrZv|yd}ZM; zxpCw|4?5M{wTR25ZZR+N1x?F z`%;=%E-$xo;FT?|BkP6PAff9a*jbyk`DK&NVK3^^8^SWV{zeOSdOd%!Ny=5{Q|N2% zzDroaz_P3)bMDa*M`lp#X4{xSU3Uh?s#3OVVDP)8AiKoz*#40S)s!I#L`NVb(Tj_S zN#XC+;?()pV1XFCofuJd(PPIIHkl)u(?Vg9Wf_a>#(Y~p5L)wUvb4^+Oukvpx90@b zyeVpld-`Jb*jfo|hak5cv6>{teE!Ef(V5wQKk@~oBrsfGi@ZwBIC<+pX5PWPUM~@5 z)1p-XlNN}lEaV3@JO3Sh%zWv5-k3m5`UN2SbtCHXrBC6*lu)6^VrW?gYT)FbKYuzW z;JZy5PODe*_>hos<_Z~*CPV!sSq^ayUt`k4v^{Zpkm8xLwT3%3xJRw*^lmp=a_?AI zlX^_Rb8=zgxpkAU-1tUK^50^HX0Q0arY^^3-g$vB0t`weR`R{dv(mB7Ni85ZYWln^ zJ+IjI|Dov`xa(@#cH^XRW81dX*tXr+c4OPNt;UUQTPJpMk~IF#v)=XngT2?@Gjs8t ziLpN&kWR#YMt-z4>+t){KRB>!%;)vn8i{qI>haMGd7#;}x;tFyCLPxSSsB`fLC(X2 zwWYeZ_M(a_fkkJMWOVu(kS&@x3ZIi^t2Yl{dFhV6uu-rQDYPrph@ky>GH~ zGV^8u(;dJ^B>aH)yX09yuX_k{b90W+gNfNg*oM|&;|M;;o_70z=w?A85JCs$6iI61 z4J~{1mgV~th%^382d@jY z*aatASS0cY%tE?hLaPMQXXEnxxGzN^jgnJ4vCOB>c`(B%dtFH2qu}f^^-CGHNa8>x&B=+VfEmPkxml3Od2c6!#fA+PXJj!`)MQHEh% zuewv8noW}s+W|DPb9NLlm1SVA(+w}@wkX?}lUS32)7lmaeN2m$)PxASwiB8Ra_afL z-UW1AR5g#Zri?uhb=K;(yMOtfEu3i9Y5O6fc3yegs;0DnI{TZ>*yGa1#*f9rGRH8F zqBpA!3tnWB_wvd!OHgEU-nQzuWPCG`AdGXrNtf??vRGPN1vL#sM~fpCP2sQ@p3Xte z_EaJ*q)z~E#@jf2WRF|KWuE%=x8&SkPGg)XB};1lRkJP5<2+87F(qrQ`hgf?i=uXj zkOe(5S!~E(Me9_Qq_v_AI*Fddyi6&5ylGlp6|qpWZuIda|9)dS9rE*OIK5t#SZPxM#--Rx`d|&gY_bz9N2}g9qG@C(Yv@uR@luGBDZ+ICnI@Brf3IbfKyl}P+ z^4ugH$Dx19T>0q0iz?pxJf3z>?r+j;2c?<``_@=c)(aZ0`NQ>Uyc{snp6y4=PolFA zEJHBA!DJQnd)RvNV3pPVO!-;h4sXwQF{J6xa|?iByri+^13Y9o4XhdlY@Z}kLfuYR`9-%9o%Iibw-@Y?SAKNxRfUHaJ zyAP(XN&`j~zv)29GN~X8u3PoJ#of1>jmFzU*!2+#iqxt2^VF=JMgU_VzotFiF8J#+ zg$7*N%JY_}{g*})^sd6?Uk7(2VFC^x`&P303$(&T`G+3v%q>M3V=eH1KBp?OVJaj(Z={{qHWTIBe=t&@no#nh=mzpS6x9 zNhBNXvj{SkS zo(T!4{?a9#?W00{wKSyncmD{J*Hkf^d6#>daOT0L1TBE@d(l<&NNupW^v&DC!7>CK zPFwnCXR97XNy{$P#kH!j-MkJW1^wrxXcw#>?OrD zaTc8E)Tjb_>YW51%lMR<&%>PQv=U^aqNKo*(?j@bNLd#e1dz<#xQW!Q;Rh)=2_mrr zcM?>KW08dVlpRuqlX-`m;OIS&OE0k-y_K2Mf2;w2HAi>+kN*sc175Ipn#^VU;<1># zy$?rXHI>B_)*0CA>Mq0cW<_V;3XyU6Jtx-56bYv}fEu3}u1TA2IINcbfJIJ)4Azh4 zuBuj6HYt^~h-l*MU^zrgNVq!1)NHXUlA}>D!bF2bP7y`U^8_Sv%0qI2ngVkyyf{O1GE?U$dv*LE7zA~V_rMma@M$Zoi2Zjv4G@TNfwOATN^Vh2I= z*rV0)+1*||`#%Gn%G=NqxzhA78FioD%<0k$?aO4eCP>B004={%8ToP4Xq1&zFNM3| zyFgs*CuQzYp%15z=5gn#_oh`qxLeVBFyI4fuBKTv zD_|pNdF$yu!mfmRr9!R~3F!;;oSk&nEi@K-xOIO&vtiVB0km|Az_~G7ejvu>if2rV zu&Kg|hHC$t0Q$RSJ56c_8{qgoo(b7Gkj_FhxKF0}8!~F&zhT&{7+6rE$+1zs=`FJN z*L<_(BLym4hl4a!0mpTV2HNokdiX>l@4m=EMZPO4JyD14czKrHTGeD8vitTlfybxv z$?FPCxos6$Y{lxPn80_9-_*3>!mMJS@hE@SGLH4!|AD)W5A9}Sht zggh8viF^l-rMn4#gVJqY3s@;#X%RYGec{;_UtRQ>YMP4;@@w5gfOVufwh&_Czl$i1 zbb;kvkPw_HukwFh-V2#N{w<&i2{gwxYh=ADWLHQa7FE zAVn?FwASCvuamlLAXwa-C7W6Tcg1dlPK1Am;R^xQXe{%czk{}b^Mmt}6Av9$DyyT^ zXN|AT=;mWkLw8$EQsM8t?=Ll{jJmk{G41ezwdkDG>(T9?wKQsi(6b{f%4$dbXI$Hv zNY9Q=E*r-Ae@Z9~3O~tfFM;ash4<7JE#i_)>mw)vv7zfKC6(KH$#eq9-K@pnW#4|^ zh))xn1%FgBu3;uAaM*LZ?a6+5s*jT0zvJ1ht1RCv4nO4Wv{)^wt0{?16OPS>a`+Zp z#r8Cu+nVJ$*o)kxKD(3rEblu8wKYY=zKY{BofoXiV{z7MK~~vK3Az5MjhhTB73tSu zmkp)d>)wO1n~F?$4ymp^BngLj!TTMG;PTj{S|rV=pf*@ZLQyY@V21(007i(3hjoMA z5zSZ_YsLH!RHb#dx)0=H|MLtMl~ZZHbt9&ey8o5|V;%)9lJRg{trP&Ll0*)w-crw_ zH8g2Ur4*W4l32DKroo5xu)Zdt9)^{N5QH+OJ#ojw`h6Bb&DIzwf=n#B7phTl347Z- zccR?5so=2)x*JC6o2e{aDRA(66H1b~LVjQ}Wj>GZ(3*YD+@@)ydxoVuFX;1_FLYgi z^uV{nF6$pXG3*ayFbML|A7ggZk>q-1?IS$fQ_(}gL!=L&T6j6nM!@`cX)3N%J9A~X z*80824Z$&JQX2@5DCOwqa~~t8I)q0bj)VfKj%mL!4~E*)`tOObvv&nhf{;SdW*Lul zJa%Ix%9=60r$Dn!HTSls^RkvHg4Pl0V3<(AJsefcp*CYJsQh~3pBpu$Ei$(RqQu#3U!xo*k(tXfnO14o z8?da82{Gv8(}9ad5VX=H!1hiekF0o#)C7#XX48P9cQLZ!&Vb?Wu~i;8-%MGPuJT5C zd0u;(%_w6Dft~7`NQ#c6!8z1Z;^lEYNo*eUlzP@!-#)oE#0Z$h?GrhjICy#}TN=j^m};`G1OfD^wGBGA-nDI`4N4 zGr9oztU95_sF8HI7n3+p4vD@$a8iaKrTQ%THfAZQIMRtlLIlNpIv`d16+PDb7y07D znu&12iYUA@=MaI~@=m}22Nr9o0X#zd2>*<;ls+E54bCviq ziR!Q^X9HQ3M6c8u@cN{l@{1YB{63l+*hr!X_{@8u@QOly^bU?rryVzPmgoYRXo+8+ zwWW$ZpZi68tdRy1671g+IXONo9H^fXY=O%3_|=xTtDSi@Dr^B;i+*HV!heaX;&&_w zPJhQY|7iWkt_n?uQW!y!BT>7b)#CVbqdc~Px_}A)sdTW{yl8-ulM-r7TS>Mui49&z z7ltKOSQuJe0kdi`kWhrz=k3Lk|80;ioZlBzgvw?QL-J-lDy-M*eb4;w%*>PmjlJQu zi*i>N0*-{~rvxiP2B_r=s!HVf^FBMD71;b?2vc7&Q_!ZH{V*R+4tViguhwN;)&8Ths)ZbeH@Z&jE?9b>8=>&se*e%999&bEuw# zEhTYbt^x&k-@KC8gQgT0@EonIsb~eDsxQd}C)0vU5jm4|UTJvV8#XP{4E}*q0d~$w zZZ)Lf?P+$#6t8_d^L<_mGKUyLwA|wZX)2TtW{lziZc1V^_Xqm0L9$M~zPsjlX0&!l zube*=Y9E86B|fi@C*%E2rxbLaPHwX+h=K zGLzv2%s#FAsU82*xRWNS)`Vi75W_J)Wt`m@pTcZMHr}fbeIp z%0MAgaJPAvhir0SB&o(d&LVFVTU&M4%W^ueXVpL!1s6Bkm)V0Jt?tkWcsj2*oyULF zRzSUh>QV9#m*`~l>ED5;+iJX8uhFgRt=hAtyBvaoKN?ap;Yfg(W-O{g)_|Wb4>)E_ zUeeJ^(hbA1d2OuNG91&=22`l;+BCco@t(%WgqsFMinOyKo)bIuVr92%CG!u0{Mkx!;s;$V#j>eDz zi)u^buh-w!oxD%wE2F749m;<51aT^(Wtue*vx}X$=0e_A(UYc1HKix(t*M zhwm(mr;1!yqGzyGx33CzUQ~Lt)7M}+qr=idvKoegv1ubS;zBT0HrS{H;y!IWWEXl% zb=>0l5Pq}571ZJQ6J#$n&-vnx8CIPzsk`S%xJ(&OB^@w~Aaaav@mH=gqYUw9xe(0z zZ>pm)8gnrtd$2mB`Nt(fhO!u`ygWwIxHzdIxwnZeX=KJuYrT;3;#m+!t9DW`78avZ^Wj)s|*5Ra3)3=bAvvXpAjV@*}AQQk}*i=P0t zz5HA7pHq=VV;NYSYT!*UYM=tTFh!+lkx8_;sWirM!~6{e0WK}WZ9PY^wL7p=XDYV0 z^t8{eD|X(A>%3~C!gAG|y27^ePCE)e%J8vUR$1_t?!*rK|&Sp~gmLI7uQ&;^jGO%o$;%y=ML@-xF{rF`D4>; z7u^eGZEC`2NWCUU<_bkWU1!o6;ed0xyd9nYUiAs5JUZ+zJ(wKcj;c6x9b_sjnN8td zlUi!XA?GKfcp(8L;tEf{rdqhKP*Sb|w$}pK^(!V7NdqV}k<&ViNI0~DoTP}^$*=pR z9Y?1mr=Gpu-zJmWFHCR<>B7wn?O^!*-2U+ENrPG1C?)=!s;M#X9AEOW&trSv3Bpge zUVRu($PKt3rz)0dv-PsR=@(^7NtkezlLCP^HR}cwQho6J$74+S$2kgvUvr{F+>Uc- z$z_UPcYEF4=Lj9O{Z@G8wM(_8V)LEMV}w%B;)ZPfjO0`4wJL9^=B$vOx&3ovBK$45Bf*; zm-~-h*S?>*2idNr=_XRj?eQj|BL7aZGG+DWxba$nYWm(tvS7t; zfs_hLOeX5}EbUnGn5R2b#QFTsjQsuiB^3_0YULv@B# z##ZTjUE%@?T=@Qo&73ZKb)WyvQr8W?!(2TC@z=pygU@cS6CPIzJ)a}ckpzqv3}5^d z^0Y)^&2zkSjK4Nqf%g^?km7DENAw!OAyCesVuUZ~JGA&vE)P!%boVdW^m*1tnxbiK zx?IlvYCi9gho@Wa-A|zl@}L*{nOBftzrI(@!kvOiHD|#=|4M>*3@qM#@k**DyNFA~AXr($SWO4=|B>A;OTHOj{Cr@pco@sv<*vqaNJGPjUl0N|5T zYBl27(3_7h9?CzC17-+(xkeNH9U5}1Az|mDqd6IcJON_}ih`QoB#+0mk&Z#X_XneL zR)5UVfX|kz=pu{pz(1<;e2&kyJOLkQ%K7pvC4Jzt{`aX&!k6kU|CcE~ajs>$m;ICs zc-W|N$-Ed*B{GyF6reX^f`Fpbh(=*}Q&7jx`LIzHqo{DioxB|a>`L;&d(K7u%4TsO zikvUQ7xCnh665=}XFPNe<3w(J(xDU&|5L{3_d)^}CK}(O8?ztTEX1X>N(HzayW9>F z4xg5v5#PpiJ<;56Ho4rd!VZowQZYh{=o^3kYU9IDMxWsqU7QWh*SLS28z*Y(?Iq-y z$5t69A3-3x1Js-?LI^wTZ=KUtd*CpaIPdzE8dH9RYQaLWdFI? z?Cf?rrxT0`FWp&sTma-#lC`}3a;hwdkj%EJRAleXyctE4PmoAPlRqEu87YQm*R?? zjr(vKX+3LzRy{&VAwG}+R4SI!+EHuKR(aBPNjUZ>3-cOi$BHH zwU^GF&0P06);x(s!67Lv@;|&!1v3^~U%$tQh9mmCc7yN(l!eWtLg8Y6&OEZ=hWE)t zYiabks2?DufVG-y0(P+&s}Xl@K(~!0??IxH)l+ zGd1RN%numD9jBAsRR?{o(aI`@utFD7Zf$ddm#L<5L`<1_`m@&X;gR~)$B}cfc+NE& z7k3dO1&Mhe&IPlZcs6d1uYfbS1KDsOKl=CnCd8+4*{_?W^kUGE#@<$=r(B_YO<|t< z!%d8Amw!gN$#H*s2g65e4Z1AW6N@F`&w9tIqEhNum@SvYS-p&$2N?`m#ecT5Jm=Ik zH4=7`!(wyzt}Q;4LB)wP6|xb6T5<^K zN3K<+cF-0jNq>t#Ck_qH;9F$gzbS;)>A1dMOfg^AXNhce^~iu4)8#jU7)WyMKsy{q zeLOSOscbj|Sf18hUXSzbz6_y|({PcvZh~vfqq$WqECwOpk{Gur73Gu#Mno?&>lcS% zI(F5+-Jl0#T3OaY&ULXxAmY7@)K)FqB5csxFa~eCW8{OH(vEvi)$j8@-X_?sPIVrL zljC>B%Si>NN?Hzv4gX1A=$42Yt4uT>IK;zky&xN8N|0;TB)5~3LPTX6`2^*9u3(;z zb#_2ss-#w5G46ck+5-)_6TPNCDi*;ks2mBV+;u?rKndFRj^hzj=f>O~lSwym$TcB^Vn|I^1Mps3tP%K$t&R}z=81z8(m@Mv#n&!M5 z9;byXk@8=XTZt<~#e@C6Jr~FPZ_ihK-upcZHr&gL>=;+5bXz@#|uj>REqB@C4)X z5i(G)&Qo>#FdT^}_qzQr+G1(fX`yP!j24sCC@C({h$vN$@1}8OAKc-n5Qq1Bh%j;w zypSNl_ha-#q5E@54}p)JG8d*ZWHBSgF zB&KeLefHSMLf}o!$I$3~&BX3x?1)CFGSRDs+r9AzHpB>5h94Zqtm9MQhdsq|$vePQ zT*!%^&22eu>n3B^ml9-pR^)8VwU&5pTca)BfxDJKpQaa0{F-%4vOV!r@yUq^I*T6- z$`?Xb!(54{F9V|HIxtqM0bugS|ar4OK;Z=8!2Iha>ZjJC8H^_JuL6IT;`T|cw z9JM(&`P)lm@oQ4@)u0M>Qzb|k`%c@HS%2=*+5C+sOc)=VYgm*5tW;Y)f52Gc&jnGc zt9)B%7jWwz1g7_Y&(PsN`evmq5$LP%N&*y_s@Wvty)0G$Nib^(QDR6Yd*-Hyq(!!^kXvmus3)16^w6SG*x{uj(#s;p=y9fWY+j1BG zi&ec~VbF_~uhgrN2Q({}25gp!YlkRo(2?gXGs2guQlEf^eM@08k5dnZmcTNj(Ue7; z;^KOL$Moh?hru#neeUyTw=qi4u}aULf6ukw?eW=qBH&BA+U~1YQW2d)2*wbj(V=RC zmzAbAD2|;QJI#(uuuAlDkvJOiJ{`;xtZ!hRbGDlK=Dx>!g>;-p=yk@VSx2LvqVxu` zCVroojqIR^!84xxHO}=+QB{y^pvSic%TU$C8#S)T8EWka*HTTGTF)S?6H%rm!uw$$ zCa6$3m?A~6BMTfd=n+t%i@nAV;^~P#tsa~M>o-OWN5Ua@1os>jW^^Eyq~p5{==I-c zvd^9K(1zK0-cvGU2JiB?A$;zi$&J5R|5^u*c%MR^vvX*VmQcI82mpTzP3N*+!GKMc zUhvCYeLqgoc{$8)-+fsvvV*64i7*-OXwbuoq8@OUTY*1=;wlNu;H0;ZL+)ElRzaPP zm|8Sa@V(FWz8(}|3#l+V-1bzomGREa11x$eEAW(sSl^9CkyKdMM{M=AGgdCrING7* z999xpFXbL&&`+SX(jufK!`Szj>;!xoO$1VP&ZNN3gh&|e_70lv(&@Z;s>?qjn6xX2 zqK=;=acioc=>-fmF|Z1y624X_ljUdfnd>AtpOMDPbp`QQ)$;%GKgp%rVbm_66ChWO zBeB|48ZbV+qjgMzOus*j4eAc{2B;3U%BfZFpxz~78doOsB+}|_HiMVmp?n&6Ku<8> z@ca&qv}ORIn=A|c${?s@3$ngjS+uidBwFwZXp>p)}fEf7evc12smBGnpG`lK1DAyw(bJvH6XW~cxv}e@G!OP}&ARt~uhAEzJwq4L zBsIGA_nK!{5ODUI{OIfKI1vP5jUoWk39S1bxw2)4nYoWbR~e$h^*+{Hx~SM=%3T|wHw zU)BL9TtXJFQWVF*>SM5s_pOB$V}6gq?Vh@rW~4VBm-XPeQ^AE)~+;1NeG zA(#cT$t&?il`I?o%5y!Liq% zh6n}FLg+;R$>A;+ucsmar*f`lnO`%?J}z*liN%>5A>bahgvTqVVEnTJQ(AKf@3F`D z4?bHecKL{tv;q#TEnK`Bf(2HUBa+-Ly`g_SY;cy-OCI( zuiwQjI2k_t_g5ZCgkG^(^}l2o@wp&>(FnWsyKv$MJ0qjVP8z79s7kcN1@Q#6%M#lf zXXKbwrse8{fbj;s0UQY!Bhre?f9<79O0Wtz2axRb5^DrS?(^1EoX0E1+@2vw=M5N{wWqs8`}T6So2jrqxFZ@qqt{;eFY*IM zFk1wAUJYgX_(;wB)REs!`t?xD;NE#EgGJ;bfJ#1!6U+tte$-(7+22nS0q0bgTOv!}5VEx2T!%e4OgU*_NntOIv@x32cPjFR=;i#^ zfBF*6?)#oU&=obFB&~GnyO$3q0&`l7sRM52$;a;^fMWs&ZJ z=0AFI&A7mLv_qX<8sqB?nQ!{A6ek0!mQT=Z*C-_Zy3lXj%884=kSix?Wd&JXlw{j= z7m=LZdRFC6qn3=R!RfD1&_>bomS33VxGoMg6pH2>Fx#wLb$~EY_{{nuw95g=Vkouq zsMl+LDHAKHPXUPLt%J+vme_6UI7#=2L$p7CqQ6Zs?^NCd#k(TUg^x*3#i0>hkbI?TJ1#Z z80CZi)TcHZ<+46!^J`RuB-MY@^Tu*&7eLHcZ{o68i2iw!K!CD9IB~d&xLQu>Ujb!! z3jCnF3UTfvh|Q%!8_FUDaMPlvaG{qc^>#nI40O=%wjIOR{pLM4h6D@Udnvbb=-`s=UpR;>5ik;X(##l!nx`L0`7rI6mbKfkoay_Pcz zr82}%(heJ*0>B@VIk0lilUSjq&UoK#N`T*k_{7hF4vaipPQoG}5}Lzivywz8;JuW0 z-Wd#!FQQt7T1mom{>)|aMDM>|Z%ZJJR z7fVgtvk_=~W^oFng?JUSM678a;XrVzsE$)hvfa<^@)QFw2S z*JvgPV=XWj})vLF)OiaEbm43aE#F^&YM&_H=!W{Miz9gMtDF z%e46`w*)qi4JjU^FX}3GeocOE%+{j5u)1ovl!2x+fGS)-=plYNKj_)o#`U8v0@WFu z>v67N^bJ9g-lhiEk_Tuk^V@0aBS5Ifm@KWU{~oYMt*ID;u|d``t5jYEp@oEk z#8S;gqZ~PJY;*F}b2qVBhxfO~$$J#3ZKefv?eT83dDV{IKto-fBh2}@%)H-%KKumLz^J_e7I?ptusvq0|NkjNUJkfPr`YJJ*7#``eY7kq9_;o(MPB37+JzVRwjKJU?@Rbl$_SRz?oHV8W^q1%O9?b0(_ zdIReHd{r2^F*3**j4A_R}IHV zA%5y?rfc`0(uI=S(rn-BsRv-zs&;0vavd)7wq2X12FGo(oF$jzC%T2U4G+MB=cs*; z5F5w-f#SI!6p9};P*ELRG_iLv$z17hI(TEqaRRd%AJe;oIg0p{*g^K!`BYpyUR_Ny z7Q-wQL(Iym=IH0E2*Pa^5Z_$K%)hE@>91&e1mZ{|3-KtZ8x$t!u``t!4Z)DE8f!G^ zA0V@|dDY4D{O)zZq*=S|uFATkxXhjEw!i5*hfR(IM12$ zX$X64*82{~Z{L1wKhWQ;1elPh#s%tFn(Y{S12~TcwaFFK1gw*8-?rcRU+!L<7c@F3 zZ(t!VJPvxaUWZ)IT&Bd0OK?LIanY$Bw8|}0+Hdvb!BmiD)nI00H45@e_Lo~~?C|3H z$34s;y6FR(%HGO0(NN&50axwLOY!s@XBzlY?j^_m1Zg;q>9M^89 z6EQI1iK5c9exV`ft})V=D?nq#x`w~ALq;Dgrmw$StFGdwgE&{L*C`Utq9gxE49~;5 zQ!*t3PFB9*B1b)O^UQgPQE$h_v~I8W>Nef(`ac5ED;hi%UT3`Jj!i@=x5IDUe-wctY} zxH6!n%~voek>N|MpS|&qVT{zRT^m-KAEmy3-7>^u$AA5u$k((67cjFF(Dk`7O*(d1ejc)5NC$haam46dXvV);Jz?FxlaVz!!;tAuh+zQj z-W0=eIuVgl!+4_-23nz+Qa@P^uvhu?x&by=AAnAgEgu3m+I}Zi7m&Kol?DPU~|=xYi$k(f-_q1h^!#wYX= zPTIQrl`q)kG^f_cnHP`TqNlN!Lr^zB(P2JEaEv&kLZ5$5@?P3TWNn+sqQh(NB&<#w zX`mFT1L)$V1kN(`zD%C%`d*>fyNu>aI+n;02IUgn}%R{1n){krAxf+rj5v-{$C4=qV15NGEWu}AMR+u)3E~m9)-jel~kPJN5`Aq&k zSo4^0cuEQ*dTg8`q9VLh2MNMv!QhPSR1O5fWu``(tu%jKFm+_=svrig(WS*Dkdvxu zhTRF2#C|>1%3|rW5`Vk5h%;%>@dka4RjhhL18seQFyNfxl2S^nk%G9=EBGDH>E#W( zhOYv$-@k~HW4U~gJgW1u#2)zKzM868yY+ALWF?J}J|3uXk;qP?u+uHL=TAVdxTK{fs~i&Av`e)mglZ>`1JD z5XiCK&wb5XD;nnIeia-aLp2XyqemB4PdC=e^9A%daNl$~JRz&l)#li2`#0Nl3Fhgm zy!IbTPR7TP!t;K0wX!60s_MQey1Hba7qV@;6j}3*dY<;SMc0Q5dIKxUE#$NAg9F>v z?ng_(rY0x1*A_+%{;j@}jpH2gd?Y5289*eMv!q~-Jt(bqbJbu6)oupLbvO+;BxAry zr-mMlaD!FtF|$QRo0xMORd|+Je~Ym5w!0>YL0)DPaQ-n%njj>))cEIFFeMxERG>lq z+02g5&6u9xV0N+ncPM@jr{TKqSg4<<$f0}X8!35|$w zg+w|iB*N#MB?&KuTUya=HDtfjxx!gPB`s{vs5VD$f^-Y7j{?4nbj8n)_-vb)$Z;h? zRXD&;<3Ew!7QHBuVTD%Ew$ou5t7vI?BkZddMhYFwGW7{cLh^GFMr% zF)ClWfaS)a~6fGYa}rhG9IUnGxJHfM2PRHkR>UgLay6 zZ}o}z$Dk z4YjAewekLf@MP)B;=9Z8PLXQVAE$E6PL2(mzt7gvc17 zv4=+X+p-FV*(0q?eEvAsS+Z7~>K8<3m=<@G8b6e@GVumY$W+!)`%Jd?7XudJ*A4N{ zn~JwYztOwLxk);H0oSOR$o&N^FtFH7_DOLVNT;)LjggUSsZO2~Da3S*-g-C{K#>($y zkD3eibUeSI77RO>HD*Fu463eRk_Qqf>C;v7LC?95VGUV@#m#v*^iv5ZR)(1apv4i1 zHD~X7O9e$#eMqIdoz2g=sYhESZDIjohOfYB2*yE(Rt+izISDB8ys* z#LKN9yta%wA4gf&=lBZ2#e|Ld%^N<9L+kM$>RN}#%~Vklq9Q(zw;XaV8l(ok-Aq!Y zkw2|~t2$<)47qmj@@ZmmUM92M#ub!^>AZCL5REdh6vBSL2XtHR-nEWp66SeO=PP80 z7D8KP;|L7&+LG>}G`Y8RL{3&)j4Zr82QU9wiXzhLfovnIt<>>hX_o&PLpGZopCf@c z4XRKc`mVG3n)eSW3X;&G8k&hhtjx@xf(NgUCvkmW8&G8aEYXKj4_sQmQGeaRf`Wpn zy@Z`tUNdcC-`E#D&p}Eh6`Ve}FKc^&!n`t>B)^dHQU(PC3{s8t-8YY5LXTq) zmF1woMEAX09}NI~ZnaoZlP%wdAO@8Ac!g5Ee)|j^^d|(&W%Kp+d&^52y@eCaXd9{l z<=phIjCjx`WLC9BQmi@E@F`?@2cH100+{`c6pN$}s@oqR;D@fLOzwa~c~&SCu)ozI z3xeo}k`3!d3famNN61XQcVnG?9EaQ8{&RL%KdjowlczX-MjZ{vSp{N-CuPIya|wtK zqcNySUsZKDfBE8_rj;N`8z~s#@+NZ?Og1qPCShC5s*TN~uuQbt9LMx|j31f$ql%rD zd#iy&0b9tn>n*SK*Moy_x+)uJ0N{xAff@ z3Dl8G@Kj-Z1kS-=BKZ0r#Nf0;-*?0s95eWp7;Gfdzkf{L2z5IJJVF8xh4tF|C5s%X zf3&+rRDq8IdBrnh^^)OM7Y^O7Uq4L~KeH7t=9FH?+=!j{Jq<#voQV(lhh<3fWq)bT zV*7nvrN@7W{}sL2>PjD%WZLfih)PCa21h_1s^@t~Sd^z&>jb_}<$vW_N8wYF;DfJarMA`(BiyjbUWQ94hhnRsbp_8!) z_6lb7$!ZnVdxaimx(9DvkETPv>aV&+l@2kXC^%Ig;hM?x{d#7?`N$WUphzZZb(!sP zJ-MD-tuuT}D6@iqlr~f5QQRq7!lC_+NE@<_oB8H_nj&aDC5n}~m^tly3ZUV2ItLc0 zvdi;WEysLJT8;pBdvBk}_$FH-;Y7fwd^V0b^_0$Y(lNN%_cFVgnV%QwTuH?GOLRoC zqRx_BVl>~6btoK5}umZ_cA}4uoGm3&8wvXo=$m**r zm|`Z%7LNS@R;h+4AwkT^ksKaBzkf`O7Qgx*i>Y-xhs_{XI4yX8Z0>>zV*!qLCtG>6RP_(VuCR+d`lm0(Cl}Zuo09NH2D4Q;AO* z?lj8v6hK!Fq?d`X;ngz`gN61kkHcNf<-7V67YW(vh{)KN-0gN7Ed`a{{VS^4EQmoN zAp0eT3DoSG`6N4|9gyW6mG6(HZYls&qaDucVj+{P#pW`fsNL>R1%gDyde&up>W#LpEKh$oM*OA zWa#~tSOjr*XL8dorIZ(XjANWv@1#J-$zA>LZ-#;?drfkgj$3Gv6&bVTmX{$gBFO7? z=Jvah&bQ*UO_Xt!*`vK*m~1x*M#6Jd2{y|(hM9b4cj7Lyug`a0dTuaVt9vNg+~7pE z+g|G%2Z-_HD&wDKDDu!)myOmybW3Zl(@6XD`ta*Xh(+Gm$GNlW^^?Nv&VItl#={Xo zU2cDqcH0jJG-gZG*E~SXZtuT($u@#{D)PY|;|PG57(q%&_zX*;csg`W@t3Ai2InI0 z-4w&v`r@}6!bQ>NkS^Z!{H=hO9N^JUdDUK9kwX{xz8Zc>WGVOW)=gWV$6GXtyPiiG z`BQs;Cg_K<_L6vwAlt6C{9ZZ_+>n=7RuPE>Tv@{~&6gL&%LgjR2iV5~a~5*e845T5 zigL+gT7!b-p$o>MVf-HZIXvxdT!h})K|ByZvg;TSGmM96$B$ENE9xmo>{6nJL}?BM z&Y7Z~X2Hp_5g$GOt^^5EphIaI0H!xbRgyn*8c0>5k0j#!ZK#y$aJ{_(;{US%VDKy% zDAh=NQC6m3K!@F&`$H%E)!Jx|D^|d^QF+}3=oaIvPFGRoc`^)+9%T>Xvew1x+#$h zCCgq!S-dR#dJTWbF$L;^aCjE$92BwYQH%MO>!y)J=uP>sL~*{w=IWRh8ZkDwY*U!! z_NV*ylBzFY`X3PtsyAB#rPfgh*)7P5O}BeBdJr`~I)W;yVHN<2(Tm#^(iljSc`waJ{e6pqyh(Jez>4q>_x$r^Bqc#N3|e~jdr7o042QAl-85=NdTnU0ovoys;M^l}Jw z=+Do{6*1Q}7`(EwIz|fI?qc!_xY`I$qNxqki>i3cUt^3Fsrw%s#9d?pIhYc?A`ssV zxC5@YhPO$M78s2bg5M`BM`F4RJwNuZjy8s7&kD1lJu??j4C3B12s^osyi~{m__KJ8 z+cOQdMD=BFF5f0Bqgc%h0u|hS@L`k>NVsvA%qV&_xUVB`3|yZG*qndkd;9Fh+HMQo z&F%UHJc=%Ja6lz$#Yt+HTwkz5l<=%>O`pm)4^JtFuR=@WJn_gB_KIg{3Wi%CJ^_z`q<%Uny2-v7q)iUfcHt&-zJ5k$3q-Jy8V{gy(4QXtx;~08R4PxwhnUc-yE?C zlSb_1O>7S5rKkss8NH-hnsj#llt!G11Tb4NQyx)F%}3M#*VG3GU~WuUV%R zf|t*1`Zi=yG28iT|64Nuy>}!XKf)|mjui)N@z0nBLxyGfvsjTWyGa3Im@dA`cNYho z0q(F4b@WJN%ndyg*{$(dv-NrGj)=Fq3grN%CenSo;| z+!!Pd?h%_eE|;Be#H9R$bh`3Sj)4H-6dWaOPm2r}M;FdOFuvJrpT=B()N~r=ISOvl zd>db{+I6>C__`7;SoZuU-UGPhdr2b>MxL&7MAN8@(FpQdLY}wba;=TwK&P25W=%_k zMT9rWk+}L}*fJT>FbudonNK8s?EAYmOi9*I3_J!~1^|tO4uwDJGki;d8(;WM<{33} znyUj2?!g$~mSVK`(oZorz~jF8M2A&i@;yiE!bJG~M^#@aRJe{H48DRNat^Lof%Mxu zf`*|<=4g`cTtjG#AO^Aj$H>Z|u84+4lC+r2he+%fcT9rB*0JrkNAQ zbx~e#CffO+G>b+e0Snr)3@6VmK}E5=$-qDa?7U_^zpb)>SG*5e&T`4yWuxfp)!D9} z-T311u@GmZ-Vg@RX&rG@QCMH1aym0rlQP^#gi$$a;YgRz-r@uHj#VWE8sp#^pIbYo z^6CCB2CI5FJq_|V@X&?Liyy_fcLG*>V$ZDcOSx}Q^W)OvUf}g$?Pi{Id5lJU!j3$4 z?*TpiUpAhqR`k_VC7wxcc7lqJCDO?k`tomDX z!69^^NQm%V-k40F`wHZ|+jNwsPAVw5y#rn#t{E!L&R%Ce=QV-K^~1#JSfS}T{K)+@ zhntnLSlCCoKjf81!0jBWuOWc>^5S(-OQrC+(#;kmGNOb)&}24)XAyzacTUwO;y9!uXiD~XLG$d3 z*Q2xG^}oMq-|0yyRUB%hchs>9@#u3cKglyfLEB#x>UJm3GXuOIV&oLDr*{9RIr_B1~BOlu}n+1h4j8s z&8UrF>_@BL$43nR#9Y#uxzZ>^T6`_hOfrUmEM)g%oYcvdA=^XorRpZSUTB)I&!E+E5 zVw|nq9+IaFGo#}4=ZZ%V9I!1 znn9=2awQJ6JhPDicPA8kt`1?9j#v}9IfGMvw~RFNs4+D}OZMu+p1^!#}mqySlN z(?vO94iU$Hd++m~qY|p1M4wS2>Y5`T90HKE!>QAJr_1~CE0#xQO1$5aC!52c&J7az z(f?6zY0>C4Qj2v^ zxu|P#b?4wrgAw#J$Q~Xq2-OUGN*cuthcUrSFIgA&t1suf8@5-#X@6Qj%-wn=Q;b`#*^xe5X62=4vr(kty>0xVpDfwoxaOiFmMvi`i zQ!6oSy{zzlIhIhxAr2j$$&S+_F7P}{f`Nr}eJ6EgV%`b*Y2PV~NA^K5|CAgyz%xq? z@eYca>zYwymx=GJS0+BNGHB#C{bKcv_p#@yiUViMUS-6*J-oq_KIqPRSO$Np5)G?} zOsICNkP&Zfc1G>><87+0$h<;nNxlg673HT;gL zV@M3Sd^RoeSA_x2h8LL?R?-g8fXPMsdIM&kABB_BRcnwOUe6Gi>*&2|_Lb#7og-M| zc7i0|{{3@)FDk8zgOX|uIod)k(+-_p{#;ezua2FfkYvt=;NwE_=QGt_$nY^e5dpqb z&499)7xs+(4I6ODtY|U-n5anAOh{PDV@51B6-GDdW<(*-$%h&?LL58F>NZ$C`15T) zZ^+OVT4{u>)f2&5bmBR0cvwzWrUj-=S|u?lmsnY=iUD}lxBgRS6t;gk12ox}W%C>GV9scI=c9};vk0>9 zJl~!P5dg5E;>p$R&bw^z_t7bhw&bLjVCd8$<`k*-RrQ|O&Dd=k?W8cOFftP3kdM*d zS_H-l-bEIq<9qLY8FNm|^rmUlfdUf~j2Y&Nk>Pf~zs+#tO*jYYO7}7DS2@x@Uyk!O z5}=HWrE5@C(XV+AW|j>K2(b%@Gl>h@1p-MQ*C^1#iYF%2p$ON)xxo!ikKlM zjO(+QFukmMYaBr?(CDF}`jeA=C&1L(Ssg1}kRN}Q5m!wlyGyo4Y0BWRMTqCIFxP0y z+}}HX3FJD?lOwb~@nKl6$WZ8Ft>KV4&)rPJ^XwkYcjlFK*PtDe9>1YoEM3iT=_&mU zR|~*+(F+(a8M~i;lqt?chNE2&;C(P1Dm3LRXpNU*+t*J-u3AUyJY=W_wb}(I^o! zyNOkp2yyN#iP?NUli+6*hd^nZN&*Vbn#xzp65u{f9MBl%BY@# z8U?s7zJDyy@!~);ilh+nw!8$)T-@5Fy+=_iJ7X9WV3zw}#Kuy z>gzMzCre=`X-&KUUd@6EBY`ZFe(SBQXNU6(j|rb7`IC@9MS?1Q5~#2Cb#Kp-DGiho zp;5s&R^J(jg<>e^ZR`ETtIv^}=;K7v`}ryrAnpPN;Q_eKcqZtYUsC-2%Y@N ztu9N~V-7i>h>dGqyeIHh zsdcusU~uqI%z%jfFH1xr*rCCWPlnxC^9pY;ITk2c=I|Df+aTi`q+oZ+*8BI$ZLhKy zQ@uscoBM52gFiw1N*mM73-H!-gUaI=Tt)$@`eH)zQI0FrF@n@zD2L?Jqx+kWYoT9k zFlV!->Ixn*Hk*H??oeYCzrfqp(bWkLx?3Q1Ty0!I=LY74Bush$O|({Q@VgF%6@L_b z`TCprL%^4?&SKeq+Y`fS!5{&0o*y7i4V%fb*JAtY)ux4zR_~ zX~|G66onKq?gltb1I|0~Rj`Fh;gVX7q>Quzf~WTB@EaNecgolp3)f_Aul3M-j`V-| zJ0ucg06DNtybkQ{)i{J?M(es%X2`ksDJ5UVgkh)Yms8u)=Zf3jTz6jz)$;}SvU$Kn zAb<|b&@=Ao{w1E2E&w`^ ziI%c-rIUdb>I5`D_BbdL)RX#Z`aG#;yDP$5!rqSL+Vv`6g4GL#cwemV*$PkC*T(Ep znVf9xwVRDV<(T@~=^khHo2AgdG%q1`3w??uW`OIL+fw0k|UB$ELN=()WsPPN+_PlYRjDDz`LwfWVH}>*mbfBSeN0HOGU)Uf+PyiguVK=Mexh>s zQQBv@{EaASu(sZIlmFnwhz|2RsO+PTQ0cnG z+`#s|B;@=_(9{j7qasj7+ikUq7mn?u*>daNao5zd|EP;wfrqP_f!?O=+tnm^fs`y! z=%-^w*scIO&#$k-6>eX;VFT78h1Hk($vwu!ZlQl*U-#XB(eZs0Gt0u#X9M60TVKm^!^`GzVptbsU>)&5uKhm!;t86>2 zh0&`1NMC9cAC(8hNxQb&cmE3jM%Oes-jgRFVH5W_%xymC9|Izu}*z;hAb6=Tib zmY|)!bKw9cN)g7PX7X5SVkmu=z#}(xzq&4i5@T-LOd;ZaYz!GviWF8pgCtCoJ9?B{ z5ctV?;+34DRANqS{VQ{v?*!fQ!bwSD8eO#KcQvs7WM}EJv;-kbwvksK(@v4ZE; z#}RiNTxYko817)D`NOS-Zo7k3*b-mEPZEXbzQ%g~uCEZ$c9*@UWjU6b6bcb}sK7%5 zTH9)UZ7sSC0KO$8{CkjaPKDX!;iFMZuL34Swb*b9(~^h>h#XzIZe0!(a1?+SD8D{E zSl0RK&7=lk%UK&>i{pKPiUJ01IQ*n(-j5TJJX5`uwaBH^T6}=EKbJF`{Hix1Y5W50 ziAC^oV@enYK&wn-OMyq^>qVi<*>F;>31>gHE{DC1?=Sf;u71BxGQMjW8rDINcQano z6pN3reE4~TEO+_7nK0|9nGf1YCVTi^in@S~1P(PHEAa1VkD>_ZfQBsHCE5P#c}I%i z>tR_>er6S~xMt%YWzWDIvKs?^16EY;Phb#=nC`2d>+{6R)ce@PtJ8yMe?&(A~)E?kC zKCZ`^)5l{hw2;ii5vUzx0JVytnySFUQn+PV&H`~?5a@KFn>}ZFzfb!r338NhE&k;N zbl@MImhj7dn7%CL6NZAyw39eE+6(OhR=q`UNkd-3w@4XLHLNH?sttZHYWAiP0YAc- zicvor72ZQ|_u)IDAR=@29O9UoIJA$lc{uCqw4n{5Y`Y1_r163i-12TQk;x7Y|1I!L zbHjcHlz;>P>HG&qI=$d!V=(lE9j|(pwGIEQnQ6eQ*1v~Bb?TPa*Aim$iTARY_TjuK zA7L4X?-z*S{xJ}$|GAK^`=-b;+E2FQ20y(_Fen=I(fRpE*VM3)PB^s-D$t6=KTp*?hBU}>b8)Ig4H`z z-L%tDLki`~YK1*dTXSM4!u-pgZhZ3<+nkmMH#hFJF__^T&rh}GgeHajQe$Xh zQsNoImFAi>LK$Y{S?om~4l!`-2W< zP0`{@*~u5of;9_N{rg*wlS(m3LmVP?a*`6Nxjt1zP|5$Kqg36$(&ow>MelxS)k)nm zE4L>pbHQR^`pRv2`imY>7%_8}JmL>U{b`a++5N=+;V$E@pVQr7t#GD_=I>^-MgCm4 zJavDRv{d>knx!H;oCB2$Kuhde#DEoyl1xXPJdm9XCkEUp_q!%wq9LkrV6eV^AOp~w zkQH(=l;3ZJbG%?ER62NWFBNL}`t18>^M?8ez^W1(ZV+KNxXleE-AX48qfCrK%)xR2 zz_Ms;L;m2?A2y0W*qmas=9iW=@~44iSBbZ^suRzQU3mS}2$A2%N)+147M-y$abJa3 z7&OtteYyr?{aRgE>SKxy%;vVUoRsK@tbiz!)KZ!zCPLiC}xr z_)_SJtor&4FOqsfPx7pXXli+DGu=gg*ao(8dcwy@d%j(&r=KlTl{^I(d z*;Z0qb6gfM|-^*JmxHV`atK;jXo{*}Xc45y1f`P*=HZUNKKy@B~M(r@rJ zmW&UYN-arLQz3kJ%Kk$4(BT#d{aY!#qOL#k#S-UjpvaP*#UM?qyW zTL)Fa4fAKvj%eFmzt?h#-#L~#ufgV7tg+?K5RsZei{zuE<+@ZWSZ{Cd*lKD9)K6R` z`=kC)^`Nl+6g|wH&G!2G)Xrk4pZ#o^tE(gzwtukMBnw6<16tp#QQ2wfn3+b@LgM$i zNt0xFyj)OwBMGcAHf&cZOxConH~y{y-RE#+L}B?36aP8(0*~)L|EC35$4C|Aw^WM! z9PvTO1%c`0_Mr>&eXkw5&RJ*OJN#y$MNGu@@}*R99Q>agKg+Uth$|QLE9)}O6O**h z!^8XlRa73H%k@-NJ^=XG|8KYK0!kGAJSb~iwd;!f?gvE0-p^q-q!kC-Ty;A(WVvuz zm{KrU0&%vMJ_1$N;d1_!ey^SwY!HcHM(i{sH1^)TTu)BfJHw17~4K?qKX=^D&f`0JwUC2uyLuwK98Dufp3KmDqjaTlQp)yn^0xWAit+Z{=}UuaY1@AOxsONrg|1s5C-7 zBsKA4IH%|^sbbxv2MqZDfND`^p0lOL8K^jSn=elfu?1c?p?f2_4T7fIFuD@k#XqMV zR;A!U?)6|jMsd$+6bCuqtL%fDaW?Bl-(BE^;E(=}%03Q;I+kf#-$%X#d(uynPilfW zx-QVIqPs?JgAv#F^YeSYrJxUC{;ZTFaNxan@8M=&U$UI^w4wds4@6nJB{5ja5^Gm` zQpadoZXupR?eQ+ zF|G4{k$Z!PNZ*YQR8&xo{#pGZA>lfX@ne$`+mzp_T0Z?WdP!9mbLj|gzVPR?MPAAG zOT;tIe=hwmFZ1%pZy|78lB=;HgV)5<)~nsg^?Sj74IieYmwXObSpKRA(HSxJTdXYtgF5hHvW^Tz~i(2?)@J0zB_p- z4NLs6C;Pb^-|6kt$KIFSTmEkBd4A7lKy>vbM#5uS8r}z+ z&%)nQ5>rZPC>WC!KNv9~>1j%zIQ_j>Sw-RR35~z;nUqfH&Lx!Ie&SI*(P8Mt&>Nvg3k9 z4HzpTq3(ejHB5)jq*5hW&YTrNl4edyqBf1dSmQPc6Irq8|Aq8(A>Ih2jA+a7?e7}v z8GEO>(@!cH*Y*6hd*8XRpsn`&^&f`Mq)BJAUG_~f#hfDYF( zFEb%^YhF*0eIFRuH8ab7gH3uLT(PF}TIS5Ja{%8juCzuzB^Z3NCe%2QRwKsQ zXgi)JWP3ezpp~dV|4l^GPV9{gcZ3 zZ#P3w6h2mreqo%a5mQ>C6;GTS)3+l3Cs)&;wGX%NG~*?uwuF+-c;}x{46Oak(B<9koI8X0T?@+gA`^ zvolkMgN+$M8OJQ2fNUH|^YVraJ0`54+>7+b&I{2fQgJ1MjabQYcFd8~iSh5a0H$&* zvk~qezQAF6)7Pam(rDzc-Ld7L(^qre#sI&IwQGEQ!ks#h%{Tv!PsVY5ipxwR{Fui1 zzo)!65=1BCp6oyNJFJ0kgD^ddJjE$GsY(@Hb_35izq$?A#1~3i?MkI|MXJ? z+xk8UTl@^KR&_|MBafFOT8)KC@{X^R?xu#*tYY)Sy|v&Dh*mu7neJ25twnAjR{udr zj>eZbkuA}6IqgZf$HhWYZX{x7;KRJmTmq#a7YB~d(qj=X*cVXF@o zp!Hd0+MYA7;dm+h+`TUHyy|36ns|LCkvqNQ8-@a;N6rT0hq;H|I~@lOCw^q4Rk@m6 zrFE(pDBLq1xq^{r!W*sBjJ~tiC*E|+2*FP^Z!M2D8%zJR%EXo(W1SZ(k6%9ZU@=5I z71LoF{I=wp9FHUh_Q{JW>@|eD{chM1(r;&Z<9c{MiDRE-h!vcvz23Tolez3)sWXk~ z>_a>Q|GeEOh~)7uqI|fv;+4gEom%{U`gCUMwiI1*x;+jvlh3PCZ*)d!eHAO&^KY&B zK5+V!v0SX&3AF$>k_L656@sLV0`HNX!)gE5CiH1^^b18#i(pwL?XGo@`8>=PoZM=e zQzdS!oK*>gYwoJ-k3rBz!B(HR04EH1uFuvvC5-4Dh_1=`+ua>4Ykq=&(-OVS?#AytxQm0#{>WfM1h4m5k=MRF%KKbS|-1y@xs$ z2U_X>&ayHFwFietTCx>3KW;t;`R=s!-LwBvpfsRi=ky0Qk9(N=X;1_dK^Qr3(5jWZ zeBb~mqc{Z^A4x)a?#-x%NNizv#j`%;c52_QWH}DMq0zbn;E^L?W=LVd4z+(YPoejX^)2X)o*O8GWXM z10z$09xU3Lgw&yCVk)7*{%VJhZLKyLO8;zt%bkyZjI;3Z>V!LI*@INz_!A02Fw+JS z)p7^6CURl0n=qU%(I=g8clY4GC-lVyZ>#wn`xF6v{mcl*$fo|*lc#4z@8Kj1Lm7;v zg&LdNBfB_sO&yQcP2ruKMv9b1nTx=+r@PZVFM-K9oy!kcr)A(%oD#{u|2&g>{z7*` zk!v&KFoo|=;24o6<%SWV4FIqjnBh}o><`@HYtHIyucl!Zd{wm1=@2wSkN(Q4WFg9b z##xc`qI~)&vHJ;ft|#d^N?vfnqmu7|K#`7B&*pEwl_2Sbz`YXs7!ua#fi@q65S^K6 zNRk!jCWIlLYhl1!%hvqP2r+LhJ=~}}!}zW!u|Ox3gKY)Ccq>XPeSCFTwhY`=<{Qt% zE%!o9tCdE#R~kv;K9TP%NBEMcOQbCEc>EJUOg6=|U5lL)IUr^XGvu`(u97!!EKV=9 z!!5_60sxbZj)dJq-e2+&J3^BP3BC`JSU-G7Y-hVXAn!8Y%(sl(;(rM+vVPcwEm;_i8hkTx3;Ao$uV-7X)^Le@=(`I|Ah!6DIH zeTL~fWpVEgd3LJCF0sjyYyJ6@Pvkk@*c6+QKq zyBZVz`@c+0jrVr~6Ya<1Cy{3hVnNuaB=NwkKce6zY%f{tgk}V2SH%vHGg$B-lxeUK zgWncHD(Ui)Ma*lnErcsI*9Rh)j-GDwmk3?y-4E34{Ri}PeW_5+roqWXAsdb^uThG% zPvu}(Ppc~OH;`FRXF#d!An`vM*;kJ2tPTj)5$y&b@lV)`gU$4bwa1h9OK~siqt<7h zt3)~K-;#|CB_$~4;n);H_W#a`KK^+#_w8XM!-x@kG8m)1cCA>ps|VjrytaG`+Ia@q zf7DOd7;;}+`1Jng&!kTO_V3?0?#bI7Jji!!eVMwXqk_Xk{y&)SObdORVSaK8nXr8{)otD6zxeoZJZwWOAKQ%aXP z^xtQ420<=5Oz~bG**Ne+!OUz@QhnD02l*Y>oA;3!&I++EM4AkM3jgCFBNHvg>0jkS}a$0J6cm!LaU*Y--3g-JttoNM~f zW9IxQ*e)PwhHE|n5?#q^yu6|+?X}O)4Ty%v!6&Y{5-LHUvNwm?U$v;2DoFK(z7HDuTy4AtFVPa}a!P2p-+z_!E@=F+<{K%7wemd+;^|7)=ksop|rn>1%q&G8~*zXON1T0 zf5qubqO_GGVLN}Yuzk^>Ca9FZD!`bJLO4}p`h#c6r_tk&Rm;lKF_X({J7RJCnjIVI zpVZTyFS_HI{d%>b*ztN`r<(l36DAeP zhAm|br;4rA67bLRuVe<~yztR=YOyX;gI1#-m*?ino2eF~=|X4@z1x-ZwQghY-_&uu zskOI>{EJ&<$gk`D%dIV+owEVVdv&*m^S_UqRb1c+)V60<%CtoGCf!&?7of6$rM5WO z|2Q*q(UyP@YPd}XyEX-Cr$oLZ3*ZjjJ1Kg9HFfrHy_~d6l!+An!WYdi^@^Z zJhqVdVFdqrAV0jvn82nmYIZ(rpp0$Cvw`}~E1I9DKAT;Ix;+IPuMo$5YnGA5%+e6^ zn0i;L{#m!RxxMnzK|5-2U?ws0J->c=oy?o_ALyt*wES}RF+X`avvCCnj|j&JyEuB z?3hP|boJ+-?Tz+}=eTkTKw6NgY;_8~Q}A8$56%90mZdDfc9?vehO&(~I?9BhO-GRM zM*~(_V}q+)>{W|0H;H?^*U9+$WGBDN*A0i&uU_8XVSFW#01q%7Qy&{F8hhcv_c1LP z#pvJYry^to7B?T0%D8|Z{J+6y;ZoBbIdzpX4SQpJvnI9n`E%JVA^3jLVN7-sCPC9K z>Aq}2@pK?7x!^6%mV(sb+=4?z9))#U<;Zc+8^}?8!vp*D?dGUsuIJA!sbXH+koet) z-M_hg;-d@Ml1-OQ>_2<>yA`1;9I_)v2oSYyYUNP-b8!gC=?pTFJRe-A;qQ7}M9+Ge z+?*#OVDz(6OBpuYK0tG!vEmJ&(aq|n%HSPz&2hvHR=bvb53v`&t?2gY2>vNbfc+tP zyOsS{#NY7J5*ZzFvWd!L9d3Kuae2$&;VfpIs$DM^+2N8rPHeC1mM8JYnfWn?GA~S6 z$ZLP_RTJT^pRW%MQIz>~SSfY2iqcph)zl$sn>>L7AiU5lwb9&06g8l|-D6oC*PGmc z3#D*KB?4Z0d7mL21rZLXE6Mza1zG0>gtgD-?nLa^qrFmM#~b0e`{Amr%YvZ++nwbW#;Ii0lSKcQ3EYvepC=F3MQr{5kG_pyXV4j*i`x)wa z3(XW{xz1U-v@V}m1xQomKdnjzk6Q2azh+v+e={(Ed}CpMW~^xz$_0pRR($cKspeG| zTSK+OT||W02`h1M`-sFRFFOI0Zd<;2ATRE}z3}}@1o^}kH0Fsq@kkK>T08S~dM~op zH)la9bx=^&`n`v6yfWOJG8n`aaGbd~WouwFZ<6ty$p0Pj*sQ4OQqn`PlnBzy*dg8p zI*}CYKH+b~W65P8_oC^BAPP%_NA*2_$l=|iPKMSKNpeEbuyU~xAeexmX~G5MEGk(X zJQM{u^E&j8DuuKOrmpC~+u;GP*gth6f%^gm>8h|{lfRmZ1oyKhCX zOq(=CA4i#2$2DhXo|~%iO+`}79sQ0;{S*F6DsIdH4j&JFZ@~=pb4@ZffREf|(=#KPWZ-Z6geUbmOcxFX z0fx8uej#_i)7B>oNYC}SAq@6J=F(14k!k#h%G4Z&%PK7frWKsahqQIucwh%t2d>rq z5o`3)Gu#SJ3X265FlCufbA?^#*##VzzbUa_MHs-e+drJAuCK0&Z}HWErpsn&Dec5N zZ6#8oJpMe+cXS_77DK#n4(FjT*0b}C?A!tCf$O`6sJ+3_u*xFR<9%I=wZ^jf2QeVdgI_9Jw$YK zv(J`D0qVzw70$E;6i7v!WA!SWqY06Qu%bA>JUJwkO6OYXw+(4gIUN~rYf1GUnj1W zg5zb3@&%20Qa)-m_?Yr%{-b7sKj=NIJJlOyv-@$a7a1#<(;8_0Wkad9kj_#RIA?2Up~0xxc(eKG5Qf{#e* z%Hb+Y!srCs%!uOra4ncHVjw;zm(prv@tNt06b~|NYE=0>9x8v9MqaoQ!%FCeDqQKo z%VtCxXIe%$O1;6;{CDq950m)YvXZkBW|@V^*qj?}w)5CZ$pybFC^C73(3FLrG;r|dn+1qQM_K^UKCm7a#+PC(LegpP==x}}98ZsxNiEKziVl#)WpGm68v6+=~t zyUEZuTA1el5ppBTavvTta714`A&sc7i3xmej)?hA6^ z3xr0aaO(d>BdlUs3JARBAA>%hJ<|2D$W0hOUveA{Nu8TM=!rVSfa2AQ2#V)+# zbY9ALJJvLcaSd2mFPU&G369PFj9mak1OzZqY0cbYpU3O!UazOas%(UmbJD*-zvDn` zww+GbN8gXkv}&_4v?TDc7>WsE#yd5 zF>J)(3!w(ZROlyz*Qg7WK@N|%ZOHFI&OBe^Tz10AIHIhdA`F9><3VVPeRt=td4CAQ zkENDcv-6aw8miKZ?7L``UqpE5el_0Xt)w93zZL&m;EA$a`sI3&f`Fc?OV-w~`*iZO zd{xBl`vPB2S8g&Aqle>V2fE|z`D+Y?Tj?X;ETlB@Sn*i1mjaGQkxv;xsd`^ra<@bT zZT*hnouM}K@cK-eA)3mICv`sTrmGKARfV_Qz}DC}sW@3eDq}a*#~|Ze-Q6XJ_(X`} zYMF#6-79}rhXKuW$!^``6~01K4*GQX!>iOSsZW6gpgO<7Sr+dz%1$9s9kH<>dk&=V zRNq@39r!~o^cqkh>T~_l057=BdNDP#ZYsoD?8(7+dNdA^ED5kP`0ICU(hw!XQm#mW zf%M_~7pJdoC!Z5oWdQ|hK1FC*LOExsU$Jd+I7fD(iyNGtCv~>4LR6|r5?sFNSCrEU zH>N9p(p318RLB=@R<0?LK!Xi(Lt^ElX{6hq;mN_aS+W(0!5tU@ez1yd#1RnTR#+8n zC=NLgU!UvWA5@n4`Q@)$aR%W!FO{U58K}Lm`|6`Lv&>WsBV|;D;;!ORgnEl)4s;4i zmnG_x6yoPjT+1k?*n4m9dA?Z(gB(Y(+i(G5E2f(?VLT0|uAFiq@gBw~qS8zp&anpX41_FKPV$ z7#n>x+UOGO0}QB=u?Je|PTydiO#*9nPBfF8wYIghj9_52$jLsK07sG2x~u zI~1rP3hhqM#Jfwt0N>VEg6`+!r7+fsw^izFJBeziam@+ zQOG{}A3tM}LtIoe<>Td(U)0Rz&KHfcD^?KK!!5UR+~&U3^H$DIs946S4PYSOseR=} zz8?I_p?Mwb=Dg*&Zb+{+0vO~%s6N0+{K|;8RN)hJPDzjXD#W+=wiJ5X7LZY|nD=Bs zoMMe!%hcF#6JH%xZWJYl@!3Liy}mdv_z?`^M??owB){xmc0(7nbchnzig`>o+ zFUSJWte<|`hIYc{qG(l)N(DPv4rl47H*;Ewk}*M{Fxkb)zqW3pj;lA*%dhQEfAiNb zQXRaA%d45F$e6<$821OFhsj(a*suYcvbNnc$?{z<-pYyzOiM#Ooa1n1wdiPYbX8l+ zan;MKZ;}nJoxW2mL#pxGcGl~C!K%Jj8^Oi)`sOMjjQ4nO8DLg8@!Pk9%sw*>(On*| z>iCGf%}rZ_N;Tt^l+iKV+%R0M)7(Z2ti8yu9Fj&&o*SFJu0~Zcj^;|z6A@^?YmsJEO8LBhc!Ky_ zuJyTE+$?|y$Ii&udwtGlNrCFi7^xJ(lWW>=1!=(}jGP3}V-0_@>iUSPqggzxlrQxpn%rQxJ&BYQJY8*3D@+s%jPe3Y=->-pL)Rm%fwjVE$R2#jhpqm${=42$Km8#e&)QS)V*fs=Z9G*b|W=h07ErS_L7Iww_#+4TyKZfZK)82k_NNzhmH&L5AQ^V>O$Jh5Im` z_YGi2YL-0>sRU7<_oN5uZZ|KxH7g+{Yr)z}Erx$AnogR)YNFvgl|K-+>~7QkY|rx% zpK!O>wc`Ca^;*Jhf6dt0`B4N;CEhr>U}T6%Q0f40&>O(`5d|^w7>Xu$#Gc23j#9A^ z`2Q>7KZU;*SpX&X{QNdti}ymwKgW-G)xvznN&IF;mj-Q&LH+X*pHkQ5WgF77;%-?K z$txo@3^*lLdDxFne$9wxJ0X*>5g99TH>iOihcCpBK`k{`icfGrHif?T{Yz2b>%MU= zjGxUqS@DKLYfU+9ux%Z8=nA%u`NPnTD!yr#V__=4(cMj-=Zm-Qn|1CFsm);ZXBX(17OgnmuRC+m-QX9n51%OmyZYm5zhi4u42p!^;Bk79>!NOu&tjGdsLT!34smTxRr zQo~YPS1UN@>R_OoTNZFU9EF8-I^1SfWb*E@UElv)BaZDV^e@KoyIGVTvjf^f1nh`q zVan9BnV~LbUX{Eo!YLi#BEAuk1;j`ZoF_TImiVR~XF^(PM#F^8bx%iYg%++|(hYyK zxZ%HSI@{+vHWU5q$saujj6ufYbl&Pd+bt@(Qc5{T`9&dYX#SZ%|6K#_7Mk`kp%+(> z(7>*O^X0&PwEO?G0B&6KI$U!jjm*(~LDpN%>Vc;3e6U?0q?A@;r2`x%50FI3PHJ3L z(vo<&WJFm_I3DoMR zgs}@pCrm}WrXR?iABnT{WttA;SP=P3xJfLyp%7Q>R*EWYD*l$8o!t|SLt*z_{m@K8 z<#$?LGIiGUtLC2|yV+gA2Gy(;8fIizW*EA3lgW2wn4G#6p`Bl`Hp)$&3G@R@J{rYZ zj01%<%D7}{bM#h>ppR&#qcRcQUy89PbQh2$&=4mC}9Jj981Jk?o zY3kyus%g`WWLfGJLz>Ucxk0HPbLyJE#oxxy*4Ni3klaco2mNv-M7}#PXoP8~DhFy7 zN&H<%4>akNz^_$Ug5s+QG)E2Hh=)ayYtz%>gaBagcQ%+s{v|VwQf)lyM=|du5>KEk ztJ-WM>U>R8R6!QH&7VM}hPXxw#YiikVEeg@K%3U2`GAR0RumDx=R3~6zvS#VOv>j- z`Go$b(bhcPYATR>PE$@Vu4_`9^7y^H+9_!0DOZ#*`Y%Tqp%YBpbKd{*e*C$4zc6LY zxo7qzQMyV!tjd3v#U5ZNLiagJDue^7Gwl=7!-DpNfBm8~0o|E%IP&e-RSYN96~1Qx=4i;<^|57i#A3yN#(8TRYRx8;6w!7ZDvx3m>(E9+gA6*by+aE-OebwMtZ><<8DD>9e9b`MWKB zKJeeEBS+t(j5Ls9_A(W#K84~*yp$~yuZ!XdG*Gap#+-O~k&4X!6?{oouekfku*2O2 zw&jaP$C*%0^66F%@_Yct)!O^T=IgYc)80Eschs+3O$AS+nu%Fnj3Nebu~1uElFlKL zYK#U|ZbzK9qk_Gp7p>%Uqo95gP@5@DjefhQ+2UXOhJ>gx^LA`?7hO|VvN0|josMU{ zaT!|L7y-wx{jB$oGs=e1GO7g73pBgZy!aJ*4h2thyLt?7Q+F=P+R^y^m+$T!2ibML zY=%uo-!&i40T&Fq>5N|b`Bu&W{5%T(z4h~qJ34vW^c)o_C~tIn%B(|h+MRgm zR`MTt!Wt9>wH~k!tAW@3Fzw~IG^*H+ zve<^hl^$E3L@YSl>GiZ{@_OKEBXTSQ$RvM$V0Yf?eHN{B&V(AgPb~!APw00#6qkJ( ze9`SXPE>Ru{$!2Vw#uKMm!D6F@A3bN`pT%Px@c{>ON0YRmvjgsori8vx{TP+wXZcFvBu#CdMF#1O3gbFy=kpvmo|6i90c5A*>fCkthIgiBN8()`_`(71tG zO-}QQD(hD~xxvp#^V#f{c{$9t#lV{YQcpx{4OjQpEvF#kq9CEnxUEIIlFpzJzbw(h z2=tM^1fHYR7G*$Zpjlc?wPKxW2nrL?NT|hc3jQ1s=3%uHt@`|vq9bhMI#!?yK}tXa zQ)kYv5gBCWa@o=p+^=LBTyW4XcJ@lACbX7U;%0@{A8hhb>EI@He)MUeTSoAH^VPYY z91rFq3vt56~^jctB(=#ip^MRQYN) zhRSWq(1O>-Zrx2Ro`^=+jRz?jF^|-1%d8i-TlDU00V*FJiuY`W03}#R>}@hHPFIFJ zMbC!oZo@Wb*%vl{8%yS0ftYYL)iFTV!XpAe$r|R1M#11FKZu9ko{oPa9x&BIrRccQ zejiSuKUjo0Ixv@_BiuDt+4)#O?yuS6l!A}jgx{$Nrxrw`=P$(iU%ax z(jVew-Ti$wt7onBSLOEL*mSEr(a0s1=^uUwF~7~pc+OhGaRaYj8-QW>T7?!W6@`#S z;-Rg8`vYhfXeiy}u=H3Zv^no)F09=b!qMRh!O(EZRd&rtjAr9CVaj}-+|g@2q=bdx zfxbVxJ!x@%?F?N1gjOI6DqUo=zgMsu7_Z&^3&bNJ-)9b|KY#5*?!1JZ$hnwH&>M`F z@dbUJic7!#WP$*dUBdXldn`_T!POcl^QM&+i*fJ~=F=tuzv9@{gqW7$MLEFVn4Hx0 zJ1ttzC!KM1rR)8!vO>?0Mi@1*1dXds{z@UNoSi}87S$*`oicLIvXW)%wl?o`!LV)P z&6I6zcCqq|vySufW_N?t`rk(_{?*l_I7OrYv1ZnQTkDO&?ayLD&qA%7GdX+uRgy3= zSHeg2yS&Jo-Z6q-~-mkBD8!NDHp8Oot+SrjP;vy<&RZ_nC*-@4Kb^y`s zh&y!;j&b*l%%#QV`MG@sP%&+Q8MXR2!-sll_O7V@`kez8f=t!un z4<_n%xBxse6D6>$ASq*SENxhWAy5<($b)^x5j+_Ik=?K8SuMP7ykExfF6LDa4#M`A zN#AD+w_o&&3o0p#rA>^jg%*>MKzGo_%#vHSof3Xsr$L-Z30>n9IO(s}K@DIO;&7t% zfZ2%%vNZ9!(#zdJ_5g zi-!NIQN7D;D*m`jUU@TgpbOh%3Jzuy@Lf_Qk%t1l^G;B`GvSN2hkoza-{|=P3sp2X zhoz->=vxp$?ldClZ%)32BR$qcTf%CVRKSOdH4F7%3l>r|z5JjrY1R9o51R`x z*mSU(WN5-karr}1Adedldr&b+^Uos+I2^xJy87T)s=T47yr#L+=IR;j*>A2=zO1hB zDgMOnd-tblx9cB&VvpsEFDEWgliW9+Z*$7!e95X&9m6&NiV#JccgCjmP}E|+tq!-~ z@#EL&YmXAN)o7SurCh9&sv2So4LUT7TCuyDrxMg=&9V-cF17D+kJS;QieL8MOj4cesJRnegGn{JAJD_~aggCQQ!&0Vb;Rc<8+94DiM{3_;2nIN^l9?a z{rPI9iJkj1btsRqF_sarXjjS0(6A#LUs5_^Z54GF68zO4yEiKWdc?ffdRkwT;hLi^ z!}K%9>HwG_(5-aL4h0A)7Gw1I{oq|1ZBG8Yu3TWLbH6%)b<~JJ81et=EQ zYwl{ermk2bK9uX{{>eyoR`N5(bM=l%fnz-$$letQZc@fd=uCEHlKN8dfz zdVSFsFlDq`Gw;Yu!cbB#hT?NnO2&_6i0Hb2@?eX$V+|@B8j>3wt>Lyb-cU1d5aUp{xrl-q+l@z)B z!ZUjkMt5MRBk;9uyJ#HfoN|f4x%gZhn*ABQ5xY0WyROTNV}GK9sH%t0fyLx>mp275 zz>=Mn240dLqpY%Ok*mGb{N33iH``-c;Qhct(z-JgDv{l4`s-!JGiD|KzX#LD!#vAQ zsOApx%!-Vm|v_2@up7)#@^e zW|x=aMb69bdjrC-K)I=gsr?cPq+i>+eyUO5b}~ySiMa|Ak&Gqr5Q06jjJx&N@5yj| z@Z-jEUixJFW1m`R+5nXEN1{k<1|?AGeoAm;{)*+RFQ*e6EcCZzHLFxX&l?d82qh{q z(TK!c+tVqmx_-*h9RJ;s4rb-*n)gU(g@DS&Sh506NfVcrBkokhAyp+gXgaN$i!SrWL{-(zyLghS*{dyEL@{YWK z4=fz}&v}6&cn3b2f3a&{&K@!oP{kGSV6*5(@+XKqG0&W@G87>NYNv?3aPz`)VpnPK zj(cl8Mv#IU0`An9=&bv%2p1DT6zjAMTfVG&Z^fn_)kqWq)-Nf6;s~8^MoLGJiZ{6T z*hf2=0zQY-?Q+>YI@O=HmcMYc{@m{w?TEh>b~En%Tx6t&y>Gm`Bn(2$ zqLbc{$AG4dc;-k6xe=zkO7_6FL~B68Qp==4p%Vf`B}wIIZ!~j|fmh-_Yg=Dn2w^XV zw+24jarID7z!|uqK*Q~?_mjUR34$D8hA64`r9P?`l_;y83j>oD&0|%fZmgjb<%Gsv zS#Reo$gaU3=VeY#Kci2Y?JV8bnAp!rgLIuRb~RXed?9H}9eh_&o}_oPl7lfX|HgAM#%U>OhM3184jVKH(M6fDLi3?U#R;~gqClz9?U_}=f zLd47Cg)G50!FO0)B7G`8@kf7r`PcL<7Y$j>pV~|jmVE!DpDaaG|93UYYDtV2^K(K6 zAI;F_CE>`UC*-f5+mxlmBrZy&Vg;Y3((m7O&SMl+KB<4zG6LOitj2Tr{NOR1S~zY6 zS8qDfpMQA^;FgFghjskXDTzRtuhVZ)1sDWry?Y#_T$v4TPlo*llS_ezH8+98g@Vby zsjAvE=a=4pJdHE8%yA#z(a+X-y!?p?w_l}o8Th(#y1kw6D*PF00Auj>mgrz8J`K^j*99UZ-M_L}yfJprE0hyGMBY;~&(1=NiXe$g$MMZ!1X1X>k61WHKHZEM zYlzb)iI8FWy+I`t%*TOJymczC(XQO=?CjYOh{vTT<|qsh!bZH=JB*`H z6xpf%ih;x7*O(PRS#%Jg!F0d^#pT0?g2O^3J_usI`CA zr-lm}%cYm`VzBSSvb+o~5gnQYvItFmFx5HhFe{@hDY!V>5MCJl`ueC?E~Cv&+nK|* zjSnp&`l<*}u1j4{FO(MkYB~)NQ_I(XC+jw=-V$nL^n@002$RF`Whg}`O7e1i8SrGR zYEm(LnoT~tz)&2n*qkU_iQ5kVj@Q!mrS@HQ2lPDp>to1k+oK-mS!2Q1ACe-4L?KLW z&3lad%XkysOjiQ9`Lff&@*}mhYA?YW4*+^%ZpJEIu>3%LjFQw}ju)l@qAvg=zSBVD zjoP}?+?iALI=$NN!5CkFR2j={=gX7(=>&wBz4ZUUysoU3bgD0N+hU( zt-qk_UEldMf?c0%KtY7jElIr)pd?0fJ|I=V_aVwg+ioX7EGchdxu8A$DcsZu8e`Yg zh{H!tUUNfk9{tJbx%~ENnZ3Q89k)zaJEF@$C9Ha*kr_@U&~m}A4El@xhe2LWa%HZN z=g3-}De1_Hj7dB2=O*;svI?>^S&9-mb18!qXb&B^lMrrplYiM++)cv@g0vXB?)Ca! zji&V-gjMCwTeq*?>k2uVueaihaQhB$JlF5xbK$!toIL9fME=t0Ucu}K!d8{+g$>&+Wr$8c% z8XNkukUW3p`E>v6>pOzhp(w4-C90N4hU~Y~Xcy$C_N}Ljj_Odv-Z>tM%r%+H86d8& zAu)9U(!Bf*Qg)k57;wTuM&RcV^Jx=CNJUbO?s0`4u=H&qjdH z4ic_}I97z26b3(uLlDCp$?A- zv(vs~hQWjz9p6fy7R&mVu_qe=KR9bRp-?@p7!zE;uZby|imoe3VUrSOZ}3=>_HL|@6dKCZGd67p~eqmmb2);}s@ zyxnjuKX8B!jthYe=H$xxh(eKsu9{Yh!Rd%bW?lU3YI;*BplC9g?z0>^U?if6N*_j9 zUbZE8Z%_X&#X|g;=&GqdEfk0bjR~Riz|8KW&5)NScND6lI<`)aGN#hV6N$k%ptMx0 z53@!e2Q-}ZKX>>Rt;oh_0qwBXPym?>SJ=9`s5%TqP&UqOkN+!FI(mA(z!BE z`I90y;cCG0C`@APdLXo6)#20v&~FV?UP7iu{teB|`7!(#12MO!i?^I?-<0$%e3@wl zj=TJrxF)D^KUET)bRsyxSxn-R1U6#bq+>Tha^BZ~gV1rS=6^8%>U?tYfH<0t6=HkK z3-V<|C3nvQYHzc56HJ&1|FW>AdqdiOH;>qGw({H%U)WJ+1&51XEgOcG94=wg3DTh| zA~V#aUV;V4reY)-l#z92N{ZmAq&-k5w1sb8OzbZ=i59O%9*^P_QdteA6Y0L%ZUOl{ zjp>!Y$${>tRp_LPWQ-G&lS(fW3O;|l=GUHmiRq(q%UcMk3pwK@<9x@sX0YHFs>z!` zvci7k!4pM^1?*fP9sdthwbF&6=*eUqF7S={Xlht&WO*6htTZG|R1sz+w(5f3eLs4M z1`vOjUR>b-8lu_GYeDFdba~k48uBao??nA&WB>)Fxf1La))xOKvvin#r;P}h$Ut^o z6cwIkh%KsQ1i4db(muvqE{%F*s%AtGzF%kKUi^GfSg&4)<9E!rcWRK&XbTHf4XH_P z@?}E2T+yQx==!R@G46X>p?h`Y}Pwy$8nw!;t5^E~=$Uc^o1PMNlRR^HC{Ylh` zOCHO}3|Aa0*(=gqm@7dioT3^$rq96xqq46m1EnOBa@o>7V>-y3Y8mkZNLkArT@gfD zT3B#d7ImysVeG=Ubp&(qN5uVl>9r+Ux>} z4C@$EwAI^(3<*Do$5L^kGu}s<%PlDMhxXJ)b9WM>$A9o!NY)b-MZ;GJV?bY|LHUuo zm2c}l<@1{yxzHcx+tNuYr+CjjIWaUl#_XrXh18E|X0lcNVTBO@C0F+qlP$&Hq~@jO zYk;o8cC#>gD3gQg^|9GxpeC+3+8TJ_iL2~?s=Ql>(B(txK`3C8Zgj*2@4 zW7evp>E=FGvwvTxh)DEVM?E8<+-2<4{!S|NE$=Yc^TDzbD<<=5;QAX(zD$-sPN6bg zP=N3^6;aNyzZXLpW!(lCkl-trOao@3k;w0Ps0Qh9z#QXcmXwo)wrAT^Q@QhhU;T*6 z;SF`!pWhjS$1PG32-KY})rV3il-#V3y=i@=#{QOLnZQ7?m zPe^d}K`1LCkmz9r337OX$mWK|eP0H;J#S7QVf-77HFEP)zxp?EN~37Hk;&-GTZ9Xw zzK8PEKXtzhDWRZ)nZrmtJBzhK0kn+Wnm%g!kSNng|w~ zR$Jt@05b+)CG~t^<-fd=m@3_s+9v0B04sKH~Aaw)%>^ZQj9Kt@^^C+K_UaqAZ zvLZ^&m37RdZ#Iqz#UVMvk3Ynjyf#ni1PL@i^qcFdYLGS1*;+kUvte@S!l-(Glq2{s zUC(dL30DWj)6Ao!tlS0lEGwbM`qRa(0+i@J^|GlF8ozgpi}YI;JQC?DN`TBAu{9X zuv;jxR_$^zV;(uSS&JPv5VYj4l_zm$x z$O46YQ0CU5pa`y{M1{X4F0heo2aE8-Ey3+4(iZj50)zOhV)sswUC~2F9m+nw|4ga# z^Cb)V^US<$<`?S+Iqev)nFcd?{@6fwc_u_s*^F~fF(mF^cBT-`e1-KO{Xov!85#GO&82g8KB1G$ic5^ruJ~sfppFU~HgGD%4KsHR zGoRg`vRD{rG@PtH6{YGE6O;0PKNML_z9i+6vl+nceK#?w*E;zcOK~HuQtPliqEQ37 z7?OWEwPW4$B->-$Xs)_=x;fEXeVy8DVO*}Fo`~u-yc^bgfthBVSX~|UTe&S!K;C5} zn&K3fkF!B3&HOiEJvEtss3`mo=2P^bP!@I}5Z(%!UOM;!g+1=kx4? zJ5VS6dIuEdz<4?qUY}Z7hf6#7|ucYzYPX z;vb0yk(I4Ir)^cjcYfjPWKs$sN7P56e^lI$>jr46ryRoJkKz<%auXcK)^e{nq2`d5 z9uYR`vIt2s#5fs?C2R^yG!V`Q#P$bqMDno87#QZY`2n{9X`XVAMQI6$r0!J*2vD(N z1s|U-*WK=S)LxWgdvb;4Qlzd~iHASZ=Z|mX!qN6l06qH=w`=ZrI3eey9?{z!4n#sz zLa!`KJlnY?0kEH#+Qgu7r>UE?psT>7IJ%Gw5oQ$kvv{!8%%qGl(^sr|_WF1!nI?DlNv?b-`ddqC4 zV_i#7JUl$=0WjLd6N zyYNlcm%l8=WMwa^Ih23Ux3DtP<~4n|>ec=n+0OaQ)X|xF7G9yXG0M5xk#T1Ay1UuU zvTm$iEG>&G?G*3CBpTq zaM{Ws6;wehNu``?BZ^~TKb=PesP)kxBX9b0F#3&Tt9iSDg`w> zaPkX+4KFIp!VC}On>%|o0=Nlzsg1+0&Hh6_UXLaeD~`*rsZ$)ae7QyF=;XVdD=ZNg z%}c6WcJY4P*bH};-fG?X6Y_<>Xj&V((R9NFe4g4ucO9f*j?eK?!9Py9!AFdX1_=(DI z8*aJpbbf^DBI{tVRXQd3HK-L(KYL_RrzY63puQLGNbL)`PAHab3BMeOJiNxA`u=|v z5m`+?Kd)g_7O%%5HQko4oakbzxS%7GHP zt7)*HIoa*-6Lp%m5Vz~xuS z1nQwgPE|jLw{*rMV$|VFB7<^S?^nk3(RsR~_K~rMsgZ_@8k^z~oL0-Bf`g@7U@t%5 zW|FeKV{IYl#fiMt1^?oiO(4kqG&et2Wu3*DQ==Mj#ZPcp3vB)0IT^X5&X$DHEbAj3zjpJP#_0>wR(ps2~F}m@pKM(m*)k{0yO)!=B7f z(3zwT@g<6qI}plleSwa|$G+|7J5P!@eW__TH5#6E-yDE+LKfWWR0cAB z;ZA6!erd!=p+bN_H3wrwha2zDj0TONmSBG(9NX@rcbrff&<_Rc!c=be0W^p;(6C-Ib+!N7rN<+_nz5hZ z)|D|V8CnG<1NNYCUm72|>4!6|^iWZ@tGrGmgjE?x6KEp=q&};`_tzf;aAw}k@M7T* z?b9LtDeHVE`=j)i)-sRrp$G}(_}O!I)FcoKhs;JEr=bn3`#b{A)`{n?laUqpFc z;a~rBiz2=;E6v0WbS6|5wNB~Jl6)am+6u$pa3u!Z`w`b0cas=BJj(_j6Jo70%$uqk z`DariP_X5p=xFU`l-1)t5Y3joo2JL2(SXwMr)#9GsN=3qHb4$W@?}#&V{&7 z^E`w8QSGrJ?nN_{(pWDCe*1E0u_5U5^JLMGf=Ylv+K(k#h7aGkJGKt`*FEvFBw{Gn zRtJ~rl#Gz*|Kd^MCR29QYCDA+I3<6k09A=Ks78}e2NhBk%>39K@*uzqc1lb;19K!` ziH??96196cT#jV)B`4Lz%y`{u+8r9RghKCpCVm{mRREwqkWl5*mU?3v@6B*4M z%C!1H!=pHm-44+hP!wS3Gws7q9xI8!VE`yE=kZRl#c1P$veh}8d6w*-{ub34jXFool*!E}Z*&(BFfl-@7Jl|AAkv<-$RnsZ2vN=AKa@=Jh`Ksx` zSB~08nmzxPZI~ZUX$hox*gUc&y`S6c4t*gfiIJf;E~=QxJ|9rI(B~g-J^QqzFK>X0 zQZqrC({M^7X09C}QE%X!r)#XUmJHuv76SfbR}dpwWM4ce+LjV#zhxqnb~G@ zysw_~Yu>J9&~g+CYBcpB+tpj77X#j8qaRZr|1=4ttYS8}y@G`JxzgHDN|~k9xaSkw(l)?E2x4 z3-;zhzIZ#xAF0W>|KN*paXrOIddn@y=|+z@uXa3)X1v}W`95rCeSs^r1sm?}WE=Ef zpOqx&z#?H0Cw-cRSJo+9%MR#$@NJew&4Q~dDGKff|Gbn$%(9R;`03Zxh1JH-RBf;~`xbF%_ru55h+FgHSZM?-?5-s(zKac2%m0#PSg%#gsB57ON22=mQ)*Y zq>7FD--o7X^*sr`THZX)(N`Cv!C3?T_i1qK9 z-y@;mzkYkuY4%$fTJZ-;NqHJxDe-yKBDX9s^1xp%9{+YhpLH;eM%7aKl1inc7HB>t zk%$;N;Zn;1^-9w(kb51Cpa#nSeixlEn|ICriDK^f2QGZpg5f>F?jNI1%UE2zFwo6T z6p11`FO1PP;9T)Znsb+hdF&shw%V&RQ-5M%-TUhC+b0PCutlbA%nuDRP^5}Lo6G3g zGH(mBVV29q-M=o{7gxlXB(Onp8?sJ(B|0!CT-aj==KVg!2`HaZe3(Ji*JAA{n0keB zd|M}054@+Jt#_0(UBE=eYT8y8vr;iV5#Ig!Nu}m+5U18}3)!ZL`J0BYwe{*!^4wg; zp_@^7=Gw2|FI*VA!S(qXnF@LS_ocE2=YtAQAx=87{DVT79j(9f?B#}MO5YM*YolAr z|0MA8-VWDhe#}hbw0>LN-dlD0F;@IhNZ`Rv%{;$}HW?>i~f8w)YyGc|q# zfBPNgvVXqPyS||2$S4?Q_Z$47icdDuFD%3?jEDp^6%~P19_NSAR#VeX>%G@9a^{0(wMH+&o zDl~0jKSvdjOf2p6F zc@k4?r1|Nhh)-M>jhCl=7bqRH&oTUz&@wXs$;DyC^uI%a(_lXg-^;AAnA=IP*(7n7 zx9!d+CPKW-*LfIGXpQYynHIk?-0`3f#>{eknP#U^Xe(-NPN(5zZ+E^UX4eNEmw=U` zJ=hf38Atv!At|Z=plN*eYq4C5v9|N|ySBL%m?jJ0s-|W(cdja6`(lgp8HqHw&&tY^ z9UcrwYz8O@fg}}$*1xz+8*;xUmK7Nf2BRZF)i0xIjxyF%7i*GBQR^96WbfbXBQnE< zC&VnZcYRIwxW(69U=lrCLOv19v;P{Eh>=ejKQ|PxSd)@yN1z2zXZHZIaQQv&!XUM2 zFD-{)r1U;RQtmTRd5Vm@bl9F;W~0YLQOfFw2E%>z(H*`w;A-x9k{f{r_*rj@U3fYf zFGf^Uf{h3&_;S8m^+yr5c-$nK_h@boj{P`6^C_6DhC;lYtagawqs-~Z?8xY%FBOH^ z)Q3toR~DX_X3t1Zo)M*J{Vf`IyeN|X5%E$)bChwMdcLEzU1F^PjFlEKgIUU_H}9-% z_X5vQJf7K?6WiTS4s8Xfoo`-{0j}eBjHcprv*m0OZmET-ydjG1xask}AH+3> zWxL5*6nu+mlr5o{MvcHW0F4qCN1jZvmH-v;<@G@4=Ru}9ulp58nyPgBgPjJ4NyavJ z)WNr9%{glLQZiv3`wi{wizVb8Akl&6+kJwIpUtPNffaW~yGV2Ffe%04C>41d(uA<< zeLY}3+!ciUUR6Ga+fs^{Ws+r0PP2o3PhYnql6UFrFb8W2T#7p+q-y)=a$Jx5^3Sk) zdBfxy&XaqA2_R+#CWl?Vil(Nfy$MJ2{28eHLg95H9*}oal)ox=;vT7Qwa z1E~81pq1s#LutRoC4Jri^skql%a$p67fc%BCA-W5TM>9Zn6daZ*;qYfP@Ko$sgY)H z+(LKg8Yp7eJtYRb2~B`{-%4taSs*tNp1%;(`6=@ar_@rs*&H>VUhBo5810@qRR<%j ze@Z{%0lgFxpBK6LDGkwa+~Vgn{4lfDP(oI3_4Xan<9~() zlc1)=&$o<>ZO9J|{n`$o%tdqE-TcsuJ37h)pi25wrB>1r-Zo-6|q=`0y%-Ug!(v>m8ez-r1xZ$EK zIa#ZT#C`LWMxZ9|P1{Wz_l^q$!n2|8!Yy^`V*#luq!RjR$_Cl@q|f_e3OX-wF>6Cc z5HDT_)J));JGK!5#zQucySGm&F!S>uK@3p`JZbaBU@7S{{ygRQLfJVX?*DiEfMp}7 zsw3p{N!dv5dmOVf1-w7bYYzI??ScpR-^BGV$Kdiiy}TMjVl^4@^o_m1}`aQ3DzoNW_dgm%JUPZ;|Jh z3YNg*HPOqIRF>*2vN<0r>n;v*k~DMx*d8F?6$_a7_y3^>0j!1C@JdrF8LbgRkL|aC zH~TVB&O7Azs1I{B;sK%3kTKM#vSwrE4*sSbPG$7#hq;y4Rz&gcawEw-EenOO_8K54 z?rY3Cr|4cK`phDJWJqWui<^zdzZ_|@TMQ3@q1!WnyE6J$Xt_Mn4!{~WS!B~@+kGt^H1%l0H_5v0WQOnY&3fH`uaeLeeGFFMsCipo!xMD98UnM66ZGjC z=d((06EL#6M?%nLP;IQV)V-kueSl`1i52Z_FG9}mifFXRfZ+y!lk_obkR7Olhj+3W zJl*yG^f``SJ~}*H+q;2)Hb7jS!1aQj%jXP_8XL0ziELkAAMPkqWv0ZKD|Ukr0&wp6 zV8tN~{{WVmOLXAf5(e3S!uiU}DS2nM$ITw*n=yHsfpO*gr z1A7)S3F)^Pt~Ouyw=@@HrDha|n|+Sh?vDY3#Naq^OTS~|0d%er1Sz^MyeyM@TA^BG zj&HBatp$3{dH_g!7d~Pmi&DIsBd1N1-J&FI`xkDWqWzHcA^Vu|;kgSvR^v@dEBGTH zY@WLr{~&=(;@~D(kRDDF&8N>w80Y{amcK^lbwOzWXah=vS&F}=5)u;k5$H$Zqg%Zr zI)u({ + expand: "items.alerts,items.alpine_script,items.default_login", + sort: "order", + }); + + return NextResponse.json(response); + } catch (error) { + console.error("Error fetching categories:", error); + return NextResponse.json( + { error: "Failed to fetch categories" }, + { status: 500 }, + ); + } +} + diff --git a/frontend/src/app/favicon.ico b/frontend/src/app/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..2ef326ee6a4806293b1d9f9eb1c3ecbf6bdce1c2 GIT binary patch literal 1841 zcmV-12hRA3P)Px*>q$gGR9HvFn0ZuGRUF5^_q~}nFpOiO0sQOO|3W5rvg6VN-;b5VyKpb_zz;RMcfmz$NLv& znBVvJdB5-P{_cH4(8cQtrG0u6a#@KiQ4-WvOg*K2z27aqfb<6y=_(3p4QAo7i$m9( zu002l;*P@PoT~{Nmviw)*c$;}bLU|8m(`7o-BEhFxmtG$W_Hf65nqw}X(sTv@500e|rVcH;JL*~@` zUr@43J%*XIy*P1qxoyV>L1(f0SQ)N0@F0DMqrtZ?q79nG2WCCAQV9r)@c@RBIXg-g zZ2H5t9yWrt!9PI75q$V{1uTseV;>qafBS2*H!2132xiu{Zx(K@u&)M0K-4&4C~cH^n#`)gE- zAhIT9OIn$xqbOG-MY6v!>i(;pqm$hYWHT*V2cprRUU4W*#6tb`B@4hZmx zjg7sf1gK4zkslm?|4g0mGDL?&m#BF>sqYcAAmopk<+WAIh)AVSgg`3@_dS=KT7SB{a3BytjgPkYer{gg>%W^!EoKX|Oz-P!NQsX(breVd30sl(b7`ag z9%-ktGmnRu*6~B{tE@e*n#`89@}$hNK?cJEanaEw?tsXE75N7%8vSDc*={5RSUSps z;{srobsUP5hF`Dh^Mrnck8k|#U@VtSd` z+3{6Z&3hP-WJa;3*6E&4nKtd?)_|H5X;&1}`i6Q?RuPxgog=vZre_s$0%c_-SDVdS zTC*(F5STC_dQ6KRl4MpJPu#FUrE`w_<|V>M5ODL2aE~g)EZbjjbYi*b!X7IAI~H6N z3CGcXfq^f@$Hc6cR8CGVEc=#PZR|jlE-$qT4NE)&VhTI==8Q2}Y7P+j*#SVW)4x48 zaq7~hOszhxU_3#s;93Bwh!yswqdlq+6Uoghc>4G1i+Rr17}*LA2uPb67q^Uk+@`RQ zUSzTILJvtSCC~^0;(n-9?cP0EI*{D#S!UVc!V`%ck1 zmS3)3CBJ4cw?hJhQYMWV^M%{p)Yen_zEeak4zK^No-RuT2kgd{le+NuapT$Ferw*k zO(Co}VFL#}8x;|;$?cqRS8nz{@3j1?dR`w07xUSloJI|QYpqYU@xLqQ&YbMGt7^>Y zAfm(?PQ@c6pwHC!n3!GiTpj8ed5|_e-+YVj)>FFeDd43877r&|_U&6|HeY!~K3CZ3 z-QQpsKQTHwr?rPx1jB@S8V}K{L=RA@Wo+)R3px)`HZ++v5yQepj|dMx)>icu!#FKl zoLgD1>DdpiCy!mky1u_abeX3rwF<)q41759@yEY&*9M(}VZ!?KgOzoB_kPVu91gs1 z_yvytE5j~mp~1nU#z#fn{tc%MqE5p&ElbU$SAF`!d1ZBhVb;u=o)p|mt98Cjw6{79 zGiS!U5(}*x{=HumO!~oq-R7(eCwSq3@bI8VhYYE14?@wLk&Aw|b=w)!<*M-W=Y9fb zv*B!DBr3ZN#)kf72o32!FeWmxqN5<}dx|Ub+1AaLzpb_&O}$Gg#kK3#v9-n@m)6YS z31I`qv!xhjO~&Wcb)d1AJhjFLFD5^uSW|J}nv4v|G0yHeLx+a+ju;VP_N*SazuhG; zY}dS&GFP!yryIDbGJ+uB#hEiZ4brIwW-wk}UKr%>uZxO`x~bF}*Eq#bwEFW5+7;Gx f2~1a1Lay--?WTauvxr8#00000NkvXXu0mjf$!vt0 literal 0 HcmV?d00001 diff --git a/frontend/src/app/layout.tsx b/frontend/src/app/layout.tsx new file mode 100644 index 000000000..68f65f7fd --- /dev/null +++ b/frontend/src/app/layout.tsx @@ -0,0 +1,88 @@ +import Footer from "@/components/Footer"; +import Navbar from "@/components/Navbar"; +import { ThemeProvider } from "@/components/theme-provider"; +import { Toaster } from "@/components/ui/sonner"; +import "@/styles/globals.css"; +import { Inter } from "next/font/google"; +import React from "react"; +import { NuqsAdapter } from "nuqs/adapters/next/app"; + +const inter = Inter({ subsets: ["latin"] }); + +export const metadata = { + title: "Proxmox VE Helper-Scripts", + generator: "Next.js", + applicationName: "Proxmox VE Helper-Scripts", + referrer: "origin-when-cross-origin", + keywords: [ + "Proxmox VE", + "Helper-Scripts", + "tteck", + "helper", + "scripts", + "proxmox", + "VE", + ], + authors: { name: "Bram Suurd" }, + creator: "Bram Suurd", + publisher: "Bram Suurd", + description: + "A Front-end for the Proxmox VE Helper-Scripts (Community) Repository. Featuring over 200+ scripts to help you manage your Proxmox VE environment.", + favicon: "/app/favicon.ico", + formatDetection: { + email: false, + address: false, + telephone: false, + }, + metadataBase: new URL("https://community-scripts.github.io/Proxmox/"), + openGraph: { + title: "Proxmox VE Helper-Scripts", + description: + "A Front-end for the Proxmox VE Helper-Scripts (Community) Repository. Featuring over 200+ scripts to help you manage your Proxmox VE environment.", + url: "/defaultimg.png", + images: [ + { + url: "https://community-scripts.github.io/Proxmox/defaultimg.png", + }, + ], + locale: "en_US", + type: "website", + }, +}; + +export default function RootLayout({ + children, +}: Readonly<{ + children: React.ReactNode; +}>) { + return ( + + + + + + + + + +
+ +
+
+
+ {children} + +
+
+
+
+
+
+ + + ); +} diff --git a/frontend/src/app/manifest.ts b/frontend/src/app/manifest.ts new file mode 100644 index 000000000..0e4cb5dd1 --- /dev/null +++ b/frontend/src/app/manifest.ts @@ -0,0 +1,27 @@ +import type { MetadataRoute } from "next"; + +export const generateStaticParams = () => { + return []; +}; + +export default function manifest(): MetadataRoute.Manifest { + return { + name: "Proxmox VE Helper-Scripts", + short_name: "Proxmox VE Helper-Scripts", + description: + "A Re-designed Front-end for the Proxmox VE Helper-Scripts Repository. Featuring over 150+ scripts to help you manage your Proxmox VE environment.", + theme_color: "#030712", + background_color: "#030712", + display: "standalone", + orientation: "portrait", + scope: "/Proxmox/", + start_url: "/Proxmox/", + icons: [ + { + src: "logo.png", + sizes: "512x512", + type: "image/png", + }, + ], + }; +} diff --git a/frontend/src/app/not-found.tsx b/frontend/src/app/not-found.tsx new file mode 100644 index 000000000..8307ae2c4 --- /dev/null +++ b/frontend/src/app/not-found.tsx @@ -0,0 +1,20 @@ +"use client"; +import { Button } from "@/components/ui/button"; + +export default function NotFoundPage() { + return ( +
+
+

+ 404 +

+

+ Oops, the page you are looking for could not be found. +

+
+ +
+ ); +} diff --git a/frontend/src/app/page.tsx b/frontend/src/app/page.tsx new file mode 100644 index 000000000..ea486cb02 --- /dev/null +++ b/frontend/src/app/page.tsx @@ -0,0 +1,123 @@ +"use client"; +import AnimatedGradientText from "@/components/ui/animated-gradient-text"; +import Particles from "@/components/ui/particles"; +import { Button } from "@/components/ui/button"; +import { Separator } from "@/components/ui/separator"; +import { cn } from "@/lib/utils"; +import { ArrowRightIcon, ExternalLink } from "lucide-react"; +import { useTheme } from "next-themes"; +import Link from "next/link"; +import { useEffect, useState } from "react"; +import { Dialog, DialogContent, DialogDescription, DialogHeader, DialogTitle, DialogTrigger } from "@/components/ui/dialog"; +import { CardFooter } from "@/components/ui/card"; +import { FaGithub } from "react-icons/fa"; + +function CustomArrowRightIcon() { + return ; +} + +export default function Page() { + const { theme } = useTheme(); + + const [color, setColor] = useState("#000000"); + + useEffect(() => { + setColor(theme === "dark" ? "#ffffff" : "#000000"); + }, [theme]); + + return ( +
+ +
+
+ + +
+ +
+ ❤️ + + Scripts by Tteck + + +
+ + + + Thank You! + + A big thank you to Tteck and the many contributors who have + made this project possible. Your hard work is truly + appreciated by the entire Proxmox community! + + + +
+ + + + + +
+

+ Make managing your Homelab a breeze +

+

+ 200+ scripts to help you manage your Proxmox VE environment + . Whether you're a seasoned user or a newcomer, Proxmox VE + Helper Scripts has got you covered. +

+
+
+ + + +
+
+
+
+ ); +} diff --git a/frontend/src/app/robots.ts b/frontend/src/app/robots.ts new file mode 100644 index 000000000..16a6f164c --- /dev/null +++ b/frontend/src/app/robots.ts @@ -0,0 +1,13 @@ +import type { MetadataRoute } from "next"; + +export const dynamic = "force-static"; + +export default function robots(): MetadataRoute.Robots { + return { + rules: { + userAgent: "*", + allow: "/", + }, + sitemap: "https://community-scripts.github.io/Proxmox/sitemap.xml", + }; +} diff --git a/frontend/src/app/scripts/_components/ScriptAccordion.tsx b/frontend/src/app/scripts/_components/ScriptAccordion.tsx new file mode 100644 index 000000000..f81970c8e --- /dev/null +++ b/frontend/src/app/scripts/_components/ScriptAccordion.tsx @@ -0,0 +1,147 @@ +import { useCallback, useEffect, useRef } from "react"; + +import { + Accordion, + AccordionContent, + AccordionItem, + AccordionTrigger, +} from "@/components/ui/accordion"; +import { Category } from "@/lib/types"; +import { cn } from "@/lib/utils"; +import { Star } from "lucide-react"; +import Image from "next/image"; +import Link from "next/link"; +import { useState } from "react"; +import { Badge } from "../../../components/ui/badge"; + +export default function ScriptAccordion({ + items, + selectedScript, + setSelectedScript, +}: { + items: Category[]; + selectedScript: string | null; + setSelectedScript: (script: string | null) => void; +}) { + const [expandedItem, setExpandedItem] = useState( + undefined, + ); + const linkRefs = useRef<{ [key: string]: HTMLAnchorElement | null }>({}); + + const handleAccordionChange = (value: string | undefined) => { + setExpandedItem(value); + }; + + const handleSelected = useCallback( + (title: string) => { + setSelectedScript(title); + }, + [setSelectedScript], + ); + + useEffect(() => { + if (selectedScript) { + const category = items.find((category) => + category.expand.items.some((script) => script.title === selectedScript), + ); + if (category) { + setExpandedItem(category.catagoryName); + handleSelected(selectedScript); + } + } + }, [selectedScript, items, handleSelected]); + return ( + + {items.map((category) => ( + + +
+ {category.catagoryName} + + {category.expand.items.length} + +
{" "} +
+ + {category.expand.items + .slice() + .sort((a, b) => a.title.localeCompare(b.title)) + .map((script, index) => ( +
+ handleSelected(script.title)} + ref={(el) => { + linkRefs.current[script.title] = el; + }} + > + + ((e.currentTarget as HTMLImageElement).src = + "/logo.png") + } + alt={script.title} + className="mr-1 w-4 h-4 rounded-full" + /> + + {script.title} + {script.isMostViewed && ( + + )} + + + {script.item_type} + + +
+ ))} +
+
+ ))} +
+ ); +} diff --git a/frontend/src/app/scripts/_components/ScriptInfoBlocks.tsx b/frontend/src/app/scripts/_components/ScriptInfoBlocks.tsx new file mode 100644 index 000000000..a3ba8a6b0 --- /dev/null +++ b/frontend/src/app/scripts/_components/ScriptInfoBlocks.tsx @@ -0,0 +1,219 @@ +import { Button } from "@/components/ui/button"; +import { + Card, + CardContent, + CardDescription, + CardFooter, + CardHeader, + CardTitle, +} from "@/components/ui/card"; +import { extractDate } from "@/lib/time"; +import { Category } from "@/lib/types"; +import { CalendarPlus } from "lucide-react"; +import Image from "next/image"; +import Link from "next/link"; +import { useMemo, useState } from "react"; + +const ITEMS_PER_PAGE = 3; + +export function LatestScripts({ items }: { items: Category[] }) { + const [page, setPage] = useState(1); + + const latestScripts = useMemo(() => { + if (!items) return []; + const scripts = items.flatMap((category) => category.expand.items || []); + return scripts.sort( + (a, b) => new Date(b.created).getTime() - new Date(a.created).getTime(), + ); + }, [items]); + + const goToNextPage = () => { + setPage((prevPage) => prevPage + 1); + }; + + const goToPreviousPage = () => { + setPage((prevPage) => prevPage - 1); + }; + + const startIndex = (page - 1) * ITEMS_PER_PAGE; + const endIndex = page * ITEMS_PER_PAGE; + + if (!items) { + return null; + } + + return ( +
+ {latestScripts.length > 0 && ( +
+

Newest Scripts

+
+ {page > 1 && ( +
+ Previous +
+ )} + {endIndex < latestScripts.length && ( +
+ {page === 1 ? "More.." : "Next"} +
+ )} +
+
+ )} +
+ {latestScripts.slice(startIndex, endIndex).map((item) => ( + + + +
+ +
+
+

+ {item.title} {item.item_type} +

+

+ + {extractDate(item.created)} +

+
+
+
+ + + {item.description} + + + + + +
+ ))} +
+
+ ); +} + +export function MostViewedScripts({ items }: { items: Category[] }) { + const [page, setPage] = useState(1); + + const mostViewedScripts = useMemo(() => { + if (!items) return []; + const scripts = items.flatMap((category) => category.expand.items || []); + const mostViewedScripts = scripts + .filter((script) => script.isMostViewed) + .map((script) => ({ + ...script, + })); + return mostViewedScripts; + }, [items]); + + const goToNextPage = () => { + setPage((prevPage) => prevPage + 1); + }; + + const goToPreviousPage = () => { + setPage((prevPage) => prevPage - 1); + }; + + const startIndex = (page - 1) * ITEMS_PER_PAGE; + const endIndex = page * ITEMS_PER_PAGE; + + return ( +
+ {mostViewedScripts.length > 0 && ( + <> +

Most Viewed Scripts

+ + )} +
+ {mostViewedScripts.slice(startIndex, endIndex).map((item) => ( + + + +
+ +
+
+

+ {item.title} {item.item_type} +

+

+ + {extractDate(item.created)} +

+
+
+
+ + + {item.description} + + + + + +
+ ))} +
+
+ {page > 1 && ( + + )} + {endIndex < mostViewedScripts.length && ( + + )} +
+
+ ); +} diff --git a/frontend/src/app/scripts/_components/ScriptItem.tsx b/frontend/src/app/scripts/_components/ScriptItem.tsx new file mode 100644 index 000000000..d1e273e78 --- /dev/null +++ b/frontend/src/app/scripts/_components/ScriptItem.tsx @@ -0,0 +1,95 @@ +"use client"; +import { Separator } from "@/components/ui/separator"; +import { extractDate } from "@/lib/time"; +import { Script } from "@/lib/types"; +import { X } from "lucide-react"; +import Image from "next/image"; + +import Alerts from "./ScriptItems/Alerts"; +import Buttons from "./ScriptItems/Buttons"; +import DefaultPassword from "./ScriptItems/DefaultPassword"; +import DefaultSettings from "./ScriptItems/DefaultSettings"; +import Description from "./ScriptItems/Description"; +import InstallCommand from "./ScriptItems/InstallCommand"; +import InterFaces from "./ScriptItems/InterFaces"; +import Tooltips from "./ScriptItems/Tooltips"; + +function ScriptItem({ + item, + setSelectedScript, +}: { + item: Script; + setSelectedScript: (script: string | null) => void; +}) { + const closeScript = () => { + window.history.pushState({}, document.title, window.location.pathname); + setSelectedScript(null); + }; + + return ( +
+
+
+
+

Selected Script

+ +
+
+
+
+ + ((e.currentTarget as HTMLImageElement).src = "/logo.png") + } + height={400} + alt={item.title} + unoptimized + /> +
+
+
+

{item.title}

+

+ Date added: {extractDate(item.created)} +

+
+
+ +
+
+
+
+
+ + +
+
+ +
+
+ + +
+
+
+

+ How to {item.item_type ? "install" : "use"} +

+ +
+ + +
+
+ +
+
+
+
+ ); +} + +export default ScriptItem; diff --git a/frontend/src/app/scripts/_components/ScriptItems/Alerts.tsx b/frontend/src/app/scripts/_components/ScriptItems/Alerts.tsx new file mode 100644 index 000000000..5096f4ed7 --- /dev/null +++ b/frontend/src/app/scripts/_components/ScriptItems/Alerts.tsx @@ -0,0 +1,19 @@ +import TextCopyBlock from "@/lib/TextCopyBlock"; +import { Script } from "@/lib/types"; +import { Info } from "lucide-react"; + +export default function Alerts({ item }: { item: Script }) { + return ( + <> + {item.expand?.alerts?.length > 0 && + item.expand.alerts.map((alert: any, index: number) => ( +
+

+ + {TextCopyBlock(alert.content)} +

+
+ ))} + + ); +} diff --git a/frontend/src/app/scripts/_components/ScriptItems/Buttons.tsx b/frontend/src/app/scripts/_components/ScriptItems/Buttons.tsx new file mode 100644 index 000000000..89bc2c0bd --- /dev/null +++ b/frontend/src/app/scripts/_components/ScriptItems/Buttons.tsx @@ -0,0 +1,74 @@ +import { Button } from "@/components/ui/button"; +import { Script } from "@/lib/types"; +import { BookOpenText, Code, ExternalLink, Globe } from "lucide-react"; +import Link from "next/link"; +import { useMemo } from "react"; + +export default function Buttons({ item }: { item: Script }) { + const pattern = useMemo( + () => + /(https:\/\/github\.com\/community-scripts\/ProxmoxVE\/raw\/main\/(ct|misc|vm)\/([^\/]+)\.sh)/, + [], + ); + + const transformUrlToInstallScript = (url: string): string => { + if (url.includes("/pve/")) { + return url; + } else if (url.includes("/ct/")) { + return url.replace("/ct/", "/install/").replace(/\.sh$/, "-install.sh"); + } + return url; + }; + + const sourceUrl = useMemo(() => { + if (item.installCommand) { + const match = item.installCommand.match(pattern); + return match ? transformUrlToInstallScript(match[0]) : null; + } + return null; + }, [item.installCommand, pattern]); + + return ( +
+ {item.website && ( + + )} + {item.documentation && ( + + )} + {item.post_install && ( + + )} + {item.installCommand && sourceUrl && ( + + )} +
+ ); +} diff --git a/frontend/src/app/scripts/_components/ScriptItems/DefaultPassword.tsx b/frontend/src/app/scripts/_components/ScriptItems/DefaultPassword.tsx new file mode 100644 index 000000000..93c561564 --- /dev/null +++ b/frontend/src/app/scripts/_components/ScriptItems/DefaultPassword.tsx @@ -0,0 +1,51 @@ +import { Button } from "@/components/ui/button"; +import { Separator } from "@/components/ui/separator"; +import handleCopy from "@/components/handleCopy"; +import { Script } from "@/lib/types"; + +export default function DefaultPassword({ item }: { item: Script }) { + const hasDefaultLogin = item?.expand?.default_login !== undefined; + + return ( +
+ {hasDefaultLogin && ( +
+
+

Default Login Credentials

+
+ +
+

+ You can use the following credentials to login to the {""} + {item.title} {item.item_type}. +

+
+ Username:{" "} + +
+
+ Password:{" "} + +
+
+
+ )} +
+ ); +} diff --git a/frontend/src/app/scripts/_components/ScriptItems/DefaultSettings.tsx b/frontend/src/app/scripts/_components/ScriptItems/DefaultSettings.tsx new file mode 100644 index 000000000..05f3ae627 --- /dev/null +++ b/frontend/src/app/scripts/_components/ScriptItems/DefaultSettings.tsx @@ -0,0 +1,38 @@ +import { Script } from "@/lib/types"; + +export default function DefaultSettings({ item }: { item: Script }) { + const hasAlpineScript = item?.expand?.alpine_script !== undefined; + + return ( + <> + {item.default_cpu && ( +
+

Default settings

+

+ CPU: {item.default_cpu} +

+

+ RAM: {item.default_ram} +

+

+ HDD: {item.default_hdd} +

+
+ )} + {hasAlpineScript && ( +
+

Default Alpine settings

+

+ CPU: {item.expand.alpine_script.default_cpu} +

+

+ RAM: {item.expand.alpine_script.default_ram} +

+

+ HDD: {item.expand.alpine_script.default_hdd} +

+
+ )} + + ); +} diff --git a/frontend/src/app/scripts/_components/ScriptItems/Description.tsx b/frontend/src/app/scripts/_components/ScriptItems/Description.tsx new file mode 100644 index 000000000..b573e971b --- /dev/null +++ b/frontend/src/app/scripts/_components/ScriptItems/Description.tsx @@ -0,0 +1,13 @@ +import TextCopyBlock from "@/lib/TextCopyBlock"; +import { Script } from "@/lib/types"; + +export default function Description({ item }: { item: Script }) { + return ( +
+

Description

+

+ {TextCopyBlock(item.description)} +

+
+ ); +} diff --git a/frontend/src/app/scripts/_components/ScriptItems/InstallCommand.tsx b/frontend/src/app/scripts/_components/ScriptItems/InstallCommand.tsx new file mode 100644 index 000000000..31e1e302c --- /dev/null +++ b/frontend/src/app/scripts/_components/ScriptItems/InstallCommand.tsx @@ -0,0 +1,68 @@ +import CodeCopyButton from "@/components/ui/code-copy-button"; +import { Tabs, TabsContent, TabsList, TabsTrigger } from "@/components/ui/tabs"; +import { Script } from "@/lib/types"; + +export default function InstallCommand({ item }: { item: Script }) { + const { title, item_type, installCommand, expand } = item; + const hasAlpineScript = expand?.alpine_script !== undefined; + + const renderInstructions = (isAlpine = false) => ( + <> +

+ {isAlpine ? ( + <> + As an alternative option, you can use Alpine Linux and the {title}{" "} + package to create a {title} {item_type} container with faster + creation time and minimal system resource usage. You are also + obliged to adhere to updates provided by the package maintainer. + + ) : item_type ? ( + <> + To create a new Proxmox VE {title} {item_type}, run the command + below in the Proxmox VE Shell. + + ) : ( + <>To use the {title} script, run the command below in the shell. + )} +

+ {isAlpine && ( +

+ To create a new Proxmox VE Alpine-{title} {item_type}, run the command + below in the Proxmox VE Shell +

+ )} + + ); + + return ( +
+ {hasAlpineScript ? ( + + + Default + Alpine Linux + + + {renderInstructions()} + {installCommand} + + + {expand.alpine_script && ( + <> + {renderInstructions(true)} + + {expand.alpine_script.installCommand} + + + )} + + + ) : ( + <> + {renderInstructions()} + {installCommand && {installCommand}} + + )} +
+ ); +} diff --git a/frontend/src/app/scripts/_components/ScriptItems/InterFaces.tsx b/frontend/src/app/scripts/_components/ScriptItems/InterFaces.tsx new file mode 100644 index 000000000..e5bab0e84 --- /dev/null +++ b/frontend/src/app/scripts/_components/ScriptItems/InterFaces.tsx @@ -0,0 +1,45 @@ +import { Button, buttonVariants } from "@/components/ui/button"; +import handleCopy from "@/components/handleCopy"; +import { cn } from "@/lib/utils"; +import { ClipboardIcon } from "lucide-react"; + +interface Item { + interface?: string; + port?: number; +} + +const CopyButton = ({ + label, + value, +}: { + label: string; + value: string | number; +}) => ( + + {value} + handleCopy(label, String(value))} + className="size-4 cursor-pointer" + /> + +); + +export default function InterFaces({ item }: { item: Item }) { + const { interface: iface, port } = item; + + return ( +
+ {iface || (port && port !== 0) ? ( +
+

+ {iface ? "Interface:" : "Default Port:"} +

{" "} + +
+ ) : null} +
+ ); +} diff --git a/frontend/src/app/scripts/_components/ScriptItems/Tooltips.tsx b/frontend/src/app/scripts/_components/ScriptItems/Tooltips.tsx new file mode 100644 index 000000000..f0af794ba --- /dev/null +++ b/frontend/src/app/scripts/_components/ScriptItems/Tooltips.tsx @@ -0,0 +1,49 @@ +import { Badge } from "@/components/ui/badge"; +import { + Tooltip, + TooltipContent, + TooltipProvider, + TooltipTrigger, +} from "@/components/ui/tooltip"; +import { Script } from "@/lib/types"; +import React from "react"; + +interface TooltipProps { + variant: "warning" | "success"; + label: string; + content: string; +} + +const TooltipBadge: React.FC = ({ variant, label, content }) => ( + + + + {label} + + + {content} + + + +); + +export default function Tooltips({ item }: { item: Script }) { + return ( +
+ {item.privileged && ( + + )} + {item.isUpdateable && ( + + )} +
+ ); +} diff --git a/frontend/src/app/scripts/_components/Sidebar.tsx b/frontend/src/app/scripts/_components/Sidebar.tsx new file mode 100644 index 000000000..a993e118b --- /dev/null +++ b/frontend/src/app/scripts/_components/Sidebar.tsx @@ -0,0 +1,34 @@ +"use client"; + +import { Category } from "@/lib/types"; +import ScriptAccordion from "./ScriptAccordion"; + +const Sidebar = ({ + items, + selectedScript, + setSelectedScript, +}: { + items: Category[]; + selectedScript: string | null; + setSelectedScript: (script: string | null) => void; +}) => { + return ( +
+
+

Categories

+

+ {items.reduce( + (acc, category) => acc + category.expand.items.length, + 0, + )}{" "} + Total scripts +

+
+
+ +
+
+ ); +}; + +export default Sidebar; diff --git a/frontend/src/app/scripts/page.tsx b/frontend/src/app/scripts/page.tsx new file mode 100644 index 000000000..58f37be28 --- /dev/null +++ b/frontend/src/app/scripts/page.tsx @@ -0,0 +1,98 @@ +"use client"; + +export const dynamic = "force-static"; + +import ScriptItem from "@/app/scripts/_components/ScriptItem"; +import { Category, Script } from "@/lib/types"; +import { Loader2 } from "lucide-react"; +import { Suspense, useEffect, useState } from "react"; +import Sidebar from "./_components/Sidebar"; +import { useQueryState } from "nuqs"; +import { + LatestScripts, + MostViewedScripts, +} from "./_components/ScriptInfoBlocks"; + +function ScriptContent() { + const [selectedScript, setSelectedScript] = useQueryState("id"); + const [links, setLinks] = useState([]); + const [item, setItem] = useState - +
diff --git a/frontend/src/app/manifest.ts b/frontend/src/app/manifest.ts index 0e4cb5dd1..1cfc38f5f 100644 --- a/frontend/src/app/manifest.ts +++ b/frontend/src/app/manifest.ts @@ -1,3 +1,4 @@ +import { basePath } from "@/config/siteConfig"; import type { MetadataRoute } from "next"; export const generateStaticParams = () => { @@ -9,13 +10,13 @@ export default function manifest(): MetadataRoute.Manifest { name: "Proxmox VE Helper-Scripts", short_name: "Proxmox VE Helper-Scripts", description: - "A Re-designed Front-end for the Proxmox VE Helper-Scripts Repository. Featuring over 150+ scripts to help you manage your Proxmox VE environment.", + "A Re-designed Front-end for the Proxmox VE Helper-Scripts Repository. Featuring over 200+ scripts to help you manage your Proxmox VE environment.", theme_color: "#030712", background_color: "#030712", display: "standalone", orientation: "portrait", - scope: "/Proxmox/", - start_url: "/Proxmox/", + scope: `${basePath}`, + start_url: `${basePath}`, icons: [ { src: "logo.png", diff --git a/frontend/src/app/page.tsx b/frontend/src/app/page.tsx index ea486cb02..67577c6c7 100644 --- a/frontend/src/app/page.tsx +++ b/frontend/src/app/page.tsx @@ -11,6 +11,7 @@ import { useEffect, useState } from "react"; import { Dialog, DialogContent, DialogDescription, DialogHeader, DialogTitle, DialogTrigger } from "@/components/ui/dialog"; import { CardFooter } from "@/components/ui/card"; import { FaGithub } from "react-icons/fa"; +import { basePath } from "@/config/siteConfig"; function CustomArrowRightIcon() { return ; @@ -80,7 +81,7 @@ export default function Page() {
)}
- {latestScripts.slice(startIndex, endIndex).map((item) => ( + {latestScripts.slice(startIndex, endIndex).map((script) => (

- {item.title} {item.item_type} + {script.name} {getDisplayValueFromType(script.type)}

- {extractDate(item.created)} + {extractDate(script.date_created)}

- {item.description} + {script.description} @@ -106,7 +121,7 @@ export function LatestScripts({ items }: { items: Category[] }) { View Script @@ -121,29 +136,12 @@ export function LatestScripts({ items }: { items: Category[] }) { } export function MostViewedScripts({ items }: { items: Category[] }) { - const [page, setPage] = useState(1); - - const mostViewedScripts = useMemo(() => { - if (!items) return []; - const scripts = items.flatMap((category) => category.expand.items || []); - const mostViewedScripts = scripts - .filter((script) => script.isMostViewed) - .map((script) => ({ - ...script, - })); - return mostViewedScripts; - }, [items]); - - const goToNextPage = () => { - setPage((prevPage) => prevPage + 1); - }; - - const goToPreviousPage = () => { - setPage((prevPage) => prevPage - 1); - }; - - const startIndex = (page - 1) * ITEMS_PER_PAGE; - const endIndex = page * ITEMS_PER_PAGE; + const mostViewedScripts = items.reduce((acc: Script[], category) => { + const foundScripts = category.scripts.filter((script) => + mostPopularScripts.includes(script.name), + ); + return acc.concat(foundScripts); + }, []); return (
@@ -153,9 +151,9 @@ export function MostViewedScripts({ items }: { items: Category[] }) { )}
- {mostViewedScripts.slice(startIndex, endIndex).map((item) => ( + {mostViewedScripts.map((script) => ( @@ -163,7 +161,7 @@ export function MostViewedScripts({ items }: { items: Category[] }) {

- {item.title} {item.item_type} + {script.name} {getDisplayValueFromType(script.type)}

- {extractDate(item.created)} + {extractDate(script.date_created)}

- {item.description} + {script.description} @@ -191,7 +189,7 @@ export function MostViewedScripts({ items }: { items: Category[] }) { @@ -202,18 +200,6 @@ export function MostViewedScripts({ items }: { items: Category[] }) { ))}
-
- {page > 1 && ( - - )} - {endIndex < mostViewedScripts.length && ( - - )} -
); } diff --git a/frontend/src/app/scripts/_components/ScriptItem.tsx b/frontend/src/app/scripts/_components/ScriptItem.tsx index d1e273e78..840246d9c 100644 --- a/frontend/src/app/scripts/_components/ScriptItem.tsx +++ b/frontend/src/app/scripts/_components/ScriptItem.tsx @@ -5,6 +5,7 @@ import { Script } from "@/lib/types"; import { X } from "lucide-react"; import Image from "next/image"; +import { getDisplayValueFromType } from "./ScriptInfoBlocks"; import Alerts from "./ScriptItems/Alerts"; import Buttons from "./ScriptItems/Buttons"; import DefaultPassword from "./ScriptItems/DefaultPassword"; @@ -39,21 +40,21 @@ function ScriptItem({
((e.currentTarget as HTMLImageElement).src = "/logo.png") } height={400} - alt={item.title} + alt={item.name} unoptimized />
-

{item.title}

+

{item.name} {getDisplayValueFromType(item.type)}

- Date added: {extractDate(item.created)} + Date added: {extractDate(item.date_created)}

@@ -76,7 +77,7 @@ function ScriptItem({

- How to {item.item_type ? "install" : "use"} + How to {item.type ? "install" : "use"}

diff --git a/frontend/src/app/scripts/_components/ScriptItems/Alerts.tsx b/frontend/src/app/scripts/_components/ScriptItems/Alerts.tsx index db54f16d2..e4c56e160 100644 --- a/frontend/src/app/scripts/_components/ScriptItems/Alerts.tsx +++ b/frontend/src/app/scripts/_components/ScriptItems/Alerts.tsx @@ -5,12 +5,12 @@ import { Info } from "lucide-react"; export default function Alerts({ item }: { item: Script }) { return ( <> - {item.expand?.alerts?.length > 0 && - item.expand.alerts.map((alert: any, index: number) => ( + {item?.notes?.length > 0 && + item.notes.map((note: any, index: number) => (

- {TextCopyBlock(alert.content)} + {TextCopyBlock(note.text)}

))} diff --git a/frontend/src/app/scripts/_components/ScriptItems/Buttons.tsx b/frontend/src/app/scripts/_components/ScriptItems/Buttons.tsx index 89bc2c0bd..00a667827 100644 --- a/frontend/src/app/scripts/_components/ScriptItems/Buttons.tsx +++ b/frontend/src/app/scripts/_components/ScriptItems/Buttons.tsx @@ -1,33 +1,18 @@ import { Button } from "@/components/ui/button"; +import { basePath } from "@/config/siteConfig"; import { Script } from "@/lib/types"; -import { BookOpenText, Code, ExternalLink, Globe } from "lucide-react"; +import { BookOpenText, Code, Globe } from "lucide-react"; import Link from "next/link"; -import { useMemo } from "react"; + +const generateSourceUrl = (slug: string, type: string) => { + if (type === "ct") { + return `https://raw.githubusercontent.com/community-scripts/${basePath}/main/install/${slug}-install.sh`; + } else { + return `https://raw.githubusercontent.com/community-scripts/${basePath}/main/${type}/${slug}.sh`; + } +}; export default function Buttons({ item }: { item: Script }) { - const pattern = useMemo( - () => - /(https:\/\/github\.com\/community-scripts\/ProxmoxVE\/raw\/main\/(ct|misc|vm)\/([^\/]+)\.sh)/, - [], - ); - - const transformUrlToInstallScript = (url: string): string => { - if (url.includes("/pve/")) { - return url; - } else if (url.includes("/ct/")) { - return url.replace("/ct/", "/install/").replace(/\.sh$/, "-install.sh"); - } - return url; - }; - - const sourceUrl = useMemo(() => { - if (item.installCommand) { - const match = item.installCommand.match(pattern); - return match ? transformUrlToInstallScript(match[0]) : null; - } - return null; - }, [item.installCommand, pattern]); - return (
{item.website && ( @@ -49,26 +34,16 @@ export default function Buttons({ item }: { item: Script }) { )} - {item.post_install && ( + { - )} - {item.installCommand && sourceUrl && ( - - )} + }
); } diff --git a/frontend/src/app/scripts/_components/ScriptItems/DefaultPassword.tsx b/frontend/src/app/scripts/_components/ScriptItems/DefaultPassword.tsx index 93c561564..55193d8f9 100644 --- a/frontend/src/app/scripts/_components/ScriptItems/DefaultPassword.tsx +++ b/frontend/src/app/scripts/_components/ScriptItems/DefaultPassword.tsx @@ -4,7 +4,7 @@ import handleCopy from "@/components/handleCopy"; import { Script } from "@/lib/types"; export default function DefaultPassword({ item }: { item: Script }) { - const hasDefaultLogin = item?.expand?.default_login !== undefined; + const hasDefaultLogin = item.default_credentials.username && item.default_credentials.password; return (
@@ -17,7 +17,7 @@ export default function DefaultPassword({ item }: { item: Script }) {

You can use the following credentials to login to the {""} - {item.title} {item.item_type}. + {item.name} {item.type}.

Username:{" "} @@ -25,10 +25,10 @@ export default function DefaultPassword({ item }: { item: Script }) { variant={"secondary"} size={"null"} onClick={() => - handleCopy("username", item.expand.default_login.username) + handleCopy("username", item.default_credentials.username ?? "") } > - {item.expand.default_login.username} + {item.default_credentials.username}
@@ -37,10 +37,10 @@ export default function DefaultPassword({ item }: { item: Script }) { variant={"secondary"} size={"null"} onClick={() => - handleCopy("password", item.expand.default_login.password) + handleCopy("password", item.default_credentials.password ?? "") } > - {item.expand.default_login.password} + {item.default_credentials.password}
diff --git a/frontend/src/app/scripts/_components/ScriptItems/DefaultSettings.tsx b/frontend/src/app/scripts/_components/ScriptItems/DefaultSettings.tsx index 05f3ae627..f1b2d8bbd 100644 --- a/frontend/src/app/scripts/_components/ScriptItems/DefaultSettings.tsx +++ b/frontend/src/app/scripts/_components/ScriptItems/DefaultSettings.tsx @@ -1,35 +1,53 @@ import { Script } from "@/lib/types"; export default function DefaultSettings({ item }: { item: Script }) { - const hasAlpineScript = item?.expand?.alpine_script !== undefined; + const defaultSettings = item.install_methods.find( + (method) => method.type === "default", + ); + + const defaultSettingsAvailable = + defaultSettings?.resources.cpu || + defaultSettings?.resources.ram || + defaultSettings?.resources.hdd; + + const defaultAlpineSettings = item.install_methods.find( + (method) => method.type === "alpine", + ); + + const getDisplayValueFromRAM = (ram: number) => { + if (ram >= 1024) { + return (ram / 1024).toFixed(0) + "GB"; + } + return ram + "MB"; + }; return ( <> - {item.default_cpu && ( + {defaultSettingsAvailable && (

Default settings

- CPU: {item.default_cpu} + CPU: {defaultSettings?.resources.cpu}vCPU

- RAM: {item.default_ram} + RAM: {getDisplayValueFromRAM(defaultSettings?.resources.ram ?? 0)}

- HDD: {item.default_hdd} + HDD: {defaultSettings?.resources.hdd}GB

)} - {hasAlpineScript && ( + {defaultAlpineSettings && (

Default Alpine settings

- CPU: {item.expand.alpine_script.default_cpu} + CPU: {defaultAlpineSettings?.resources.cpu}vCPU

- RAM: {item.expand.alpine_script.default_ram} + RAM: {getDisplayValueFromRAM(defaultAlpineSettings?.resources.ram ?? 0)}

- HDD: {item.expand.alpine_script.default_hdd} + HDD: {defaultAlpineSettings?.resources.hdd}GB

)} diff --git a/frontend/src/app/scripts/_components/ScriptItems/InstallCommand.tsx b/frontend/src/app/scripts/_components/ScriptItems/InstallCommand.tsx index 31e1e302c..795569b16 100644 --- a/frontend/src/app/scripts/_components/ScriptItems/InstallCommand.tsx +++ b/frontend/src/app/scripts/_components/ScriptItems/InstallCommand.tsx @@ -1,33 +1,43 @@ import CodeCopyButton from "@/components/ui/code-copy-button"; import { Tabs, TabsContent, TabsList, TabsTrigger } from "@/components/ui/tabs"; +import { basePath } from "@/config/siteConfig"; import { Script } from "@/lib/types"; +const getInstallCommand = (scriptPath?: string) => { + return `bash -c "$(wget -qLO - https://github.com/community-scripts/${basePath}/raw/main/${scriptPath})"`; +} + export default function InstallCommand({ item }: { item: Script }) { - const { title, item_type, installCommand, expand } = item; - const hasAlpineScript = expand?.alpine_script !== undefined; + const alpineScript = item.install_methods.find( + (method) => method.type === "alpine", + ); + + const defaultScript = item.install_methods.find( + (method) => method.type === "default" + ); const renderInstructions = (isAlpine = false) => ( <>

{isAlpine ? ( <> - As an alternative option, you can use Alpine Linux and the {title}{" "} - package to create a {title} {item_type} container with faster + As an alternative option, you can use Alpine Linux and the {item.name}{" "} + package to create a {item.name} {item.type} container with faster creation time and minimal system resource usage. You are also obliged to adhere to updates provided by the package maintainer. - ) : item_type ? ( + ) : item.type ? ( <> - To create a new Proxmox VE {title} {item_type}, run the command + To create a new Proxmox VE {item.name} {item.type}, run the command below in the Proxmox VE Shell. ) : ( - <>To use the {title} script, run the command below in the shell. + <>To use the {item.name} script, run the command below in the shell. )}

{isAlpine && (

- To create a new Proxmox VE Alpine-{title} {item_type}, run the command + To create a new Proxmox VE Alpine-{item.name} {item.type}, run the command below in the Proxmox VE Shell

)} @@ -36,7 +46,7 @@ export default function InstallCommand({ item }: { item: Script }) { return (
- {hasAlpineScript ? ( + {alpineScript ? ( Default @@ -44,25 +54,23 @@ export default function InstallCommand({ item }: { item: Script }) { {renderInstructions()} - {installCommand} + {getInstallCommand(defaultScript?.script)} - {expand.alpine_script && ( - <> - {renderInstructions(true)} - - {expand.alpine_script.installCommand} - - - )} + {renderInstructions(true)} + + {getInstallCommand(alpineScript.script)} + - ) : ( + ) : defaultScript?.script ? ( <> {renderInstructions()} - {installCommand && {installCommand}} + + {getInstallCommand(defaultScript.script)} + - )} + ) : null}
); } diff --git a/frontend/src/app/scripts/_components/ScriptItems/InterFaces.tsx b/frontend/src/app/scripts/_components/ScriptItems/InterFaces.tsx index e5bab0e84..2d2ae1f11 100644 --- a/frontend/src/app/scripts/_components/ScriptItems/InterFaces.tsx +++ b/frontend/src/app/scripts/_components/ScriptItems/InterFaces.tsx @@ -2,11 +2,7 @@ import { Button, buttonVariants } from "@/components/ui/button"; import handleCopy from "@/components/handleCopy"; import { cn } from "@/lib/utils"; import { ClipboardIcon } from "lucide-react"; - -interface Item { - interface?: string; - port?: number; -} +import { Script } from "@/lib/types"; const CopyButton = ({ label, @@ -24,19 +20,18 @@ const CopyButton = ({ ); -export default function InterFaces({ item }: { item: Item }) { - const { interface: iface, port } = item; +export default function InterFaces({item} : {item : Script}) { return (
- {iface || (port && port !== 0) ? ( + {item.interface_port !== null ? (

- {iface ? "Interface:" : "Default Port:"} + {"Default Interface:"}

{" "}
) : null} diff --git a/frontend/src/app/scripts/_components/ScriptItems/Tooltips.tsx b/frontend/src/app/scripts/_components/ScriptItems/Tooltips.tsx index f0af794ba..7e70b68e9 100644 --- a/frontend/src/app/scripts/_components/ScriptItems/Tooltips.tsx +++ b/frontend/src/app/scripts/_components/ScriptItems/Tooltips.tsx @@ -37,11 +37,11 @@ export default function Tooltips({ item }: { item: Script }) { content="This script will be run in a privileged LXC" /> )} - {item.isUpdateable && ( + {item.updateable && ( )}
diff --git a/frontend/src/app/scripts/_components/Sidebar.tsx b/frontend/src/app/scripts/_components/Sidebar.tsx index a993e118b..f1618e170 100644 --- a/frontend/src/app/scripts/_components/Sidebar.tsx +++ b/frontend/src/app/scripts/_components/Sidebar.tsx @@ -18,7 +18,7 @@ const Sidebar = ({

Categories

{items.reduce( - (acc, category) => acc + category.expand.items.length, + (acc, category) => acc + category.scripts.length, 0, )}{" "} Total scripts diff --git a/frontend/src/app/scripts/page.tsx b/frontend/src/app/scripts/page.tsx index 2ccbc7fc4..2e82a3147 100644 --- a/frontend/src/app/scripts/page.tsx +++ b/frontend/src/app/scripts/page.tsx @@ -12,6 +12,7 @@ import { LatestScripts, MostViewedScripts, } from "./_components/ScriptInfoBlocks"; +import { fetchCategories } from "@/lib/data"; function ScriptContent() { const [selectedScript, setSelectedScript] = useQueryState("id"); @@ -21,41 +22,19 @@ function ScriptContent() { useEffect(() => { if (selectedScript && links.length > 0) { const script = links - .map((category) => category.expand.items) + .map((category) => category.scripts) .flat() - .find((script) => script.title === selectedScript); + .find((script) => script.name === selectedScript); setItem(script); } }, [selectedScript, links]); - const sortCategories = (categories: Category[]): Category[] => { - return categories.sort((a: Category, b: Category) => { - if ( - a.catagoryName === "Proxmox VE Tools" && - b.catagoryName !== "Proxmox VE Tools" - ) { - return -1; - } else if ( - a.catagoryName !== "Proxmox VE Tools" && - b.catagoryName === "Proxmox VE Tools" - ) { - return 1; - } else { - return a.catagoryName.localeCompare(b.catagoryName); - } - }); - }; - useEffect(() => { - fetch( - `api/categories?_=${process.env.NEXT_PUBLIC_BUILD_TIME || Date.now()}`, - ) - .then((response) => response.json()) - .then((categories) => { - const sortedCategories = sortCategories(categories); - setLinks(sortedCategories); - }) - .catch((error) => console.error(error)); + fetchCategories() + .then((categories) => { + setLinks(categories); + }) + .catch((error) => console.error(error)); }, []); return ( diff --git a/frontend/src/app/sitemap.ts b/frontend/src/app/sitemap.ts index b24847279..9377f25d8 100644 --- a/frontend/src/app/sitemap.ts +++ b/frontend/src/app/sitemap.ts @@ -1,20 +1,19 @@ +import { basePath } from "@/config/siteConfig"; import type { MetadataRoute } from "next"; export const dynamic = "force-static"; -export default function sitemap(): MetadataRoute.Sitemap { +export default async function sitemap(): Promise { + let domain = "community-scripts.github.io"; + let protocol = "https"; return [ { - url: "https://community-scripts.github.io/Proxmox/", + url: `${protocol}://${domain}/${basePath}`, lastModified: new Date(), - changeFrequency: "yearly", - priority: 0.8, }, { - url: "https://community-scripts.github.io/Proxmox/scripts", + url: `${protocol}://${domain}/${basePath}/scripts`, lastModified: new Date(), - changeFrequency: "monthly", - priority: 1, }, ]; } diff --git a/frontend/src/components/CommandMenu.tsx b/frontend/src/components/CommandMenu.tsx index e5157e036..cc6d690f2 100644 --- a/frontend/src/components/CommandMenu.tsx +++ b/frontend/src/components/CommandMenu.tsx @@ -6,30 +6,28 @@ import { CommandItem, CommandList, } from "@/components/ui/command"; +import { fetchCategories } from "@/lib/data"; import { Category } from "@/lib/types"; import { cn } from "@/lib/utils"; import Image from "next/image"; import { useRouter } from "next/navigation"; -import React, { useEffect } from "react"; +import React from "react"; +import { Badge } from "./ui/badge"; import { Button } from "./ui/button"; import { DialogTitle } from "./ui/dialog"; -const sortCategories = (categories: Category[]): Category[] => { - return categories.sort((a: Category, b: Category) => { - if ( - a.catagoryName === "Proxmox VE Tools" && - b.catagoryName !== "Proxmox VE Tools" - ) { - return -1; - } else if ( - a.catagoryName !== "Proxmox VE Tools" && - b.catagoryName === "Proxmox VE Tools" - ) { - return 1; - } else { - return a.catagoryName.localeCompare(b.catagoryName); - } - }); +export const formattedBadge = (type: string) => { + switch (type) { + case "vm": + return VM; + case "ct": + return ( + LXC + ); + case "misc": + return MISC; + } + return null; }; export default function CommandMenu() { @@ -50,21 +48,17 @@ export default function CommandMenu() { return () => document.removeEventListener("keydown", down); }, []); - const fetchCategories = async () => { + const fetchSortedCategories = () => { setIsLoading(true); - fetch( - `api/categories?_=${process.env.NEXT_PUBLIC_BUILD_TIME || Date.now()}`, - ) - .then((response) => response.json()) - .then((categories) => { - const sortedCategories = sortCategories(categories); - setLinks(sortedCategories); - setIsLoading(false); - }) - .catch((error) => { - setIsLoading(false); - console.error(error); - }); + fetchCategories() + .then((categories) => { + setLinks(categories); + setIsLoading(false); + }) + .catch((error) => { + setIsLoading(false); + console.error(error); + }); }; return ( @@ -75,8 +69,8 @@ export default function CommandMenu() { "relative h-9 w-full justify-start rounded-[0.5rem] bg-muted/50 text-sm font-normal text-muted-foreground shadow-none sm:pr-12 md:w-40 lg:w-64", )} onClick={() => { - fetchCategories(); - setOpen(true) + fetchSortedCategories(); + setOpen(true); }} > Search scripts... @@ -85,41 +79,40 @@ export default function CommandMenu() { - Search scripts - + Search scripts + - {isLoading ? "Loading..." : "No scripts found."} + + {isLoading ? "Loading..." : "No scripts found."} + {links.map((category) => ( - {category.expand.items.map((script) => ( + {category.scripts.map((script) => ( { setOpen(false); - router.push(`/scripts?id=${script.title}`); + router.push(`/scripts?id=${script.name}`); }} >

setOpen(false)}> ((e.currentTarget as HTMLImageElement).src = "/logo.png") } width={16} + height={16} alt="" className="h-5 w-5" /> - {script.title} - - {script.item_type} - + {script.name} + {formattedBadge(script.type)}
))} diff --git a/frontend/src/components/Footer.tsx b/frontend/src/components/Footer.tsx index d76a44a22..83aa05cec 100644 --- a/frontend/src/components/Footer.tsx +++ b/frontend/src/components/Footer.tsx @@ -1,3 +1,4 @@ +import { basePath } from "@/config/siteConfig"; import Link from "next/link"; export default function Footer() { @@ -7,7 +8,7 @@ export default function Footer() {
Website build by the community. The source code is avaliable on{" "} { const handleScroll = () => { @@ -56,7 +53,6 @@ function Navbar() { /> Proxmox VE Helper-Scripts - {/* */}
@@ -81,28 +77,7 @@ function Navbar() { ))} - - - - - - - Theme Toggle - - - +
diff --git a/frontend/src/components/ui/codeblock.tsx b/frontend/src/components/ui/codeblock.tsx index f4251e536..16cc1bcc2 100644 --- a/frontend/src/components/ui/codeblock.tsx +++ b/frontend/src/components/ui/codeblock.tsx @@ -8,6 +8,7 @@ import * as React from "react"; import { toast } from "sonner"; import { Button } from "./button"; import { Separator } from "./separator"; +import { basePath } from "@/config/siteConfig"; const buttonVariants = cva( "inline-flex items-center justify-center whitespace-nowrap rounded-md text-sm font-medium ring-offset-background transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50", @@ -67,7 +68,7 @@ const handleCopy = (type: string, value: string) => {
+ + + Theme Toggle + + + + ); +} diff --git a/frontend/src/config/siteConfig.tsx b/frontend/src/config/siteConfig.tsx index cd87e0e4f..d32952c9a 100644 --- a/frontend/src/config/siteConfig.tsx +++ b/frontend/src/config/siteConfig.tsx @@ -1,23 +1,36 @@ import { MessagesSquare, Scroll } from "lucide-react"; import { FaGithub } from "react-icons/fa"; +export const basePath = process.env.BASE_PATH; + export const navbarLinks = [ { - href: "https://github.com/community-scripts/ProxmoxVE", + href: `https://github.com/community-scripts/${basePath}`, event: "Github", icon: , text: "Github", }, { - href: "https://github.com/community-scripts/ProxmoxVE/blob/main/CHANGELOG.md", + href: `https://github.com/community-scripts/${basePath}/blob/main/CHANGELOG.md`, event: "Change Log", icon: , text: "Change Log", }, { - href: "https://github.com/community-scripts/ProxmoxVE/discussions", + href: `https://github.com/community-scripts/${basePath}/discussions`, event: "Discussions", icon: , text: "Discussions", }, ]; + +export const mostPopularScripts = [ + "Proxmox VE Post Install", + "Docker", + "Home Assistant OS", +]; + +export const analytics = { + url: "analytics.proxmoxve-scripts.com", + token: "b60d3032-1a11-4244-a100-81d26c5c49a7", +}; diff --git a/frontend/src/lib/data.ts b/frontend/src/lib/data.ts new file mode 100644 index 000000000..8c665e1ab --- /dev/null +++ b/frontend/src/lib/data.ts @@ -0,0 +1,23 @@ +import { Category } from "./types"; + +const sortCategories = (categories: Category[]) => { + return categories.sort((a, b) => { + if (a.name === "Proxmox VE Tools") { + return -1; + } else if (b.name === "Proxmox VE Tools") { + return 1; + } else if (a.name === "Miscellaneous") { + return 1; + } else if (b.name === "Miscellaneous") { + return -1; + } else { + return a.name.localeCompare(b.name); + } + }); +}; + +export const fetchCategories = async (): Promise => { + const response = await fetch("api/categories"); + const categories = await response.json(); + return sortCategories(categories); +}; diff --git a/frontend/src/lib/pocketbase.ts b/frontend/src/lib/pocketbase.ts deleted file mode 100644 index 86dcbace3..000000000 --- a/frontend/src/lib/pocketbase.ts +++ /dev/null @@ -1,10 +0,0 @@ -import PocketBase from "pocketbase"; - -export const pb = new PocketBase(process.env.NEXT_PUBLIC_POCKETBASE_URL); -export const pbBackup = new PocketBase( - process.env.NEXT_PUBLIC_POCKETBASE_URL_BACKUP, -); - -export const getImageURL = (recordId: string, fileName: string) => { - return `${process.env.NEXT_PUBLIC_POCKETBASE_URL}/${recordId}/${fileName}`; -}; diff --git a/frontend/src/lib/types.ts b/frontend/src/lib/types.ts index b65d5a0a2..3ce26cd11 100644 --- a/frontend/src/lib/types.ts +++ b/frontend/src/lib/types.ts @@ -1,55 +1,44 @@ -// these are all the interfaces that are used in the site. these all come from the pocketbase database - -export interface Script { - title: string; - description: string; - documentation: string; - website: string; - logo: string; - created: string; - updated: string; - id: string; - item_type: string; - interface: string; - installCommand: string; - port: number; - post_install: string; - default_cpu: string; - default_hdd: string; - default_ram: string; - isUpdateable: boolean; - isMostViewed: boolean; +export type Script = { + name: string; + slug: string; + categories: number[]; + date_created: string; + type: "vm" | "ct" | "misc"; + updateable: boolean; privileged: boolean; - alpineScript: alpine_script; - expand: { - alpine_script: alpine_script; - alerts: alerts[]; - default_login: default_login; + interface_port: number | null; + documentation: string | null; + website: string | null; + logo: string | null; + description: string; + install_methods: { + type: "default" | "alpine"; + script: string; + resources: { + cpu: number | null; + ram: number | null; + hdd: number | null; + os: string | null; + version: number | null; + }; + }[]; + default_credentials: { + username: string | null; + password: string | null; }; + notes: [{ + text: string; + type: string; + }] } -export interface Category { - catagoryName: string; - categoryId: string; - id: string; - created: string; - expand: { - items: Script[]; - }; +export type Category = { + name: string; + id: number; + sort_order: number; + scripts: Script[]; } -interface alpine_script { - installCommand: string; - default_cpu: string; - default_hdd: string; - default_ram: string; -} - -interface alerts { - content: string; -} - -interface default_login { - username: string; - password: string; -} +export type ScriptList = { + categories: Category[]; +} \ No newline at end of file diff --git a/frontend/src/styles/globals.css b/frontend/src/styles/globals.css index e9820c8a3..d0ca4158f 100644 --- a/frontend/src/styles/globals.css +++ b/frontend/src/styles/globals.css @@ -30,6 +30,29 @@ --chart-3: 197 37% 24%; --chart-4: 43 74% 66%; --chart-5: 27 87% 67%; + --expo-out: linear( + 0 0%, + 0.1684 2.66%, + 0.3165 5.49%, + 0.446 8.52%, + 0.5581 11.78%, + 0.6535 15.29%, + 0.7341 19.11%, + 0.8011 23.3%, + 0.8557 27.93%, + 0.8962 32.68%, + 0.9283 38.01%, + 0.9529 44.08%, + 0.9711 51.14%, + 0.9833 59.06%, + 0.9915 68.74%, + 1 100% + ); + } + + ::selection { + background-color: hsl(var(--accent)); + color: hsl(var(--foreground)); } .dark { @@ -58,8 +81,46 @@ --chart-4: 280 65% 60%; --chart-5: 340 75% 55%; } + + ::view-transition-group(root) { + animation-duration: 0.7bun s; + animation-timing-function: var(--expo-out); + } + + ::view-transition-new(root) { + animation-name: reveal-light; + } + + ::view-transition-old(root), + .dark::view-transition-old(root) { + animation: none; + z-index: -1; + } + .dark::view-transition-new(root) { + animation-name: reveal-dark; + } + + @keyframes reveal-dark { + from { + clip-path: polygon(50% -71%, -50% 71%, -50% 71%, 50% -71%); + } + to { + clip-path: polygon(50% -71%, -50% 71%, 50% 171%, 171% 50%); + } + } + + @keyframes reveal-light { + from { + clip-path: polygon(171% 50%, 50% 171%, 50% 171%, 171% 50%); + } + to { + clip-path: polygon(171% 50%, 50% 171%, -50% 71%, 50% -71%); + } + } } + + @layer base { * { @apply border-border; From d739d89caaa28334c4d6fec9585a50d560221bd1 Mon Sep 17 00:00:00 2001 From: Bram Suurd <78373894+BramSuurdje@users.noreply.github.com> Date: Wed, 6 Nov 2024 23:57:50 +0100 Subject: [PATCH 054/631] manually set basePath in `next.config.mjs` (#109) --- frontend/next.config.mjs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frontend/next.config.mjs b/frontend/next.config.mjs index a2529f34c..108da034e 100644 --- a/frontend/next.config.mjs +++ b/frontend/next.config.mjs @@ -19,7 +19,7 @@ const nextConfig = { }, output: "export", - basePath: `/${process.env.BASE_PATH}`, + basePath: `/ProxmoxVE`, }; export default nextConfig; From e4d83dfc6aa4ce527f3d9b77926bcd1d34a5ae00 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?H=C3=A5vard=20Gj=C3=B8by=20Thom?= <34199185+havardthom@users.noreply.github.com> Date: Thu, 7 Nov 2024 14:54:02 +0100 Subject: [PATCH 055/631] Add CODEOWNERS (#116) --- .github/CODEOWNERS | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 .github/CODEOWNERS diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS new file mode 100644 index 000000000..b25e618ad --- /dev/null +++ b/.github/CODEOWNERS @@ -0,0 +1,17 @@ +# +# CODEOWNERS for ProxmoxVE +# + +# Order is important; the last matching pattern takes the most +# precedence. + + +# Codeowners for specific folders and files +# Remember ending folders with / + + +# Set default reviewers +* @community-scripts/Contributor + +# All changes in frontend +/frontend/ @community-scripts/Frontend-Dev From 0988ee160145b0240773f8167de64a8c2119fd0b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?H=C3=A5vard=20Gj=C3=B8by=20Thom?= <34199185+havardthom@users.noreply.github.com> Date: Thu, 7 Nov 2024 15:25:47 +0100 Subject: [PATCH 056/631] Docs: Fix typo in neo4j.json (#114) --- json/neo4j.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/json/neo4j.json b/json/neo4j.json index f7e3d4dae..41a158958 100644 --- a/json/neo4j.json +++ b/json/neo4j.json @@ -1,5 +1,5 @@ { - "name": "Neoj", + "name": "Neo4j", "slug": "neo4j", "categories": [ 5 From 10b2ddf3e091d411c7cee4ccd370bd5d9f207d03 Mon Sep 17 00:00:00 2001 From: Bram Suurd <78373894+BramSuurdje@users.noreply.github.com> Date: Thu, 7 Nov 2024 16:37:23 +0100 Subject: [PATCH 057/631] Adding a scrollbar to the sidebar for better navigation. (#120) * manually set basePath in `next.config.mjs` * Fix: add getDisplayValueFromType formatting in InstallCommand instead of displaying raw type * Refactor ScriptAccordion to improve layout and scroll handling --- .../scripts/_components/ScriptAccordion.tsx | 11 ++++----- .../ScriptItems/InstallCommand.tsx | 24 ++++++++++++------- frontend/src/styles/globals.css | 12 +++++++--- 3 files changed, 28 insertions(+), 19 deletions(-) diff --git a/frontend/src/app/scripts/_components/ScriptAccordion.tsx b/frontend/src/app/scripts/_components/ScriptAccordion.tsx index d6157e632..4f08ae09a 100644 --- a/frontend/src/app/scripts/_components/ScriptAccordion.tsx +++ b/frontend/src/app/scripts/_components/ScriptAccordion.tsx @@ -1,5 +1,6 @@ import { useCallback, useEffect, useRef } from "react"; +import { formattedBadge } from "@/components/CommandMenu"; import { Accordion, AccordionContent, @@ -8,12 +9,9 @@ import { } from "@/components/ui/accordion"; import { Category } from "@/lib/types"; import { cn } from "@/lib/utils"; -import { Star } from "lucide-react"; import Image from "next/image"; import Link from "next/link"; import { useState } from "react"; -import { Badge } from "../../../components/ui/badge"; -import { formattedBadge } from "@/components/CommandMenu"; export default function ScriptAccordion({ items, @@ -57,6 +55,7 @@ export default function ScriptAccordion({ value={expandedItem} onValueChange={handleAccordionChange} collapsible + className="overflow-y-scroll max-h-[calc(100vh-210px)] overflow-x-hidden pb-4" > {items.map((category) => ( {" "} {category.scripts @@ -92,7 +89,7 @@ export default function ScriptAccordion({ { return `bash -c "$(wget -qLO - https://github.com/community-scripts/${basePath}/raw/main/${scriptPath})"`; @@ -21,24 +22,29 @@ export default function InstallCommand({ item }: { item: Script }) {

{isAlpine ? ( <> - As an alternative option, you can use Alpine Linux and the {item.name}{" "} - package to create a {item.name} {item.type} container with faster - creation time and minimal system resource usage. You are also - obliged to adhere to updates provided by the package maintainer. + As an alternative option, you can use Alpine Linux and the{" "} + {item.name} package to create a {item.name}{" "} + {getDisplayValueFromType(item.type)} container with faster creation + time and minimal system resource usage. You are also obliged to + adhere to updates provided by the package maintainer. ) : item.type ? ( <> - To create a new Proxmox VE {item.name} {item.type}, run the command - below in the Proxmox VE Shell. + To create a new Proxmox VE {item.name}{" "} + {getDisplayValueFromType(item.type)}, run the command below in the + Proxmox VE Shell. ) : ( - <>To use the {item.name} script, run the command below in the shell. + <> + To use the {item.name} script, run the command below in the shell. + )}

{isAlpine && (

- To create a new Proxmox VE Alpine-{item.name} {item.type}, run the command - below in the Proxmox VE Shell + To create a new Proxmox VE Alpine-{item.name}{" "} + {getDisplayValueFromType(item.type)}, run the command below in the + Proxmox VE Shell

)} diff --git a/frontend/src/styles/globals.css b/frontend/src/styles/globals.css index d0ca4158f..cf20db2e5 100644 --- a/frontend/src/styles/globals.css +++ b/frontend/src/styles/globals.css @@ -119,8 +119,6 @@ } } - - @layer base { * { @apply border-border; @@ -134,7 +132,15 @@ } ::-webkit-scrollbar { - display: none; + width: 9px; +} +::-webkit-scrollbar-track { + background: transparent; +} +::-webkit-scrollbar-thumb { + background-color: rgba(155, 155, 155, 0.25); + border-radius: 20px; + border: transparent; } .glass { From 7a3adeb142e09ed09a2f8e33ba30c11421a0d1a5 Mon Sep 17 00:00:00 2001 From: davalanche Date: Thu, 7 Nov 2024 12:41:37 -0600 Subject: [PATCH 058/631] Update mysql-install.sh (#123) Added the option to install the 8.4 LTS release --- install/mysql-install.sh | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/install/mysql-install.sh b/install/mysql-install.sh index 6c8ef1920..c8d12b88f 100644 --- a/install/mysql-install.sh +++ b/install/mysql-install.sh @@ -24,9 +24,17 @@ $STD apt-get install -y \ mc msg_ok "Installed Dependencies" +RELEASE_REPO="mysql-8.0" +RELEASE_AUTH="mysql_native_password" +read -r -p "Would you like to install the MySQL 8.4 LTS release instead of MySQL 8.0 (bug fix track; EOL April-2026)? " prompt +if [[ "${prompt,,}" =~ ^(y|yes)$ ]]; then + RELEASE_REPO="mysql-8.4-lts" + RELEASE_AUTH="caching_sha2_password" +fi + msg_info "Installing MySQL" curl -fsSL https://repo.mysql.com/RPM-GPG-KEY-mysql-2023 | gpg --dearmor -o /usr/share/keyrings/mysql.gpg -echo "deb [signed-by=/usr/share/keyrings/mysql.gpg] http://repo.mysql.com/apt/debian $(lsb_release -sc) mysql-8.0" >/etc/apt/sources.list.d/mysql.list +echo "deb [signed-by=/usr/share/keyrings/mysql.gpg] http://repo.mysql.com/apt/debian $(lsb_release -sc) ${RELEASE_REPO}" >/etc/apt/sources.list.d/mysql.list $STD apt-get update export DEBIAN_FRONTEND=noninteractive $STD apt-get install -y \ @@ -36,7 +44,7 @@ msg_ok "Installed MySQL" msg_info "Configure MySQL Server" ADMIN_PASS="$(openssl rand -base64 18 | cut -c1-13)" -$STD mysql -uroot -p"$ADMIN_PASS" -e "ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '$ADMIN_PASS'; FLUSH PRIVILEGES;" +$STD mysql -uroot -p"$ADMIN_PASS" -e "ALTER USER 'root'@'localhost' IDENTIFIED WITH $RELEASE_AUTH BY '$ADMIN_PASS'; FLUSH PRIVILEGES;" echo "" >~/mysql.creds echo -e "MySQL user: root" >>~/mysql.creds echo -e "MySQL password: $ADMIN_PASS" >>~/mysql.creds From e26bb4e0bd3b4ca3de83ac6796edfe822c184408 Mon Sep 17 00:00:00 2001 From: Oliver L <77393143+oliverl-21@users.noreply.github.com> Date: Fri, 8 Nov 2024 10:04:14 +0100 Subject: [PATCH 059/631] add update /opt/Traefik_version.txt (#130) the update function didn't update the Traefik_version.txt which it also checked during the run. --- ct/traefik.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/ct/traefik.sh b/ct/traefik.sh index 22dad2d9f..54a6c6fc6 100644 --- a/ct/traefik.sh +++ b/ct/traefik.sh @@ -63,6 +63,7 @@ if [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]] || [[ ! -f /opt/${APP} mv /tmp/traefik /usr/bin/ rm -rf traefik*.tar.gz systemctl restart traefik.service + echo "${RELEASE}" >/opt/${APP}_version.txt msg_ok "Updated $APP LXC" else msg_ok "No update required. ${APP} is already at ${RELEASE}" From a68f380d6b2ecb20ab441ad164cd691867bfe45a Mon Sep 17 00:00:00 2001 From: CanbiZ <47820557+MickLesk@users.noreply.github.com> Date: Fri, 8 Nov 2024 11:34:07 +0100 Subject: [PATCH 060/631] [Bug] | [Change]: Homarr (+Script harmonized) (#124) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * [Bug] | [Change]: Homarr (+Script harmonized) * Update ct/homarr.sh Co-authored-by: Håvard Gjøby Thom <34199185+havardthom@users.noreply.github.com> * add ttekc Signed-off-by: CanbiZ <47820557+MickLesk@users.noreply.github.com> * Apply suggestions from code review Co-authored-by: Håvard Gjøby Thom <34199185+havardthom@users.noreply.github.com> * fix echo Signed-off-by: CanbiZ <47820557+MickLesk@users.noreply.github.com> * Final Fix Signed-off-by: CanbiZ <47820557+MickLesk@users.noreply.github.com> * remove cd /opt Signed-off-by: CanbiZ <47820557+MickLesk@users.noreply.github.com> * Apply suggestions from code review Co-authored-by: Håvard Gjøby Thom <34199185+havardthom@users.noreply.github.com> * Apply suggestions from code review Co-authored-by: Håvard Gjøby Thom <34199185+havardthom@users.noreply.github.com> * Apply suggestions from code review Co-authored-by: Håvard Gjøby Thom <34199185+havardthom@users.noreply.github.com> --------- Signed-off-by: CanbiZ <47820557+MickLesk@users.noreply.github.com> Co-authored-by: Håvard Gjøby Thom <34199185+havardthom@users.noreply.github.com> --- ct/homarr.sh | 50 +++++++++++++++++++++++++++++---------- install/homarr-install.sh | 11 ++++++--- 2 files changed, 45 insertions(+), 16 deletions(-) diff --git a/ct/homarr.sh b/ct/homarr.sh index dcb55148b..aa1fedd93 100644 --- a/ct/homarr.sh +++ b/ct/homarr.sh @@ -2,6 +2,7 @@ source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) # Copyright (c) 2021-2024 tteck # Author: tteck (tteckster) +# Co-Author: MickLesk (Canbiz) # License: MIT # https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE @@ -54,20 +55,43 @@ function default_settings() { function update_script() { header_info -if [[ ! -d /opt/homarr ]]; then msg_error "No ${APP} Installation Found!"; exit; fi -msg_info "Updating $APP (Patience)" -systemctl stop homarr -cd /opt/homarr -if ! git pull; then - echo "Already up to date." - systemctl start homarr - echo "No update required." - exit +if [[ ! -d /opt/homarr]]; then msg_error "No ${APP} Installation Found!"; exit; fi +if (( $(df /boot | awk 'NR==2{gsub("%","",$5); print $5}') > 80 )); then + read -r -p "Warning: Storage is dangerously low, continue anyway? " prompt + [[ ${prompt,,} =~ ^(y|yes)$ ]] || exit +fi +RELEASE=$(curl -s https://api.github.com/repos/ajnart/homarr/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') +if [[ ! -f /opt/${APP}_version.txt ]] || [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]]; then + msg_info "Stopping Services" + systemctl stop homarr + msg_ok "Services Stopped" + + msg_info "Updating ${APP} to ${RELEASE}" + cp /opt/homarr/.env /opt/.env + cp -a /opt/homarr/data /opt/ + rm -rf /opt/homarr + wget -q "https://github.com/ajnart/homarr/archive/refs/tags/v${RELEASE}.zip" + unzip -q v${RELEASE}.zip + mv homarr-${RELEASE} /opt/homarr + mv /opt/.env /opt/homarr/.env + mv /opt/data /opt/homarr/ + yarn install &>/dev/null + yarn build &>/dev/null + yarn db:migrate &>/dev/null + echo "${RELEASE}" >/opt/${APP}_version.txt + msg_ok "Updated ${APP}" + + msg_info "Starting Services" + systemctl start homarr + msg_ok "Started Services" + + msg_info "Cleaning Up" + rm -rf v${RELEASE}.zip + msg_ok "Cleaned" + msg_ok "Updated Successfully" +else + msg_ok "No update required. ${APP} is already at ${RELEASE}" fi -yarn install -yarn build -systemctl start homarr -msg_ok "Updated $APP" exit } diff --git a/install/homarr-install.sh b/install/homarr-install.sh index 791c37a77..b0561b993 100644 --- a/install/homarr-install.sh +++ b/install/homarr-install.sh @@ -2,8 +2,10 @@ # Copyright (c) 2021-2024 tteck # Author: tteck (tteckster) +# Co-Author: MickLesk (Canbiz) # License: MIT # https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE +# Source: https://github.com/ajnart/homarr source /dev/stdin <<< "$FUNCTIONS_FILE_PATH" color @@ -17,7 +19,6 @@ msg_info "Installing Dependencies" $STD apt-get install -y curl $STD apt-get install -y sudo $STD apt-get install -y mc -$STD apt-get install -y git $STD apt-get install -y ca-certificates $STD apt-get install -y gnupg msg_ok "Installed Dependencies" @@ -31,12 +32,14 @@ msg_ok "Set up Node.js Repository" msg_info "Installing Node.js/Yarn" $STD apt-get update $STD apt-get install -y nodejs -$STD npm install -g npm@latest $STD npm install -g yarn msg_ok "Installed Node.js/Yarn" msg_info "Installing Homarr (Patience)" -$STD git clone -b dev https://github.com/ajnart/homarr.git /opt/homarr +RELEASE=$(curl -s https://api.github.com/repos/ajnart/homarr/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') +wget -q "https://github.com/ajnart/homarr/archive/refs/tags/v${RELEASE}.zip" +unzip -q v${RELEASE}.zip +mv homarr-${RELEASE} /opt/homarr cat </opt/homarr/.env DATABASE_URL="file:./database/db.sqlite" NEXTAUTH_URL="http://localhost:3000" @@ -48,6 +51,7 @@ cd /opt/homarr $STD yarn install $STD yarn build $STD yarn db:migrate +echo "${RELEASE}" >"/opt/${APPLICATION}_version.txt" msg_ok "Installed Homarr" msg_info "Creating Service" @@ -72,6 +76,7 @@ motd_ssh customize msg_info "Cleaning up" +rm -rf v${RELEASE}.zip $STD apt-get -y autoremove $STD apt-get -y autoclean msg_ok "Cleaned" From 5bcbf9ba63306f8099c191675bae187fee91481c Mon Sep 17 00:00:00 2001 From: CanbiZ <47820557+MickLesk@users.noreply.github.com> Date: Fri, 8 Nov 2024 12:35:44 +0100 Subject: [PATCH 061/631] [Bugfix] Remove Wallos Folder to Update (#129) --- ct/wallos.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/ct/wallos.sh b/ct/wallos.sh index 247eec40b..4b2e94a00 100644 --- a/ct/wallos.sh +++ b/ct/wallos.sh @@ -67,6 +67,7 @@ if [[ ! -f /opt/${APP}_version.txt ]] || [[ "${RELEASE}" != "$(cat /opt/${APP}_v wget -q "https://github.com/ellite/Wallos/archive/refs/tags/v${RELEASE}.zip" mv /opt/wallos/db/wallos.db /opt/wallos.db unzip -q v${RELEASE}.zip + rm -rf /opt/wallos mv Wallos-${RELEASE} /opt/wallos rm -rf /opt/wallos/db/wallos.empty.db mv /opt/wallos.db /opt/wallos/db/wallos.db From 37c0fe7960b94541735d32c8c95947a271ad797a Mon Sep 17 00:00:00 2001 From: CanbiZ <47820557+MickLesk@users.noreply.github.com> Date: Fri, 8 Nov 2024 16:16:21 +0100 Subject: [PATCH 062/631] quickfix homarr.sh (#133) Missing Space --- ct/homarr.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ct/homarr.sh b/ct/homarr.sh index aa1fedd93..72de67a1f 100644 --- a/ct/homarr.sh +++ b/ct/homarr.sh @@ -55,7 +55,7 @@ function default_settings() { function update_script() { header_info -if [[ ! -d /opt/homarr]]; then msg_error "No ${APP} Installation Found!"; exit; fi +if [[ ! -d /opt/homarr ]]; then msg_error "No ${APP} Installation Found!"; exit; fi if (( $(df /boot | awk 'NR==2{gsub("%","",$5); print $5}') > 80 )); then read -r -p "Warning: Storage is dangerously low, continue anyway? " prompt [[ ${prompt,,} =~ ^(y|yes)$ ]] || exit From 2f3679a7ec6e610a273682d55b15f66a9b68e92d Mon Sep 17 00:00:00 2001 From: CanbiZ <47820557+MickLesk@users.noreply.github.com> Date: Fri, 8 Nov 2024 17:44:37 +0100 Subject: [PATCH 063/631] Tweak --- ct/homarr.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/ct/homarr.sh b/ct/homarr.sh index 72de67a1f..b04bf9660 100644 --- a/ct/homarr.sh +++ b/ct/homarr.sh @@ -74,6 +74,7 @@ if [[ ! -f /opt/${APP}_version.txt ]] || [[ "${RELEASE}" != "$(cat /opt/${APP}_v unzip -q v${RELEASE}.zip mv homarr-${RELEASE} /opt/homarr mv /opt/.env /opt/homarr/.env + rm -rf /opt/homarr/data mv /opt/data /opt/homarr/ yarn install &>/dev/null yarn build &>/dev/null From ec7dd674ea8fb3ac687bbf38a7b731a8e2c259e8 Mon Sep 17 00:00:00 2001 From: CanbiZ <47820557+MickLesk@users.noreply.github.com> Date: Fri, 8 Nov 2024 20:28:47 +0100 Subject: [PATCH 064/631] [Bugfix] Medusa (#138) --- ct/medusa.sh | 21 ++++++++++++++++----- install/medusa-install.sh | 15 +++++++++------ 2 files changed, 25 insertions(+), 11 deletions(-) diff --git a/ct/medusa.sh b/ct/medusa.sh index f8ff50e41..24a77f340 100644 --- a/ct/medusa.sh +++ b/ct/medusa.sh @@ -55,12 +55,23 @@ function default_settings() { function update_script() { header_info if [[ ! -d /opt/medusa ]]; then msg_error "No ${APP} Installation Found!"; exit; fi +msg_info "Stopping ${APP}" +systemctl stop medusa +msg_ok "Stopped ${APP}" + msg_info "Updating ${APP}" -systemctl stop medusa.service -/opt/medusa -git pull -systemctl start medusa.service -msg_ok "Successfully Updated ${APP}" +cd /opt/medusa +output=$(git pull --no-rebase) +if echo "$output" | grep -q "Already up to date." +then + msg_ok "$APP is already up to date." + exit +fi +msg_ok "Updated Successfully" + +msg_info "Starting ${APP}" +systemctl start medusa +msg_ok "Started ${APP}" exit } diff --git a/install/medusa-install.sh b/install/medusa-install.sh index 4dda222bc..924b496f9 100644 --- a/install/medusa-install.sh +++ b/install/medusa-install.sh @@ -2,8 +2,10 @@ # Copyright (c) 2021-2024 tteck # Author: tteck (tteckster) +# Co-Author: MickLesk (Canbiz) # License: MIT # https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE +# Source: https://github.com/pymedusa/Medusa source /dev/stdin <<< "$FUNCTIONS_FILE_PATH" color @@ -14,12 +16,13 @@ network_check update_os msg_info "Installing Dependencies" -$STD apt-get install -y curl -$STD apt-get install -y sudo -$STD apt-get install -y mc -$STD apt-get install -y gpg -$STD apt-get install -y git-core -$STD apt-get install -y mediainfo +$STD apt-get install -y \ + gpg \ + curl \ + sudo \ + mc \ + git-core \ + mediainfo cat </etc/apt/sources.list.d/non-free.list deb http://deb.debian.org/debian bookworm main contrib non-free non-free-firmware EOF From 4c46e9495dbf568caac5a22e9cb073c7070e7100 Mon Sep 17 00:00:00 2001 From: Mellowlynx <2348339+Mellowlynx@users.noreply.github.com> Date: Fri, 8 Nov 2024 20:29:57 +0100 Subject: [PATCH 065/631] Added "(Patience)" to the Updating Ghostscript message (#137) The scripts needs some time to build and execute the installation. --- ct/paperless-ngx.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ct/paperless-ngx.sh b/ct/paperless-ngx.sh index 02e52d08a..d7a1947c0 100644 --- a/ct/paperless-ngx.sh +++ b/ct/paperless-ngx.sh @@ -68,7 +68,7 @@ function update_script() { if [ "$UPD" == "1" ]; then if [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]] || [[ ! -f /opt/${APP}_version.txt ]]; then if [[ "$(gs --version 2>/dev/null)" != "10.04.0" ]]; then - msg_info "Updating Ghostscript" + msg_info "Updating Ghostscript (Patience)" cd /tmp wget -q https://github.com/ArtifexSoftware/ghostpdl-downloads/releases/download/gs10040/ghostscript-10.04.0.tar.gz tar -xzf ghostscript-10.04.0.tar.gz From 957f7e8ba23cb3850cc00aa917f41c5b48c7dcce Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?H=C3=A5vard=20Gj=C3=B8by=20Thom?= <34199185+havardthom@users.noreply.github.com> Date: Fri, 8 Nov 2024 22:27:01 +0100 Subject: [PATCH 066/631] Fix disk setup and documentation for Turnkey VMs (#141) --- .../scripts/_components/ScriptAccordion.tsx | 16 ++++----- .../scripts/_components/ScriptInfoBlocks.tsx | 8 ++--- frontend/src/app/scripts/page.tsx | 10 +++--- frontend/src/components/CommandMenu.tsx | 6 ++-- json/jellyfin.json | 2 +- json/nextcloud-vm.json | 34 +++++++++++++++++++ json/owncloud-vm.json | 6 ++-- vm/nextcloud-vm.sh | 12 ++++--- vm/owncloud-vm.sh | 32 +++++++++-------- 9 files changed, 82 insertions(+), 44 deletions(-) create mode 100644 json/nextcloud-vm.json diff --git a/frontend/src/app/scripts/_components/ScriptAccordion.tsx b/frontend/src/app/scripts/_components/ScriptAccordion.tsx index 4f08ae09a..9aad70d33 100644 --- a/frontend/src/app/scripts/_components/ScriptAccordion.tsx +++ b/frontend/src/app/scripts/_components/ScriptAccordion.tsx @@ -26,14 +26,14 @@ export default function ScriptAccordion({ undefined, ); const linkRefs = useRef<{ [key: string]: HTMLAnchorElement | null }>({}); - + const handleAccordionChange = (value: string | undefined) => { setExpandedItem(value); }; const handleSelected = useCallback( - (title: string) => { - setSelectedScript(title); + (slug: string) => { + setSelectedScript(slug); }, [setSelectedScript], ); @@ -41,7 +41,7 @@ export default function ScriptAccordion({ useEffect(() => { if (selectedScript) { const category = items.find((category) => - category.scripts.some((script) => script.name === selectedScript), + category.scripts.some((script) => script.slug === selectedScript), ); if (category) { setExpandedItem(category.name); @@ -89,17 +89,17 @@ export default function ScriptAccordion({ handleSelected(script.name)} + onClick={() => handleSelected(script.slug)} ref={(el) => { - linkRefs.current[script.name] = el; + linkRefs.current[script.slug] = el; }} >
diff --git a/frontend/src/app/scripts/_components/ScriptInfoBlocks.tsx b/frontend/src/app/scripts/_components/ScriptInfoBlocks.tsx index 34bf4427d..962e516f8 100644 --- a/frontend/src/app/scripts/_components/ScriptInfoBlocks.tsx +++ b/frontend/src/app/scripts/_components/ScriptInfoBlocks.tsx @@ -85,7 +85,7 @@ export function LatestScripts({ items }: { items: Category[] }) {
{latestScripts.slice(startIndex, endIndex).map((script) => ( @@ -121,7 +121,7 @@ export function LatestScripts({ items }: { items: Category[] }) { View Script @@ -153,7 +153,7 @@ export function MostViewedScripts({ items }: { items: Category[] }) {
{mostViewedScripts.map((script) => ( @@ -189,7 +189,7 @@ export function MostViewedScripts({ items }: { items: Category[] }) { diff --git a/frontend/src/app/scripts/page.tsx b/frontend/src/app/scripts/page.tsx index 2e82a3147..a02f80b83 100644 --- a/frontend/src/app/scripts/page.tsx +++ b/frontend/src/app/scripts/page.tsx @@ -3,16 +3,16 @@ export const dynamic = "force-static"; import ScriptItem from "@/app/scripts/_components/ScriptItem"; +import { fetchCategories } from "@/lib/data"; import { Category, Script } from "@/lib/types"; import { Loader2 } from "lucide-react"; -import { Suspense, useEffect, useState } from "react"; -import Sidebar from "./_components/Sidebar"; import { useQueryState } from "nuqs"; +import { Suspense, useEffect, useState } from "react"; import { LatestScripts, MostViewedScripts, } from "./_components/ScriptInfoBlocks"; -import { fetchCategories } from "@/lib/data"; +import Sidebar from "./_components/Sidebar"; function ScriptContent() { const [selectedScript, setSelectedScript] = useQueryState("id"); @@ -24,7 +24,7 @@ function ScriptContent() { const script = links .map((category) => category.scripts) .flat() - .find((script) => script.name === selectedScript); + .find((script) => script.slug === selectedScript); setItem(script); } }, [selectedScript, links]); @@ -76,4 +76,4 @@ export default function Page() { ); -} \ No newline at end of file +} diff --git a/frontend/src/components/CommandMenu.tsx b/frontend/src/components/CommandMenu.tsx index cc6d690f2..8aba6a668 100644 --- a/frontend/src/components/CommandMenu.tsx +++ b/frontend/src/components/CommandMenu.tsx @@ -92,11 +92,11 @@ export default function CommandMenu() { > {category.scripts.map((script) => ( { setOpen(false); - router.push(`/scripts?id=${script.name}`); + router.push(`/scripts?id=${script.slug}`); }} >
setOpen(false)}> diff --git a/json/jellyfin.json b/json/jellyfin.json index 59d8eb98a..429402f2f 100644 --- a/json/jellyfin.json +++ b/json/jellyfin.json @@ -12,7 +12,7 @@ "documentation": null, "website": null, "logo": "https://github.com/home-assistant/brands/blob/master/core_integrations/jellyfin/icon.png?raw=true", - "description": null, + "description": "Jellyfin is a free and open-source media server and suite of multimedia applications designed to organize, manage, and share digital media files to networked devices.", "install_methods": [ { "type": "default", diff --git a/json/nextcloud-vm.json b/json/nextcloud-vm.json new file mode 100644 index 000000000..33c7d8779 --- /dev/null +++ b/json/nextcloud-vm.json @@ -0,0 +1,34 @@ +{ + "name": "Nextcloud", + "slug": "nextcloud-vm", + "categories": [ + 12 + ], + "date_created": "2023-11-14", + "type": "vm", + "updateable": false, + "privileged": false, + "interface_port": "80", + "documentation": null, + "website": "https://www.turnkeylinux.org/nextcloud", + "logo": "https://raw.githubusercontent.com/loganmarchione/homelab-svg-assets/main/assets/nextcloud.svg", + "description": "TurnKey Nextcloud is an open-source file sharing server and collaboration platform that can store your personal content, like documents and pictures, in a centralized location.", + "install_methods": [ + { + "type": "default", + "script": "vm/nextcloud-vm.sh", + "resources": { + "cpu": "2", + "ram": "2048", + "hdd": "12G", + "os": "debian", + "version": 12 + } + } + ], + "default_credentials": { + "username": "admin", + "password": null + }, + "notes": [] +} \ No newline at end of file diff --git a/json/owncloud-vm.json b/json/owncloud-vm.json index 08f64faae..cac02cba2 100644 --- a/json/owncloud-vm.json +++ b/json/owncloud-vm.json @@ -21,13 +21,13 @@ "cpu": "2", "ram": "2048", "hdd": "12G", - "os": null, - "version": null + "os": "debian", + "version": 12 } } ], "default_credentials": { - "username": null, + "username": "admin", "password": null }, "notes": [] diff --git a/vm/nextcloud-vm.sh b/vm/nextcloud-vm.sh index 8ffc81300..b956cd537 100644 --- a/vm/nextcloud-vm.sh +++ b/vm/nextcloud-vm.sh @@ -32,7 +32,7 @@ BFR="\\r\\033[K" HOLD="-" CM="${GN}✓${CL}" CROSS="${RD}✗${CL}" -THIN="discard=on,ssd=1," +THIN="discard=on,ssd=1" set -e trap 'error_handler $LINENO "$BASH_COMMAND"' ERR trap cleanup EXIT @@ -207,7 +207,7 @@ function advanced_settings() { exit-script fi - if VM_NAME=$(whiptail --backtitle "Proxmox VE Helper Scripts" --inputbox "Set Hostname" 8 58 $HN --title "HOSTNAME" --cancel-button Exit-Script 3>&1 1>&2 2>&3); then + if VM_NAME=$(whiptail --backtitle "Proxmox VE Helper Scripts" --inputbox "Set Hostname" 8 58 turnkey-nextcloud-vm --title "HOSTNAME" --cancel-button Exit-Script 3>&1 1>&2 2>&3); then if [ -z $VM_NAME ]; then HN="$HN" echo -e "${DGN}Using Hostname: ${BGN}$HN${CL}" @@ -393,7 +393,7 @@ btrfs) THIN="" ;; esac -for i in {0,1}; do +for i in {0,1,2}; do disk="DISK$i" eval DISK${i}=vm-${VMID}-disk-${i}${DISK_EXT:-} eval DISK${i}_REF=${STORAGE}:${DISK_REF:-}${!disk} @@ -403,11 +403,13 @@ msg_info "Creating a $NAME" qm create $VMID -agent 1${MACHINE} -tablet 0 -localtime 1 -bios seabios${CPU_TYPE} -cores $CORE_COUNT -memory $RAM_SIZE \ -name $HN -tags proxmox-helper-scripts -net0 virtio,bridge=$BRG,macaddr=$MAC$VLAN$MTU -onboot 1 -ostype l26 -scsihw virtio-scsi-pci pvesm alloc $STORAGE $VMID $DISK0 4M 1>&/dev/null +pvesm alloc $STORAGE $VMID $DISK1 12G 1>&/dev/null qm importdisk $VMID ${FILE} $STORAGE ${DISK_IMPORT:-} 1>&/dev/null qm set $VMID \ -efidisk0 ${DISK0_REF}${FORMAT} \ - -scsi0 ${DISK1_REF},${DISK_CACHE}${THIN}size=12G \ - -boot order=scsi0 \ + -scsi0 ${DISK1_REF},${DISK_CACHE}${THIN} \ + -scsi1 ${DISK2_REF},${DISK_CACHE}${THIN} \ + -boot order='scsi1;scsi0' \ -description "
# $NAME diff --git a/vm/owncloud-vm.sh b/vm/owncloud-vm.sh index 61d0f753d..3e68f8239 100644 --- a/vm/owncloud-vm.sh +++ b/vm/owncloud-vm.sh @@ -19,7 +19,7 @@ header_info echo -e "\n Loading..." GEN_MAC=02:$(openssl rand -hex 5 | awk '{print toupper($0)}' | sed 's/\(..\)/\1:/g; s/.$//') NEXTID=$(pvesh get /cluster/nextid) - +NAME="TurnKey ownCloud VM" YW=$(echo "\033[33m") BL=$(echo "\033[36m") HA=$(echo "\033[1;34m") @@ -32,7 +32,7 @@ BFR="\\r\\033[K" HOLD="-" CM="${GN}✓${CL}" CROSS="${RD}✗${CL}" -THIN="discard=on,ssd=1," +THIN="discard=on,ssd=1" set -e trap 'error_handler $LINENO "$BASH_COMMAND"' ERR trap cleanup EXIT @@ -59,7 +59,7 @@ function cleanup() { TEMP_DIR=$(mktemp -d) pushd $TEMP_DIR >/dev/null -if whiptail --backtitle "Proxmox VE Helper Scripts" --title "TurnKey-ownCloud VM" --yesno "This will create a New TurnKey-ownCloud VM. Proceed?" 10 58; then +if whiptail --backtitle "Proxmox VE Helper Scripts" --title "$NAME" --yesno "This will create a New $NAME. Proceed?" 10 58; then : else header_info && echo -e "⚠ User exited script \n" && exit @@ -154,7 +154,7 @@ function default_settings() { echo -e "${DGN}Using VLAN: ${BGN}Default${CL}" echo -e "${DGN}Using Interface MTU Size: ${BGN}Default${CL}" echo -e "${DGN}Start VM when completed: ${BGN}no${CL}" - echo -e "${BL}Creating a TurnKey ownCloud VM using the above default settings${CL}" + echo -e "${BL}Creating a $NAME using the above default settings${CL}" } function advanced_settings() { @@ -313,8 +313,8 @@ function advanced_settings() { START_VM="no" fi - if (whiptail --backtitle "Proxmox VE Helper Scripts" --title "ADVANCED SETTINGS COMPLETE" --yesno "Ready to create a TurnKey ownCloud VM?" --no-button Do-Over 10 58); then - echo -e "${RD}Creating a TurnKey ownCloud VM using the above advanced settings${CL}" + if (whiptail --backtitle "Proxmox VE Helper Scripts" --title "ADVANCED SETTINGS COMPLETE" --yesno "Ready to create a $NAME?" --no-button Do-Over 10 58); then + echo -e "${RD}Creating a $NAME using the above advanced settings${CL}" else header_info echo -e "${RD}Using Advanced Settings${CL}" @@ -368,7 +368,7 @@ else fi msg_ok "Using ${CL}${BL}$STORAGE${CL} ${GN}for Storage Location." msg_ok "Virtual Machine ID is ${CL}${BL}$VMID${CL}." -msg_info "Retrieving the URL for the TurnKey ownCloud ISO Disk Image" +msg_info "Retrieving the URL for the $NAME Disk Image" URL=http://mirror.turnkeylinux.org/turnkeylinux/images/iso/turnkey-owncloud-18.0-bookworm-amd64.iso sleep 2 msg_ok "${CL}${BL}${URL}${CL}" @@ -393,31 +393,33 @@ btrfs) THIN="" ;; esac -for i in {0,1}; do +for i in {0,1,2}; do disk="DISK$i" eval DISK${i}=vm-${VMID}-disk-${i}${DISK_EXT:-} eval DISK${i}_REF=${STORAGE}:${DISK_REF:-}${!disk} done -msg_info "Creating a TurnKey ownCloud VM" +msg_info "Creating a $NAME" qm create $VMID -agent 1${MACHINE} -tablet 0 -localtime 1 -bios seabios${CPU_TYPE} -cores $CORE_COUNT -memory $RAM_SIZE \ -name $HN -tags proxmox-helper-scripts -net0 virtio,bridge=$BRG,macaddr=$MAC$VLAN$MTU -onboot 1 -ostype l26 -scsihw virtio-scsi-pci pvesm alloc $STORAGE $VMID $DISK0 4M 1>&/dev/null +pvesm alloc $STORAGE $VMID $DISK1 12G 1>&/dev/null qm importdisk $VMID ${FILE} $STORAGE ${DISK_IMPORT:-} 1>&/dev/null qm set $VMID \ -efidisk0 ${DISK0_REF}${FORMAT} \ - -scsi0 ${DISK1_REF},${DISK_CACHE}${THIN}size=12G \ - -boot order=scsi0 \ + -scsi0 ${DISK1_REF},${DISK_CACHE}${THIN} \ + -scsi1 ${DISK2_REF},${DISK_CACHE}${THIN} \ + -boot order='scsi1;scsi0' \ -description "
- # TurnKey ownCloud VM + # $NAME
" >/dev/null -msg_ok "Created a TurnKey ownCloud VM ${CL}${BL}(${HN})" +msg_ok "Created a $NAME ${CL}${BL}(${HN})" if [ "$START_VM" == "yes" ]; then - msg_info "Starting TurnKey ownCloud VM" + msg_info "Starting $NAME" qm start $VMID - msg_ok "Started TurnKey ownCloud VM" + msg_ok "Started $NAME" fi msg_ok "Completed Successfully!\n" From 970571a141b60c4404512a25f9a98c5c8f3672ae Mon Sep 17 00:00:00 2001 From: Mellowlynx <2348339+Mellowlynx@users.noreply.github.com> Date: Sat, 9 Nov 2024 02:15:50 +0100 Subject: [PATCH 067/631] Fixed password (#146) --- json/filebrowser.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/json/filebrowser.json b/json/filebrowser.json index aa6092388..7705d2b3d 100644 --- a/json/filebrowser.json +++ b/json/filebrowser.json @@ -28,7 +28,7 @@ ], "default_credentials": { "username": "admin", - "password": "changeme" + "password": "helper-scripts.com" }, "notes": [ { @@ -36,4 +36,4 @@ "type": "warning" } ] -} \ No newline at end of file +} From 6afb28f887b6e25e21fb82bba421c7116fad2e86 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9mi=20B=C3=A9dard-Couture?= Date: Fri, 8 Nov 2024 20:16:24 -0500 Subject: [PATCH 068/631] Remove need for custom DNS (#143) --- install/nextcloudpi-install.sh | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/install/nextcloudpi-install.sh b/install/nextcloudpi-install.sh index 55f493870..1cf277eaa 100644 --- a/install/nextcloudpi-install.sh +++ b/install/nextcloudpi-install.sh @@ -20,17 +20,7 @@ $STD apt-get install -y mc msg_ok "Installed Dependencies" msg_info "Installing NextCloudPi (Patience)" -$STD apt-get install -y systemd-resolved -systemctl enable -q --now systemd-resolved -cat <<'EOF' >/etc/systemd/resolved.conf -[Resolve] -DNS=8.8.8.8 -FallbackDNS=8.8.4.4 -EOF -systemctl restart systemd-resolved $STD bash <(curl -fsSL https://raw.githubusercontent.com/nextcloud/nextcloudpi/master/install.sh) -systemctl disable -q --now systemd-resolved -$STD apt-get remove -y systemd-resolved msg_ok "Installed NextCloudPi" motd_ssh From c175bff838df6008a262bdc172dd8767c8425c76 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?H=C3=A5vard=20Gj=C3=B8by=20Thom?= <34199185+havardthom@users.noreply.github.com> Date: Sat, 9 Nov 2024 10:32:04 +0100 Subject: [PATCH 069/631] Fix overflow bug in Accordion (#151) --- frontend/src/app/scripts/_components/ScriptAccordion.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frontend/src/app/scripts/_components/ScriptAccordion.tsx b/frontend/src/app/scripts/_components/ScriptAccordion.tsx index 9aad70d33..4a39c40e9 100644 --- a/frontend/src/app/scripts/_components/ScriptAccordion.tsx +++ b/frontend/src/app/scripts/_components/ScriptAccordion.tsx @@ -55,7 +55,7 @@ export default function ScriptAccordion({ value={expandedItem} onValueChange={handleAccordionChange} collapsible - className="overflow-y-scroll max-h-[calc(100vh-210px)] overflow-x-hidden pb-4" + className="overflow-y-scroll max-h-[calc(100vh-210px)] overflow-x-hidden mt-3 p-2" > {items.map((category) => ( Date: Sat, 9 Nov 2024 14:55:20 +0100 Subject: [PATCH 070/631] Add install guide note on Turnkey VM docs (#145) --- json/nextcloud-vm.json | 7 ++++++- json/owncloud-vm.json | 7 ++++++- 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/json/nextcloud-vm.json b/json/nextcloud-vm.json index 33c7d8779..bb7a1ae19 100644 --- a/json/nextcloud-vm.json +++ b/json/nextcloud-vm.json @@ -30,5 +30,10 @@ "username": "admin", "password": null }, - "notes": [] + "notes": [ + { + "text": "This VM requires extra installation steps, see install guide at `https://github.com/community-scripts/ProxmoxVE/discussions/144`", + "type": "warning" + } + ] } \ No newline at end of file diff --git a/json/owncloud-vm.json b/json/owncloud-vm.json index cac02cba2..3807e6919 100644 --- a/json/owncloud-vm.json +++ b/json/owncloud-vm.json @@ -30,5 +30,10 @@ "username": "admin", "password": null }, - "notes": [] + "notes": [ + { + "text": "This VM requires extra installation steps, see install guide at `https://github.com/community-scripts/ProxmoxVE/discussions/144`", + "type": "warning" + } + ] } \ No newline at end of file From 2af11d145ffbd05e6408dc543bb42b9158ea256f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?H=C3=A5vard=20Gj=C3=B8by=20Thom?= <34199185+havardthom@users.noreply.github.com> Date: Sat, 9 Nov 2024 14:55:38 +0100 Subject: [PATCH 071/631] Change documentation option in PR template (#150) --- .github/pull_request_template.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md index 799059805..f188df3a9 100644 --- a/.github/pull_request_template.md +++ b/.github/pull_request_template.md @@ -14,12 +14,12 @@ Please check the relevant option(s): - [ ] New feature (non-breaking change that adds functionality) - [ ] Breaking change (a fix or feature that would cause existing functionality to change unexpectedly) - [ ] New script (a fully functional and thoroughly tested script or set of scripts.) -- [ ] Documentation update required (this change requires an update to the documentation) ## Prerequisites The following efforts must be made for the PR to be considered. Please check when completed: - [ ] Self-review performed (I have reviewed my code, ensuring it follows established patterns and conventions) - [ ] Testing performed (I have tested my changes, ensuring everything works as expected) +- [ ] Documentation updated (I have updated any relevant documentation) ## Additional Information (optional) Provide any additional context or screenshots about the feature or fix here. From d19976242734866df26101ffce23ffafe9805993 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?H=C3=A5vard=20Gj=C3=B8by=20Thom?= <34199185+havardthom@users.noreply.github.com> Date: Sat, 9 Nov 2024 20:06:54 +0100 Subject: [PATCH 072/631] Use static assets instead of fetching from github (#156) --- frontend/public/json | 1 + frontend/src/app/api/categories/route.ts | 53 +++++++++++-------- frontend/src/app/layout.tsx | 5 +- frontend/src/app/page.tsx | 15 ++++-- .../app/scripts/_components/ScriptItem.tsx | 4 +- .../ScriptItems/DefaultPassword.tsx | 15 ++++-- .../ScriptItems/DefaultSettings.tsx | 3 +- .../ScriptItems/InstallCommand.tsx | 8 +-- .../_components/ScriptItems/InterFaces.tsx | 19 +++---- .../src/app/scripts/_components/Sidebar.tsx | 11 ++-- frontend/src/components/ui/codeblock.tsx | 4 +- .../src/components/ui/navigation-menu.tsx | 2 +- .../components/ui/star-on-github-button.tsx | 13 +++-- frontend/src/components/ui/theme-toggle.tsx | 11 ++-- frontend/src/config/siteConfig.tsx | 4 +- frontend/src/lib/data.ts | 25 +++------ frontend/src/lib/types.ts | 18 ++++--- json/metadata.json | 32 +++++------ 18 files changed, 136 insertions(+), 107 deletions(-) create mode 120000 frontend/public/json diff --git a/frontend/public/json b/frontend/public/json new file mode 120000 index 000000000..cd8045684 --- /dev/null +++ b/frontend/public/json @@ -0,0 +1 @@ +../../json \ No newline at end of file diff --git a/frontend/src/app/api/categories/route.ts b/frontend/src/app/api/categories/route.ts index 52470a129..2d33a3ab0 100644 --- a/frontend/src/app/api/categories/route.ts +++ b/frontend/src/app/api/categories/route.ts @@ -1,26 +1,30 @@ -import { basePath } from "@/config/siteConfig"; -import { Category, Script } from "@/lib/types"; +import { Metadata, Script } from "@/lib/types"; +import { promises as fs } from "fs"; import { NextResponse } from "next/server"; +import path from "path"; export const dynamic = "force-static"; -const fetchCategories = async (): Promise => { - const response = await fetch( - `https://raw.githubusercontent.com/community-scripts/${basePath}/refs/heads/main/json/metadata.json`, - ); - const data = await response.json(); - return data.categories; +const jsonDir = "public/json"; +const metadataFileName = "metadata.json"; +const encoding = "utf-8"; + +const getMetadata = async () => { + const filePath = path.resolve(jsonDir, metadataFileName); + const fileContent = await fs.readFile(filePath, encoding); + const metadata: Metadata = JSON.parse(fileContent); + return metadata; }; -const fetchScripts = async (): Promise => { - const response = await fetch( - `https://api.github.com/repos/community-scripts/${basePath}/contents/json`, - ); - const files: { download_url: string }[] = await response.json(); +const getScripts = async () => { + const filePaths = (await fs.readdir(jsonDir)) + .filter((fileName) => fileName !== metadataFileName) + .map((fileName) => path.resolve(jsonDir, fileName)); + const scripts = await Promise.all( - files.map(async (file) : Promise - diff --git a/frontend/src/app/page.tsx b/frontend/src/app/page.tsx index 67577c6c7..e692d2e18 100644 --- a/frontend/src/app/page.tsx +++ b/frontend/src/app/page.tsx @@ -1,17 +1,24 @@ "use client"; import AnimatedGradientText from "@/components/ui/animated-gradient-text"; -import Particles from "@/components/ui/particles"; import { Button } from "@/components/ui/button"; +import { CardFooter } from "@/components/ui/card"; +import { + Dialog, + DialogContent, + DialogDescription, + DialogHeader, + DialogTitle, + DialogTrigger, +} from "@/components/ui/dialog"; +import Particles from "@/components/ui/particles"; import { Separator } from "@/components/ui/separator"; +import { basePath } from "@/config/siteConfig"; import { cn } from "@/lib/utils"; import { ArrowRightIcon, ExternalLink } from "lucide-react"; import { useTheme } from "next-themes"; import Link from "next/link"; import { useEffect, useState } from "react"; -import { Dialog, DialogContent, DialogDescription, DialogHeader, DialogTitle, DialogTrigger } from "@/components/ui/dialog"; -import { CardFooter } from "@/components/ui/card"; import { FaGithub } from "react-icons/fa"; -import { basePath } from "@/config/siteConfig"; function CustomArrowRightIcon() { return ; diff --git a/frontend/src/app/scripts/_components/ScriptItem.tsx b/frontend/src/app/scripts/_components/ScriptItem.tsx index 840246d9c..2d9848dbd 100644 --- a/frontend/src/app/scripts/_components/ScriptItem.tsx +++ b/frontend/src/app/scripts/_components/ScriptItem.tsx @@ -52,7 +52,9 @@ function ScriptItem({
-

{item.name} {getDisplayValueFromType(item.type)}

+

+ {item.name} {getDisplayValueFromType(item.type)} +

Date added: {extractDate(item.date_created)}

diff --git a/frontend/src/app/scripts/_components/ScriptItems/DefaultPassword.tsx b/frontend/src/app/scripts/_components/ScriptItems/DefaultPassword.tsx index 55193d8f9..4bd555a10 100644 --- a/frontend/src/app/scripts/_components/ScriptItems/DefaultPassword.tsx +++ b/frontend/src/app/scripts/_components/ScriptItems/DefaultPassword.tsx @@ -1,10 +1,11 @@ +import handleCopy from "@/components/handleCopy"; import { Button } from "@/components/ui/button"; import { Separator } from "@/components/ui/separator"; -import handleCopy from "@/components/handleCopy"; import { Script } from "@/lib/types"; export default function DefaultPassword({ item }: { item: Script }) { - const hasDefaultLogin = item.default_credentials.username && item.default_credentials.password; + const hasDefaultLogin = + item.default_credentials.username && item.default_credentials.password; return (
@@ -25,7 +26,10 @@ export default function DefaultPassword({ item }: { item: Script }) { variant={"secondary"} size={"null"} onClick={() => - handleCopy("username", item.default_credentials.username ?? "") + handleCopy( + "username", + item.default_credentials.username ?? "", + ) } > {item.default_credentials.username} @@ -37,7 +41,10 @@ export default function DefaultPassword({ item }: { item: Script }) { variant={"secondary"} size={"null"} onClick={() => - handleCopy("password", item.default_credentials.password ?? "") + handleCopy( + "password", + item.default_credentials.password ?? "", + ) } > {item.default_credentials.password} diff --git a/frontend/src/app/scripts/_components/ScriptItems/DefaultSettings.tsx b/frontend/src/app/scripts/_components/ScriptItems/DefaultSettings.tsx index f1b2d8bbd..1c7d89c78 100644 --- a/frontend/src/app/scripts/_components/ScriptItems/DefaultSettings.tsx +++ b/frontend/src/app/scripts/_components/ScriptItems/DefaultSettings.tsx @@ -44,7 +44,8 @@ export default function DefaultSettings({ item }: { item: Script }) { CPU: {defaultAlpineSettings?.resources.cpu}vCPU

- RAM: {getDisplayValueFromRAM(defaultAlpineSettings?.resources.ram ?? 0)} + RAM:{" "} + {getDisplayValueFromRAM(defaultAlpineSettings?.resources.ram ?? 0)}

HDD: {defaultAlpineSettings?.resources.hdd}GB diff --git a/frontend/src/app/scripts/_components/ScriptItems/InstallCommand.tsx b/frontend/src/app/scripts/_components/ScriptItems/InstallCommand.tsx index 90eeaff86..b5cba9e52 100644 --- a/frontend/src/app/scripts/_components/ScriptItems/InstallCommand.tsx +++ b/frontend/src/app/scripts/_components/ScriptItems/InstallCommand.tsx @@ -6,7 +6,7 @@ import { getDisplayValueFromType } from "../ScriptInfoBlocks"; const getInstallCommand = (scriptPath?: string) => { return `bash -c "$(wget -qLO - https://github.com/community-scripts/${basePath}/raw/main/${scriptPath})"`; -} +}; export default function InstallCommand({ item }: { item: Script }) { const alpineScript = item.install_methods.find( @@ -14,7 +14,7 @@ export default function InstallCommand({ item }: { item: Script }) { ); const defaultScript = item.install_methods.find( - (method) => method.type === "default" + (method) => method.type === "default", ); const renderInstructions = (isAlpine = false) => ( @@ -60,7 +60,9 @@ export default function InstallCommand({ item }: { item: Script }) { {renderInstructions()} - {getInstallCommand(defaultScript?.script)} + + {getInstallCommand(defaultScript?.script)} + {renderInstructions(true)} diff --git a/frontend/src/app/scripts/_components/ScriptItems/InterFaces.tsx b/frontend/src/app/scripts/_components/ScriptItems/InterFaces.tsx index 2d2ae1f11..99f855fad 100644 --- a/frontend/src/app/scripts/_components/ScriptItems/InterFaces.tsx +++ b/frontend/src/app/scripts/_components/ScriptItems/InterFaces.tsx @@ -1,8 +1,8 @@ -import { Button, buttonVariants } from "@/components/ui/button"; import handleCopy from "@/components/handleCopy"; +import { buttonVariants } from "@/components/ui/button"; +import { Script } from "@/lib/types"; import { cn } from "@/lib/utils"; import { ClipboardIcon } from "lucide-react"; -import { Script } from "@/lib/types"; const CopyButton = ({ label, @@ -11,7 +11,12 @@ const CopyButton = ({ label: string; value: string | number; }) => ( - + {value} handleCopy(label, String(value))} @@ -20,8 +25,7 @@ const CopyButton = ({ ); -export default function InterFaces({item} : {item : Script}) { - +export default function InterFaces({ item }: { item: Script }) { return (

{item.interface_port !== null ? ( @@ -29,10 +33,7 @@ export default function InterFaces({item} : {item : Script}) {

{"Default Interface:"}

{" "} - +
) : null}
diff --git a/frontend/src/app/scripts/_components/Sidebar.tsx b/frontend/src/app/scripts/_components/Sidebar.tsx index f1618e170..24f9dce20 100644 --- a/frontend/src/app/scripts/_components/Sidebar.tsx +++ b/frontend/src/app/scripts/_components/Sidebar.tsx @@ -17,15 +17,16 @@ const Sidebar = ({

Categories

- {items.reduce( - (acc, category) => acc + category.scripts.length, - 0, - )}{" "} + {items.reduce((acc, category) => acc + category.scripts.length, 0)}{" "} Total scripts

- +
); diff --git a/frontend/src/components/ui/codeblock.tsx b/frontend/src/components/ui/codeblock.tsx index 16cc1bcc2..cb8517c6c 100644 --- a/frontend/src/components/ui/codeblock.tsx +++ b/frontend/src/components/ui/codeblock.tsx @@ -1,5 +1,6 @@ "use client"; +import { basePath } from "@/config/siteConfig"; import { cn } from "@/lib/utils"; import { cva, type VariantProps } from "class-variance-authority"; import { Clipboard, Copy } from "lucide-react"; @@ -8,7 +9,6 @@ import * as React from "react"; import { toast } from "sonner"; import { Button } from "./button"; import { Separator } from "./separator"; -import { basePath } from "@/config/siteConfig"; const buttonVariants = cva( "inline-flex items-center justify-center whitespace-nowrap rounded-md text-sm font-medium ring-offset-background transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50", @@ -135,4 +135,4 @@ const CodeBlock = React.forwardRef( ); CodeBlock.displayName = "CodeBlock"; -export { CodeBlock, buttonVariants }; +export { buttonVariants, CodeBlock }; diff --git a/frontend/src/components/ui/navigation-menu.tsx b/frontend/src/components/ui/navigation-menu.tsx index e823ebcfb..203466d69 100644 --- a/frontend/src/components/ui/navigation-menu.tsx +++ b/frontend/src/components/ui/navigation-menu.tsx @@ -123,6 +123,6 @@ export { NavigationMenuLink, NavigationMenuList, NavigationMenuTrigger, - NavigationMenuViewport, navigationMenuTriggerStyle, + NavigationMenuViewport, }; diff --git a/frontend/src/components/ui/star-on-github-button.tsx b/frontend/src/components/ui/star-on-github-button.tsx index f7e59b98f..fd8b4edcc 100644 --- a/frontend/src/components/ui/star-on-github-button.tsx +++ b/frontend/src/components/ui/star-on-github-button.tsx @@ -1,10 +1,10 @@ +import { basePath } from "@/config/siteConfig"; import { cn } from "@/lib/utils"; import Link from "next/link"; import { useEffect, useState } from "react"; import { FaGithub, FaStar } from "react-icons/fa"; -import NumberTicker from "./number-ticker"; import { buttonVariants } from "./button"; -import { basePath } from "@/config/siteConfig"; +import NumberTicker from "./number-ticker"; export default function StarOnGithubButton() { const [stars, setStars] = useState(0); @@ -12,9 +12,12 @@ export default function StarOnGithubButton() { useEffect(() => { const fetchStars = async () => { try { - const res = await fetch(`https://api.github.com/repos/community-scripts/${basePath}`, { - next: { revalidate: 60 * 60 * 24 }, - }); + const res = await fetch( + `https://api.github.com/repos/community-scripts/${basePath}`, + { + next: { revalidate: 60 * 60 * 24 }, + }, + ); if (res.ok) { const data = await res.json(); diff --git a/frontend/src/components/ui/theme-toggle.tsx b/frontend/src/components/ui/theme-toggle.tsx index e2ca4d277..6240554de 100644 --- a/frontend/src/components/ui/theme-toggle.tsx +++ b/frontend/src/components/ui/theme-toggle.tsx @@ -1,9 +1,14 @@ "use client"; -import { useTheme } from "next-themes"; -import { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from "./tooltip"; -import { Button } from "./button"; import { MoonIcon, SunIcon } from "@radix-ui/react-icons"; +import { useTheme } from "next-themes"; +import { Button } from "./button"; +import { + Tooltip, + TooltipContent, + TooltipProvider, + TooltipTrigger, +} from "./tooltip"; export function ThemeToggle() { const { setTheme, theme: currentTheme } = useTheme(); diff --git a/frontend/src/config/siteConfig.tsx b/frontend/src/config/siteConfig.tsx index d32952c9a..301a08c6d 100644 --- a/frontend/src/config/siteConfig.tsx +++ b/frontend/src/config/siteConfig.tsx @@ -1,7 +1,7 @@ import { MessagesSquare, Scroll } from "lucide-react"; import { FaGithub } from "react-icons/fa"; -export const basePath = process.env.BASE_PATH; +export const basePath = process.env.BASE_PATH; export const navbarLinks = [ { @@ -17,7 +17,7 @@ export const navbarLinks = [ text: "Change Log", }, { - href: `https://github.com/community-scripts/${basePath}/discussions`, + href: `https://github.com/community-scripts/${basePath}/discussions`, event: "Discussions", icon: , text: "Discussions", diff --git a/frontend/src/lib/data.ts b/frontend/src/lib/data.ts index 8c665e1ab..99678031a 100644 --- a/frontend/src/lib/data.ts +++ b/frontend/src/lib/data.ts @@ -1,23 +1,10 @@ import { Category } from "./types"; -const sortCategories = (categories: Category[]) => { - return categories.sort((a, b) => { - if (a.name === "Proxmox VE Tools") { - return -1; - } else if (b.name === "Proxmox VE Tools") { - return 1; - } else if (a.name === "Miscellaneous") { - return 1; - } else if (b.name === "Miscellaneous") { - return -1; - } else { - return a.name.localeCompare(b.name); - } - }); -}; - -export const fetchCategories = async (): Promise => { +export const fetchCategories = async () => { const response = await fetch("api/categories"); - const categories = await response.json(); - return sortCategories(categories); + if (!response.ok) { + throw new Error(`Failed to fetch categories: ${response.statusText}`); + } + const categories: Category[] = await response.json(); + return categories; }; diff --git a/frontend/src/lib/types.ts b/frontend/src/lib/types.ts index 3ce26cd11..4f8d2ef23 100644 --- a/frontend/src/lib/types.ts +++ b/frontend/src/lib/types.ts @@ -26,19 +26,21 @@ export type Script = { username: string | null; password: string | null; }; - notes: [{ - text: string; - type: string; - }] -} + notes: [ + { + text: string; + type: string; + }, + ]; +}; export type Category = { name: string; id: number; sort_order: number; scripts: Script[]; -} +}; -export type ScriptList = { +export type Metadata = { categories: Category[]; -} \ No newline at end of file +}; diff --git a/json/metadata.json b/json/metadata.json index 53660dd8d..cc2431b86 100644 --- a/json/metadata.json +++ b/json/metadata.json @@ -1,23 +1,23 @@ { "categories": [ - {"name": "Miscellaneous", "id": 0, "sort_order": 99.0}, {"name": "Proxmox VE Tools", "id": 1, "sort_order": 1.0}, - {"name": "Home Assistant", "id": 2, "sort_order": 2.0}, + {"name": "AdBlocker - DNS", "id": 13, "sort_order": 2.0}, {"name": "Automation", "id": 3, "sort_order": 3.0}, - {"name": "MQTT", "id": 4, "sort_order": 4.0}, + {"name": "Dashboards", "id": 15, "sort_order": 4.0}, {"name": "Database", "id": 5, "sort_order": 5.0}, - {"name": "Zigbee - Zwave", "id": 6, "sort_order": 6.0}, - {"name": "Monitoring - Analytics", "id": 7, "sort_order": 7.0}, - {"name": "Docker - Kubernetes", "id": 8, "sort_order": 8.0}, - {"name": "Operating System", "id": 9, "sort_order": 9.0}, - {"name": "TurnKey", "id": 10, "sort_order": 10.0}, - {"name": "Server - Networking", "id": 11, "sort_order": 11.0}, - {"name": "Media - Photo", "id": 12, "sort_order": 12.0}, - {"name": "AdBlocker - DNS", "id": 13, "sort_order": 13.0}, - {"name": "Document - Notes", "id": 14, "sort_order": 14.0}, - {"name": "Dashboards", "id": 15, "sort_order": 15.0}, - {"name": "File - Code", "id": 16, "sort_order": 16.0}, - {"name": "NVR - DVR", "id": 17, "sort_order": 17.0} + {"name": "Docker - Kubernetes", "id": 8, "sort_order": 6.0}, + {"name": "Document - Notes", "id": 14, "sort_order": 7.0}, + {"name": "File - Code", "id": 16, "sort_order": 8.0}, + {"name": "Home Assistant", "id": 2, "sort_order": 9.0}, + {"name": "Media - Photo", "id": 12, "sort_order": 10.0}, + {"name": "Monitoring - Analytics", "id": 7, "sort_order": 11.0}, + {"name": "MQTT", "id": 4, "sort_order": 12.0}, + {"name": "NVR - DVR", "id": 17, "sort_order": 13.0}, + {"name": "Operating System", "id": 9, "sort_order": 14.0}, + {"name": "Server - Networking", "id": 11, "sort_order": 15.0}, + {"name": "TurnKey", "id": 10, "sort_order": 16.0}, + {"name": "Zigbee - Zwave", "id": 6, "sort_order": 17.0}, + {"name": "Miscellaneous", "id": 0, "sort_order": 99.0} ] -} \ No newline at end of file +} From e0df745ea1b021412b468806f4b515fb2f7b8b6a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?H=C3=A5vard=20Gj=C3=B8by=20Thom?= <34199185+havardthom@users.noreply.github.com> Date: Sat, 9 Nov 2024 23:36:20 +0100 Subject: [PATCH 073/631] Add unoptimized prop to CommandMenu image (#158) --- frontend/src/components/CommandMenu.tsx | 1 + 1 file changed, 1 insertion(+) diff --git a/frontend/src/components/CommandMenu.tsx b/frontend/src/components/CommandMenu.tsx index 8aba6a668..7dce1fd2c 100644 --- a/frontend/src/components/CommandMenu.tsx +++ b/frontend/src/components/CommandMenu.tsx @@ -106,6 +106,7 @@ export default function CommandMenu() { ((e.currentTarget as HTMLImageElement).src = "/logo.png") } + unoptimized width={16} height={16} alt="" From c229c9cb4a4a3059e9a1343923fe1fbe7ea3b476 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?H=C3=A5vard=20Gj=C3=B8by=20Thom?= <34199185+havardthom@users.noreply.github.com> Date: Sun, 10 Nov 2024 17:20:37 +0100 Subject: [PATCH 074/631] Fix homarr update (#162) --- ct/homarr.sh | 30 +++++++++++++++++++----------- install/homarr-install.sh | 2 +- 2 files changed, 20 insertions(+), 12 deletions(-) diff --git a/ct/homarr.sh b/ct/homarr.sh index b04bf9660..fa3ca417f 100644 --- a/ct/homarr.sh +++ b/ct/homarr.sh @@ -66,29 +66,37 @@ if [[ ! -f /opt/${APP}_version.txt ]] || [[ "${RELEASE}" != "$(cat /opt/${APP}_v systemctl stop homarr msg_ok "Services Stopped" + msg_info "Backing up Data" + mkdir -p /opt/homarr-data-backup + cp /opt/homarr/.env /opt/homarr-data-backup/.env + cp /opt/homarr/database/db.sqlite /opt/homarr-data-backup/db.sqlite + cp -r /opt/homarr/data/configs /opt/homarr-data-backup/configs + msg_ok "Backed up Data" + msg_info "Updating ${APP} to ${RELEASE}" - cp /opt/homarr/.env /opt/.env - cp -a /opt/homarr/data /opt/ - rm -rf /opt/homarr wget -q "https://github.com/ajnart/homarr/archive/refs/tags/v${RELEASE}.zip" unzip -q v${RELEASE}.zip + rm -rf v${RELEASE}.zip + rm -rf /opt/homarr mv homarr-${RELEASE} /opt/homarr - mv /opt/.env /opt/homarr/.env - rm -rf /opt/homarr/data - mv /opt/data /opt/homarr/ + mv /opt/homarr-data-backup/.env /opt/homarr/.env + cd /opt/homarr yarn install &>/dev/null yarn build &>/dev/null - yarn db:migrate &>/dev/null echo "${RELEASE}" >/opt/${APP}_version.txt msg_ok "Updated ${APP}" + msg_info "Restoring Data" + rm -rf /opt/homarr/data/configs + mv /opt/homarr-data-backup/configs /opt/homarr/data/configs + mv /opt/homarr-data-backup/db.sqlite /opt/homarr/database/db.sqlite + yarn db:migrate &>/dev/null + rm -rf /opt/homarr-data-backup + msg_ok "Restored Data" + msg_info "Starting Services" systemctl start homarr msg_ok "Started Services" - - msg_info "Cleaning Up" - rm -rf v${RELEASE}.zip - msg_ok "Cleaned" msg_ok "Updated Successfully" else msg_ok "No update required. ${APP} is already at ${RELEASE}" diff --git a/install/homarr-install.sh b/install/homarr-install.sh index b0561b993..fe138d402 100644 --- a/install/homarr-install.sh +++ b/install/homarr-install.sh @@ -39,6 +39,7 @@ msg_info "Installing Homarr (Patience)" RELEASE=$(curl -s https://api.github.com/repos/ajnart/homarr/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') wget -q "https://github.com/ajnart/homarr/archive/refs/tags/v${RELEASE}.zip" unzip -q v${RELEASE}.zip +rm -rf v${RELEASE}.zip mv homarr-${RELEASE} /opt/homarr cat </opt/homarr/.env DATABASE_URL="file:./database/db.sqlite" @@ -76,7 +77,6 @@ motd_ssh customize msg_info "Cleaning up" -rm -rf v${RELEASE}.zip $STD apt-get -y autoremove $STD apt-get -y autoclean msg_ok "Cleaned" From b2e14512b97967299427e7b840537e850212ac89 Mon Sep 17 00:00:00 2001 From: Supavasinan Promdetch <95174704+Supavasinan@users.noreply.github.com> Date: Mon, 11 Nov 2024 22:38:52 +0700 Subject: [PATCH 075/631] fix keyboard shortcut (ctrl + k) with empty categories (#177) --- frontend/src/components/CommandMenu.tsx | 1 + 1 file changed, 1 insertion(+) diff --git a/frontend/src/components/CommandMenu.tsx b/frontend/src/components/CommandMenu.tsx index 7dce1fd2c..140897e5a 100644 --- a/frontend/src/components/CommandMenu.tsx +++ b/frontend/src/components/CommandMenu.tsx @@ -40,6 +40,7 @@ export default function CommandMenu() { const down = (e: KeyboardEvent) => { if (e.key === "k" && (e.metaKey || e.ctrlKey)) { e.preventDefault(); + fetchSortedCategories(); setOpen((open) => !open); } }; From 2c56b2ad494336f599f9ffe2cc6860f142ab1454 Mon Sep 17 00:00:00 2001 From: Paul Date: Tue, 12 Nov 2024 04:39:30 +1300 Subject: [PATCH 076/631] =?UTF-8?q?Added=20note=20regarding=20OVM=20as=20t?= =?UTF-8?q?his=20as=20historically=20caused=20a=20lot=20of=20supp=E2=80=A6?= =?UTF-8?q?=20(#147)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Added note regarding OVM as this as historically caused a lot of support requests * Update json/omv.json Co-authored-by: Håvard Gjøby Thom <34199185+havardthom@users.noreply.github.com> * Change Link to community-scripts\discussion Signed-off-by: CanbiZ <47820557+MickLesk@users.noreply.github.com> --------- Signed-off-by: CanbiZ <47820557+MickLesk@users.noreply.github.com> Co-authored-by: CanbiZ <47820557+MickLesk@users.noreply.github.com> Co-authored-by: Håvard Gjøby Thom <34199185+havardthom@users.noreply.github.com> --- json/omv.json | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/json/omv.json b/json/omv.json index 1512daf0d..576f8527b 100644 --- a/json/omv.json +++ b/json/omv.json @@ -30,5 +30,10 @@ "username": "admin", "password": "openmediavault" }, - "notes": [] -} \ No newline at end of file + "notes": [ + { + "text": "Running OVM in a LXC container may require a complicated disk setup, consider using a VM instead. More info: `https://github.com/community-scripts/ProxmoxVE/discussions/175`", + "type": "warning" + } + ] +} From a6158a24466210c49b5dbf07ff0da5c3e3e7a362 Mon Sep 17 00:00:00 2001 From: CanbiZ <47820557+MickLesk@users.noreply.github.com> Date: Mon, 11 Nov 2024 17:07:53 +0100 Subject: [PATCH 077/631] Create SECURITY.md (#179) * Create SECURITY.md * Update SECURITY.md --- SECURITY.md | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) create mode 100644 SECURITY.md diff --git a/SECURITY.md b/SECURITY.md new file mode 100644 index 000000000..e0af45e1c --- /dev/null +++ b/SECURITY.md @@ -0,0 +1,22 @@ +## Supported Versions +This project currently supports the following versions of Proxmox VE: + +| Version | Supported | +| ------- | ------------------ | +| 8.2.x | :white_check_mark: | +| 8.1.x | :white_check_mark: | +| 8.0.x | Limited support* ❕| +| < 8.0 | :x: | + +*Version 8.0.x has limited support. Security updates may not be provided for all issues in this version. + +## Reporting a Vulnerability + +Security vulnerabilities shouldn’t be reported publicly to prevent potential exploitation. Instead, please report any vulnerabilities privately by reaching out directly to us. You can either join our [Discord server](https://discord.gg/UHrpNWGwkH) and send a direct message to a maintainer or contact us via email at contact@community-scripts.org. Be sure to include a detailed description of the vulnerability and the steps to reproduce it. Thank you for helping us keep our project secure! + +Once a vulnerability has been reported, the project maintainers will review it and acknowledge the report within 7 business days. We will then work to address the vulnerability and provide a fix as soon as possible. Depending on the severity of the issue, a patch may be released immediately or included in the next scheduled update. + +Please note that not all reported vulnerabilities may be accepted. The project maintainers reserve the right to decline a vulnerability report if it is deemed to be a low-risk issue or if it conflicts with the project's design or architecture. In such cases, we will provide an explanation for the decision. + +If you have any questions or concerns about this security policy, please don't hesitate to contact the project maintainers. + From 53cdb515a42093314fc2a3ae3fdfdb9fa2132f27 Mon Sep 17 00:00:00 2001 From: CanbiZ <47820557+MickLesk@users.noreply.github.com> Date: Tue, 12 Nov 2024 16:54:39 +0100 Subject: [PATCH 078/631] [Core]: Change build.func to new design (#189) * Redesign LXC Description * Update build.func * Update README.md --- README.md | 124 +++++++++++++++++++++++++++++++++++++----------- misc/build.func | 37 +++++++++++++-- 2 files changed, 130 insertions(+), 31 deletions(-) diff --git a/README.md b/README.md index 6e45c85e0..c34b665d5 100644 --- a/README.md +++ b/README.md @@ -1,46 +1,116 @@
- - - +

+ + + +

Proxmox VE Helper-Scripts: A Community Legacy

Dear Community,

In agreement with tteck and Community-Scripts, this project has now transitioned into a community-driven effort. We aim to continue his work, building on the foundation he laid to support Proxmox users worldwide.

-

tteck, whose contribution has been invaluable, shared recently that he is now in hospice care. His scripts have empowered thousands, and we honor his legacy by carrying this project forward with the same passion and commitment. We’re deeply grateful for his vision, which made Proxmox accessible to so many.

-

To tteck: Your impact will be felt in this community for years to come. We thank you for everything.

-

Warm regards,
The Community

-
- ----

- Website | - Ko-Fi (for tteck🙏) | - Contribute | - Guides | - Discord | - Changelog + + Website + + + Contribute + + + Guides + + + Discord + + + Changelog +

---- - -This community-managed project continues tteck’s original vision of simplifying Proxmox VE setup. The scripts allow users to create Linux containers or virtual machines interactively, with options for both simple and advanced configurations. While the basic setup adheres to default settings, the advanced setup offers extensive customization options for specific needs. - -All configuration choices are displayed in a dialog box, where users can select their preferences. The script then validates these inputs to generate a final configuration for the container or virtual machine. -
-

-Please exercise caution and thoroughly review scripts and automation tasks from external sources. Read more -

+## 🚀  Introduction + +**Proxmox VE Helper-Scripts** is a community-driven initiative that simplifies the setup of Proxmox Virtual Environment (VE). Originally created by [tteck](https://github.com/tteck), these scripts automate and streamline the process of creating and configuring Linux containers (LXC) and virtual machines (VMs) on Proxmox VE. --- -### Note on the Transition: -This project is now maintained by the community in memory of tteck’s invaluable contribution. His dedication transformed the Proxmox experience for countless users, and we’re committed to continuing his work with the same dedication. +## 📦  Features + +- **Interactive Setup**: Select simple or advanced options for your VM or LXC container configurations. +- **Customizable Configuration**: Advanced setup allows you to fine-tune your environment. +- **Ease of Use**: Scripts automatically validate inputs to generate the final configuration. +- **Proxmox Integration**: Seamlessly integrates with Proxmox VE to provide a user-friendly experience. +- **Community-Driven**: This project is actively maintained and improved by the community. + +
+ +## 🚀  Installation + +To install the Proxmox Helper Scripts, simply follow these steps: + +1. Open the [Website](https://helper-scripts.com/) +2. Search for the desired script, e.g. **"Home Assistant OS VM"**. +3. In the **"How To Install"** section, copy the provided **Bash command**. +4. Open the Proxmox shell on your **main node**. +5. Paste the command into the console and let's start! 🚀 + +For detailed instructions, check out our [official guides](https://github.com/community-scripts/ProxmoxVE/blob/main/USER_SUBMITTED_GUIDES.md). --- -
Proxmox® is a registered trademark of Proxmox Server Solutions GmbH.
+## ❤️  Community and Contributions + +The Proxmox Helper Scripts project is community-driven, and we highly appreciate any contributions—whether it's through reporting bugs, suggesting features, improving documentation, or spreading the word. We are committed to maintaining transparency and sustainability in this open-source effort. + +### 💖  Donate to Support the Project + +We offer two donation options to help maintain and grow this project: + +- **Ko-Fi for tteck**: [Donate to tteck](https://ko-fi.com/proxmoxhelperscripts) - All donations will go directly to support tteck’s legacy and help fund ongoing maintenance of the scripts. +- **Ko-Fi for Community Edition**: [Donate to Community Edition](https://ko-fi.com/community_scripts) - This is a nonprofit organization. All funds will go towards script maintenance, infrastructure, and server costs. Any remaining funds will be donated annually to 2-4 causes (e.g., cancer research, hospice care, etc.). + +Your contributions help keep the project running and support important charitable causes. + +
+ +## 💬  Get Help + +Have a question or ran into an issue? Join the conversation and get help from fellow community members: + +- **Discord**: Join our [Proxmox Helper Scripts Discord server](https://discord.gg/UHrpNWGwkH) to chat with other users and get support. +- **GitHub Discussions**: [Ask questions or report issues](https://github.com/community-scripts/ProxmoxVE/discussions). + +
+ +## 🤝  Found a bug or missing feature? + +If you’ve encountered an issue or identified an area for improvement, please file a new issue on our [GitHub issues page](https://github.com/community-scripts/ProxmoxVE/issues). If you’ve already found a solution or improvement, feel free to submit a pull request! We’d love to review and merge your contributions. + +
+ +## ✅  Requirements + +To use the Proxmox VE Helper-Scripts, your system should meet the following requirements: + +- **Proxmox VE version**: 8.x or higher +- **Linux**: Compatible with most distributions +- **Dependencies**: Ensure that your system has bash and curl installed. + +
+ +## 📜  License + +This project is licensed under the terms of the [MIT License](LICENSE). + +--- + +## 📢  Acknowledgments + +A special thank you to [tteck](https://github.com/tteck) for his foundational work, which has allowed the Proxmox community to thrive. We’re dedicated to keeping his vision alive and expanding upon it with the continued support of this vibrant community. + +## 📢  Acknowledgments + +A special thank you to [tteck](https://github.com/tteck) for his foundational work, which has allowed the Proxmox community to thrive. We’re dedicated to keeping his vision alive and expanding upon it with the continued support of this vibrant community. diff --git a/misc/build.func b/misc/build.func index ea73f0b45..856131365 100644 --- a/misc/build.func +++ b/misc/build.func @@ -640,12 +640,41 @@ EOF' # This function sets the description of the container. description() { IP=$(pct exec "$CTID" ip a s dev eth0 | awk '/inet / {print $2}' | cut -d/ -f1) - pct set "$CTID" -description "
- # ${APP} LXC + # Generate LXC Description + DESCRIPTION=$(cat < + + Logo + + +

${APP} LXC

+ +

+ + spend Coffee + +

+ + + + GitHub + + + + Discussions + + + + Issues + +
+EOF +) + + # Set Description in LXC + pct set "$CTID" -description "$DESCRIPTION" - -
" if [[ -f /etc/systemd/system/ping-instances.service ]]; then systemctl start ping-instances.service fi From bdb9d0ce51f3b305a585aeffd773e848739146be Mon Sep 17 00:00:00 2001 From: Bram Suurd <78373894+BramSuurdje@users.noreply.github.com> Date: Tue, 12 Nov 2024 17:34:21 +0100 Subject: [PATCH 079/631] Fixing missing information on the new Homepage (#191) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Update mariadb.json * Update vaultwarden.json * Update vaultwarden.json * Update keycloak.json * Update json/keycloak.json Co-authored-by: Håvard Gjøby Thom <34199185+havardthom@users.noreply.github.com> * Update mariadb.json Co-authored-by: Håvard Gjøby Thom <34199185+havardthom@users.noreply.github.com> --------- Co-authored-by: CanbiZ <47820557+MickLesk@users.noreply.github.com> Co-authored-by: Håvard Gjøby Thom <34199185+havardthom@users.noreply.github.com> --- json/keycloak.json | 8 ++++++-- json/mariadb.json | 11 ++++++++--- json/vaultwarden.json | 6 +++++- 3 files changed, 19 insertions(+), 6 deletions(-) diff --git a/json/keycloak.json b/json/keycloak.json index b61fb7b31..e28d3d545 100644 --- a/json/keycloak.json +++ b/json/keycloak.json @@ -9,7 +9,7 @@ "updateable": false, "privileged": false, "interface_port": "8080", - "documentation": null, + "documentation": "https://github.com/community-scripts/ProxmoxVE/discussions/193", "website": "https://www.keycloak.org/", "logo": "https://www.keycloak.org/resources/images/logo.svg", "description": "Keycloak is an open-source identity and access management solution that provides centralized authentication and authorization for modern applications and services. It enables organizations to secure their applications and services with a single sign-on (SSO) solution, reducing the need for users to remember multiple login credentials. Keycloak supports various authentication protocols, including SAML, OAuth, and OpenID Connect, and integrates with a wide range of applications and services. With Keycloak, administrators can manage user identities, define security policies, and monitor access to their applications and services. The software is designed to be scalable, flexible, and easy to use, making it a valuable tool for enhancing the security and usability of modern applications and services.", @@ -34,6 +34,10 @@ { "text": "First start can take a few minutes", "type": "warning" + }, + { + "text": "This script requires some extra steps after the installation, Please checkout the 'documentation'", + "type": "info" } ] -} \ No newline at end of file +} diff --git a/json/mariadb.json b/json/mariadb.json index 1129d082a..3dfc10097 100644 --- a/json/mariadb.json +++ b/json/mariadb.json @@ -9,7 +9,7 @@ "updateable": false, "privileged": false, "interface_port": "3306", - "documentation": null, + "documentation": "https://github.com/community-scripts/ProxmoxVE/discussions/192", "website": "https://mariadb.org/", "logo": "https://raw.githubusercontent.com/loganmarchione/homelab-svg-assets/main/assets/mariadb.svg", "description": "MariaDB is a fork of the popular MySQL database management system that is developed and maintained by the open-source community. It is also commercially supported, offering enterprise-level features and support for organizations that require them. MariaDB aims to maintain high compatibility with MySQL, ensuring a drop-in replacement capability.", @@ -30,5 +30,10 @@ "username": null, "password": null }, - "notes": [] -} \ No newline at end of file + "notes": [ + { + "text": "This script requires some extra steps after the installation, Please checkout the 'documentation'", + "type": "info" + } + ] +} diff --git a/json/vaultwarden.json b/json/vaultwarden.json index a05336e9a..d5d5c66ea 100644 --- a/json/vaultwarden.json +++ b/json/vaultwarden.json @@ -45,6 +45,10 @@ { "text": "Vaultwarden needs to be behind a proxy (Nginx Proxy Manager) to obtain HTTPS and to allow clients to connect.", "type": "warning" + }, + { + "text": "Build Settings for normal LXC: 4GB RAM - 6GB Storage - 4vCPU", + "type": "info" } ] -} \ No newline at end of file +} From ab240646f50c8f17b5927a4337e4638e4b2dce2d Mon Sep 17 00:00:00 2001 From: Bram Suurd <78373894+BramSuurdje@users.noreply.github.com> Date: Tue, 12 Nov 2024 19:09:48 +0100 Subject: [PATCH 080/631] Fixing missing information on the new Homepage (#191) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Update mariadb.json * Update vaultwarden.json * Update vaultwarden.json * Update keycloak.json * Update json/keycloak.json Co-authored-by: Håvard Gjøby Thom <34199185+havardthom@users.noreply.github.com> * Update mariadb.json Co-authored-by: Håvard Gjøby Thom <34199185+havardthom@users.noreply.github.com> --------- Co-authored-by: CanbiZ <47820557+MickLesk@users.noreply.github.com> Co-authored-by: Håvard Gjøby Thom <34199185+havardthom@users.noreply.github.com> From 8f2e917b72d46d916057f576e698c607c73bf2f6 Mon Sep 17 00:00:00 2001 From: Rafael Rivera Date: Tue, 12 Nov 2024 12:48:18 -0800 Subject: [PATCH 081/631] Remove duplicate acknowledgements from README (#199) --- README.md | 4 ---- 1 file changed, 4 deletions(-) diff --git a/README.md b/README.md index c34b665d5..bc60a1811 100644 --- a/README.md +++ b/README.md @@ -110,7 +110,3 @@ This project is licensed under the terms of the [MIT License](LICENSE). ## 📢  Acknowledgments A special thank you to [tteck](https://github.com/tteck) for his foundational work, which has allowed the Proxmox community to thrive. We’re dedicated to keeping his vision alive and expanding upon it with the continued support of this vibrant community. - -## 📢  Acknowledgments - -A special thank you to [tteck](https://github.com/tteck) for his foundational work, which has allowed the Proxmox community to thrive. We’re dedicated to keeping his vision alive and expanding upon it with the continued support of this vibrant community. From 1633cddf55c0efbb60c825072cc8509afffbc065 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?H=C3=A5vard=20Gj=C3=B8by=20Thom?= <34199185+havardthom@users.noreply.github.com> Date: Wed, 13 Nov 2024 01:32:27 +0100 Subject: [PATCH 082/631] Add website issue template (#200) --- .../{bug_report.yaml => script-issue.yaml} | 2 +- .github/ISSUE_TEMPLATE/website-issue.yaml | 45 +++++++++++++++++++ 2 files changed, 46 insertions(+), 1 deletion(-) rename .github/ISSUE_TEMPLATE/{bug_report.yaml => script-issue.yaml} (98%) create mode 100644 .github/ISSUE_TEMPLATE/website-issue.yaml diff --git a/.github/ISSUE_TEMPLATE/bug_report.yaml b/.github/ISSUE_TEMPLATE/script-issue.yaml similarity index 98% rename from .github/ISSUE_TEMPLATE/bug_report.yaml rename to .github/ISSUE_TEMPLATE/script-issue.yaml index bed104331..b8e83878b 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.yaml +++ b/.github/ISSUE_TEMPLATE/script-issue.yaml @@ -1,4 +1,4 @@ -name: Problems with a script. +name: Problems with a script description: Generate a report on an issue pertaining specifically to a script. For other inquires please share them in the Discussions section. body: - type: markdown diff --git a/.github/ISSUE_TEMPLATE/website-issue.yaml b/.github/ISSUE_TEMPLATE/website-issue.yaml new file mode 100644 index 000000000..abfa19f44 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/website-issue.yaml @@ -0,0 +1,45 @@ +name: Problems with the website +description: Generate a report on an issue pertaining specifically to the website (https://community-scripts.github.io/ProxmoxVE/). For other inquires please share them in the Discussions section. +labels: ["website"] +body: + - type: markdown + attributes: + value: | + **IMPORTANT:** Failure to comply with the following guidelines may result in immediate closure. + - Prior to submitting, kindly search the closed issues to check if the problem you are reporting has already been addressed and resolved. If you come across a closed issue that pertains to your problem, please leave a comment on that issue instead of creating a new one. + - For suggestions, questions or feature/script requests, please share them in the [Discussions section.](https://github.com/community-scripts/ProxmoxVE/discussions) + - type: input + id: guidelines + attributes: + label: Please verify that you have read and understood the guidelines. + placeholder: 'yes' + validations: + required: true + - type: textarea + id: bug + attributes: + label: A clear and concise description of the issue. + validations: + required: true + - type: textarea + id: expected-behavior + attributes: + label: Please provide a description of the expected behavior. + validations: + required: true + - type: textarea + id: screenshot + attributes: + label: If relevant, including screenshots or a code block can be helpful in clarifying the issue. + placeholder: Code blocks begin and conclude by enclosing the code with three backticks (```) above and below it. + validations: + required: false + - type: textarea + id: reproduce + attributes: + label: Please provide detailed steps to reproduce the issue. + placeholder: First do this, then this ... + validations: + required: false + + From 7e948d349c328ba6d8551a0c107768e193586627 Mon Sep 17 00:00:00 2001 From: Paul Date: Wed, 13 Nov 2024 22:08:11 +1300 Subject: [PATCH 083/631] Suggested wording and improvements to README (#209) * Proposed rewording * Fixed typo in donations --- README.md | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/README.md b/README.md index bc60a1811..16100226a 100644 --- a/README.md +++ b/README.md @@ -55,7 +55,7 @@ To install the Proxmox Helper Scripts, simply follow these steps: 2. Search for the desired script, e.g. **"Home Assistant OS VM"**. 3. In the **"How To Install"** section, copy the provided **Bash command**. 4. Open the Proxmox shell on your **main node**. -5. Paste the command into the console and let's start! 🚀 +5. Paste the command into the console, hit enter, and you are away! 🚀 For detailed instructions, check out our [official guides](https://github.com/community-scripts/ProxmoxVE/blob/main/USER_SUBMITTED_GUIDES.md). @@ -63,16 +63,14 @@ For detailed instructions, check out our [official guides](https://github.com/co ## ❤️  Community and Contributions -The Proxmox Helper Scripts project is community-driven, and we highly appreciate any contributions—whether it's through reporting bugs, suggesting features, improving documentation, or spreading the word. We are committed to maintaining transparency and sustainability in this open-source effort. +The Proxmox Helper Scripts project is community-driven, and we highly appreciate any contributions — whether it's through reporting bugs, suggesting features, improving documentation, or spreading the word. We are committed to maintaining transparency and sustainability in this open-source effort. -### 💖  Donate to Support the Project +### 💖  Donate to Support the Project (DRAFT) We offer two donation options to help maintain and grow this project: -- **Ko-Fi for tteck**: [Donate to tteck](https://ko-fi.com/proxmoxhelperscripts) - All donations will go directly to support tteck’s legacy and help fund ongoing maintenance of the scripts. -- **Ko-Fi for Community Edition**: [Donate to Community Edition](https://ko-fi.com/community_scripts) - This is a nonprofit organization. All funds will go towards script maintenance, infrastructure, and server costs. Any remaining funds will be donated annually to 2-4 causes (e.g., cancer research, hospice care, etc.). - -Your contributions help keep the project running and support important charitable causes. +- **Ko-Fi for tteck**: [Donate to tteck](https://ko-fi.com/proxmoxhelperscripts) - All donations will go directly to support tteck, the founder of this project. +- **Ko-Fi for Community Edition**: [Donate to this project](https://ko-fi.com/community_scripts) - All funds will go towards script maintenance infrastructure and server costs. **Our most immediate need is funding testing infrastructure**. Your contributions help keep the project running. To honor tteck's legacy this project will also raise money for charity (cancer research, hospice care). Of the money donated to this project, 30% will be donated to charity. Income, expenditure and charitable donations will be disclosed annually in a transparent manner.
@@ -110,3 +108,5 @@ This project is licensed under the terms of the [MIT License](LICENSE). ## 📢  Acknowledgments A special thank you to [tteck](https://github.com/tteck) for his foundational work, which has allowed the Proxmox community to thrive. We’re dedicated to keeping his vision alive and expanding upon it with the continued support of this vibrant community. + +Proxmox® is a registered trademark of [Proxmox Server Solutions GmbH](https://www.proxmox.com/en/about/company). \ No newline at end of file From c162f518e5124cd6e06a422a3ec0df33c358787a Mon Sep 17 00:00:00 2001 From: CanbiZ <47820557+MickLesk@users.noreply.github.com> Date: Wed, 13 Nov 2024 15:05:21 +0100 Subject: [PATCH 084/631] Optimize Jellyfin / Jellyfin-Server update (#215) --- ct/jellyfin.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/ct/jellyfin.sh b/ct/jellyfin.sh index ae6e09f12..41c073a32 100644 --- a/ct/jellyfin.sh +++ b/ct/jellyfin.sh @@ -59,6 +59,7 @@ if [[ ! -d /usr/lib/jellyfin ]]; then msg_error "No ${APP} Installation Found!"; msg_info "Updating ${APP} LXC" apt-get update &>/dev/null apt-get -y upgrade &>/dev/null +apt-get --with-new-pkgs upgrade jellyfin jellyfin-server &>/dev/null msg_ok "Updated ${APP} LXC" exit } From dac521c6a36d7f940cb44e2434e1e6779c2ba987 Mon Sep 17 00:00:00 2001 From: Bram Suurd <78373894+BramSuurdje@users.noreply.github.com> Date: Wed, 13 Nov 2024 15:45:39 +0100 Subject: [PATCH 085/631] Fixing Front end issues related to image loading and SEO (#219) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Update mariadb.json * Update vaultwarden.json * Update vaultwarden.json * Update keycloak.json * Update json/keycloak.json Co-authored-by: Håvard Gjøby Thom <34199185+havardthom@users.noreply.github.com> * Update mariadb.json Co-authored-by: Håvard Gjøby Thom <34199185+havardthom@users.noreply.github.com> * Add canonical link to layout for improved SEO and page indexing * Fix image source fallback for script logos to use a consistent relative path * Fix image source for script logos across components to consistently use the "/ProxmoxVE/logo.png" path * Update image source for script logos to use basePath for consistent paths across all components * Fix image source for script logos to ensure leading slash is consistent for all components' paths --------- Co-authored-by: CanbiZ <47820557+MickLesk@users.noreply.github.com> Co-authored-by: Håvard Gjøby Thom <34199185+havardthom@users.noreply.github.com> --- frontend/src/app/layout.tsx | 1 + .../app/scripts/_components/ScriptAccordion.tsx | 5 +++-- .../app/scripts/_components/ScriptInfoBlocks.tsx | 14 +++++++++++--- .../src/app/scripts/_components/ScriptItem.tsx | 6 ++++-- frontend/src/components/CommandMenu.tsx | 5 +++-- 5 files changed, 22 insertions(+), 9 deletions(-) diff --git a/frontend/src/app/layout.tsx b/frontend/src/app/layout.tsx index b5422c861..423c7ad1e 100644 --- a/frontend/src/app/layout.tsx +++ b/frontend/src/app/layout.tsx @@ -64,6 +64,7 @@ export default function RootLayout({ src={`https://${analytics.url}/script.js`} data-website-id={analytics.token} > + diff --git a/frontend/src/app/scripts/_components/ScriptAccordion.tsx b/frontend/src/app/scripts/_components/ScriptAccordion.tsx index 4a39c40e9..96be28da2 100644 --- a/frontend/src/app/scripts/_components/ScriptAccordion.tsx +++ b/frontend/src/app/scripts/_components/ScriptAccordion.tsx @@ -12,6 +12,7 @@ import { cn } from "@/lib/utils"; import Image from "next/image"; import Link from "next/link"; import { useState } from "react"; +import { basePath } from "@/config/siteConfig"; export default function ScriptAccordion({ items, @@ -104,13 +105,13 @@ export default function ScriptAccordion({ >
((e.currentTarget as HTMLImageElement).src = - "/logo.png") + `/${basePath}/logo.png`) } alt={script.name} className="mr-1 w-4 h-4 rounded-full" diff --git a/frontend/src/app/scripts/_components/ScriptInfoBlocks.tsx b/frontend/src/app/scripts/_components/ScriptInfoBlocks.tsx index 962e516f8..1c418c94c 100644 --- a/frontend/src/app/scripts/_components/ScriptInfoBlocks.tsx +++ b/frontend/src/app/scripts/_components/ScriptInfoBlocks.tsx @@ -7,7 +7,7 @@ import { CardHeader, CardTitle, } from "@/components/ui/card"; -import { mostPopularScripts } from "@/config/siteConfig"; +import { basePath, mostPopularScripts } from "@/config/siteConfig"; import { extractDate } from "@/lib/time"; import { Category, Script } from "@/lib/types"; import { CalendarPlus } from "lucide-react"; @@ -92,11 +92,15 @@ export function LatestScripts({ items }: { items: Category[] }) {
+ ((e.currentTarget as HTMLImageElement).src = + `/${basePath}/logo.png`) + } className="h-11 w-11 object-contain" />
@@ -161,10 +165,14 @@ export function MostViewedScripts({ items }: { items: Category[] }) {
+ ((e.currentTarget as HTMLImageElement).src = + `/${basePath}/logo.png`) + } className="h-11 w-11 object-contain" />
diff --git a/frontend/src/app/scripts/_components/ScriptItem.tsx b/frontend/src/app/scripts/_components/ScriptItem.tsx index 2d9848dbd..835fce576 100644 --- a/frontend/src/app/scripts/_components/ScriptItem.tsx +++ b/frontend/src/app/scripts/_components/ScriptItem.tsx @@ -14,6 +14,7 @@ import Description from "./ScriptItems/Description"; import InstallCommand from "./ScriptItems/InstallCommand"; import InterFaces from "./ScriptItems/InterFaces"; import Tooltips from "./ScriptItems/Tooltips"; +import { basePath } from "@/config/siteConfig"; function ScriptItem({ item, @@ -40,10 +41,11 @@ function ScriptItem({
- ((e.currentTarget as HTMLImageElement).src = "/logo.png") + ((e.currentTarget as HTMLImageElement).src = + `/${basePath}/logo.png`) } height={400} alt={item.name} diff --git a/frontend/src/components/CommandMenu.tsx b/frontend/src/components/CommandMenu.tsx index 140897e5a..b1c8e1267 100644 --- a/frontend/src/components/CommandMenu.tsx +++ b/frontend/src/components/CommandMenu.tsx @@ -15,6 +15,7 @@ import React from "react"; import { Badge } from "./ui/badge"; import { Button } from "./ui/button"; import { DialogTitle } from "./ui/dialog"; +import { basePath } from "@/config/siteConfig"; export const formattedBadge = (type: string) => { switch (type) { @@ -102,10 +103,10 @@ export default function CommandMenu() { >
setOpen(false)}> ((e.currentTarget as HTMLImageElement).src = - "/logo.png") + `/${basePath}/logo.png`) } unoptimized width={16} From 873c78bfd84c93fc3c1c3eeed896b5dd5cf83653 Mon Sep 17 00:00:00 2001 From: Paul Date: Thu, 14 Nov 2024 10:11:08 +1300 Subject: [PATCH 086/631] Removed DRAFT label in README. (#232) --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 16100226a..4ea7af9d9 100644 --- a/README.md +++ b/README.md @@ -65,7 +65,7 @@ For detailed instructions, check out our [official guides](https://github.com/co The Proxmox Helper Scripts project is community-driven, and we highly appreciate any contributions — whether it's through reporting bugs, suggesting features, improving documentation, or spreading the word. We are committed to maintaining transparency and sustainability in this open-source effort. -### 💖  Donate to Support the Project (DRAFT) +### 💖  Donate to Support the Project We offer two donation options to help maintain and grow this project: From 2c0749663846e4f85561423396152dc179445a0b Mon Sep 17 00:00:00 2001 From: Paul Date: Thu, 14 Nov 2024 10:11:19 +1300 Subject: [PATCH 087/631] Remove DRAFT (#231) * Proposed rewording * Fixed typo in donations * remove draft label From 612f41afddc4d5f08b73178519c00adeacd4d405 Mon Sep 17 00:00:00 2001 From: Bram Suurd <78373894+BramSuurdje@users.noreply.github.com> Date: Wed, 13 Nov 2024 22:33:45 +0100 Subject: [PATCH 088/631] Enhance Alerts component with dynamic colored notes using AlertColors from config for better visibility and consistency (#229) --- .../scripts/_components/ScriptItems/Alerts.tsx | 16 ++++++++++++++-- frontend/src/config/siteConfig.tsx | 7 +++++++ frontend/src/lib/types.ts | 4 +++- 3 files changed, 24 insertions(+), 3 deletions(-) diff --git a/frontend/src/app/scripts/_components/ScriptItems/Alerts.tsx b/frontend/src/app/scripts/_components/ScriptItems/Alerts.tsx index e4c56e160..8d84a52a6 100644 --- a/frontend/src/app/scripts/_components/ScriptItems/Alerts.tsx +++ b/frontend/src/app/scripts/_components/ScriptItems/Alerts.tsx @@ -1,14 +1,26 @@ import TextCopyBlock from "@/components/TextCopyBlock"; +import { AlertColors } from "@/config/siteConfig"; import { Script } from "@/lib/types"; +import { cn } from "@/lib/utils"; import { Info } from "lucide-react"; +type NoteProps = { + text: string; + type: keyof typeof AlertColors; +} + export default function Alerts({ item }: { item: Script }) { return ( <> {item?.notes?.length > 0 && - item.notes.map((note: any, index: number) => ( + item.notes.map((note: NoteProps, index: number) => (
-

+

{TextCopyBlock(note.text)}

diff --git a/frontend/src/config/siteConfig.tsx b/frontend/src/config/siteConfig.tsx index 301a08c6d..5fa0a8ed8 100644 --- a/frontend/src/config/siteConfig.tsx +++ b/frontend/src/config/siteConfig.tsx @@ -34,3 +34,10 @@ export const analytics = { url: "analytics.proxmoxve-scripts.com", token: "b60d3032-1a11-4244-a100-81d26c5c49a7", }; + +export const AlertColors = { + warning: + "border-yellow-400 bg-yellow-50 dark:border-yellow-900 dark:bg-yellow-900", + danger: "border-red-500/25 bg-destructive/25", + info: "border-cyan-500/25 bg-cyan-50 dark:border-cyan-900/25 dark:bg-cyan-900", +}; \ No newline at end of file diff --git a/frontend/src/lib/types.ts b/frontend/src/lib/types.ts index 4f8d2ef23..3541d86a9 100644 --- a/frontend/src/lib/types.ts +++ b/frontend/src/lib/types.ts @@ -1,3 +1,5 @@ +import { AlertColors } from "@/config/siteConfig"; + export type Script = { name: string; slug: string; @@ -29,7 +31,7 @@ export type Script = { notes: [ { text: string; - type: string; + type: keyof typeof AlertColors; }, ]; }; From f7adce2fdaae90c2ca3bc2a37b0c34abf51cc461 Mon Sep 17 00:00:00 2001 From: CanbiZ <47820557+MickLesk@users.noreply.github.com> Date: Wed, 13 Nov 2024 23:52:36 +0100 Subject: [PATCH 089/631] Remove Update Code from Adguard Home (#213) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Remove Update Code from Adguard Home * Update adguard.json * Update ct/adguard.sh Co-authored-by: Håvard Gjøby Thom <34199185+havardthom@users.noreply.github.com> * Update json/adguard.json Co-authored-by: Håvard Gjøby Thom <34199185+havardthom@users.noreply.github.com> * improve Text in json --------- Co-authored-by: Håvard Gjøby Thom <34199185+havardthom@users.noreply.github.com> --- ct/adguard.sh | 23 +---------------------- json/adguard.json | 9 +++++++-- 2 files changed, 8 insertions(+), 24 deletions(-) diff --git a/ct/adguard.sh b/ct/adguard.sh index 6f4cf6f06..78ca4ec55 100644 --- a/ct/adguard.sh +++ b/ct/adguard.sh @@ -60,28 +60,7 @@ if (( $(df /boot | awk 'NR==2{gsub("%","",$5); print $5}') > 80 )); then read -r -p "Warning: Storage is dangerously low, continue anyway? " prompt [[ ${prompt,,} =~ ^(y|yes)$ ]] || exit fi -wget -qL https://static.adguard.com/adguardhome/release/AdGuardHome_linux_amd64.tar.gz -msg_info "Stopping AdguardHome" -systemctl stop AdGuardHome -msg_ok "Stopped AdguardHome" - -msg_info "Updating AdguardHome" -tar -xvf AdGuardHome_linux_amd64.tar.gz &>/dev/null -mkdir -p adguard-backup -cp -r /opt/AdGuardHome/AdGuardHome.yaml /opt/AdGuardHome/data adguard-backup/ -cp AdGuardHome/AdGuardHome /opt/AdGuardHome/AdGuardHome -cp -r adguard-backup/* /opt/AdGuardHome/ -msg_ok "Updated AdguardHome" - -msg_info "Starting AdguardHome" -systemctl start AdGuardHome -msg_ok "Started AdguardHome" - -msg_info "Cleaning Up" -rm -rf AdGuardHome_linux_amd64.tar.gz AdGuardHome adguard-backup -msg_ok "Cleaned" -msg_ok "Updated Successfully" -exit +echo "Adguard Home should be updated via the user interface. You can access it at: ${BL}http://${IP}:3000" } start diff --git a/json/adguard.json b/json/adguard.json index fc2640ae1..ce11c7e90 100644 --- a/json/adguard.json +++ b/json/adguard.json @@ -30,5 +30,10 @@ "username": null, "password": null }, - "notes": [] -} \ No newline at end of file + "notes": [ + { + "text": "Adguard Home can be updated via the user interface.", + "type": "warning" + } + ] +} From 3ef371805692d3e7108402583ff437dc814bc6c9 Mon Sep 17 00:00:00 2001 From: CanbiZ <47820557+MickLesk@users.noreply.github.com> Date: Wed, 13 Nov 2024 23:58:19 +0100 Subject: [PATCH 090/631] Merge adguard.sh (#238) --- ct/adguard.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ct/adguard.sh b/ct/adguard.sh index 78ca4ec55..fa95241f4 100644 --- a/ct/adguard.sh +++ b/ct/adguard.sh @@ -60,7 +60,7 @@ if (( $(df /boot | awk 'NR==2{gsub("%","",$5); print $5}') > 80 )); then read -r -p "Warning: Storage is dangerously low, continue anyway? " prompt [[ ${prompt,,} =~ ^(y|yes)$ ]] || exit fi -echo "Adguard Home should be updated via the user interface. You can access it at: ${BL}http://${IP}:3000" +echo "Adguard Home should be updated via the user interface." } start From 72bee4454308bcb48406131649d349465cb92238 Mon Sep 17 00:00:00 2001 From: CanbiZ <47820557+MickLesk@users.noreply.github.com> Date: Thu, 14 Nov 2024 00:05:55 +0100 Subject: [PATCH 091/631] remove storage Check in adguard.sh --- ct/adguard.sh | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/ct/adguard.sh b/ct/adguard.sh index fa95241f4..dd07e48b8 100644 --- a/ct/adguard.sh +++ b/ct/adguard.sh @@ -52,15 +52,11 @@ function default_settings() { VERB="no" echo_default } - function update_script() { header_info if [[ ! -d /opt/AdGuardHome ]]; then msg_error "No ${APP} Installation Found!"; exit; fi -if (( $(df /boot | awk 'NR==2{gsub("%","",$5); print $5}') > 80 )); then - read -r -p "Warning: Storage is dangerously low, continue anyway? " prompt - [[ ${prompt,,} =~ ^(y|yes)$ ]] || exit -fi -echo "Adguard Home should be updated via the user interface." +msg_error "Adguard Home should be updated via the user interface." +exit } start From 4e1a2bde2416e2636014bbf3527d6cd95b39688c Mon Sep 17 00:00:00 2001 From: Bram Suurd <78373894+BramSuurdje@users.noreply.github.com> Date: Thu, 14 Nov 2024 09:08:45 +0100 Subject: [PATCH 092/631] Add JSON Generator page for easier configuring of new metadata (#230) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Update mariadb.json * Update vaultwarden.json * Update vaultwarden.json * Update keycloak.json * Update json/keycloak.json Co-authored-by: Håvard Gjøby Thom <34199185+havardthom@users.noreply.github.com> * Update mariadb.json Co-authored-by: Håvard Gjøby Thom <34199185+havardthom@users.noreply.github.com> * Add canonical link to layout for improved SEO and page indexing * Fix image source fallback for script logos to use a consistent relative path * Fix image source for script logos across components to consistently use the "/ProxmoxVE/logo.png" path * Update image source for script logos to use basePath for consistent paths across all components * Fix image source for script logos to ensure leading slash is consistent for all components' paths * Add JSON generator component with validation and UI elements for managing scripts, categories, and installation methods * Add calendar and label components; enhance JSON generator with date selection and script path updates for installation methods * Enhance Alerts component with dynamic colored notes using AlertColors from config for better visibility and consistency * Remove MultiSelect component * Update JSON generator: streamline install methods, enhance note type selection, and refine button behavior for better UX * Refactor AlertColors: unify warning and danger styles for consistency and improved visual hierarchy in alerts * Enhance JSONGenerator: improve SelectItem layout with color indicators for better visual representation of alert types * Refactor JSON schema definitions in JSONGenerator: separate InstallMethod and Note schemas for better structure and readability * Fix JSONGenerator: streamline SelectItem markup and enhance JSON display layout for improved readability and user experience * Refactor JSON schema handling: move schema definitions to separate file * Enhance error handling in JSONGenerator: display Zod validation errors on user input for better feedback and debugging * Export InstallMethodSchema and integrate into JSONGenerator for better validation of install method data input * Add Categories and Note components to JSONGenerator for better organization and modularity in the JSON editing interface * Remove unused imports --------- Co-authored-by: CanbiZ <47820557+MickLesk@users.noreply.github.com> Co-authored-by: Håvard Gjøby Thom <34199185+havardthom@users.noreply.github.com> --- frontend/package-lock.json | 180 +++++++++- frontend/package.json | 9 +- .../json-editor/_components/Categories.tsx | 103 ++++++ .../json-editor/_components/InstallMethod.tsx | 189 ++++++++++ .../src/app/json-editor/_components/Note.tsx | 115 +++++++ .../src/app/json-editor/_schemas/schemas.ts | 43 +++ frontend/src/app/json-editor/page.tsx | 323 ++++++++++++++++++ frontend/src/components/ui/alert.tsx | 59 ++++ frontend/src/components/ui/calendar.tsx | 66 ++++ frontend/src/components/ui/label.tsx | 26 ++ frontend/src/components/ui/popover.tsx | 31 ++ frontend/src/components/ui/select.tsx | 160 +++++++++ frontend/src/components/ui/switch.tsx | 29 ++ frontend/src/components/ui/textarea.tsx | 22 ++ frontend/src/config/siteConfig.tsx | 4 +- 15 files changed, 1354 insertions(+), 5 deletions(-) create mode 100644 frontend/src/app/json-editor/_components/Categories.tsx create mode 100644 frontend/src/app/json-editor/_components/InstallMethod.tsx create mode 100644 frontend/src/app/json-editor/_components/Note.tsx create mode 100644 frontend/src/app/json-editor/_schemas/schemas.ts create mode 100644 frontend/src/app/json-editor/page.tsx create mode 100644 frontend/src/components/ui/alert.tsx create mode 100644 frontend/src/components/ui/calendar.tsx create mode 100644 frontend/src/components/ui/label.tsx create mode 100644 frontend/src/components/ui/popover.tsx create mode 100644 frontend/src/components/ui/select.tsx create mode 100644 frontend/src/components/ui/switch.tsx create mode 100644 frontend/src/components/ui/textarea.tsx diff --git a/frontend/package-lock.json b/frontend/package-lock.json index c2e0b68f0..851edf9b8 100644 --- a/frontend/package-lock.json +++ b/frontend/package-lock.json @@ -13,15 +13,20 @@ "@radix-ui/react-dialog": "^1.0.5", "@radix-ui/react-dropdown-menu": "^2.0.6", "@radix-ui/react-icons": "^1.3.1", + "@radix-ui/react-label": "^2.1.0", "@radix-ui/react-navigation-menu": "^1.1.4", + "@radix-ui/react-popover": "^1.1.2", + "@radix-ui/react-select": "^2.1.2", "@radix-ui/react-separator": "^1.1.0", "@radix-ui/react-slot": "^1.1.0", + "@radix-ui/react-switch": "^1.1.1", "@radix-ui/react-tabs": "^1.1.0", "@radix-ui/react-tooltip": "^1.1.2", "@vercel/analytics": "^1.2.2", "class-variance-authority": "^0.7.0", "clsx": "^2.1.1", "cmdk": "^1.0.0", + "date-fns": "^4.1.0", "framer-motion": "^11.11.11", "fuse.js": "^7.0.0", "lucide-react": "^0.453.0", @@ -33,13 +38,15 @@ "prettier-plugin-organize-imports": "^4.1.0", "react": "19.0.0-rc-02c0e824-20241028", "react-code-blocks": "^0.1.6", + "react-day-picker": "8.10.1", "react-dom": "19.0.0-rc-02c0e824-20241028", "react-icons": "^5.1.0", "react-simple-typewriter": "^5.0.1", "sharp": "^0.33.5", "simple-icons": "^13.5.0", "sonner": "^1.5.0", - "tailwind-merge": "^2.3.0" + "tailwind-merge": "^2.3.0", + "zod": "^3.23.8" }, "devDependencies": { "@types/node": "^22", @@ -1028,6 +1035,12 @@ "node": ">=14" } }, + "node_modules/@radix-ui/number": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/number/-/number-1.1.0.tgz", + "integrity": "sha512-V3gRzhVNU1ldS5XhAPTom1fOIo4ccrjjJgmE+LI2h/WaFpHmx0MQApT+KZHnx8abG6Avtfcz4WoEciMnpFT3HQ==", + "license": "MIT" + }, "node_modules/@radix-ui/primitive": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@radix-ui/primitive/-/primitive-1.1.0.tgz", @@ -1362,6 +1375,29 @@ } } }, + "node_modules/@radix-ui/react-label": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-label/-/react-label-2.1.0.tgz", + "integrity": "sha512-peLblDlFw/ngk3UWq0VnYaOLy6agTZZ+MUO/WhVfm14vJGML+xH4FAl2XQGLqdefjNb7ApRg6Yn7U42ZhmYXdw==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-primitive": "2.0.0" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, "node_modules/@radix-ui/react-menu": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/@radix-ui/react-menu/-/react-menu-2.1.2.tgz", @@ -1438,6 +1474,43 @@ } } }, + "node_modules/@radix-ui/react-popover": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-popover/-/react-popover-1.1.2.tgz", + "integrity": "sha512-u2HRUyWW+lOiA2g0Le0tMmT55FGOEWHwPFt1EPfbLly7uXQExFo5duNKqG2DzmFXIdqOeNd+TpE8baHWJCyP9w==", + "license": "MIT", + "dependencies": { + "@radix-ui/primitive": "1.1.0", + "@radix-ui/react-compose-refs": "1.1.0", + "@radix-ui/react-context": "1.1.1", + "@radix-ui/react-dismissable-layer": "1.1.1", + "@radix-ui/react-focus-guards": "1.1.1", + "@radix-ui/react-focus-scope": "1.1.0", + "@radix-ui/react-id": "1.1.0", + "@radix-ui/react-popper": "1.2.0", + "@radix-ui/react-portal": "1.1.2", + "@radix-ui/react-presence": "1.1.1", + "@radix-ui/react-primitive": "2.0.0", + "@radix-ui/react-slot": "1.1.0", + "@radix-ui/react-use-controllable-state": "1.1.0", + "aria-hidden": "^1.1.1", + "react-remove-scroll": "2.6.0" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, "node_modules/@radix-ui/react-popper": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/@radix-ui/react-popper/-/react-popper-1.2.0.tgz", @@ -1602,6 +1675,49 @@ } } }, + "node_modules/@radix-ui/react-select": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-select/-/react-select-2.1.2.tgz", + "integrity": "sha512-rZJtWmorC7dFRi0owDmoijm6nSJH1tVw64QGiNIZ9PNLyBDtG+iAq+XGsya052At4BfarzY/Dhv9wrrUr6IMZA==", + "license": "MIT", + "dependencies": { + "@radix-ui/number": "1.1.0", + "@radix-ui/primitive": "1.1.0", + "@radix-ui/react-collection": "1.1.0", + "@radix-ui/react-compose-refs": "1.1.0", + "@radix-ui/react-context": "1.1.1", + "@radix-ui/react-direction": "1.1.0", + "@radix-ui/react-dismissable-layer": "1.1.1", + "@radix-ui/react-focus-guards": "1.1.1", + "@radix-ui/react-focus-scope": "1.1.0", + "@radix-ui/react-id": "1.1.0", + "@radix-ui/react-popper": "1.2.0", + "@radix-ui/react-portal": "1.1.2", + "@radix-ui/react-primitive": "2.0.0", + "@radix-ui/react-slot": "1.1.0", + "@radix-ui/react-use-callback-ref": "1.1.0", + "@radix-ui/react-use-controllable-state": "1.1.0", + "@radix-ui/react-use-layout-effect": "1.1.0", + "@radix-ui/react-use-previous": "1.1.0", + "@radix-ui/react-visually-hidden": "1.1.0", + "aria-hidden": "^1.1.1", + "react-remove-scroll": "2.6.0" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, "node_modules/@radix-ui/react-separator": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@radix-ui/react-separator/-/react-separator-1.1.0.tgz", @@ -1643,6 +1759,35 @@ } } }, + "node_modules/@radix-ui/react-switch": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-switch/-/react-switch-1.1.1.tgz", + "integrity": "sha512-diPqDDoBcZPSicYoMWdWx+bCPuTRH4QSp9J+65IvtdS0Kuzt67bI6n32vCj8q6NZmYW/ah+2orOtMwcX5eQwIg==", + "license": "MIT", + "dependencies": { + "@radix-ui/primitive": "1.1.0", + "@radix-ui/react-compose-refs": "1.1.0", + "@radix-ui/react-context": "1.1.1", + "@radix-ui/react-primitive": "2.0.0", + "@radix-ui/react-use-controllable-state": "1.1.0", + "@radix-ui/react-use-previous": "1.1.0", + "@radix-ui/react-use-size": "1.1.0" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, "node_modules/@radix-ui/react-tabs": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/@radix-ui/react-tabs/-/react-tabs-1.1.1.tgz", @@ -2935,6 +3080,16 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/date-fns": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-4.1.0.tgz", + "integrity": "sha512-Ukq0owbQXxa/U3EGtsdVBkR1w7KOQ5gIBqdH2hkvknzZPYvBxb/aa6E8L7tmjFtkwZBu3UXBbjIgPo/Ez4xaNg==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/kossnocorp" + } + }, "node_modules/debug": { "version": "4.3.7", "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", @@ -6035,6 +6190,20 @@ "react": ">=16" } }, + "node_modules/react-day-picker": { + "version": "8.10.1", + "resolved": "https://registry.npmjs.org/react-day-picker/-/react-day-picker-8.10.1.tgz", + "integrity": "sha512-TMx7fNbhLk15eqcMt+7Z7S2KF7mfTId/XJDjKE8f+IUcFn0l08/kI4FiYTL/0yuOLmEcbR4Fwe3GJf/NiiMnPA==", + "license": "MIT", + "funding": { + "type": "individual", + "url": "https://github.com/sponsors/gpbl" + }, + "peerDependencies": { + "date-fns": "^2.28.0 || ^3.0.0", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + } + }, "node_modules/react-dom": { "version": "19.0.0-rc-02c0e824-20241028", "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.0.0-rc-02c0e824-20241028.tgz", @@ -7550,6 +7719,15 @@ "funding": { "url": "https://github.com/sponsors/sindresorhus" } + }, + "node_modules/zod": { + "version": "3.23.8", + "resolved": "https://registry.npmjs.org/zod/-/zod-3.23.8.tgz", + "integrity": "sha512-XBx9AXhXktjUqnepgTiE5flcKIYWi/rme0Eaj+5Y0lftuGBq+jyRu/md4WnuxqgP1ubdpNCsYEYPxrzVHD8d6g==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/colinhacks" + } } } } diff --git a/frontend/package.json b/frontend/package.json index 6bd130d2b..4d09c0747 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -23,15 +23,20 @@ "@radix-ui/react-dialog": "^1.0.5", "@radix-ui/react-dropdown-menu": "^2.0.6", "@radix-ui/react-icons": "^1.3.1", + "@radix-ui/react-label": "^2.1.0", "@radix-ui/react-navigation-menu": "^1.1.4", + "@radix-ui/react-popover": "^1.1.2", + "@radix-ui/react-select": "^2.1.2", "@radix-ui/react-separator": "^1.1.0", "@radix-ui/react-slot": "^1.1.0", + "@radix-ui/react-switch": "^1.1.1", "@radix-ui/react-tabs": "^1.1.0", "@radix-ui/react-tooltip": "^1.1.2", "@vercel/analytics": "^1.2.2", "class-variance-authority": "^0.7.0", "clsx": "^2.1.1", "cmdk": "^1.0.0", + "date-fns": "^4.1.0", "framer-motion": "^11.11.11", "fuse.js": "^7.0.0", "lucide-react": "^0.453.0", @@ -43,13 +48,15 @@ "prettier-plugin-organize-imports": "^4.1.0", "react": "19.0.0-rc-02c0e824-20241028", "react-code-blocks": "^0.1.6", + "react-day-picker": "8.10.1", "react-dom": "19.0.0-rc-02c0e824-20241028", "react-icons": "^5.1.0", "react-simple-typewriter": "^5.0.1", "sharp": "^0.33.5", "simple-icons": "^13.5.0", "sonner": "^1.5.0", - "tailwind-merge": "^2.3.0" + "tailwind-merge": "^2.3.0", + "zod": "^3.23.8" }, "devDependencies": { "@types/node": "^22", diff --git a/frontend/src/app/json-editor/_components/Categories.tsx b/frontend/src/app/json-editor/_components/Categories.tsx new file mode 100644 index 000000000..e3f4c61c8 --- /dev/null +++ b/frontend/src/app/json-editor/_components/Categories.tsx @@ -0,0 +1,103 @@ +import { Label } from "@/components/ui/label"; +import { + Select, + SelectContent, + SelectItem, + SelectTrigger, + SelectValue, +} from "@/components/ui/select"; +import { Category } from "@/lib/types"; +import { cn } from "@/lib/utils"; +import { z } from "zod"; +import { ScriptSchema } from "../_schemas/schemas"; + +type Script = z.infer; + +type CategoryProps = { + script: Script; + setScript: (script: Script) => void; + setIsValid: (isValid: boolean) => void; + setZodErrors: (zodErrors: z.ZodError | null) => void; + categories: Category[]; +}; + +export default function Categories({ + script, + setScript, + categories, +}: Omit) { + const addCategory = (categoryId: number) => { + setScript({ + ...script, + categories: [...new Set([...script.categories, categoryId])], + }); + }; + + const removeCategory = (categoryId: number) => { + setScript({ + ...script, + categories: script.categories.filter((id: number) => id !== categoryId), + }); + }; + + return ( + <> +
+ + +
+ {script.categories.map((categoryId) => { + const category = categories.find((c) => c.id === categoryId); + return category ? ( + + {category.name} + + + ) : null; + })} +
+
+ + ); +} diff --git a/frontend/src/app/json-editor/_components/InstallMethod.tsx b/frontend/src/app/json-editor/_components/InstallMethod.tsx new file mode 100644 index 000000000..df0ef66e7 --- /dev/null +++ b/frontend/src/app/json-editor/_components/InstallMethod.tsx @@ -0,0 +1,189 @@ +import { Button } from "@/components/ui/button"; +import { + Select, + SelectContent, + SelectItem, + SelectTrigger, + SelectValue, +} from "@/components/ui/select"; +import { PlusCircle, Trash2 } from "lucide-react"; +import { Input } from "@/components/ui/input"; +import { z } from "zod"; +import { InstallMethodSchema, ScriptSchema } from "../_schemas/schemas"; + +type Script = z.infer; + +type InstallMethodProps = { + script: Script; + setScript: (value: Script | ((prevState: Script) => Script)) => void; + setIsValid: (isValid: boolean) => void; + setZodErrors: (zodErrors: z.ZodError | null) => void; +}; + +export default function InstallMethod({ + script, + setScript, + setIsValid, + setZodErrors, +}: InstallMethodProps) { + const addInstallMethod = () => { + setScript((prev) => { + const method = InstallMethodSchema.parse({ + type: "default", + script: `/${prev.type}/${prev.slug}.sh`, + resources: { + cpu: null, + ram: null, + hdd: null, + os: null, + version: null, + }, + }); + return { + ...prev, + install_methods: [...prev.install_methods, method], + }; + }); + }; + + const updateInstallMethod = ( + index: number, + key: keyof Script["install_methods"][number], + value: Script["install_methods"][number][keyof Script["install_methods"][number]], + ) => { + setScript((prev) => { + const updatedMethods = prev.install_methods.map((method, i) => { + if (i === index) { + const updatedMethod = { ...method, [key]: value }; + + if (key === "type") { + updatedMethod.script = + value === "alpine" + ? `/${prev.type}/alpine-${prev.slug}.sh` + : `/${prev.type}/${prev.slug}.sh`; + } + + return updatedMethod; + } + return method; + }); + + const updated = { + ...prev, + install_methods: updatedMethods, + }; + + const result = ScriptSchema.safeParse(updated); + setIsValid(result.success); + if (!result.success) { + setZodErrors(result.error); + } else { + setZodErrors(null); + } + return updated; + }); + }; + + const removeInstallMethod = (index: number) => { + setScript((prev) => ({ + ...prev, + install_methods: prev.install_methods.filter((_, i) => i !== index), + })); + }; + + return ( + <> +

Install Methods

+ {script.install_methods.map((method, index) => ( +
+ +
+ ) => + updateInstallMethod(index, "resources", { + ...method.resources, + cpu: e.target.value ? Number(e.target.value) : null, + }) + } + /> + ) => + updateInstallMethod(index, "resources", { + ...method.resources, + ram: e.target.value ? Number(e.target.value) : null, + }) + } + /> + ) => + updateInstallMethod(index, "resources", { + ...method.resources, + hdd: e.target.value ? Number(e.target.value) : null, + }) + } + /> +
+
+ ) => + updateInstallMethod(index, "resources", { + ...method.resources, + os: e.target.value || null, + }) + } + /> + ) => + updateInstallMethod(index, "resources", { + ...method.resources, + version: e.target.value ? Number(e.target.value) : null, + }) + } + /> +
+ +
+ ))} + + + ); +} diff --git a/frontend/src/app/json-editor/_components/Note.tsx b/frontend/src/app/json-editor/_components/Note.tsx new file mode 100644 index 000000000..84fc35d3b --- /dev/null +++ b/frontend/src/app/json-editor/_components/Note.tsx @@ -0,0 +1,115 @@ +import { Button } from "@/components/ui/button"; +import { Input } from "@/components/ui/input"; +import { + Select, + SelectContent, + SelectItem, + SelectTrigger, + SelectValue, +} from "@/components/ui/select"; +import { AlertColors } from "@/config/siteConfig"; +import { cn } from "@/lib/utils"; +import { PlusCircle, Trash2 } from "lucide-react"; +import { z } from "zod"; +import { ScriptSchema } from "../_schemas/schemas"; + +type Script = z.infer; + +type NoteProps = { + script: Script; + setScript: (script: Script) => void; + setIsValid: (isValid: boolean) => void; + setZodErrors: (zodErrors: z.ZodError | null) => void; +}; +export default function Note({ + script, + setScript, + setIsValid, + setZodErrors, +}: NoteProps) { + const addNote = () => { + const newScript: Script = { + ...script, + notes: [...script.notes, { text: "", type: "" }], + }; + setScript(newScript); + }; + + const updateNote = ( + index: number, + key: keyof Script["notes"][number], + value: string, + ) => { + const updated: Script = { + ...script, + notes: script.notes.map((note: Script["notes"][number], i: number) => + i === index ? { ...note, [key]: value } : note, + ), + }; + const result = ScriptSchema.safeParse(updated); + setIsValid(result.success); + if (!result.success) { + setZodErrors(result.error); + } else { + setZodErrors(null); + } + setScript(updated); + }; + + const removeNote = (index: number) => { + const newScript: Script = { + ...script, + notes: script.notes.filter((_: Script["notes"][number], i: number) => i !== index), + }; + setScript(newScript); + }; + + return ( + <> +

Notes

+ {script.notes.map((note, index) => ( +
+ ) => updateNote(index, "text", e.target.value)} + /> + + +
+ ))} + + + ); +} diff --git a/frontend/src/app/json-editor/_schemas/schemas.ts b/frontend/src/app/json-editor/_schemas/schemas.ts new file mode 100644 index 000000000..1a6796884 --- /dev/null +++ b/frontend/src/app/json-editor/_schemas/schemas.ts @@ -0,0 +1,43 @@ +import { z } from "zod"; + +export const InstallMethodSchema = z.object({ + type: z.enum(["default", "alpine"], { + errorMap: () => ({ message: "Type must be either 'default' or 'alpine'" }) + }), + script: z.string().min(1, "Script content cannot be empty"), + resources: z.object({ + cpu: z.number().nullable(), + ram: z.number().nullable(), + hdd: z.number().nullable(), + os: z.string().nullable(), + version: z.number().nullable(), + }), +}); + +const NoteSchema = z.object({ + text: z.string().min(1, "Note text cannot be empty"), + type: z.string().min(1, "Note type cannot be empty"), +}); + +export const ScriptSchema = z.object({ + name: z.string().min(1, "Name is required"), + slug: z.string().min(1, "Slug is required"), + categories: z.array(z.number()), + date_created: z.string().regex(/^\d{4}-\d{2}-\d{2}$/, "Date must be in YYYY-MM-DD format").min(1, "Date is required"), + type: z.enum(["vm", "ct", "misc"], { + errorMap: () => ({ message: "Type must be either 'vm', 'ct', or 'misc'" }) + }), + updateable: z.boolean(), + privileged: z.boolean(), + interface_port: z.number().nullable(), + documentation: z.string().nullable(), + website: z.string().url().nullable(), + logo: z.string().url().nullable(), + description: z.string().min(1, "Description is required"), + install_methods: z.array(InstallMethodSchema).min(1, "At least one install method is required"), + default_credentials: z.object({ + username: z.string().nullable(), + password: z.string().nullable(), + }), + notes: z.array(NoteSchema), +}); diff --git a/frontend/src/app/json-editor/page.tsx b/frontend/src/app/json-editor/page.tsx new file mode 100644 index 000000000..144478b04 --- /dev/null +++ b/frontend/src/app/json-editor/page.tsx @@ -0,0 +1,323 @@ +"use client"; + +import { Alert, AlertDescription, AlertTitle } from "@/components/ui/alert"; +import { Button } from "@/components/ui/button"; +import { Calendar } from "@/components/ui/calendar"; +import { Input } from "@/components/ui/input"; +import { Label } from "@/components/ui/label"; +import { Popover, PopoverContent, PopoverTrigger } from "@/components/ui/popover"; +import { + Select, + SelectContent, + SelectItem, + SelectTrigger, + SelectValue, +} from "@/components/ui/select"; +import { Switch } from "@/components/ui/switch"; +import { Textarea } from "@/components/ui/textarea"; +import { fetchCategories } from "@/lib/data"; +import { Category } from "@/lib/types"; +import { cn } from "@/lib/utils"; +import { format } from "date-fns"; +import { CalendarIcon, Check, Clipboard } from "lucide-react"; +import { useEffect, useState } from "react"; +import { toast } from "sonner"; +import { z } from "zod"; +import Categories from "./_components/Categories"; +import InstallMethod from "./_components/InstallMethod"; +import Note from "./_components/Note"; +import { ScriptSchema } from "./_schemas/schemas"; + +type Script = z.infer; + +export default function JSONGenerator() { + const [script, setScript] = useState + + + + + + +
+ +
+
+
+ {children} + +
+
+
+
+
+
+ + + ); +} diff --git a/frontend/src/app/manifest.ts b/frontend/src/app/manifest.ts new file mode 100644 index 000000000..1cfc38f5f --- /dev/null +++ b/frontend/src/app/manifest.ts @@ -0,0 +1,28 @@ +import { basePath } from "@/config/siteConfig"; +import type { MetadataRoute } from "next"; + +export const generateStaticParams = () => { + return []; +}; + +export default function manifest(): MetadataRoute.Manifest { + return { + name: "Proxmox VE Helper-Scripts", + short_name: "Proxmox VE Helper-Scripts", + description: + "A Re-designed Front-end for the Proxmox VE Helper-Scripts Repository. Featuring over 200+ scripts to help you manage your Proxmox VE environment.", + theme_color: "#030712", + background_color: "#030712", + display: "standalone", + orientation: "portrait", + scope: `${basePath}`, + start_url: `${basePath}`, + icons: [ + { + src: "logo.png", + sizes: "512x512", + type: "image/png", + }, + ], + }; +} diff --git a/frontend/src/app/not-found.tsx b/frontend/src/app/not-found.tsx new file mode 100644 index 000000000..8307ae2c4 --- /dev/null +++ b/frontend/src/app/not-found.tsx @@ -0,0 +1,20 @@ +"use client"; +import { Button } from "@/components/ui/button"; + +export default function NotFoundPage() { + return ( +
+
+

+ 404 +

+

+ Oops, the page you are looking for could not be found. +

+
+ +
+ ); +} diff --git a/frontend/src/app/page.tsx b/frontend/src/app/page.tsx new file mode 100644 index 000000000..c6fad745a --- /dev/null +++ b/frontend/src/app/page.tsx @@ -0,0 +1,146 @@ +"use client"; +import AnimatedGradientText from "@/components/ui/animated-gradient-text"; +import { Button } from "@/components/ui/button"; +import { CardFooter } from "@/components/ui/card"; +import { + Dialog, + DialogContent, + DialogDescription, + DialogHeader, + DialogTitle, + DialogTrigger, +} from "@/components/ui/dialog"; +import Particles from "@/components/ui/particles"; +import { Separator } from "@/components/ui/separator"; +import { basePath } from "@/config/siteConfig"; +import { cn } from "@/lib/utils"; +import { ArrowRightIcon, ExternalLink } from "lucide-react"; +import { useTheme } from "next-themes"; +import Link from "next/link"; +import { useEffect, useState } from "react"; +import { FaGithub } from "react-icons/fa"; + +function CustomArrowRightIcon() { + return ; +} + +export default function Page() { + const { theme } = useTheme(); + + const [color, setColor] = useState("#000000"); + + useEffect(() => { + setColor(theme === "dark" ? "#ffffff" : "#000000"); + }, [theme]); + + return ( +
+ +
+
+ + +
+ +
+ ❤️ + + Scripts by Tteck + + +
+ + + + Thank You! + + A big thank you to Tteck and the many contributors who have + made this project possible. Your hard work is truly + appreciated by the entire Proxmox community! + + + + + + + +
+ +
+

+ Make managing your Homelab a breeze +

+

+ We are a community-driven initiative that simplifies the setup of + Proxmox Virtual Environment (VE). +
+
+ Originally created by{" "} + + tteck + + , these scripts automate and streamline +
+ the process of creating and configuring Linux containers (LXC) and + virtual machines (VMs) on Proxmox VE. +
+
+ With 200+ scripts to help you manage your{" "} + Proxmox VE environment.
+ Whether you're a seasoned user or a newcomer, we've got + you covered. +

+
+
+ + + +
+
+
+
+ ); +} diff --git a/frontend/src/app/robots.ts b/frontend/src/app/robots.ts new file mode 100644 index 000000000..fc01ac87c --- /dev/null +++ b/frontend/src/app/robots.ts @@ -0,0 +1,14 @@ +import { basePath } from "@/config/siteConfig"; +import type { MetadataRoute } from "next"; + +export const dynamic = "force-static"; + +export default function robots(): MetadataRoute.Robots { + return { + rules: { + userAgent: "*", + allow: "/", + }, + sitemap: `https://community-scripts.github.io/${basePath}/sitemap.xml`, + }; +} diff --git a/frontend/src/app/scripts/_components/ScriptAccordion.tsx b/frontend/src/app/scripts/_components/ScriptAccordion.tsx new file mode 100644 index 000000000..3864c4b20 --- /dev/null +++ b/frontend/src/app/scripts/_components/ScriptAccordion.tsx @@ -0,0 +1,132 @@ +import { useCallback, useEffect, useRef } from "react"; + +import { formattedBadge } from "@/components/CommandMenu"; +import { + Accordion, + AccordionContent, + AccordionItem, + AccordionTrigger, +} from "@/components/ui/accordion"; +import { Category } from "@/lib/types"; +import { cn } from "@/lib/utils"; +import Image from "next/image"; +import Link from "next/link"; +import { useState } from "react"; +import { basePath } from "@/config/siteConfig"; + +export default function ScriptAccordion({ + items, + selectedScript, + setSelectedScript, +}: { + items: Category[]; + selectedScript: string | null; + setSelectedScript: (script: string | null) => void; +}) { + const [expandedItem, setExpandedItem] = useState( + undefined, + ); + const linkRefs = useRef<{ [key: string]: HTMLAnchorElement | null }>({}); + + const handleAccordionChange = (value: string | undefined) => { + setExpandedItem(value); + }; + + const handleSelected = useCallback( + (slug: string) => { + setSelectedScript(slug); + }, + [setSelectedScript], + ); + + useEffect(() => { + if (selectedScript) { + const category = items.find((category) => + category.scripts.some((script) => script.slug === selectedScript), + ); + if (category) { + setExpandedItem(category.name); + handleSelected(selectedScript); + } + } + }, [selectedScript, items, handleSelected]); + return ( + + {items.map((category) => ( + + +
+ {category.name} + + {category.scripts.length} + +
{" "} +
+ + {category.scripts + .slice() + .sort((a, b) => a.name.localeCompare(b.name)) + .map((script, index) => ( +
+ handleSelected(script.slug)} + ref={(el) => { + linkRefs.current[script.slug] = el; + }} + > +
+ + ((e.currentTarget as HTMLImageElement).src = + `/${basePath}/logo.png`) + } + alt={script.name} + className="mr-1 w-4 h-4 rounded-full" + /> + + {script.name} + +
+ {formattedBadge(script.type)} + +
+ ))} +
+
+ ))} +
+ ); +} diff --git a/frontend/src/app/scripts/_components/ScriptInfoBlocks.tsx b/frontend/src/app/scripts/_components/ScriptInfoBlocks.tsx new file mode 100644 index 000000000..1c418c94c --- /dev/null +++ b/frontend/src/app/scripts/_components/ScriptInfoBlocks.tsx @@ -0,0 +1,213 @@ +import { Button } from "@/components/ui/button"; +import { + Card, + CardContent, + CardDescription, + CardFooter, + CardHeader, + CardTitle, +} from "@/components/ui/card"; +import { basePath, mostPopularScripts } from "@/config/siteConfig"; +import { extractDate } from "@/lib/time"; +import { Category, Script } from "@/lib/types"; +import { CalendarPlus } from "lucide-react"; +import Image from "next/image"; +import Link from "next/link"; +import { useMemo, useState } from "react"; + +const ITEMS_PER_PAGE = 3; + +export const getDisplayValueFromType = (type: string) => { + switch (type) { + case "ct": + return "LXC"; + case "vm": + return "VM"; + case "misc": + return ""; + default: + return ""; + } +}; + +export function LatestScripts({ items }: { items: Category[] }) { + const [page, setPage] = useState(1); + + const latestScripts = useMemo(() => { + if (!items) return []; + const scripts = items.flatMap((category) => category.scripts || []); + return scripts.sort( + (a, b) => + new Date(b.date_created).getTime() - new Date(a.date_created).getTime(), + ); + }, [items]); + + const goToNextPage = () => { + setPage((prevPage) => prevPage + 1); + }; + + const goToPreviousPage = () => { + setPage((prevPage) => prevPage - 1); + }; + + const startIndex = (page - 1) * ITEMS_PER_PAGE; + const endIndex = page * ITEMS_PER_PAGE; + + if (!items) { + return null; + } + + return ( +
+ {latestScripts.length > 0 && ( +
+

Newest Scripts

+
+ {page > 1 && ( +
+ Previous +
+ )} + {endIndex < latestScripts.length && ( +
+ {page === 1 ? "More.." : "Next"} +
+ )} +
+
+ )} +
+ {latestScripts.slice(startIndex, endIndex).map((script) => ( + + + +
+ + ((e.currentTarget as HTMLImageElement).src = + `/${basePath}/logo.png`) + } + className="h-11 w-11 object-contain" + /> +
+
+

+ {script.name} {getDisplayValueFromType(script.type)} +

+

+ + {extractDate(script.date_created)} +

+
+
+
+ + + {script.description} + + + + + +
+ ))} +
+
+ ); +} + +export function MostViewedScripts({ items }: { items: Category[] }) { + const mostViewedScripts = items.reduce((acc: Script[], category) => { + const foundScripts = category.scripts.filter((script) => + mostPopularScripts.includes(script.name), + ); + return acc.concat(foundScripts); + }, []); + + return ( +
+ {mostViewedScripts.length > 0 && ( + <> +

Most Viewed Scripts

+ + )} +
+ {mostViewedScripts.map((script) => ( + + + +
+ + ((e.currentTarget as HTMLImageElement).src = + `/${basePath}/logo.png`) + } + className="h-11 w-11 object-contain" + /> +
+
+

+ {script.name} {getDisplayValueFromType(script.type)} +

+

+ + {extractDate(script.date_created)} +

+
+
+
+ + + {script.description} + + + + + +
+ ))} +
+
+ ); +} diff --git a/frontend/src/app/scripts/_components/ScriptItem.tsx b/frontend/src/app/scripts/_components/ScriptItem.tsx new file mode 100644 index 000000000..fb9e64e0b --- /dev/null +++ b/frontend/src/app/scripts/_components/ScriptItem.tsx @@ -0,0 +1,100 @@ +"use client"; +import { Separator } from "@/components/ui/separator"; +import { extractDate } from "@/lib/time"; +import { Script } from "@/lib/types"; +import { X } from "lucide-react"; +import Image from "next/image"; + +import { getDisplayValueFromType } from "./ScriptInfoBlocks"; +import Alerts from "./ScriptItems/Alerts"; +import Buttons from "./ScriptItems/Buttons"; +import DefaultPassword from "./ScriptItems/DefaultPassword"; +import DefaultSettings from "./ScriptItems/DefaultSettings"; +import Description from "./ScriptItems/Description"; +import InstallCommand from "./ScriptItems/InstallCommand"; +import InterFaces from "./ScriptItems/InterFaces"; +import Tooltips from "./ScriptItems/Tooltips"; +import { basePath } from "@/config/siteConfig"; + +function ScriptItem({ + item, + setSelectedScript, +}: { + item: Script; + setSelectedScript: (script: string | null) => void; +}) { + const closeScript = () => { + window.history.pushState({}, document.title, window.location.pathname); + setSelectedScript(null); + }; + + return ( +
+
+
+
+

Selected Script

+ +
+
+
+
+ + ((e.currentTarget as HTMLImageElement).src = + `/${basePath}/logo.png`) + } + height={400} + alt={item.name} + unoptimized + /> +
+
+
+

+ {item.name} {getDisplayValueFromType(item.type)} +

+

+ Date added: {extractDate(item.date_created)} +

+
+
+ +
+
+
+
+
+ + +
+
+ +
+
+ + +
+
+
+

+ How to {item.type == "misc" ? "use" : "install"} +

+ +
+ + +
+
+ +
+
+
+
+ ); +} + +export default ScriptItem; diff --git a/frontend/src/app/scripts/_components/ScriptItems/Alerts.tsx b/frontend/src/app/scripts/_components/ScriptItems/Alerts.tsx new file mode 100644 index 000000000..b915be3ff --- /dev/null +++ b/frontend/src/app/scripts/_components/ScriptItems/Alerts.tsx @@ -0,0 +1,35 @@ +import TextCopyBlock from "@/components/TextCopyBlock"; +import { AlertColors } from "@/config/siteConfig"; +import { Script } from "@/lib/types"; +import { cn } from "@/lib/utils"; +import { AlertCircle, NotepadText } from "lucide-react"; + +type NoteProps = { + text: string; + type: keyof typeof AlertColors; +} + +export default function Alerts({ item }: { item: Script }) { + return ( + <> + {item?.notes?.length > 0 && + item.notes.map((note: NoteProps, index: number) => ( +
+

+ {note.type == "info" ? ( + + ) : ( + + )} + {TextCopyBlock(note.text)} +

+
+ ))} + + ); +} diff --git a/frontend/src/app/scripts/_components/ScriptItems/Buttons.tsx b/frontend/src/app/scripts/_components/ScriptItems/Buttons.tsx new file mode 100644 index 000000000..cb46e437b --- /dev/null +++ b/frontend/src/app/scripts/_components/ScriptItems/Buttons.tsx @@ -0,0 +1,57 @@ +import { Button } from "@/components/ui/button"; +import { basePath } from "@/config/siteConfig"; +import { Script } from "@/lib/types"; +import { BookOpenText, Code, Globe } from "lucide-react"; +import Link from "next/link"; + +const generateSourceUrl = (slug: string, type: string) => { + const baseUrl = `https://raw.githubusercontent.com/community-scripts/${basePath}/main`; + return type === "ct" + ? `${baseUrl}/install/${slug}-install.sh` + : `${baseUrl}/${type}/${slug}.sh`; +}; + +interface ButtonLinkProps { + href: string; + icon: React.ReactNode; + text: string; +} + +const ButtonLink = ({ href, icon, text }: ButtonLinkProps) => ( + +); + +export default function Buttons({ item }: { item: Script }) { + const buttons = [ + item.website && { + href: item.website, + icon: , + text: "Website", + }, + item.documentation && { + href: item.documentation, + icon: , + text: "Documentation", + }, + { + href: generateSourceUrl(item.slug, item.type), + icon: , + text: "Source Code", + }, + ].filter(Boolean) as ButtonLinkProps[]; + + return ( +
+ {buttons.map((props, index) => ( + + ))} +
+ ); +} diff --git a/frontend/src/app/scripts/_components/ScriptItems/DefaultPassword.tsx b/frontend/src/app/scripts/_components/ScriptItems/DefaultPassword.tsx new file mode 100644 index 000000000..15a962318 --- /dev/null +++ b/frontend/src/app/scripts/_components/ScriptItems/DefaultPassword.tsx @@ -0,0 +1,42 @@ +import handleCopy from "@/components/handleCopy"; +import { Button } from "@/components/ui/button"; +import { Separator } from "@/components/ui/separator"; +import { Script } from "@/lib/types"; + +export default function DefaultPassword({ item }: { item: Script }) { + const { username, password } = item.default_credentials; + const hasDefaultLogin = username && password; + + if (!hasDefaultLogin) return null; + + const copyCredential = (type: "username" | "password") => { + handleCopy(type, item.default_credentials[type] ?? ""); + }; + + return ( +
+
+

Default Login Credentials

+
+ +
+

+ You can use the following credentials to login to the {item.name}{" "} + {item.type}. +

+ {["username", "password"].map((type) => ( +
+ {type.charAt(0).toUpperCase() + type.slice(1)}:{" "} + +
+ ))} +
+
+ ); +} diff --git a/frontend/src/app/scripts/_components/ScriptItems/DefaultSettings.tsx b/frontend/src/app/scripts/_components/ScriptItems/DefaultSettings.tsx new file mode 100644 index 000000000..bfa61759d --- /dev/null +++ b/frontend/src/app/scripts/_components/ScriptItems/DefaultSettings.tsx @@ -0,0 +1,51 @@ +import { Script } from "@/lib/types"; + +export default function DefaultSettings({ item }: { item: Script }) { + const getDisplayValueFromRAM = (ram: number) => + ram >= 1024 ? `${Math.floor(ram / 1024)}GB` : `${ram}MB`; + + const ResourceDisplay = ({ + settings, + title, + }: { + settings: (typeof item.install_methods)[0]; + title: string; + }) => { + const { cpu, ram, hdd } = settings.resources; + return ( +
+

{title}

+

CPU: {cpu}vCPU

+

+ RAM: {getDisplayValueFromRAM(ram ?? 0)} +

+

HDD: {hdd}GB

+
+ ); + }; + + const defaultSettings = item.install_methods.find( + (method) => method.type === "default", + ); + const defaultAlpineSettings = item.install_methods.find( + (method) => method.type === "alpine", + ); + + const hasDefaultSettings = + defaultSettings?.resources && + Object.values(defaultSettings.resources).some(Boolean); + + return ( + <> + {hasDefaultSettings && ( + + )} + {defaultAlpineSettings && ( + + )} + + ); +} diff --git a/frontend/src/app/scripts/_components/ScriptItems/Description.tsx b/frontend/src/app/scripts/_components/ScriptItems/Description.tsx new file mode 100644 index 000000000..6a09f0a6c --- /dev/null +++ b/frontend/src/app/scripts/_components/ScriptItems/Description.tsx @@ -0,0 +1,13 @@ +import TextCopyBlock from "@/components/TextCopyBlock"; +import { Script } from "@/lib/types"; + +export default function Description({ item }: { item: Script }) { + return ( +
+

Description

+

+ {TextCopyBlock(item.description)} +

+
+ ); +} diff --git a/frontend/src/app/scripts/_components/ScriptItems/InstallCommand.tsx b/frontend/src/app/scripts/_components/ScriptItems/InstallCommand.tsx new file mode 100644 index 000000000..26d941cf3 --- /dev/null +++ b/frontend/src/app/scripts/_components/ScriptItems/InstallCommand.tsx @@ -0,0 +1,85 @@ +import CodeCopyButton from "@/components/ui/code-copy-button"; +import { Tabs, TabsContent, TabsList, TabsTrigger } from "@/components/ui/tabs"; +import { basePath } from "@/config/siteConfig"; +import { Script } from "@/lib/types"; +import { getDisplayValueFromType } from "../ScriptInfoBlocks"; + +const getInstallCommand = (scriptPath?: string, isAlpine = false) => { + return `bash -c "$(wget -q${isAlpine ? "" : "L"}O - https://github.com/community-scripts/${basePath}/raw/main/${scriptPath})"`; +}; + +export default function InstallCommand({ item }: { item: Script }) { + const alpineScript = item.install_methods.find( + (method) => method.type === "alpine", + ); + + const defaultScript = item.install_methods.find( + (method) => method.type === "default", + ); + + const renderInstructions = (isAlpine = false) => ( + <> +

+ {isAlpine ? ( + <> + As an alternative option, you can use Alpine Linux and the{" "} + {item.name} package to create a {item.name}{" "} + {getDisplayValueFromType(item.type)} container with faster creation + time and minimal system resource usage. You are also obliged to + adhere to updates provided by the package maintainer. + + ) : item.type == "misc" ? ( + <> + To use the {item.name} script, run the command below in the shell. + + ) : ( + <> + {" "} + To create a new Proxmox VE {item.name}{" "} + {getDisplayValueFromType(item.type)}, run the command below in the + Proxmox VE Shell. + + )} +

+ {isAlpine && ( +

+ To create a new Proxmox VE Alpine-{item.name}{" "} + {getDisplayValueFromType(item.type)}, run the command below in the + Proxmox VE Shell +

+ )} + + ); + + return ( +
+ {alpineScript ? ( + + + Default + Alpine Linux + + + {renderInstructions()} + + {getInstallCommand(defaultScript?.script)} + + + + {renderInstructions(true)} + + {getInstallCommand(alpineScript.script, true)} + + + + ) : defaultScript?.script ? ( + <> + {renderInstructions()} + + {getInstallCommand(defaultScript.script)} + + + ) : null} +
+ ); +} diff --git a/frontend/src/app/scripts/_components/ScriptItems/InterFaces.tsx b/frontend/src/app/scripts/_components/ScriptItems/InterFaces.tsx new file mode 100644 index 000000000..99f855fad --- /dev/null +++ b/frontend/src/app/scripts/_components/ScriptItems/InterFaces.tsx @@ -0,0 +1,41 @@ +import handleCopy from "@/components/handleCopy"; +import { buttonVariants } from "@/components/ui/button"; +import { Script } from "@/lib/types"; +import { cn } from "@/lib/utils"; +import { ClipboardIcon } from "lucide-react"; + +const CopyButton = ({ + label, + value, +}: { + label: string; + value: string | number; +}) => ( + + {value} + handleCopy(label, String(value))} + className="size-4 cursor-pointer" + /> + +); + +export default function InterFaces({ item }: { item: Script }) { + return ( +
+ {item.interface_port !== null ? ( +
+

+ {"Default Interface:"} +

{" "} + +
+ ) : null} +
+ ); +} diff --git a/frontend/src/app/scripts/_components/ScriptItems/Tooltips.tsx b/frontend/src/app/scripts/_components/ScriptItems/Tooltips.tsx new file mode 100644 index 000000000..9adb58b74 --- /dev/null +++ b/frontend/src/app/scripts/_components/ScriptItems/Tooltips.tsx @@ -0,0 +1,52 @@ +import { Badge } from "@/components/ui/badge"; +import { + Tooltip, + TooltipContent, + TooltipProvider, + TooltipTrigger, +} from "@/components/ui/tooltip"; +import { Script } from "@/lib/types"; +import { CircleHelp } from "lucide-react"; +import React from "react"; + +interface TooltipProps { + variant: "warning" | "success"; + label: string; + content: string; +} + +const TooltipBadge: React.FC = ({ variant, label, content }) => ( + + + + + {label} + + + + {content} + + + +); + +export default function Tooltips({ item }: { item: Script }) { + return ( +
+ {item.privileged && ( + + )} + {item.updateable && ( + + )} +
+ ); +} diff --git a/frontend/src/app/scripts/_components/Sidebar.tsx b/frontend/src/app/scripts/_components/Sidebar.tsx new file mode 100644 index 000000000..24f9dce20 --- /dev/null +++ b/frontend/src/app/scripts/_components/Sidebar.tsx @@ -0,0 +1,35 @@ +"use client"; + +import { Category } from "@/lib/types"; +import ScriptAccordion from "./ScriptAccordion"; + +const Sidebar = ({ + items, + selectedScript, + setSelectedScript, +}: { + items: Category[]; + selectedScript: string | null; + setSelectedScript: (script: string | null) => void; +}) => { + return ( +
+
+

Categories

+

+ {items.reduce((acc, category) => acc + category.scripts.length, 0)}{" "} + Total scripts +

+
+
+ +
+
+ ); +}; + +export default Sidebar; diff --git a/frontend/src/app/scripts/page.tsx b/frontend/src/app/scripts/page.tsx new file mode 100644 index 000000000..a02f80b83 --- /dev/null +++ b/frontend/src/app/scripts/page.tsx @@ -0,0 +1,79 @@ +"use client"; + +export const dynamic = "force-static"; + +import ScriptItem from "@/app/scripts/_components/ScriptItem"; +import { fetchCategories } from "@/lib/data"; +import { Category, Script } from "@/lib/types"; +import { Loader2 } from "lucide-react"; +import { useQueryState } from "nuqs"; +import { Suspense, useEffect, useState } from "react"; +import { + LatestScripts, + MostViewedScripts, +} from "./_components/ScriptInfoBlocks"; +import Sidebar from "./_components/Sidebar"; + +function ScriptContent() { + const [selectedScript, setSelectedScript] = useQueryState("id"); + const [links, setLinks] = useState([]); + const [item, setItem] = useState - - - - - - -
- -
-
-
- {children} - -
-
-
-
-
-
- - - ); -} diff --git a/frontend/src/app/manifest.ts b/frontend/src/app/manifest.ts deleted file mode 100644 index 1cfc38f5f..000000000 --- a/frontend/src/app/manifest.ts +++ /dev/null @@ -1,28 +0,0 @@ -import { basePath } from "@/config/siteConfig"; -import type { MetadataRoute } from "next"; - -export const generateStaticParams = () => { - return []; -}; - -export default function manifest(): MetadataRoute.Manifest { - return { - name: "Proxmox VE Helper-Scripts", - short_name: "Proxmox VE Helper-Scripts", - description: - "A Re-designed Front-end for the Proxmox VE Helper-Scripts Repository. Featuring over 200+ scripts to help you manage your Proxmox VE environment.", - theme_color: "#030712", - background_color: "#030712", - display: "standalone", - orientation: "portrait", - scope: `${basePath}`, - start_url: `${basePath}`, - icons: [ - { - src: "logo.png", - sizes: "512x512", - type: "image/png", - }, - ], - }; -} diff --git a/frontend/src/app/not-found.tsx b/frontend/src/app/not-found.tsx deleted file mode 100644 index 8307ae2c4..000000000 --- a/frontend/src/app/not-found.tsx +++ /dev/null @@ -1,20 +0,0 @@ -"use client"; -import { Button } from "@/components/ui/button"; - -export default function NotFoundPage() { - return ( -
-
-

- 404 -

-

- Oops, the page you are looking for could not be found. -

-
- -
- ); -} diff --git a/frontend/src/app/page.tsx b/frontend/src/app/page.tsx deleted file mode 100644 index c6fad745a..000000000 --- a/frontend/src/app/page.tsx +++ /dev/null @@ -1,146 +0,0 @@ -"use client"; -import AnimatedGradientText from "@/components/ui/animated-gradient-text"; -import { Button } from "@/components/ui/button"; -import { CardFooter } from "@/components/ui/card"; -import { - Dialog, - DialogContent, - DialogDescription, - DialogHeader, - DialogTitle, - DialogTrigger, -} from "@/components/ui/dialog"; -import Particles from "@/components/ui/particles"; -import { Separator } from "@/components/ui/separator"; -import { basePath } from "@/config/siteConfig"; -import { cn } from "@/lib/utils"; -import { ArrowRightIcon, ExternalLink } from "lucide-react"; -import { useTheme } from "next-themes"; -import Link from "next/link"; -import { useEffect, useState } from "react"; -import { FaGithub } from "react-icons/fa"; - -function CustomArrowRightIcon() { - return ; -} - -export default function Page() { - const { theme } = useTheme(); - - const [color, setColor] = useState("#000000"); - - useEffect(() => { - setColor(theme === "dark" ? "#ffffff" : "#000000"); - }, [theme]); - - return ( -
- -
-
- - -
- -
- ❤️ - - Scripts by Tteck - - -
- - - - Thank You! - - A big thank you to Tteck and the many contributors who have - made this project possible. Your hard work is truly - appreciated by the entire Proxmox community! - - - - - - - -
- -
-

- Make managing your Homelab a breeze -

-

- We are a community-driven initiative that simplifies the setup of - Proxmox Virtual Environment (VE). -
-
- Originally created by{" "} - - tteck - - , these scripts automate and streamline -
- the process of creating and configuring Linux containers (LXC) and - virtual machines (VMs) on Proxmox VE. -
-
- With 200+ scripts to help you manage your{" "} - Proxmox VE environment.
- Whether you're a seasoned user or a newcomer, we've got - you covered. -

-
-
- - - -
-
-
-
- ); -} diff --git a/frontend/src/app/robots.ts b/frontend/src/app/robots.ts deleted file mode 100644 index fc01ac87c..000000000 --- a/frontend/src/app/robots.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { basePath } from "@/config/siteConfig"; -import type { MetadataRoute } from "next"; - -export const dynamic = "force-static"; - -export default function robots(): MetadataRoute.Robots { - return { - rules: { - userAgent: "*", - allow: "/", - }, - sitemap: `https://community-scripts.github.io/${basePath}/sitemap.xml`, - }; -} diff --git a/frontend/src/app/scripts/_components/ScriptAccordion.tsx b/frontend/src/app/scripts/_components/ScriptAccordion.tsx deleted file mode 100644 index 3864c4b20..000000000 --- a/frontend/src/app/scripts/_components/ScriptAccordion.tsx +++ /dev/null @@ -1,132 +0,0 @@ -import { useCallback, useEffect, useRef } from "react"; - -import { formattedBadge } from "@/components/CommandMenu"; -import { - Accordion, - AccordionContent, - AccordionItem, - AccordionTrigger, -} from "@/components/ui/accordion"; -import { Category } from "@/lib/types"; -import { cn } from "@/lib/utils"; -import Image from "next/image"; -import Link from "next/link"; -import { useState } from "react"; -import { basePath } from "@/config/siteConfig"; - -export default function ScriptAccordion({ - items, - selectedScript, - setSelectedScript, -}: { - items: Category[]; - selectedScript: string | null; - setSelectedScript: (script: string | null) => void; -}) { - const [expandedItem, setExpandedItem] = useState( - undefined, - ); - const linkRefs = useRef<{ [key: string]: HTMLAnchorElement | null }>({}); - - const handleAccordionChange = (value: string | undefined) => { - setExpandedItem(value); - }; - - const handleSelected = useCallback( - (slug: string) => { - setSelectedScript(slug); - }, - [setSelectedScript], - ); - - useEffect(() => { - if (selectedScript) { - const category = items.find((category) => - category.scripts.some((script) => script.slug === selectedScript), - ); - if (category) { - setExpandedItem(category.name); - handleSelected(selectedScript); - } - } - }, [selectedScript, items, handleSelected]); - return ( - - {items.map((category) => ( - - -
- {category.name} - - {category.scripts.length} - -
{" "} -
- - {category.scripts - .slice() - .sort((a, b) => a.name.localeCompare(b.name)) - .map((script, index) => ( -
- handleSelected(script.slug)} - ref={(el) => { - linkRefs.current[script.slug] = el; - }} - > -
- - ((e.currentTarget as HTMLImageElement).src = - `/${basePath}/logo.png`) - } - alt={script.name} - className="mr-1 w-4 h-4 rounded-full" - /> - - {script.name} - -
- {formattedBadge(script.type)} - -
- ))} -
-
- ))} -
- ); -} diff --git a/frontend/src/app/scripts/_components/ScriptInfoBlocks.tsx b/frontend/src/app/scripts/_components/ScriptInfoBlocks.tsx deleted file mode 100644 index 1c418c94c..000000000 --- a/frontend/src/app/scripts/_components/ScriptInfoBlocks.tsx +++ /dev/null @@ -1,213 +0,0 @@ -import { Button } from "@/components/ui/button"; -import { - Card, - CardContent, - CardDescription, - CardFooter, - CardHeader, - CardTitle, -} from "@/components/ui/card"; -import { basePath, mostPopularScripts } from "@/config/siteConfig"; -import { extractDate } from "@/lib/time"; -import { Category, Script } from "@/lib/types"; -import { CalendarPlus } from "lucide-react"; -import Image from "next/image"; -import Link from "next/link"; -import { useMemo, useState } from "react"; - -const ITEMS_PER_PAGE = 3; - -export const getDisplayValueFromType = (type: string) => { - switch (type) { - case "ct": - return "LXC"; - case "vm": - return "VM"; - case "misc": - return ""; - default: - return ""; - } -}; - -export function LatestScripts({ items }: { items: Category[] }) { - const [page, setPage] = useState(1); - - const latestScripts = useMemo(() => { - if (!items) return []; - const scripts = items.flatMap((category) => category.scripts || []); - return scripts.sort( - (a, b) => - new Date(b.date_created).getTime() - new Date(a.date_created).getTime(), - ); - }, [items]); - - const goToNextPage = () => { - setPage((prevPage) => prevPage + 1); - }; - - const goToPreviousPage = () => { - setPage((prevPage) => prevPage - 1); - }; - - const startIndex = (page - 1) * ITEMS_PER_PAGE; - const endIndex = page * ITEMS_PER_PAGE; - - if (!items) { - return null; - } - - return ( -
- {latestScripts.length > 0 && ( -
-

Newest Scripts

-
- {page > 1 && ( -
- Previous -
- )} - {endIndex < latestScripts.length && ( -
- {page === 1 ? "More.." : "Next"} -
- )} -
-
- )} -
- {latestScripts.slice(startIndex, endIndex).map((script) => ( - - - -
- - ((e.currentTarget as HTMLImageElement).src = - `/${basePath}/logo.png`) - } - className="h-11 w-11 object-contain" - /> -
-
-

- {script.name} {getDisplayValueFromType(script.type)} -

-

- - {extractDate(script.date_created)} -

-
-
-
- - - {script.description} - - - - - -
- ))} -
-
- ); -} - -export function MostViewedScripts({ items }: { items: Category[] }) { - const mostViewedScripts = items.reduce((acc: Script[], category) => { - const foundScripts = category.scripts.filter((script) => - mostPopularScripts.includes(script.name), - ); - return acc.concat(foundScripts); - }, []); - - return ( -
- {mostViewedScripts.length > 0 && ( - <> -

Most Viewed Scripts

- - )} -
- {mostViewedScripts.map((script) => ( - - - -
- - ((e.currentTarget as HTMLImageElement).src = - `/${basePath}/logo.png`) - } - className="h-11 w-11 object-contain" - /> -
-
-

- {script.name} {getDisplayValueFromType(script.type)} -

-

- - {extractDate(script.date_created)} -

-
-
-
- - - {script.description} - - - - - -
- ))} -
-
- ); -} diff --git a/frontend/src/app/scripts/_components/ScriptItem.tsx b/frontend/src/app/scripts/_components/ScriptItem.tsx deleted file mode 100644 index fb9e64e0b..000000000 --- a/frontend/src/app/scripts/_components/ScriptItem.tsx +++ /dev/null @@ -1,100 +0,0 @@ -"use client"; -import { Separator } from "@/components/ui/separator"; -import { extractDate } from "@/lib/time"; -import { Script } from "@/lib/types"; -import { X } from "lucide-react"; -import Image from "next/image"; - -import { getDisplayValueFromType } from "./ScriptInfoBlocks"; -import Alerts from "./ScriptItems/Alerts"; -import Buttons from "./ScriptItems/Buttons"; -import DefaultPassword from "./ScriptItems/DefaultPassword"; -import DefaultSettings from "./ScriptItems/DefaultSettings"; -import Description from "./ScriptItems/Description"; -import InstallCommand from "./ScriptItems/InstallCommand"; -import InterFaces from "./ScriptItems/InterFaces"; -import Tooltips from "./ScriptItems/Tooltips"; -import { basePath } from "@/config/siteConfig"; - -function ScriptItem({ - item, - setSelectedScript, -}: { - item: Script; - setSelectedScript: (script: string | null) => void; -}) { - const closeScript = () => { - window.history.pushState({}, document.title, window.location.pathname); - setSelectedScript(null); - }; - - return ( -
-
-
-
-

Selected Script

- -
-
-
-
- - ((e.currentTarget as HTMLImageElement).src = - `/${basePath}/logo.png`) - } - height={400} - alt={item.name} - unoptimized - /> -
-
-
-

- {item.name} {getDisplayValueFromType(item.type)} -

-

- Date added: {extractDate(item.date_created)} -

-
-
- -
-
-
-
-
- - -
-
- -
-
- - -
-
-
-

- How to {item.type == "misc" ? "use" : "install"} -

- -
- - -
-
- -
-
-
-
- ); -} - -export default ScriptItem; diff --git a/frontend/src/app/scripts/_components/ScriptItems/Alerts.tsx b/frontend/src/app/scripts/_components/ScriptItems/Alerts.tsx deleted file mode 100644 index b915be3ff..000000000 --- a/frontend/src/app/scripts/_components/ScriptItems/Alerts.tsx +++ /dev/null @@ -1,35 +0,0 @@ -import TextCopyBlock from "@/components/TextCopyBlock"; -import { AlertColors } from "@/config/siteConfig"; -import { Script } from "@/lib/types"; -import { cn } from "@/lib/utils"; -import { AlertCircle, NotepadText } from "lucide-react"; - -type NoteProps = { - text: string; - type: keyof typeof AlertColors; -} - -export default function Alerts({ item }: { item: Script }) { - return ( - <> - {item?.notes?.length > 0 && - item.notes.map((note: NoteProps, index: number) => ( -
-

- {note.type == "info" ? ( - - ) : ( - - )} - {TextCopyBlock(note.text)} -

-
- ))} - - ); -} diff --git a/frontend/src/app/scripts/_components/ScriptItems/Buttons.tsx b/frontend/src/app/scripts/_components/ScriptItems/Buttons.tsx deleted file mode 100644 index cb46e437b..000000000 --- a/frontend/src/app/scripts/_components/ScriptItems/Buttons.tsx +++ /dev/null @@ -1,57 +0,0 @@ -import { Button } from "@/components/ui/button"; -import { basePath } from "@/config/siteConfig"; -import { Script } from "@/lib/types"; -import { BookOpenText, Code, Globe } from "lucide-react"; -import Link from "next/link"; - -const generateSourceUrl = (slug: string, type: string) => { - const baseUrl = `https://raw.githubusercontent.com/community-scripts/${basePath}/main`; - return type === "ct" - ? `${baseUrl}/install/${slug}-install.sh` - : `${baseUrl}/${type}/${slug}.sh`; -}; - -interface ButtonLinkProps { - href: string; - icon: React.ReactNode; - text: string; -} - -const ButtonLink = ({ href, icon, text }: ButtonLinkProps) => ( - -); - -export default function Buttons({ item }: { item: Script }) { - const buttons = [ - item.website && { - href: item.website, - icon: , - text: "Website", - }, - item.documentation && { - href: item.documentation, - icon: , - text: "Documentation", - }, - { - href: generateSourceUrl(item.slug, item.type), - icon: , - text: "Source Code", - }, - ].filter(Boolean) as ButtonLinkProps[]; - - return ( -
- {buttons.map((props, index) => ( - - ))} -
- ); -} diff --git a/frontend/src/app/scripts/_components/ScriptItems/DefaultPassword.tsx b/frontend/src/app/scripts/_components/ScriptItems/DefaultPassword.tsx deleted file mode 100644 index 15a962318..000000000 --- a/frontend/src/app/scripts/_components/ScriptItems/DefaultPassword.tsx +++ /dev/null @@ -1,42 +0,0 @@ -import handleCopy from "@/components/handleCopy"; -import { Button } from "@/components/ui/button"; -import { Separator } from "@/components/ui/separator"; -import { Script } from "@/lib/types"; - -export default function DefaultPassword({ item }: { item: Script }) { - const { username, password } = item.default_credentials; - const hasDefaultLogin = username && password; - - if (!hasDefaultLogin) return null; - - const copyCredential = (type: "username" | "password") => { - handleCopy(type, item.default_credentials[type] ?? ""); - }; - - return ( -
-
-

Default Login Credentials

-
- -
-

- You can use the following credentials to login to the {item.name}{" "} - {item.type}. -

- {["username", "password"].map((type) => ( -
- {type.charAt(0).toUpperCase() + type.slice(1)}:{" "} - -
- ))} -
-
- ); -} diff --git a/frontend/src/app/scripts/_components/ScriptItems/DefaultSettings.tsx b/frontend/src/app/scripts/_components/ScriptItems/DefaultSettings.tsx deleted file mode 100644 index bfa61759d..000000000 --- a/frontend/src/app/scripts/_components/ScriptItems/DefaultSettings.tsx +++ /dev/null @@ -1,51 +0,0 @@ -import { Script } from "@/lib/types"; - -export default function DefaultSettings({ item }: { item: Script }) { - const getDisplayValueFromRAM = (ram: number) => - ram >= 1024 ? `${Math.floor(ram / 1024)}GB` : `${ram}MB`; - - const ResourceDisplay = ({ - settings, - title, - }: { - settings: (typeof item.install_methods)[0]; - title: string; - }) => { - const { cpu, ram, hdd } = settings.resources; - return ( -
-

{title}

-

CPU: {cpu}vCPU

-

- RAM: {getDisplayValueFromRAM(ram ?? 0)} -

-

HDD: {hdd}GB

-
- ); - }; - - const defaultSettings = item.install_methods.find( - (method) => method.type === "default", - ); - const defaultAlpineSettings = item.install_methods.find( - (method) => method.type === "alpine", - ); - - const hasDefaultSettings = - defaultSettings?.resources && - Object.values(defaultSettings.resources).some(Boolean); - - return ( - <> - {hasDefaultSettings && ( - - )} - {defaultAlpineSettings && ( - - )} - - ); -} diff --git a/frontend/src/app/scripts/_components/ScriptItems/Description.tsx b/frontend/src/app/scripts/_components/ScriptItems/Description.tsx deleted file mode 100644 index 6a09f0a6c..000000000 --- a/frontend/src/app/scripts/_components/ScriptItems/Description.tsx +++ /dev/null @@ -1,13 +0,0 @@ -import TextCopyBlock from "@/components/TextCopyBlock"; -import { Script } from "@/lib/types"; - -export default function Description({ item }: { item: Script }) { - return ( -
-

Description

-

- {TextCopyBlock(item.description)} -

-
- ); -} diff --git a/frontend/src/app/scripts/_components/ScriptItems/InstallCommand.tsx b/frontend/src/app/scripts/_components/ScriptItems/InstallCommand.tsx deleted file mode 100644 index 26d941cf3..000000000 --- a/frontend/src/app/scripts/_components/ScriptItems/InstallCommand.tsx +++ /dev/null @@ -1,85 +0,0 @@ -import CodeCopyButton from "@/components/ui/code-copy-button"; -import { Tabs, TabsContent, TabsList, TabsTrigger } from "@/components/ui/tabs"; -import { basePath } from "@/config/siteConfig"; -import { Script } from "@/lib/types"; -import { getDisplayValueFromType } from "../ScriptInfoBlocks"; - -const getInstallCommand = (scriptPath?: string, isAlpine = false) => { - return `bash -c "$(wget -q${isAlpine ? "" : "L"}O - https://github.com/community-scripts/${basePath}/raw/main/${scriptPath})"`; -}; - -export default function InstallCommand({ item }: { item: Script }) { - const alpineScript = item.install_methods.find( - (method) => method.type === "alpine", - ); - - const defaultScript = item.install_methods.find( - (method) => method.type === "default", - ); - - const renderInstructions = (isAlpine = false) => ( - <> -

- {isAlpine ? ( - <> - As an alternative option, you can use Alpine Linux and the{" "} - {item.name} package to create a {item.name}{" "} - {getDisplayValueFromType(item.type)} container with faster creation - time and minimal system resource usage. You are also obliged to - adhere to updates provided by the package maintainer. - - ) : item.type == "misc" ? ( - <> - To use the {item.name} script, run the command below in the shell. - - ) : ( - <> - {" "} - To create a new Proxmox VE {item.name}{" "} - {getDisplayValueFromType(item.type)}, run the command below in the - Proxmox VE Shell. - - )} -

- {isAlpine && ( -

- To create a new Proxmox VE Alpine-{item.name}{" "} - {getDisplayValueFromType(item.type)}, run the command below in the - Proxmox VE Shell -

- )} - - ); - - return ( -
- {alpineScript ? ( - - - Default - Alpine Linux - - - {renderInstructions()} - - {getInstallCommand(defaultScript?.script)} - - - - {renderInstructions(true)} - - {getInstallCommand(alpineScript.script, true)} - - - - ) : defaultScript?.script ? ( - <> - {renderInstructions()} - - {getInstallCommand(defaultScript.script)} - - - ) : null} -
- ); -} diff --git a/frontend/src/app/scripts/_components/ScriptItems/InterFaces.tsx b/frontend/src/app/scripts/_components/ScriptItems/InterFaces.tsx deleted file mode 100644 index 99f855fad..000000000 --- a/frontend/src/app/scripts/_components/ScriptItems/InterFaces.tsx +++ /dev/null @@ -1,41 +0,0 @@ -import handleCopy from "@/components/handleCopy"; -import { buttonVariants } from "@/components/ui/button"; -import { Script } from "@/lib/types"; -import { cn } from "@/lib/utils"; -import { ClipboardIcon } from "lucide-react"; - -const CopyButton = ({ - label, - value, -}: { - label: string; - value: string | number; -}) => ( - - {value} - handleCopy(label, String(value))} - className="size-4 cursor-pointer" - /> - -); - -export default function InterFaces({ item }: { item: Script }) { - return ( -
- {item.interface_port !== null ? ( -
-

- {"Default Interface:"} -

{" "} - -
- ) : null} -
- ); -} diff --git a/frontend/src/app/scripts/_components/ScriptItems/Tooltips.tsx b/frontend/src/app/scripts/_components/ScriptItems/Tooltips.tsx deleted file mode 100644 index 9adb58b74..000000000 --- a/frontend/src/app/scripts/_components/ScriptItems/Tooltips.tsx +++ /dev/null @@ -1,52 +0,0 @@ -import { Badge } from "@/components/ui/badge"; -import { - Tooltip, - TooltipContent, - TooltipProvider, - TooltipTrigger, -} from "@/components/ui/tooltip"; -import { Script } from "@/lib/types"; -import { CircleHelp } from "lucide-react"; -import React from "react"; - -interface TooltipProps { - variant: "warning" | "success"; - label: string; - content: string; -} - -const TooltipBadge: React.FC = ({ variant, label, content }) => ( - - - - - {label} - - - - {content} - - - -); - -export default function Tooltips({ item }: { item: Script }) { - return ( -
- {item.privileged && ( - - )} - {item.updateable && ( - - )} -
- ); -} diff --git a/frontend/src/app/scripts/_components/Sidebar.tsx b/frontend/src/app/scripts/_components/Sidebar.tsx deleted file mode 100644 index 24f9dce20..000000000 --- a/frontend/src/app/scripts/_components/Sidebar.tsx +++ /dev/null @@ -1,35 +0,0 @@ -"use client"; - -import { Category } from "@/lib/types"; -import ScriptAccordion from "./ScriptAccordion"; - -const Sidebar = ({ - items, - selectedScript, - setSelectedScript, -}: { - items: Category[]; - selectedScript: string | null; - setSelectedScript: (script: string | null) => void; -}) => { - return ( -
-
-

Categories

-

- {items.reduce((acc, category) => acc + category.scripts.length, 0)}{" "} - Total scripts -

-
-
- -
-
- ); -}; - -export default Sidebar; diff --git a/frontend/src/app/scripts/page.tsx b/frontend/src/app/scripts/page.tsx deleted file mode 100644 index a02f80b83..000000000 --- a/frontend/src/app/scripts/page.tsx +++ /dev/null @@ -1,79 +0,0 @@ -"use client"; - -export const dynamic = "force-static"; - -import ScriptItem from "@/app/scripts/_components/ScriptItem"; -import { fetchCategories } from "@/lib/data"; -import { Category, Script } from "@/lib/types"; -import { Loader2 } from "lucide-react"; -import { useQueryState } from "nuqs"; -import { Suspense, useEffect, useState } from "react"; -import { - LatestScripts, - MostViewedScripts, -} from "./_components/ScriptInfoBlocks"; -import Sidebar from "./_components/Sidebar"; - -function ScriptContent() { - const [selectedScript, setSelectedScript] = useQueryState("id"); - const [links, setLinks] = useState([]); - const [item, setItem] = useState + + + + + + +
+ +
+
+
+ {children} + +
+
+
+
+
+
+ + + ); +} diff --git a/frontend/src/app/manifest.ts b/frontend/src/app/manifest.ts new file mode 100644 index 000000000..1cfc38f5f --- /dev/null +++ b/frontend/src/app/manifest.ts @@ -0,0 +1,28 @@ +import { basePath } from "@/config/siteConfig"; +import type { MetadataRoute } from "next"; + +export const generateStaticParams = () => { + return []; +}; + +export default function manifest(): MetadataRoute.Manifest { + return { + name: "Proxmox VE Helper-Scripts", + short_name: "Proxmox VE Helper-Scripts", + description: + "A Re-designed Front-end for the Proxmox VE Helper-Scripts Repository. Featuring over 200+ scripts to help you manage your Proxmox VE environment.", + theme_color: "#030712", + background_color: "#030712", + display: "standalone", + orientation: "portrait", + scope: `${basePath}`, + start_url: `${basePath}`, + icons: [ + { + src: "logo.png", + sizes: "512x512", + type: "image/png", + }, + ], + }; +} diff --git a/frontend/src/app/not-found.tsx b/frontend/src/app/not-found.tsx new file mode 100644 index 000000000..8307ae2c4 --- /dev/null +++ b/frontend/src/app/not-found.tsx @@ -0,0 +1,20 @@ +"use client"; +import { Button } from "@/components/ui/button"; + +export default function NotFoundPage() { + return ( +
+
+

+ 404 +

+

+ Oops, the page you are looking for could not be found. +

+
+ +
+ ); +} diff --git a/frontend/src/app/page.tsx b/frontend/src/app/page.tsx new file mode 100644 index 000000000..c6fad745a --- /dev/null +++ b/frontend/src/app/page.tsx @@ -0,0 +1,146 @@ +"use client"; +import AnimatedGradientText from "@/components/ui/animated-gradient-text"; +import { Button } from "@/components/ui/button"; +import { CardFooter } from "@/components/ui/card"; +import { + Dialog, + DialogContent, + DialogDescription, + DialogHeader, + DialogTitle, + DialogTrigger, +} from "@/components/ui/dialog"; +import Particles from "@/components/ui/particles"; +import { Separator } from "@/components/ui/separator"; +import { basePath } from "@/config/siteConfig"; +import { cn } from "@/lib/utils"; +import { ArrowRightIcon, ExternalLink } from "lucide-react"; +import { useTheme } from "next-themes"; +import Link from "next/link"; +import { useEffect, useState } from "react"; +import { FaGithub } from "react-icons/fa"; + +function CustomArrowRightIcon() { + return ; +} + +export default function Page() { + const { theme } = useTheme(); + + const [color, setColor] = useState("#000000"); + + useEffect(() => { + setColor(theme === "dark" ? "#ffffff" : "#000000"); + }, [theme]); + + return ( +
+ +
+
+ + +
+ +
+ ❤️ + + Scripts by Tteck + + +
+ + + + Thank You! + + A big thank you to Tteck and the many contributors who have + made this project possible. Your hard work is truly + appreciated by the entire Proxmox community! + + + + + + + +
+ +
+

+ Make managing your Homelab a breeze +

+

+ We are a community-driven initiative that simplifies the setup of + Proxmox Virtual Environment (VE). +
+
+ Originally created by{" "} + + tteck + + , these scripts automate and streamline +
+ the process of creating and configuring Linux containers (LXC) and + virtual machines (VMs) on Proxmox VE. +
+
+ With 200+ scripts to help you manage your{" "} + Proxmox VE environment.
+ Whether you're a seasoned user or a newcomer, we've got + you covered. +

+
+
+ + + +
+
+
+
+ ); +} diff --git a/frontend/src/app/robots.ts b/frontend/src/app/robots.ts new file mode 100644 index 000000000..fc01ac87c --- /dev/null +++ b/frontend/src/app/robots.ts @@ -0,0 +1,14 @@ +import { basePath } from "@/config/siteConfig"; +import type { MetadataRoute } from "next"; + +export const dynamic = "force-static"; + +export default function robots(): MetadataRoute.Robots { + return { + rules: { + userAgent: "*", + allow: "/", + }, + sitemap: `https://community-scripts.github.io/${basePath}/sitemap.xml`, + }; +} diff --git a/frontend/src/app/scripts/_components/ScriptAccordion.tsx b/frontend/src/app/scripts/_components/ScriptAccordion.tsx new file mode 100644 index 000000000..3864c4b20 --- /dev/null +++ b/frontend/src/app/scripts/_components/ScriptAccordion.tsx @@ -0,0 +1,132 @@ +import { useCallback, useEffect, useRef } from "react"; + +import { formattedBadge } from "@/components/CommandMenu"; +import { + Accordion, + AccordionContent, + AccordionItem, + AccordionTrigger, +} from "@/components/ui/accordion"; +import { Category } from "@/lib/types"; +import { cn } from "@/lib/utils"; +import Image from "next/image"; +import Link from "next/link"; +import { useState } from "react"; +import { basePath } from "@/config/siteConfig"; + +export default function ScriptAccordion({ + items, + selectedScript, + setSelectedScript, +}: { + items: Category[]; + selectedScript: string | null; + setSelectedScript: (script: string | null) => void; +}) { + const [expandedItem, setExpandedItem] = useState( + undefined, + ); + const linkRefs = useRef<{ [key: string]: HTMLAnchorElement | null }>({}); + + const handleAccordionChange = (value: string | undefined) => { + setExpandedItem(value); + }; + + const handleSelected = useCallback( + (slug: string) => { + setSelectedScript(slug); + }, + [setSelectedScript], + ); + + useEffect(() => { + if (selectedScript) { + const category = items.find((category) => + category.scripts.some((script) => script.slug === selectedScript), + ); + if (category) { + setExpandedItem(category.name); + handleSelected(selectedScript); + } + } + }, [selectedScript, items, handleSelected]); + return ( + + {items.map((category) => ( + + +
+ {category.name} + + {category.scripts.length} + +
{" "} +
+ + {category.scripts + .slice() + .sort((a, b) => a.name.localeCompare(b.name)) + .map((script, index) => ( +
+ handleSelected(script.slug)} + ref={(el) => { + linkRefs.current[script.slug] = el; + }} + > +
+ + ((e.currentTarget as HTMLImageElement).src = + `/${basePath}/logo.png`) + } + alt={script.name} + className="mr-1 w-4 h-4 rounded-full" + /> + + {script.name} + +
+ {formattedBadge(script.type)} + +
+ ))} +
+
+ ))} +
+ ); +} diff --git a/frontend/src/app/scripts/_components/ScriptInfoBlocks.tsx b/frontend/src/app/scripts/_components/ScriptInfoBlocks.tsx new file mode 100644 index 000000000..1c418c94c --- /dev/null +++ b/frontend/src/app/scripts/_components/ScriptInfoBlocks.tsx @@ -0,0 +1,213 @@ +import { Button } from "@/components/ui/button"; +import { + Card, + CardContent, + CardDescription, + CardFooter, + CardHeader, + CardTitle, +} from "@/components/ui/card"; +import { basePath, mostPopularScripts } from "@/config/siteConfig"; +import { extractDate } from "@/lib/time"; +import { Category, Script } from "@/lib/types"; +import { CalendarPlus } from "lucide-react"; +import Image from "next/image"; +import Link from "next/link"; +import { useMemo, useState } from "react"; + +const ITEMS_PER_PAGE = 3; + +export const getDisplayValueFromType = (type: string) => { + switch (type) { + case "ct": + return "LXC"; + case "vm": + return "VM"; + case "misc": + return ""; + default: + return ""; + } +}; + +export function LatestScripts({ items }: { items: Category[] }) { + const [page, setPage] = useState(1); + + const latestScripts = useMemo(() => { + if (!items) return []; + const scripts = items.flatMap((category) => category.scripts || []); + return scripts.sort( + (a, b) => + new Date(b.date_created).getTime() - new Date(a.date_created).getTime(), + ); + }, [items]); + + const goToNextPage = () => { + setPage((prevPage) => prevPage + 1); + }; + + const goToPreviousPage = () => { + setPage((prevPage) => prevPage - 1); + }; + + const startIndex = (page - 1) * ITEMS_PER_PAGE; + const endIndex = page * ITEMS_PER_PAGE; + + if (!items) { + return null; + } + + return ( +
+ {latestScripts.length > 0 && ( +
+

Newest Scripts

+
+ {page > 1 && ( +
+ Previous +
+ )} + {endIndex < latestScripts.length && ( +
+ {page === 1 ? "More.." : "Next"} +
+ )} +
+
+ )} +
+ {latestScripts.slice(startIndex, endIndex).map((script) => ( + + + +
+ + ((e.currentTarget as HTMLImageElement).src = + `/${basePath}/logo.png`) + } + className="h-11 w-11 object-contain" + /> +
+
+

+ {script.name} {getDisplayValueFromType(script.type)} +

+

+ + {extractDate(script.date_created)} +

+
+
+
+ + + {script.description} + + + + + +
+ ))} +
+
+ ); +} + +export function MostViewedScripts({ items }: { items: Category[] }) { + const mostViewedScripts = items.reduce((acc: Script[], category) => { + const foundScripts = category.scripts.filter((script) => + mostPopularScripts.includes(script.name), + ); + return acc.concat(foundScripts); + }, []); + + return ( +
+ {mostViewedScripts.length > 0 && ( + <> +

Most Viewed Scripts

+ + )} +
+ {mostViewedScripts.map((script) => ( + + + +
+ + ((e.currentTarget as HTMLImageElement).src = + `/${basePath}/logo.png`) + } + className="h-11 w-11 object-contain" + /> +
+
+

+ {script.name} {getDisplayValueFromType(script.type)} +

+

+ + {extractDate(script.date_created)} +

+
+
+
+ + + {script.description} + + + + + +
+ ))} +
+
+ ); +} diff --git a/frontend/src/app/scripts/_components/ScriptItem.tsx b/frontend/src/app/scripts/_components/ScriptItem.tsx new file mode 100644 index 000000000..fb9e64e0b --- /dev/null +++ b/frontend/src/app/scripts/_components/ScriptItem.tsx @@ -0,0 +1,100 @@ +"use client"; +import { Separator } from "@/components/ui/separator"; +import { extractDate } from "@/lib/time"; +import { Script } from "@/lib/types"; +import { X } from "lucide-react"; +import Image from "next/image"; + +import { getDisplayValueFromType } from "./ScriptInfoBlocks"; +import Alerts from "./ScriptItems/Alerts"; +import Buttons from "./ScriptItems/Buttons"; +import DefaultPassword from "./ScriptItems/DefaultPassword"; +import DefaultSettings from "./ScriptItems/DefaultSettings"; +import Description from "./ScriptItems/Description"; +import InstallCommand from "./ScriptItems/InstallCommand"; +import InterFaces from "./ScriptItems/InterFaces"; +import Tooltips from "./ScriptItems/Tooltips"; +import { basePath } from "@/config/siteConfig"; + +function ScriptItem({ + item, + setSelectedScript, +}: { + item: Script; + setSelectedScript: (script: string | null) => void; +}) { + const closeScript = () => { + window.history.pushState({}, document.title, window.location.pathname); + setSelectedScript(null); + }; + + return ( +
+
+
+
+

Selected Script

+ +
+
+
+
+ + ((e.currentTarget as HTMLImageElement).src = + `/${basePath}/logo.png`) + } + height={400} + alt={item.name} + unoptimized + /> +
+
+
+

+ {item.name} {getDisplayValueFromType(item.type)} +

+

+ Date added: {extractDate(item.date_created)} +

+
+
+ +
+
+
+
+
+ + +
+
+ +
+
+ + +
+
+
+

+ How to {item.type == "misc" ? "use" : "install"} +

+ +
+ + +
+
+ +
+
+
+
+ ); +} + +export default ScriptItem; diff --git a/frontend/src/app/scripts/_components/ScriptItems/Alerts.tsx b/frontend/src/app/scripts/_components/ScriptItems/Alerts.tsx new file mode 100644 index 000000000..b915be3ff --- /dev/null +++ b/frontend/src/app/scripts/_components/ScriptItems/Alerts.tsx @@ -0,0 +1,35 @@ +import TextCopyBlock from "@/components/TextCopyBlock"; +import { AlertColors } from "@/config/siteConfig"; +import { Script } from "@/lib/types"; +import { cn } from "@/lib/utils"; +import { AlertCircle, NotepadText } from "lucide-react"; + +type NoteProps = { + text: string; + type: keyof typeof AlertColors; +} + +export default function Alerts({ item }: { item: Script }) { + return ( + <> + {item?.notes?.length > 0 && + item.notes.map((note: NoteProps, index: number) => ( +
+

+ {note.type == "info" ? ( + + ) : ( + + )} + {TextCopyBlock(note.text)} +

+
+ ))} + + ); +} diff --git a/frontend/src/app/scripts/_components/ScriptItems/Buttons.tsx b/frontend/src/app/scripts/_components/ScriptItems/Buttons.tsx new file mode 100644 index 000000000..cb46e437b --- /dev/null +++ b/frontend/src/app/scripts/_components/ScriptItems/Buttons.tsx @@ -0,0 +1,57 @@ +import { Button } from "@/components/ui/button"; +import { basePath } from "@/config/siteConfig"; +import { Script } from "@/lib/types"; +import { BookOpenText, Code, Globe } from "lucide-react"; +import Link from "next/link"; + +const generateSourceUrl = (slug: string, type: string) => { + const baseUrl = `https://raw.githubusercontent.com/community-scripts/${basePath}/main`; + return type === "ct" + ? `${baseUrl}/install/${slug}-install.sh` + : `${baseUrl}/${type}/${slug}.sh`; +}; + +interface ButtonLinkProps { + href: string; + icon: React.ReactNode; + text: string; +} + +const ButtonLink = ({ href, icon, text }: ButtonLinkProps) => ( + +); + +export default function Buttons({ item }: { item: Script }) { + const buttons = [ + item.website && { + href: item.website, + icon: , + text: "Website", + }, + item.documentation && { + href: item.documentation, + icon: , + text: "Documentation", + }, + { + href: generateSourceUrl(item.slug, item.type), + icon: , + text: "Source Code", + }, + ].filter(Boolean) as ButtonLinkProps[]; + + return ( +
+ {buttons.map((props, index) => ( + + ))} +
+ ); +} diff --git a/frontend/src/app/scripts/_components/ScriptItems/DefaultPassword.tsx b/frontend/src/app/scripts/_components/ScriptItems/DefaultPassword.tsx new file mode 100644 index 000000000..15a962318 --- /dev/null +++ b/frontend/src/app/scripts/_components/ScriptItems/DefaultPassword.tsx @@ -0,0 +1,42 @@ +import handleCopy from "@/components/handleCopy"; +import { Button } from "@/components/ui/button"; +import { Separator } from "@/components/ui/separator"; +import { Script } from "@/lib/types"; + +export default function DefaultPassword({ item }: { item: Script }) { + const { username, password } = item.default_credentials; + const hasDefaultLogin = username && password; + + if (!hasDefaultLogin) return null; + + const copyCredential = (type: "username" | "password") => { + handleCopy(type, item.default_credentials[type] ?? ""); + }; + + return ( +
+
+

Default Login Credentials

+
+ +
+

+ You can use the following credentials to login to the {item.name}{" "} + {item.type}. +

+ {["username", "password"].map((type) => ( +
+ {type.charAt(0).toUpperCase() + type.slice(1)}:{" "} + +
+ ))} +
+
+ ); +} diff --git a/frontend/src/app/scripts/_components/ScriptItems/DefaultSettings.tsx b/frontend/src/app/scripts/_components/ScriptItems/DefaultSettings.tsx new file mode 100644 index 000000000..bfa61759d --- /dev/null +++ b/frontend/src/app/scripts/_components/ScriptItems/DefaultSettings.tsx @@ -0,0 +1,51 @@ +import { Script } from "@/lib/types"; + +export default function DefaultSettings({ item }: { item: Script }) { + const getDisplayValueFromRAM = (ram: number) => + ram >= 1024 ? `${Math.floor(ram / 1024)}GB` : `${ram}MB`; + + const ResourceDisplay = ({ + settings, + title, + }: { + settings: (typeof item.install_methods)[0]; + title: string; + }) => { + const { cpu, ram, hdd } = settings.resources; + return ( +
+

{title}

+

CPU: {cpu}vCPU

+

+ RAM: {getDisplayValueFromRAM(ram ?? 0)} +

+

HDD: {hdd}GB

+
+ ); + }; + + const defaultSettings = item.install_methods.find( + (method) => method.type === "default", + ); + const defaultAlpineSettings = item.install_methods.find( + (method) => method.type === "alpine", + ); + + const hasDefaultSettings = + defaultSettings?.resources && + Object.values(defaultSettings.resources).some(Boolean); + + return ( + <> + {hasDefaultSettings && ( + + )} + {defaultAlpineSettings && ( + + )} + + ); +} diff --git a/frontend/src/app/scripts/_components/ScriptItems/Description.tsx b/frontend/src/app/scripts/_components/ScriptItems/Description.tsx new file mode 100644 index 000000000..6a09f0a6c --- /dev/null +++ b/frontend/src/app/scripts/_components/ScriptItems/Description.tsx @@ -0,0 +1,13 @@ +import TextCopyBlock from "@/components/TextCopyBlock"; +import { Script } from "@/lib/types"; + +export default function Description({ item }: { item: Script }) { + return ( +
+

Description

+

+ {TextCopyBlock(item.description)} +

+
+ ); +} diff --git a/frontend/src/app/scripts/_components/ScriptItems/InstallCommand.tsx b/frontend/src/app/scripts/_components/ScriptItems/InstallCommand.tsx new file mode 100644 index 000000000..26d941cf3 --- /dev/null +++ b/frontend/src/app/scripts/_components/ScriptItems/InstallCommand.tsx @@ -0,0 +1,85 @@ +import CodeCopyButton from "@/components/ui/code-copy-button"; +import { Tabs, TabsContent, TabsList, TabsTrigger } from "@/components/ui/tabs"; +import { basePath } from "@/config/siteConfig"; +import { Script } from "@/lib/types"; +import { getDisplayValueFromType } from "../ScriptInfoBlocks"; + +const getInstallCommand = (scriptPath?: string, isAlpine = false) => { + return `bash -c "$(wget -q${isAlpine ? "" : "L"}O - https://github.com/community-scripts/${basePath}/raw/main/${scriptPath})"`; +}; + +export default function InstallCommand({ item }: { item: Script }) { + const alpineScript = item.install_methods.find( + (method) => method.type === "alpine", + ); + + const defaultScript = item.install_methods.find( + (method) => method.type === "default", + ); + + const renderInstructions = (isAlpine = false) => ( + <> +

+ {isAlpine ? ( + <> + As an alternative option, you can use Alpine Linux and the{" "} + {item.name} package to create a {item.name}{" "} + {getDisplayValueFromType(item.type)} container with faster creation + time and minimal system resource usage. You are also obliged to + adhere to updates provided by the package maintainer. + + ) : item.type == "misc" ? ( + <> + To use the {item.name} script, run the command below in the shell. + + ) : ( + <> + {" "} + To create a new Proxmox VE {item.name}{" "} + {getDisplayValueFromType(item.type)}, run the command below in the + Proxmox VE Shell. + + )} +

+ {isAlpine && ( +

+ To create a new Proxmox VE Alpine-{item.name}{" "} + {getDisplayValueFromType(item.type)}, run the command below in the + Proxmox VE Shell +

+ )} + + ); + + return ( +
+ {alpineScript ? ( + + + Default + Alpine Linux + + + {renderInstructions()} + + {getInstallCommand(defaultScript?.script)} + + + + {renderInstructions(true)} + + {getInstallCommand(alpineScript.script, true)} + + + + ) : defaultScript?.script ? ( + <> + {renderInstructions()} + + {getInstallCommand(defaultScript.script)} + + + ) : null} +
+ ); +} diff --git a/frontend/src/app/scripts/_components/ScriptItems/InterFaces.tsx b/frontend/src/app/scripts/_components/ScriptItems/InterFaces.tsx new file mode 100644 index 000000000..99f855fad --- /dev/null +++ b/frontend/src/app/scripts/_components/ScriptItems/InterFaces.tsx @@ -0,0 +1,41 @@ +import handleCopy from "@/components/handleCopy"; +import { buttonVariants } from "@/components/ui/button"; +import { Script } from "@/lib/types"; +import { cn } from "@/lib/utils"; +import { ClipboardIcon } from "lucide-react"; + +const CopyButton = ({ + label, + value, +}: { + label: string; + value: string | number; +}) => ( + + {value} + handleCopy(label, String(value))} + className="size-4 cursor-pointer" + /> + +); + +export default function InterFaces({ item }: { item: Script }) { + return ( +
+ {item.interface_port !== null ? ( +
+

+ {"Default Interface:"} +

{" "} + +
+ ) : null} +
+ ); +} diff --git a/frontend/src/app/scripts/_components/ScriptItems/Tooltips.tsx b/frontend/src/app/scripts/_components/ScriptItems/Tooltips.tsx new file mode 100644 index 000000000..9adb58b74 --- /dev/null +++ b/frontend/src/app/scripts/_components/ScriptItems/Tooltips.tsx @@ -0,0 +1,52 @@ +import { Badge } from "@/components/ui/badge"; +import { + Tooltip, + TooltipContent, + TooltipProvider, + TooltipTrigger, +} from "@/components/ui/tooltip"; +import { Script } from "@/lib/types"; +import { CircleHelp } from "lucide-react"; +import React from "react"; + +interface TooltipProps { + variant: "warning" | "success"; + label: string; + content: string; +} + +const TooltipBadge: React.FC = ({ variant, label, content }) => ( + + + + + {label} + + + + {content} + + + +); + +export default function Tooltips({ item }: { item: Script }) { + return ( +
+ {item.privileged && ( + + )} + {item.updateable && ( + + )} +
+ ); +} diff --git a/frontend/src/app/scripts/_components/Sidebar.tsx b/frontend/src/app/scripts/_components/Sidebar.tsx new file mode 100644 index 000000000..24f9dce20 --- /dev/null +++ b/frontend/src/app/scripts/_components/Sidebar.tsx @@ -0,0 +1,35 @@ +"use client"; + +import { Category } from "@/lib/types"; +import ScriptAccordion from "./ScriptAccordion"; + +const Sidebar = ({ + items, + selectedScript, + setSelectedScript, +}: { + items: Category[]; + selectedScript: string | null; + setSelectedScript: (script: string | null) => void; +}) => { + return ( +
+
+

Categories

+

+ {items.reduce((acc, category) => acc + category.scripts.length, 0)}{" "} + Total scripts +

+
+
+ +
+
+ ); +}; + +export default Sidebar; diff --git a/frontend/src/app/scripts/page.tsx b/frontend/src/app/scripts/page.tsx new file mode 100644 index 000000000..a02f80b83 --- /dev/null +++ b/frontend/src/app/scripts/page.tsx @@ -0,0 +1,79 @@ +"use client"; + +export const dynamic = "force-static"; + +import ScriptItem from "@/app/scripts/_components/ScriptItem"; +import { fetchCategories } from "@/lib/data"; +import { Category, Script } from "@/lib/types"; +import { Loader2 } from "lucide-react"; +import { useQueryState } from "nuqs"; +import { Suspense, useEffect, useState } from "react"; +import { + LatestScripts, + MostViewedScripts, +} from "./_components/ScriptInfoBlocks"; +import Sidebar from "./_components/Sidebar"; + +function ScriptContent() { + const [selectedScript, setSelectedScript] = useQueryState("id"); + const [links, setLinks] = useState([]); + const [item, setItem] = useState - - - - - - -
- -
-
-
- {children} - -
-
-
-
-
-
- - - ); -} diff --git a/frontend/src/app/manifest.ts b/frontend/src/app/manifest.ts deleted file mode 100644 index 1cfc38f5f..000000000 --- a/frontend/src/app/manifest.ts +++ /dev/null @@ -1,28 +0,0 @@ -import { basePath } from "@/config/siteConfig"; -import type { MetadataRoute } from "next"; - -export const generateStaticParams = () => { - return []; -}; - -export default function manifest(): MetadataRoute.Manifest { - return { - name: "Proxmox VE Helper-Scripts", - short_name: "Proxmox VE Helper-Scripts", - description: - "A Re-designed Front-end for the Proxmox VE Helper-Scripts Repository. Featuring over 200+ scripts to help you manage your Proxmox VE environment.", - theme_color: "#030712", - background_color: "#030712", - display: "standalone", - orientation: "portrait", - scope: `${basePath}`, - start_url: `${basePath}`, - icons: [ - { - src: "logo.png", - sizes: "512x512", - type: "image/png", - }, - ], - }; -} diff --git a/frontend/src/app/not-found.tsx b/frontend/src/app/not-found.tsx deleted file mode 100644 index 8307ae2c4..000000000 --- a/frontend/src/app/not-found.tsx +++ /dev/null @@ -1,20 +0,0 @@ -"use client"; -import { Button } from "@/components/ui/button"; - -export default function NotFoundPage() { - return ( -
-
-

- 404 -

-

- Oops, the page you are looking for could not be found. -

-
- -
- ); -} diff --git a/frontend/src/app/page.tsx b/frontend/src/app/page.tsx deleted file mode 100644 index c6fad745a..000000000 --- a/frontend/src/app/page.tsx +++ /dev/null @@ -1,146 +0,0 @@ -"use client"; -import AnimatedGradientText from "@/components/ui/animated-gradient-text"; -import { Button } from "@/components/ui/button"; -import { CardFooter } from "@/components/ui/card"; -import { - Dialog, - DialogContent, - DialogDescription, - DialogHeader, - DialogTitle, - DialogTrigger, -} from "@/components/ui/dialog"; -import Particles from "@/components/ui/particles"; -import { Separator } from "@/components/ui/separator"; -import { basePath } from "@/config/siteConfig"; -import { cn } from "@/lib/utils"; -import { ArrowRightIcon, ExternalLink } from "lucide-react"; -import { useTheme } from "next-themes"; -import Link from "next/link"; -import { useEffect, useState } from "react"; -import { FaGithub } from "react-icons/fa"; - -function CustomArrowRightIcon() { - return ; -} - -export default function Page() { - const { theme } = useTheme(); - - const [color, setColor] = useState("#000000"); - - useEffect(() => { - setColor(theme === "dark" ? "#ffffff" : "#000000"); - }, [theme]); - - return ( -
- -
-
- - -
- -
- ❤️ - - Scripts by Tteck - - -
- - - - Thank You! - - A big thank you to Tteck and the many contributors who have - made this project possible. Your hard work is truly - appreciated by the entire Proxmox community! - - - - - - - -
- -
-

- Make managing your Homelab a breeze -

-

- We are a community-driven initiative that simplifies the setup of - Proxmox Virtual Environment (VE). -
-
- Originally created by{" "} - - tteck - - , these scripts automate and streamline -
- the process of creating and configuring Linux containers (LXC) and - virtual machines (VMs) on Proxmox VE. -
-
- With 200+ scripts to help you manage your{" "} - Proxmox VE environment.
- Whether you're a seasoned user or a newcomer, we've got - you covered. -

-
-
- - - -
-
-
-
- ); -} diff --git a/frontend/src/app/robots.ts b/frontend/src/app/robots.ts deleted file mode 100644 index fc01ac87c..000000000 --- a/frontend/src/app/robots.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { basePath } from "@/config/siteConfig"; -import type { MetadataRoute } from "next"; - -export const dynamic = "force-static"; - -export default function robots(): MetadataRoute.Robots { - return { - rules: { - userAgent: "*", - allow: "/", - }, - sitemap: `https://community-scripts.github.io/${basePath}/sitemap.xml`, - }; -} diff --git a/frontend/src/app/scripts/_components/ScriptAccordion.tsx b/frontend/src/app/scripts/_components/ScriptAccordion.tsx deleted file mode 100644 index 3864c4b20..000000000 --- a/frontend/src/app/scripts/_components/ScriptAccordion.tsx +++ /dev/null @@ -1,132 +0,0 @@ -import { useCallback, useEffect, useRef } from "react"; - -import { formattedBadge } from "@/components/CommandMenu"; -import { - Accordion, - AccordionContent, - AccordionItem, - AccordionTrigger, -} from "@/components/ui/accordion"; -import { Category } from "@/lib/types"; -import { cn } from "@/lib/utils"; -import Image from "next/image"; -import Link from "next/link"; -import { useState } from "react"; -import { basePath } from "@/config/siteConfig"; - -export default function ScriptAccordion({ - items, - selectedScript, - setSelectedScript, -}: { - items: Category[]; - selectedScript: string | null; - setSelectedScript: (script: string | null) => void; -}) { - const [expandedItem, setExpandedItem] = useState( - undefined, - ); - const linkRefs = useRef<{ [key: string]: HTMLAnchorElement | null }>({}); - - const handleAccordionChange = (value: string | undefined) => { - setExpandedItem(value); - }; - - const handleSelected = useCallback( - (slug: string) => { - setSelectedScript(slug); - }, - [setSelectedScript], - ); - - useEffect(() => { - if (selectedScript) { - const category = items.find((category) => - category.scripts.some((script) => script.slug === selectedScript), - ); - if (category) { - setExpandedItem(category.name); - handleSelected(selectedScript); - } - } - }, [selectedScript, items, handleSelected]); - return ( - - {items.map((category) => ( - - -
- {category.name} - - {category.scripts.length} - -
{" "} -
- - {category.scripts - .slice() - .sort((a, b) => a.name.localeCompare(b.name)) - .map((script, index) => ( -
- handleSelected(script.slug)} - ref={(el) => { - linkRefs.current[script.slug] = el; - }} - > -
- - ((e.currentTarget as HTMLImageElement).src = - `/${basePath}/logo.png`) - } - alt={script.name} - className="mr-1 w-4 h-4 rounded-full" - /> - - {script.name} - -
- {formattedBadge(script.type)} - -
- ))} -
-
- ))} -
- ); -} diff --git a/frontend/src/app/scripts/_components/ScriptInfoBlocks.tsx b/frontend/src/app/scripts/_components/ScriptInfoBlocks.tsx deleted file mode 100644 index 1c418c94c..000000000 --- a/frontend/src/app/scripts/_components/ScriptInfoBlocks.tsx +++ /dev/null @@ -1,213 +0,0 @@ -import { Button } from "@/components/ui/button"; -import { - Card, - CardContent, - CardDescription, - CardFooter, - CardHeader, - CardTitle, -} from "@/components/ui/card"; -import { basePath, mostPopularScripts } from "@/config/siteConfig"; -import { extractDate } from "@/lib/time"; -import { Category, Script } from "@/lib/types"; -import { CalendarPlus } from "lucide-react"; -import Image from "next/image"; -import Link from "next/link"; -import { useMemo, useState } from "react"; - -const ITEMS_PER_PAGE = 3; - -export const getDisplayValueFromType = (type: string) => { - switch (type) { - case "ct": - return "LXC"; - case "vm": - return "VM"; - case "misc": - return ""; - default: - return ""; - } -}; - -export function LatestScripts({ items }: { items: Category[] }) { - const [page, setPage] = useState(1); - - const latestScripts = useMemo(() => { - if (!items) return []; - const scripts = items.flatMap((category) => category.scripts || []); - return scripts.sort( - (a, b) => - new Date(b.date_created).getTime() - new Date(a.date_created).getTime(), - ); - }, [items]); - - const goToNextPage = () => { - setPage((prevPage) => prevPage + 1); - }; - - const goToPreviousPage = () => { - setPage((prevPage) => prevPage - 1); - }; - - const startIndex = (page - 1) * ITEMS_PER_PAGE; - const endIndex = page * ITEMS_PER_PAGE; - - if (!items) { - return null; - } - - return ( -
- {latestScripts.length > 0 && ( -
-

Newest Scripts

-
- {page > 1 && ( -
- Previous -
- )} - {endIndex < latestScripts.length && ( -
- {page === 1 ? "More.." : "Next"} -
- )} -
-
- )} -
- {latestScripts.slice(startIndex, endIndex).map((script) => ( - - - -
- - ((e.currentTarget as HTMLImageElement).src = - `/${basePath}/logo.png`) - } - className="h-11 w-11 object-contain" - /> -
-
-

- {script.name} {getDisplayValueFromType(script.type)} -

-

- - {extractDate(script.date_created)} -

-
-
-
- - - {script.description} - - - - - -
- ))} -
-
- ); -} - -export function MostViewedScripts({ items }: { items: Category[] }) { - const mostViewedScripts = items.reduce((acc: Script[], category) => { - const foundScripts = category.scripts.filter((script) => - mostPopularScripts.includes(script.name), - ); - return acc.concat(foundScripts); - }, []); - - return ( -
- {mostViewedScripts.length > 0 && ( - <> -

Most Viewed Scripts

- - )} -
- {mostViewedScripts.map((script) => ( - - - -
- - ((e.currentTarget as HTMLImageElement).src = - `/${basePath}/logo.png`) - } - className="h-11 w-11 object-contain" - /> -
-
-

- {script.name} {getDisplayValueFromType(script.type)} -

-

- - {extractDate(script.date_created)} -

-
-
-
- - - {script.description} - - - - - -
- ))} -
-
- ); -} diff --git a/frontend/src/app/scripts/_components/ScriptItem.tsx b/frontend/src/app/scripts/_components/ScriptItem.tsx deleted file mode 100644 index fb9e64e0b..000000000 --- a/frontend/src/app/scripts/_components/ScriptItem.tsx +++ /dev/null @@ -1,100 +0,0 @@ -"use client"; -import { Separator } from "@/components/ui/separator"; -import { extractDate } from "@/lib/time"; -import { Script } from "@/lib/types"; -import { X } from "lucide-react"; -import Image from "next/image"; - -import { getDisplayValueFromType } from "./ScriptInfoBlocks"; -import Alerts from "./ScriptItems/Alerts"; -import Buttons from "./ScriptItems/Buttons"; -import DefaultPassword from "./ScriptItems/DefaultPassword"; -import DefaultSettings from "./ScriptItems/DefaultSettings"; -import Description from "./ScriptItems/Description"; -import InstallCommand from "./ScriptItems/InstallCommand"; -import InterFaces from "./ScriptItems/InterFaces"; -import Tooltips from "./ScriptItems/Tooltips"; -import { basePath } from "@/config/siteConfig"; - -function ScriptItem({ - item, - setSelectedScript, -}: { - item: Script; - setSelectedScript: (script: string | null) => void; -}) { - const closeScript = () => { - window.history.pushState({}, document.title, window.location.pathname); - setSelectedScript(null); - }; - - return ( -
-
-
-
-

Selected Script

- -
-
-
-
- - ((e.currentTarget as HTMLImageElement).src = - `/${basePath}/logo.png`) - } - height={400} - alt={item.name} - unoptimized - /> -
-
-
-

- {item.name} {getDisplayValueFromType(item.type)} -

-

- Date added: {extractDate(item.date_created)} -

-
-
- -
-
-
-
-
- - -
-
- -
-
- - -
-
-
-

- How to {item.type == "misc" ? "use" : "install"} -

- -
- - -
-
- -
-
-
-
- ); -} - -export default ScriptItem; diff --git a/frontend/src/app/scripts/_components/ScriptItems/Alerts.tsx b/frontend/src/app/scripts/_components/ScriptItems/Alerts.tsx deleted file mode 100644 index b915be3ff..000000000 --- a/frontend/src/app/scripts/_components/ScriptItems/Alerts.tsx +++ /dev/null @@ -1,35 +0,0 @@ -import TextCopyBlock from "@/components/TextCopyBlock"; -import { AlertColors } from "@/config/siteConfig"; -import { Script } from "@/lib/types"; -import { cn } from "@/lib/utils"; -import { AlertCircle, NotepadText } from "lucide-react"; - -type NoteProps = { - text: string; - type: keyof typeof AlertColors; -} - -export default function Alerts({ item }: { item: Script }) { - return ( - <> - {item?.notes?.length > 0 && - item.notes.map((note: NoteProps, index: number) => ( -
-

- {note.type == "info" ? ( - - ) : ( - - )} - {TextCopyBlock(note.text)} -

-
- ))} - - ); -} diff --git a/frontend/src/app/scripts/_components/ScriptItems/Buttons.tsx b/frontend/src/app/scripts/_components/ScriptItems/Buttons.tsx deleted file mode 100644 index cb46e437b..000000000 --- a/frontend/src/app/scripts/_components/ScriptItems/Buttons.tsx +++ /dev/null @@ -1,57 +0,0 @@ -import { Button } from "@/components/ui/button"; -import { basePath } from "@/config/siteConfig"; -import { Script } from "@/lib/types"; -import { BookOpenText, Code, Globe } from "lucide-react"; -import Link from "next/link"; - -const generateSourceUrl = (slug: string, type: string) => { - const baseUrl = `https://raw.githubusercontent.com/community-scripts/${basePath}/main`; - return type === "ct" - ? `${baseUrl}/install/${slug}-install.sh` - : `${baseUrl}/${type}/${slug}.sh`; -}; - -interface ButtonLinkProps { - href: string; - icon: React.ReactNode; - text: string; -} - -const ButtonLink = ({ href, icon, text }: ButtonLinkProps) => ( - -); - -export default function Buttons({ item }: { item: Script }) { - const buttons = [ - item.website && { - href: item.website, - icon: , - text: "Website", - }, - item.documentation && { - href: item.documentation, - icon: , - text: "Documentation", - }, - { - href: generateSourceUrl(item.slug, item.type), - icon: , - text: "Source Code", - }, - ].filter(Boolean) as ButtonLinkProps[]; - - return ( -
- {buttons.map((props, index) => ( - - ))} -
- ); -} diff --git a/frontend/src/app/scripts/_components/ScriptItems/DefaultPassword.tsx b/frontend/src/app/scripts/_components/ScriptItems/DefaultPassword.tsx deleted file mode 100644 index 15a962318..000000000 --- a/frontend/src/app/scripts/_components/ScriptItems/DefaultPassword.tsx +++ /dev/null @@ -1,42 +0,0 @@ -import handleCopy from "@/components/handleCopy"; -import { Button } from "@/components/ui/button"; -import { Separator } from "@/components/ui/separator"; -import { Script } from "@/lib/types"; - -export default function DefaultPassword({ item }: { item: Script }) { - const { username, password } = item.default_credentials; - const hasDefaultLogin = username && password; - - if (!hasDefaultLogin) return null; - - const copyCredential = (type: "username" | "password") => { - handleCopy(type, item.default_credentials[type] ?? ""); - }; - - return ( -
-
-

Default Login Credentials

-
- -
-

- You can use the following credentials to login to the {item.name}{" "} - {item.type}. -

- {["username", "password"].map((type) => ( -
- {type.charAt(0).toUpperCase() + type.slice(1)}:{" "} - -
- ))} -
-
- ); -} diff --git a/frontend/src/app/scripts/_components/ScriptItems/DefaultSettings.tsx b/frontend/src/app/scripts/_components/ScriptItems/DefaultSettings.tsx deleted file mode 100644 index bfa61759d..000000000 --- a/frontend/src/app/scripts/_components/ScriptItems/DefaultSettings.tsx +++ /dev/null @@ -1,51 +0,0 @@ -import { Script } from "@/lib/types"; - -export default function DefaultSettings({ item }: { item: Script }) { - const getDisplayValueFromRAM = (ram: number) => - ram >= 1024 ? `${Math.floor(ram / 1024)}GB` : `${ram}MB`; - - const ResourceDisplay = ({ - settings, - title, - }: { - settings: (typeof item.install_methods)[0]; - title: string; - }) => { - const { cpu, ram, hdd } = settings.resources; - return ( -
-

{title}

-

CPU: {cpu}vCPU

-

- RAM: {getDisplayValueFromRAM(ram ?? 0)} -

-

HDD: {hdd}GB

-
- ); - }; - - const defaultSettings = item.install_methods.find( - (method) => method.type === "default", - ); - const defaultAlpineSettings = item.install_methods.find( - (method) => method.type === "alpine", - ); - - const hasDefaultSettings = - defaultSettings?.resources && - Object.values(defaultSettings.resources).some(Boolean); - - return ( - <> - {hasDefaultSettings && ( - - )} - {defaultAlpineSettings && ( - - )} - - ); -} diff --git a/frontend/src/app/scripts/_components/ScriptItems/Description.tsx b/frontend/src/app/scripts/_components/ScriptItems/Description.tsx deleted file mode 100644 index 6a09f0a6c..000000000 --- a/frontend/src/app/scripts/_components/ScriptItems/Description.tsx +++ /dev/null @@ -1,13 +0,0 @@ -import TextCopyBlock from "@/components/TextCopyBlock"; -import { Script } from "@/lib/types"; - -export default function Description({ item }: { item: Script }) { - return ( -
-

Description

-

- {TextCopyBlock(item.description)} -

-
- ); -} diff --git a/frontend/src/app/scripts/_components/ScriptItems/InstallCommand.tsx b/frontend/src/app/scripts/_components/ScriptItems/InstallCommand.tsx deleted file mode 100644 index 26d941cf3..000000000 --- a/frontend/src/app/scripts/_components/ScriptItems/InstallCommand.tsx +++ /dev/null @@ -1,85 +0,0 @@ -import CodeCopyButton from "@/components/ui/code-copy-button"; -import { Tabs, TabsContent, TabsList, TabsTrigger } from "@/components/ui/tabs"; -import { basePath } from "@/config/siteConfig"; -import { Script } from "@/lib/types"; -import { getDisplayValueFromType } from "../ScriptInfoBlocks"; - -const getInstallCommand = (scriptPath?: string, isAlpine = false) => { - return `bash -c "$(wget -q${isAlpine ? "" : "L"}O - https://github.com/community-scripts/${basePath}/raw/main/${scriptPath})"`; -}; - -export default function InstallCommand({ item }: { item: Script }) { - const alpineScript = item.install_methods.find( - (method) => method.type === "alpine", - ); - - const defaultScript = item.install_methods.find( - (method) => method.type === "default", - ); - - const renderInstructions = (isAlpine = false) => ( - <> -

- {isAlpine ? ( - <> - As an alternative option, you can use Alpine Linux and the{" "} - {item.name} package to create a {item.name}{" "} - {getDisplayValueFromType(item.type)} container with faster creation - time and minimal system resource usage. You are also obliged to - adhere to updates provided by the package maintainer. - - ) : item.type == "misc" ? ( - <> - To use the {item.name} script, run the command below in the shell. - - ) : ( - <> - {" "} - To create a new Proxmox VE {item.name}{" "} - {getDisplayValueFromType(item.type)}, run the command below in the - Proxmox VE Shell. - - )} -

- {isAlpine && ( -

- To create a new Proxmox VE Alpine-{item.name}{" "} - {getDisplayValueFromType(item.type)}, run the command below in the - Proxmox VE Shell -

- )} - - ); - - return ( -
- {alpineScript ? ( - - - Default - Alpine Linux - - - {renderInstructions()} - - {getInstallCommand(defaultScript?.script)} - - - - {renderInstructions(true)} - - {getInstallCommand(alpineScript.script, true)} - - - - ) : defaultScript?.script ? ( - <> - {renderInstructions()} - - {getInstallCommand(defaultScript.script)} - - - ) : null} -
- ); -} diff --git a/frontend/src/app/scripts/_components/ScriptItems/InterFaces.tsx b/frontend/src/app/scripts/_components/ScriptItems/InterFaces.tsx deleted file mode 100644 index 99f855fad..000000000 --- a/frontend/src/app/scripts/_components/ScriptItems/InterFaces.tsx +++ /dev/null @@ -1,41 +0,0 @@ -import handleCopy from "@/components/handleCopy"; -import { buttonVariants } from "@/components/ui/button"; -import { Script } from "@/lib/types"; -import { cn } from "@/lib/utils"; -import { ClipboardIcon } from "lucide-react"; - -const CopyButton = ({ - label, - value, -}: { - label: string; - value: string | number; -}) => ( - - {value} - handleCopy(label, String(value))} - className="size-4 cursor-pointer" - /> - -); - -export default function InterFaces({ item }: { item: Script }) { - return ( -
- {item.interface_port !== null ? ( -
-

- {"Default Interface:"} -

{" "} - -
- ) : null} -
- ); -} diff --git a/frontend/src/app/scripts/_components/ScriptItems/Tooltips.tsx b/frontend/src/app/scripts/_components/ScriptItems/Tooltips.tsx deleted file mode 100644 index 9adb58b74..000000000 --- a/frontend/src/app/scripts/_components/ScriptItems/Tooltips.tsx +++ /dev/null @@ -1,52 +0,0 @@ -import { Badge } from "@/components/ui/badge"; -import { - Tooltip, - TooltipContent, - TooltipProvider, - TooltipTrigger, -} from "@/components/ui/tooltip"; -import { Script } from "@/lib/types"; -import { CircleHelp } from "lucide-react"; -import React from "react"; - -interface TooltipProps { - variant: "warning" | "success"; - label: string; - content: string; -} - -const TooltipBadge: React.FC = ({ variant, label, content }) => ( - - - - - {label} - - - - {content} - - - -); - -export default function Tooltips({ item }: { item: Script }) { - return ( -
- {item.privileged && ( - - )} - {item.updateable && ( - - )} -
- ); -} diff --git a/frontend/src/app/scripts/_components/Sidebar.tsx b/frontend/src/app/scripts/_components/Sidebar.tsx deleted file mode 100644 index 24f9dce20..000000000 --- a/frontend/src/app/scripts/_components/Sidebar.tsx +++ /dev/null @@ -1,35 +0,0 @@ -"use client"; - -import { Category } from "@/lib/types"; -import ScriptAccordion from "./ScriptAccordion"; - -const Sidebar = ({ - items, - selectedScript, - setSelectedScript, -}: { - items: Category[]; - selectedScript: string | null; - setSelectedScript: (script: string | null) => void; -}) => { - return ( -
-
-

Categories

-

- {items.reduce((acc, category) => acc + category.scripts.length, 0)}{" "} - Total scripts -

-
-
- -
-
- ); -}; - -export default Sidebar; diff --git a/frontend/src/app/scripts/page.tsx b/frontend/src/app/scripts/page.tsx deleted file mode 100644 index a02f80b83..000000000 --- a/frontend/src/app/scripts/page.tsx +++ /dev/null @@ -1,79 +0,0 @@ -"use client"; - -export const dynamic = "force-static"; - -import ScriptItem from "@/app/scripts/_components/ScriptItem"; -import { fetchCategories } from "@/lib/data"; -import { Category, Script } from "@/lib/types"; -import { Loader2 } from "lucide-react"; -import { useQueryState } from "nuqs"; -import { Suspense, useEffect, useState } from "react"; -import { - LatestScripts, - MostViewedScripts, -} from "./_components/ScriptInfoBlocks"; -import Sidebar from "./_components/Sidebar"; - -function ScriptContent() { - const [selectedScript, setSelectedScript] = useQueryState("id"); - const [links, setLinks] = useState([]); - const [item, setItem] = useState + + + + + + +
+ +
+
+
+ {children} + +
+
+
+
+
+
+ + + ); +} diff --git a/frontend/src/app/manifest.ts b/frontend/src/app/manifest.ts new file mode 100644 index 000000000..1cfc38f5f --- /dev/null +++ b/frontend/src/app/manifest.ts @@ -0,0 +1,28 @@ +import { basePath } from "@/config/siteConfig"; +import type { MetadataRoute } from "next"; + +export const generateStaticParams = () => { + return []; +}; + +export default function manifest(): MetadataRoute.Manifest { + return { + name: "Proxmox VE Helper-Scripts", + short_name: "Proxmox VE Helper-Scripts", + description: + "A Re-designed Front-end for the Proxmox VE Helper-Scripts Repository. Featuring over 200+ scripts to help you manage your Proxmox VE environment.", + theme_color: "#030712", + background_color: "#030712", + display: "standalone", + orientation: "portrait", + scope: `${basePath}`, + start_url: `${basePath}`, + icons: [ + { + src: "logo.png", + sizes: "512x512", + type: "image/png", + }, + ], + }; +} diff --git a/frontend/src/app/not-found.tsx b/frontend/src/app/not-found.tsx new file mode 100644 index 000000000..8307ae2c4 --- /dev/null +++ b/frontend/src/app/not-found.tsx @@ -0,0 +1,20 @@ +"use client"; +import { Button } from "@/components/ui/button"; + +export default function NotFoundPage() { + return ( +
+
+

+ 404 +

+

+ Oops, the page you are looking for could not be found. +

+
+ +
+ ); +} diff --git a/frontend/src/app/page.tsx b/frontend/src/app/page.tsx new file mode 100644 index 000000000..c6fad745a --- /dev/null +++ b/frontend/src/app/page.tsx @@ -0,0 +1,146 @@ +"use client"; +import AnimatedGradientText from "@/components/ui/animated-gradient-text"; +import { Button } from "@/components/ui/button"; +import { CardFooter } from "@/components/ui/card"; +import { + Dialog, + DialogContent, + DialogDescription, + DialogHeader, + DialogTitle, + DialogTrigger, +} from "@/components/ui/dialog"; +import Particles from "@/components/ui/particles"; +import { Separator } from "@/components/ui/separator"; +import { basePath } from "@/config/siteConfig"; +import { cn } from "@/lib/utils"; +import { ArrowRightIcon, ExternalLink } from "lucide-react"; +import { useTheme } from "next-themes"; +import Link from "next/link"; +import { useEffect, useState } from "react"; +import { FaGithub } from "react-icons/fa"; + +function CustomArrowRightIcon() { + return ; +} + +export default function Page() { + const { theme } = useTheme(); + + const [color, setColor] = useState("#000000"); + + useEffect(() => { + setColor(theme === "dark" ? "#ffffff" : "#000000"); + }, [theme]); + + return ( +
+ +
+
+ + +
+ +
+ ❤️ + + Scripts by Tteck + + +
+ + + + Thank You! + + A big thank you to Tteck and the many contributors who have + made this project possible. Your hard work is truly + appreciated by the entire Proxmox community! + + + + + + + +
+ +
+

+ Make managing your Homelab a breeze +

+

+ We are a community-driven initiative that simplifies the setup of + Proxmox Virtual Environment (VE). +
+
+ Originally created by{" "} + + tteck + + , these scripts automate and streamline +
+ the process of creating and configuring Linux containers (LXC) and + virtual machines (VMs) on Proxmox VE. +
+
+ With 200+ scripts to help you manage your{" "} + Proxmox VE environment.
+ Whether you're a seasoned user or a newcomer, we've got + you covered. +

+
+
+ + + +
+
+
+
+ ); +} diff --git a/frontend/src/app/robots.ts b/frontend/src/app/robots.ts new file mode 100644 index 000000000..fc01ac87c --- /dev/null +++ b/frontend/src/app/robots.ts @@ -0,0 +1,14 @@ +import { basePath } from "@/config/siteConfig"; +import type { MetadataRoute } from "next"; + +export const dynamic = "force-static"; + +export default function robots(): MetadataRoute.Robots { + return { + rules: { + userAgent: "*", + allow: "/", + }, + sitemap: `https://community-scripts.github.io/${basePath}/sitemap.xml`, + }; +} diff --git a/frontend/src/app/scripts/_components/ScriptAccordion.tsx b/frontend/src/app/scripts/_components/ScriptAccordion.tsx new file mode 100644 index 000000000..3864c4b20 --- /dev/null +++ b/frontend/src/app/scripts/_components/ScriptAccordion.tsx @@ -0,0 +1,132 @@ +import { useCallback, useEffect, useRef } from "react"; + +import { formattedBadge } from "@/components/CommandMenu"; +import { + Accordion, + AccordionContent, + AccordionItem, + AccordionTrigger, +} from "@/components/ui/accordion"; +import { Category } from "@/lib/types"; +import { cn } from "@/lib/utils"; +import Image from "next/image"; +import Link from "next/link"; +import { useState } from "react"; +import { basePath } from "@/config/siteConfig"; + +export default function ScriptAccordion({ + items, + selectedScript, + setSelectedScript, +}: { + items: Category[]; + selectedScript: string | null; + setSelectedScript: (script: string | null) => void; +}) { + const [expandedItem, setExpandedItem] = useState( + undefined, + ); + const linkRefs = useRef<{ [key: string]: HTMLAnchorElement | null }>({}); + + const handleAccordionChange = (value: string | undefined) => { + setExpandedItem(value); + }; + + const handleSelected = useCallback( + (slug: string) => { + setSelectedScript(slug); + }, + [setSelectedScript], + ); + + useEffect(() => { + if (selectedScript) { + const category = items.find((category) => + category.scripts.some((script) => script.slug === selectedScript), + ); + if (category) { + setExpandedItem(category.name); + handleSelected(selectedScript); + } + } + }, [selectedScript, items, handleSelected]); + return ( + + {items.map((category) => ( + + +
+ {category.name} + + {category.scripts.length} + +
{" "} +
+ + {category.scripts + .slice() + .sort((a, b) => a.name.localeCompare(b.name)) + .map((script, index) => ( +
+ handleSelected(script.slug)} + ref={(el) => { + linkRefs.current[script.slug] = el; + }} + > +
+ + ((e.currentTarget as HTMLImageElement).src = + `/${basePath}/logo.png`) + } + alt={script.name} + className="mr-1 w-4 h-4 rounded-full" + /> + + {script.name} + +
+ {formattedBadge(script.type)} + +
+ ))} +
+
+ ))} +
+ ); +} diff --git a/frontend/src/app/scripts/_components/ScriptInfoBlocks.tsx b/frontend/src/app/scripts/_components/ScriptInfoBlocks.tsx new file mode 100644 index 000000000..1c418c94c --- /dev/null +++ b/frontend/src/app/scripts/_components/ScriptInfoBlocks.tsx @@ -0,0 +1,213 @@ +import { Button } from "@/components/ui/button"; +import { + Card, + CardContent, + CardDescription, + CardFooter, + CardHeader, + CardTitle, +} from "@/components/ui/card"; +import { basePath, mostPopularScripts } from "@/config/siteConfig"; +import { extractDate } from "@/lib/time"; +import { Category, Script } from "@/lib/types"; +import { CalendarPlus } from "lucide-react"; +import Image from "next/image"; +import Link from "next/link"; +import { useMemo, useState } from "react"; + +const ITEMS_PER_PAGE = 3; + +export const getDisplayValueFromType = (type: string) => { + switch (type) { + case "ct": + return "LXC"; + case "vm": + return "VM"; + case "misc": + return ""; + default: + return ""; + } +}; + +export function LatestScripts({ items }: { items: Category[] }) { + const [page, setPage] = useState(1); + + const latestScripts = useMemo(() => { + if (!items) return []; + const scripts = items.flatMap((category) => category.scripts || []); + return scripts.sort( + (a, b) => + new Date(b.date_created).getTime() - new Date(a.date_created).getTime(), + ); + }, [items]); + + const goToNextPage = () => { + setPage((prevPage) => prevPage + 1); + }; + + const goToPreviousPage = () => { + setPage((prevPage) => prevPage - 1); + }; + + const startIndex = (page - 1) * ITEMS_PER_PAGE; + const endIndex = page * ITEMS_PER_PAGE; + + if (!items) { + return null; + } + + return ( +
+ {latestScripts.length > 0 && ( +
+

Newest Scripts

+
+ {page > 1 && ( +
+ Previous +
+ )} + {endIndex < latestScripts.length && ( +
+ {page === 1 ? "More.." : "Next"} +
+ )} +
+
+ )} +
+ {latestScripts.slice(startIndex, endIndex).map((script) => ( + + + +
+ + ((e.currentTarget as HTMLImageElement).src = + `/${basePath}/logo.png`) + } + className="h-11 w-11 object-contain" + /> +
+
+

+ {script.name} {getDisplayValueFromType(script.type)} +

+

+ + {extractDate(script.date_created)} +

+
+
+
+ + + {script.description} + + + + + +
+ ))} +
+
+ ); +} + +export function MostViewedScripts({ items }: { items: Category[] }) { + const mostViewedScripts = items.reduce((acc: Script[], category) => { + const foundScripts = category.scripts.filter((script) => + mostPopularScripts.includes(script.name), + ); + return acc.concat(foundScripts); + }, []); + + return ( +
+ {mostViewedScripts.length > 0 && ( + <> +

Most Viewed Scripts

+ + )} +
+ {mostViewedScripts.map((script) => ( + + + +
+ + ((e.currentTarget as HTMLImageElement).src = + `/${basePath}/logo.png`) + } + className="h-11 w-11 object-contain" + /> +
+
+

+ {script.name} {getDisplayValueFromType(script.type)} +

+

+ + {extractDate(script.date_created)} +

+
+
+
+ + + {script.description} + + + + + +
+ ))} +
+
+ ); +} diff --git a/frontend/src/app/scripts/_components/ScriptItem.tsx b/frontend/src/app/scripts/_components/ScriptItem.tsx new file mode 100644 index 000000000..fb9e64e0b --- /dev/null +++ b/frontend/src/app/scripts/_components/ScriptItem.tsx @@ -0,0 +1,100 @@ +"use client"; +import { Separator } from "@/components/ui/separator"; +import { extractDate } from "@/lib/time"; +import { Script } from "@/lib/types"; +import { X } from "lucide-react"; +import Image from "next/image"; + +import { getDisplayValueFromType } from "./ScriptInfoBlocks"; +import Alerts from "./ScriptItems/Alerts"; +import Buttons from "./ScriptItems/Buttons"; +import DefaultPassword from "./ScriptItems/DefaultPassword"; +import DefaultSettings from "./ScriptItems/DefaultSettings"; +import Description from "./ScriptItems/Description"; +import InstallCommand from "./ScriptItems/InstallCommand"; +import InterFaces from "./ScriptItems/InterFaces"; +import Tooltips from "./ScriptItems/Tooltips"; +import { basePath } from "@/config/siteConfig"; + +function ScriptItem({ + item, + setSelectedScript, +}: { + item: Script; + setSelectedScript: (script: string | null) => void; +}) { + const closeScript = () => { + window.history.pushState({}, document.title, window.location.pathname); + setSelectedScript(null); + }; + + return ( +
+
+
+
+

Selected Script

+ +
+
+
+
+ + ((e.currentTarget as HTMLImageElement).src = + `/${basePath}/logo.png`) + } + height={400} + alt={item.name} + unoptimized + /> +
+
+
+

+ {item.name} {getDisplayValueFromType(item.type)} +

+

+ Date added: {extractDate(item.date_created)} +

+
+
+ +
+
+
+
+
+ + +
+
+ +
+
+ + +
+
+
+

+ How to {item.type == "misc" ? "use" : "install"} +

+ +
+ + +
+
+ +
+
+
+
+ ); +} + +export default ScriptItem; diff --git a/frontend/src/app/scripts/_components/ScriptItems/Alerts.tsx b/frontend/src/app/scripts/_components/ScriptItems/Alerts.tsx new file mode 100644 index 000000000..b915be3ff --- /dev/null +++ b/frontend/src/app/scripts/_components/ScriptItems/Alerts.tsx @@ -0,0 +1,35 @@ +import TextCopyBlock from "@/components/TextCopyBlock"; +import { AlertColors } from "@/config/siteConfig"; +import { Script } from "@/lib/types"; +import { cn } from "@/lib/utils"; +import { AlertCircle, NotepadText } from "lucide-react"; + +type NoteProps = { + text: string; + type: keyof typeof AlertColors; +} + +export default function Alerts({ item }: { item: Script }) { + return ( + <> + {item?.notes?.length > 0 && + item.notes.map((note: NoteProps, index: number) => ( +
+

+ {note.type == "info" ? ( + + ) : ( + + )} + {TextCopyBlock(note.text)} +

+
+ ))} + + ); +} diff --git a/frontend/src/app/scripts/_components/ScriptItems/Buttons.tsx b/frontend/src/app/scripts/_components/ScriptItems/Buttons.tsx new file mode 100644 index 000000000..cb46e437b --- /dev/null +++ b/frontend/src/app/scripts/_components/ScriptItems/Buttons.tsx @@ -0,0 +1,57 @@ +import { Button } from "@/components/ui/button"; +import { basePath } from "@/config/siteConfig"; +import { Script } from "@/lib/types"; +import { BookOpenText, Code, Globe } from "lucide-react"; +import Link from "next/link"; + +const generateSourceUrl = (slug: string, type: string) => { + const baseUrl = `https://raw.githubusercontent.com/community-scripts/${basePath}/main`; + return type === "ct" + ? `${baseUrl}/install/${slug}-install.sh` + : `${baseUrl}/${type}/${slug}.sh`; +}; + +interface ButtonLinkProps { + href: string; + icon: React.ReactNode; + text: string; +} + +const ButtonLink = ({ href, icon, text }: ButtonLinkProps) => ( + +); + +export default function Buttons({ item }: { item: Script }) { + const buttons = [ + item.website && { + href: item.website, + icon: , + text: "Website", + }, + item.documentation && { + href: item.documentation, + icon: , + text: "Documentation", + }, + { + href: generateSourceUrl(item.slug, item.type), + icon: , + text: "Source Code", + }, + ].filter(Boolean) as ButtonLinkProps[]; + + return ( +
+ {buttons.map((props, index) => ( + + ))} +
+ ); +} diff --git a/frontend/src/app/scripts/_components/ScriptItems/DefaultPassword.tsx b/frontend/src/app/scripts/_components/ScriptItems/DefaultPassword.tsx new file mode 100644 index 000000000..15a962318 --- /dev/null +++ b/frontend/src/app/scripts/_components/ScriptItems/DefaultPassword.tsx @@ -0,0 +1,42 @@ +import handleCopy from "@/components/handleCopy"; +import { Button } from "@/components/ui/button"; +import { Separator } from "@/components/ui/separator"; +import { Script } from "@/lib/types"; + +export default function DefaultPassword({ item }: { item: Script }) { + const { username, password } = item.default_credentials; + const hasDefaultLogin = username && password; + + if (!hasDefaultLogin) return null; + + const copyCredential = (type: "username" | "password") => { + handleCopy(type, item.default_credentials[type] ?? ""); + }; + + return ( +
+
+

Default Login Credentials

+
+ +
+

+ You can use the following credentials to login to the {item.name}{" "} + {item.type}. +

+ {["username", "password"].map((type) => ( +
+ {type.charAt(0).toUpperCase() + type.slice(1)}:{" "} + +
+ ))} +
+
+ ); +} diff --git a/frontend/src/app/scripts/_components/ScriptItems/DefaultSettings.tsx b/frontend/src/app/scripts/_components/ScriptItems/DefaultSettings.tsx new file mode 100644 index 000000000..bfa61759d --- /dev/null +++ b/frontend/src/app/scripts/_components/ScriptItems/DefaultSettings.tsx @@ -0,0 +1,51 @@ +import { Script } from "@/lib/types"; + +export default function DefaultSettings({ item }: { item: Script }) { + const getDisplayValueFromRAM = (ram: number) => + ram >= 1024 ? `${Math.floor(ram / 1024)}GB` : `${ram}MB`; + + const ResourceDisplay = ({ + settings, + title, + }: { + settings: (typeof item.install_methods)[0]; + title: string; + }) => { + const { cpu, ram, hdd } = settings.resources; + return ( +
+

{title}

+

CPU: {cpu}vCPU

+

+ RAM: {getDisplayValueFromRAM(ram ?? 0)} +

+

HDD: {hdd}GB

+
+ ); + }; + + const defaultSettings = item.install_methods.find( + (method) => method.type === "default", + ); + const defaultAlpineSettings = item.install_methods.find( + (method) => method.type === "alpine", + ); + + const hasDefaultSettings = + defaultSettings?.resources && + Object.values(defaultSettings.resources).some(Boolean); + + return ( + <> + {hasDefaultSettings && ( + + )} + {defaultAlpineSettings && ( + + )} + + ); +} diff --git a/frontend/src/app/scripts/_components/ScriptItems/Description.tsx b/frontend/src/app/scripts/_components/ScriptItems/Description.tsx new file mode 100644 index 000000000..6a09f0a6c --- /dev/null +++ b/frontend/src/app/scripts/_components/ScriptItems/Description.tsx @@ -0,0 +1,13 @@ +import TextCopyBlock from "@/components/TextCopyBlock"; +import { Script } from "@/lib/types"; + +export default function Description({ item }: { item: Script }) { + return ( +
+

Description

+

+ {TextCopyBlock(item.description)} +

+
+ ); +} diff --git a/frontend/src/app/scripts/_components/ScriptItems/InstallCommand.tsx b/frontend/src/app/scripts/_components/ScriptItems/InstallCommand.tsx new file mode 100644 index 000000000..26d941cf3 --- /dev/null +++ b/frontend/src/app/scripts/_components/ScriptItems/InstallCommand.tsx @@ -0,0 +1,85 @@ +import CodeCopyButton from "@/components/ui/code-copy-button"; +import { Tabs, TabsContent, TabsList, TabsTrigger } from "@/components/ui/tabs"; +import { basePath } from "@/config/siteConfig"; +import { Script } from "@/lib/types"; +import { getDisplayValueFromType } from "../ScriptInfoBlocks"; + +const getInstallCommand = (scriptPath?: string, isAlpine = false) => { + return `bash -c "$(wget -q${isAlpine ? "" : "L"}O - https://github.com/community-scripts/${basePath}/raw/main/${scriptPath})"`; +}; + +export default function InstallCommand({ item }: { item: Script }) { + const alpineScript = item.install_methods.find( + (method) => method.type === "alpine", + ); + + const defaultScript = item.install_methods.find( + (method) => method.type === "default", + ); + + const renderInstructions = (isAlpine = false) => ( + <> +

+ {isAlpine ? ( + <> + As an alternative option, you can use Alpine Linux and the{" "} + {item.name} package to create a {item.name}{" "} + {getDisplayValueFromType(item.type)} container with faster creation + time and minimal system resource usage. You are also obliged to + adhere to updates provided by the package maintainer. + + ) : item.type == "misc" ? ( + <> + To use the {item.name} script, run the command below in the shell. + + ) : ( + <> + {" "} + To create a new Proxmox VE {item.name}{" "} + {getDisplayValueFromType(item.type)}, run the command below in the + Proxmox VE Shell. + + )} +

+ {isAlpine && ( +

+ To create a new Proxmox VE Alpine-{item.name}{" "} + {getDisplayValueFromType(item.type)}, run the command below in the + Proxmox VE Shell +

+ )} + + ); + + return ( +
+ {alpineScript ? ( + + + Default + Alpine Linux + + + {renderInstructions()} + + {getInstallCommand(defaultScript?.script)} + + + + {renderInstructions(true)} + + {getInstallCommand(alpineScript.script, true)} + + + + ) : defaultScript?.script ? ( + <> + {renderInstructions()} + + {getInstallCommand(defaultScript.script)} + + + ) : null} +
+ ); +} diff --git a/frontend/src/app/scripts/_components/ScriptItems/InterFaces.tsx b/frontend/src/app/scripts/_components/ScriptItems/InterFaces.tsx new file mode 100644 index 000000000..99f855fad --- /dev/null +++ b/frontend/src/app/scripts/_components/ScriptItems/InterFaces.tsx @@ -0,0 +1,41 @@ +import handleCopy from "@/components/handleCopy"; +import { buttonVariants } from "@/components/ui/button"; +import { Script } from "@/lib/types"; +import { cn } from "@/lib/utils"; +import { ClipboardIcon } from "lucide-react"; + +const CopyButton = ({ + label, + value, +}: { + label: string; + value: string | number; +}) => ( + + {value} + handleCopy(label, String(value))} + className="size-4 cursor-pointer" + /> + +); + +export default function InterFaces({ item }: { item: Script }) { + return ( +
+ {item.interface_port !== null ? ( +
+

+ {"Default Interface:"} +

{" "} + +
+ ) : null} +
+ ); +} diff --git a/frontend/src/app/scripts/_components/ScriptItems/Tooltips.tsx b/frontend/src/app/scripts/_components/ScriptItems/Tooltips.tsx new file mode 100644 index 000000000..9adb58b74 --- /dev/null +++ b/frontend/src/app/scripts/_components/ScriptItems/Tooltips.tsx @@ -0,0 +1,52 @@ +import { Badge } from "@/components/ui/badge"; +import { + Tooltip, + TooltipContent, + TooltipProvider, + TooltipTrigger, +} from "@/components/ui/tooltip"; +import { Script } from "@/lib/types"; +import { CircleHelp } from "lucide-react"; +import React from "react"; + +interface TooltipProps { + variant: "warning" | "success"; + label: string; + content: string; +} + +const TooltipBadge: React.FC = ({ variant, label, content }) => ( + + + + + {label} + + + + {content} + + + +); + +export default function Tooltips({ item }: { item: Script }) { + return ( +
+ {item.privileged && ( + + )} + {item.updateable && ( + + )} +
+ ); +} diff --git a/frontend/src/app/scripts/_components/Sidebar.tsx b/frontend/src/app/scripts/_components/Sidebar.tsx new file mode 100644 index 000000000..24f9dce20 --- /dev/null +++ b/frontend/src/app/scripts/_components/Sidebar.tsx @@ -0,0 +1,35 @@ +"use client"; + +import { Category } from "@/lib/types"; +import ScriptAccordion from "./ScriptAccordion"; + +const Sidebar = ({ + items, + selectedScript, + setSelectedScript, +}: { + items: Category[]; + selectedScript: string | null; + setSelectedScript: (script: string | null) => void; +}) => { + return ( +
+
+

Categories

+

+ {items.reduce((acc, category) => acc + category.scripts.length, 0)}{" "} + Total scripts +

+
+
+ +
+
+ ); +}; + +export default Sidebar; diff --git a/frontend/src/app/scripts/page.tsx b/frontend/src/app/scripts/page.tsx new file mode 100644 index 000000000..a02f80b83 --- /dev/null +++ b/frontend/src/app/scripts/page.tsx @@ -0,0 +1,79 @@ +"use client"; + +export const dynamic = "force-static"; + +import ScriptItem from "@/app/scripts/_components/ScriptItem"; +import { fetchCategories } from "@/lib/data"; +import { Category, Script } from "@/lib/types"; +import { Loader2 } from "lucide-react"; +import { useQueryState } from "nuqs"; +import { Suspense, useEffect, useState } from "react"; +import { + LatestScripts, + MostViewedScripts, +} from "./_components/ScriptInfoBlocks"; +import Sidebar from "./_components/Sidebar"; + +function ScriptContent() { + const [selectedScript, setSelectedScript] = useQueryState("id"); + const [links, setLinks] = useState([]); + const [item, setItem] = useState

- Website (tteck) | - Ko-Fi (for tteck) | + Website | + Ko-Fi (for tteck🙏) | Contribute | Guides | Changelog From 0ed268cecd5443490b24e8ab110de1a214b7f25b Mon Sep 17 00:00:00 2001 From: Ian Bassi Date: Mon, 4 Nov 2024 17:41:17 -0300 Subject: [PATCH 022/631] YunoHost 12 Release Updated based on: https://yunohost.org/es/install/hardware:vps_debian#pre-requisites * More RAM and storage to avoid reaching the limit quickly. --- ct/yunohost.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ct/yunohost.sh b/ct/yunohost.sh index c6c41ab29..a8efa1d33 100644 --- a/ct/yunohost.sh +++ b/ct/yunohost.sh @@ -23,7 +23,7 @@ var_disk="20" var_cpu="2" var_ram="2048" var_os="debian" -var_version="11" +var_version="12" variables color catch_errors From 98c7c2d12f153e43df89c1a08401df0d7c901eee Mon Sep 17 00:00:00 2001 From: Paul Date: Tue, 5 Nov 2024 10:47:37 +1300 Subject: [PATCH 023/631] Added Discord Invite to README.md Signed-off-by: Paul --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 6efd58afa..6e45c85e0 100644 --- a/README.md +++ b/README.md @@ -20,6 +20,7 @@ Ko-Fi (for tteck🙏) | Contribute | Guides | + Discord | Changelog