From e5ffd2c6d1627f1a4db56fe32fbdd551c835f539 Mon Sep 17 00:00:00 2001 From: Naraenda Date: Thu, 27 Jun 2024 23:08:16 +0200 Subject: [PATCH] feat: vpm packaging and vcc listing infrastructure --- .github/workflows/build-listing.yml | 79 ++++ .github/workflows/release.yml | 88 +++++ .gitignore | 64 ++++ .../befuddledlabs.opensyncdance/Runtime.meta | 8 + .../Runtime/AacFlMachineLayerWrapper.cs | 2 +- .../Runtime/AacFlMachineLayerWrapper.cs.meta | 0 .../Runtime/OpenSyncDance.cs | 2 +- .../Runtime/OpenSyncDance.cs.meta | 0 .../Runtime/Utility.cs | 2 +- .../Runtime/Utility.cs.meta | 0 .../Runtime/opensyncdance.asmdef | 18 + .../Runtime/opensyncdance.asmdef.meta | 7 + .../befuddledlabs.opensyncdance/Samples.meta | 8 + .../OSD_ExampleActionAnimator.controller | 0 .../OSD_ExampleActionAnimator.controller.meta | 0 .../Samples/OSD_ExampleFXAnimator.controller | 0 .../OSD_ExampleFXAnimator.controller.meta | 0 .../Samples/OpenSyncDanceTest.unity | 0 .../Samples/OpenSyncDanceTest.unity.meta | 0 .../befuddledlabs.opensyncdance/package.json | 16 + .../package.json.meta | 7 + README.md | 23 ++ Website/app.js | 231 ++++++++++++ Website/banner.png | Bin 0 -> 61160 bytes Website/favicon.ico | Bin 0 -> 77918 bytes Website/index.html | 221 +++++++++++ Website/styles.css | 356 ++++++++++++++++++ 27 files changed, 1129 insertions(+), 3 deletions(-) create mode 100644 .github/workflows/build-listing.yml create mode 100644 .github/workflows/release.yml create mode 100644 .gitignore create mode 100644 Packages/befuddledlabs.opensyncdance/Runtime.meta rename AacFlMachineLayerWrapper.cs => Packages/befuddledlabs.opensyncdance/Runtime/AacFlMachineLayerWrapper.cs (98%) rename AacFlMachineLayerWrapper.cs.meta => Packages/befuddledlabs.opensyncdance/Runtime/AacFlMachineLayerWrapper.cs.meta (100%) rename OpenSyncDance.cs => Packages/befuddledlabs.opensyncdance/Runtime/OpenSyncDance.cs (99%) rename OpenSyncDance.cs.meta => Packages/befuddledlabs.opensyncdance/Runtime/OpenSyncDance.cs.meta (100%) rename Utility.cs => Packages/befuddledlabs.opensyncdance/Runtime/Utility.cs (98%) rename Utility.cs.meta => Packages/befuddledlabs.opensyncdance/Runtime/Utility.cs.meta (100%) create mode 100644 Packages/befuddledlabs.opensyncdance/Runtime/opensyncdance.asmdef create mode 100644 Packages/befuddledlabs.opensyncdance/Runtime/opensyncdance.asmdef.meta create mode 100644 Packages/befuddledlabs.opensyncdance/Samples.meta rename OSD_ExampleActionAnimator.controller => Packages/befuddledlabs.opensyncdance/Samples/OSD_ExampleActionAnimator.controller (100%) rename OSD_ExampleActionAnimator.controller.meta => Packages/befuddledlabs.opensyncdance/Samples/OSD_ExampleActionAnimator.controller.meta (100%) rename OSD_ExampleFXAnimator.controller => Packages/befuddledlabs.opensyncdance/Samples/OSD_ExampleFXAnimator.controller (100%) rename OSD_ExampleFXAnimator.controller.meta => Packages/befuddledlabs.opensyncdance/Samples/OSD_ExampleFXAnimator.controller.meta (100%) rename OpenSyncDanceTest.unity => Packages/befuddledlabs.opensyncdance/Samples/OpenSyncDanceTest.unity (100%) rename OpenSyncDanceTest.unity.meta => Packages/befuddledlabs.opensyncdance/Samples/OpenSyncDanceTest.unity.meta (100%) create mode 100644 Packages/befuddledlabs.opensyncdance/package.json create mode 100644 Packages/befuddledlabs.opensyncdance/package.json.meta create mode 100644 README.md create mode 100644 Website/app.js create mode 100644 Website/banner.png create mode 100644 Website/favicon.ico create mode 100644 Website/index.html create mode 100644 Website/styles.css diff --git a/.github/workflows/build-listing.yml b/.github/workflows/build-listing.yml new file mode 100644 index 0000000..ae9b415 --- /dev/null +++ b/.github/workflows/build-listing.yml @@ -0,0 +1,79 @@ +name: Build Repo Listing +# https://github.com/vrchat-community/template-package/blob/main/.github/workflows/build-listing.yml + +env: + listPublishDirectory: Website + pathToCi: ci + +on: + workflow_dispatch: + workflow_run: + workflows: [Build Release] + types: + - completed + release: + types: [published, created, edited, unpublished, deleted, released] + +# Sets permissions of the GITHUB_TOKEN to allow deployment to GitHub Pages +permissions: + contents: read + pages: write + id-token: write + +# Allow one concurrent deployment +concurrency: + group: "pages" + cancel-in-progress: true + +jobs: + + # Build the VPM Listing Website and deploy to GitHub Pages + build-listing: + name: build-listing + environment: + name: github-pages + url: ${{ steps.deployment.outputs.page_url }} + runs-on: ubuntu-latest + steps: + + # Checkout Local Repository + - name: Checkout Local Repository + uses: actions/checkout@3df4ab11eba7bda6032a0b82a6bb43b11571feac + + # Checkout Automation Repository without removing prior checkouts + - name: Checkout Automation Repository + uses: actions/checkout@3df4ab11eba7bda6032a0b82a6bb43b11571feac + with: + repository: vrchat-community/package-list-action + path: ${{ env.pathToCi }} + clean: false + + # Load cached data from previous runs + - name: Restore Cache + uses: actions/cache@704facf57e6136b1bc63b828d79edcd491f0ee84 + with: + path: | + ${{ env.pathToCi }}/.nuke/temp + ~/.nuget/packages + key: ${{ runner.os }}-${{ hashFiles('**/global.json', '**/*.csproj') }} + + # Build Package Version Listing with Nuke + - name: Build Package Version Listing + run: ${{ env.pathToCi }}/build.cmd BuildRepoListing --root ${{ env.pathToCi }} --list-publish-directory $GITHUB_WORKSPACE/${{ env.listPublishDirectory }} --current-package-name ${{ vars.PACKAGE_NAME }} + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + + # Prepare for GitHub Pages deployment + - name: Setup Pages + uses: actions/configure-pages@f156874f8191504dae5b037505266ed5dda6c382 + + # Upload the VPM Listing Website to GitHub Pages artifacts + - name: Upload Pages Artifact + uses: actions/upload-pages-artifact@a753861a5debcf57bf8b404356158c8e1e33150c + with: + path: ${{ env.listPublishDirectory }} + + # Deploy the uploaded VPM Listing Website to GitHub Pages + - name: Deploy to GitHub Pages + id: deployment + uses: actions/deploy-pages@9dbe3824824f8a1377b8e298bafde1a50ede43e5 diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml new file mode 100644 index 0000000..aad8126 --- /dev/null +++ b/.github/workflows/release.yml @@ -0,0 +1,88 @@ +name: Build Release +# https://github.com/vrchat-community/template-package/blob/main/.github/workflows/release.yml + +on: + workflow_dispatch: + +jobs: + + # Validate Repository Configuration + config: + runs-on: ubuntu-latest + outputs: + config_package: ${{ steps.config_package.outputs.configPackage }} + steps: + + # Ensure that required repository variable has been created for the Package + - name: Validate Package Config + id: config_package + run: | + if [ "${{ vars.PACKAGE_NAME }}" != "" ]; then + echo "configPackage=true" >> $GITHUB_OUTPUT; + else + echo "configPackage=false" >> $GITHUB_OUTPUT; + fi + + # Build and release the Package + # If the repository is not configured properly, this job will be skipped + build: + needs: config + runs-on: ubuntu-latest + permissions: + contents: write + env: + packagePath: Packages/${{ vars.PACKAGE_NAME }} + if: needs.config.outputs.config_package == 'true' + steps: + + # Checkout Local Repository + - name: Checkout + uses: actions/checkout@3df4ab11eba7bda6032a0b82a6bb43b11571feac + + # Get the Package version based on the package.json file + - name: Get Version + id: version + uses: zoexx/github-action-json-file-properties@b9f36ce6ee6fe2680cd3c32b2c62e22eade7e590 + with: + file_path: "${{ env.packagePath }}/package.json" + prop_path: "version" + + # Configure the Environment Variables needed for releasing the Package + - name: Set Environment Variables + run: | + echo "zipFile=${{ vars.PACKAGE_NAME }}-${{ steps.version.outputs.value }}".zip >> $GITHUB_ENV + echo "unityPackage=${{ vars.PACKAGE_NAME }}-${{ steps.version.outputs.value }}.unitypackage" >> $GITHUB_ENV + echo "version=${{ steps.version.outputs.value }}" >> $GITHUB_ENV + + # Zip the Package for release + - name: Create Package Zip + working-directory: "${{ env.packagePath }}" + run: zip -r "${{ github.workspace }}/${{ env.zipFile }}" . + + # Build a list of .meta files for future use + - name: Track Package Meta Files + run: find "${{ env.packagePath }}/" -name \*.meta >> metaList + + # Make a UnityPackage version of the Package for release + - name: Create UnityPackage + uses: pCYSl5EDgo/create-unitypackage@cfcd3cf0391a5ef1306342794866a9897c32af0b + with: + package-path: ${{ env.unityPackage }} + include-files: metaList + + # Make a release tag of the version from the package.json file + - name: Create Tag + id: tag_version + uses: rickstaa/action-create-tag@88dbf7ff6fe2405f8e8f6c6fdfd78829bc631f83 + with: + tag: "${{ env.version }}" + + # Publish the Release to GitHub + - name: Make Release + uses: softprops/action-gh-release@de2c0eb89ae2a093876385947365aca7b0e5f844 + with: + files: | + ${{ env.zipFile }} + ${{ env.unityPackage }} + ${{ env.packagePath }}/package.json + tag_name: ${{ env.version }} diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..284136d --- /dev/null +++ b/.gitignore @@ -0,0 +1,64 @@ +# This .gitignore file should be placed at the root of your Unity project directory +# +# Get latest from https://github.com/github/gitignore/blob/master/Unity.gitignore +# +/[Ll]ibrary/ +/[Tt]emp/ +/[Oo]bj/ +/[Bb]uild/ +/[Bb]uilds/ +/[Ll]ogs/ +/[Mm]emoryCaptures/ + +# Asset meta data should only be ignored when the corresponding asset is also ignored +!/[Aa]ssets/**/*.meta + +# Uncomment this line if you wish to ignore the asset store tools plugin +# /[Aa]ssets/AssetStoreTools* + +# Autogenerated Jetbrains Rider plugin +[Aa]ssets/Plugins/Editor/JetBrains* + +# Visual Studio cache directory +.vs/ + +# Gradle cache directory +.gradle/ + +# Autogenerated VS/MD/Consulo solution and project files +ExportedObj/ +.consulo/ +*.csproj +*.unityproj +*.sln +*.suo +*.tmp +*.user +*.userprefs +*.pidb +*.booproj +*.svd +*.pdb +*.mdb +*.opendb +*.VC.db + +# Unity3D generated meta files +*.pidb.meta +*.pdb.meta +*.mdb.meta + +# Unity3D generated file on crash reports +sysinfo.txt + +# Builds +*.apk +*.unitypackage + +# Crashlytics generated file +crashlytics-build.properties + +.idea/.idea.vpm-package-maker/.idea +Assets/PackageMakerWindowData.asset* +.idea +.vscode diff --git a/Packages/befuddledlabs.opensyncdance/Runtime.meta b/Packages/befuddledlabs.opensyncdance/Runtime.meta new file mode 100644 index 0000000..77bdc38 --- /dev/null +++ b/Packages/befuddledlabs.opensyncdance/Runtime.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 810d1a3ce81415441b987db6bdc95618 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/AacFlMachineLayerWrapper.cs b/Packages/befuddledlabs.opensyncdance/Runtime/AacFlMachineLayerWrapper.cs similarity index 98% rename from AacFlMachineLayerWrapper.cs rename to Packages/befuddledlabs.opensyncdance/Runtime/AacFlMachineLayerWrapper.cs index 0ef4c95..446c570 100644 --- a/AacFlMachineLayerWrapper.cs +++ b/Packages/befuddledlabs.opensyncdance/Runtime/AacFlMachineLayerWrapper.cs @@ -2,7 +2,7 @@ using AnimatorAsCode.V1; -namespace OpenSyncDance +namespace BefuddledLabs.OpenSyncDance { /// /// Wraps around the common interface of state machines and layers to make generating search trees easier. diff --git a/AacFlMachineLayerWrapper.cs.meta b/Packages/befuddledlabs.opensyncdance/Runtime/AacFlMachineLayerWrapper.cs.meta similarity index 100% rename from AacFlMachineLayerWrapper.cs.meta rename to Packages/befuddledlabs.opensyncdance/Runtime/AacFlMachineLayerWrapper.cs.meta diff --git a/OpenSyncDance.cs b/Packages/befuddledlabs.opensyncdance/Runtime/OpenSyncDance.cs similarity index 99% rename from OpenSyncDance.cs rename to Packages/befuddledlabs.opensyncdance/Runtime/OpenSyncDance.cs index fdf75aa..1c0f95f 100644 --- a/OpenSyncDance.cs +++ b/Packages/befuddledlabs.opensyncdance/Runtime/OpenSyncDance.cs @@ -10,7 +10,7 @@ using VRC.SDK3.Dynamics.Contact.Components; using VRC.SDKBase; -namespace OpenSyncDance +namespace BefuddledLabs.OpenSyncDance { [Serializable] diff --git a/OpenSyncDance.cs.meta b/Packages/befuddledlabs.opensyncdance/Runtime/OpenSyncDance.cs.meta similarity index 100% rename from OpenSyncDance.cs.meta rename to Packages/befuddledlabs.opensyncdance/Runtime/OpenSyncDance.cs.meta diff --git a/Utility.cs b/Packages/befuddledlabs.opensyncdance/Runtime/Utility.cs similarity index 98% rename from Utility.cs rename to Packages/befuddledlabs.opensyncdance/Runtime/Utility.cs index 4b378a5..759867f 100644 --- a/Utility.cs +++ b/Packages/befuddledlabs.opensyncdance/Runtime/Utility.cs @@ -4,7 +4,7 @@ using System.Collections.Generic; using AnimatorAsCode.V1; -namespace OpenSyncDance +namespace BefuddledLabs.OpenSyncDance { static class Utils { diff --git a/Utility.cs.meta b/Packages/befuddledlabs.opensyncdance/Runtime/Utility.cs.meta similarity index 100% rename from Utility.cs.meta rename to Packages/befuddledlabs.opensyncdance/Runtime/Utility.cs.meta diff --git a/Packages/befuddledlabs.opensyncdance/Runtime/opensyncdance.asmdef b/Packages/befuddledlabs.opensyncdance/Runtime/opensyncdance.asmdef new file mode 100644 index 0000000..86deb9f --- /dev/null +++ b/Packages/befuddledlabs.opensyncdance/Runtime/opensyncdance.asmdef @@ -0,0 +1,18 @@ +{ + "name": "befuddledlabs.opensyncdance", + "rootNamespace": "BefuddledLabs.OpenSyncDance", + "references": [ + "GUID:d689052aa981bf8459346a530f6e6678", + "GUID:71d9dcc7d30ab1c45866d01afa59b6cf", + "GUID:5718fb738711cd34ea54e9553040911d" + ], + "includePlatforms": [], + "excludePlatforms": [], + "allowUnsafeCode": false, + "overrideReferences": false, + "precompiledReferences": [], + "autoReferenced": true, + "defineConstraints": [], + "versionDefines": [], + "noEngineReferences": false +} \ No newline at end of file diff --git a/Packages/befuddledlabs.opensyncdance/Runtime/opensyncdance.asmdef.meta b/Packages/befuddledlabs.opensyncdance/Runtime/opensyncdance.asmdef.meta new file mode 100644 index 0000000..e07ae04 --- /dev/null +++ b/Packages/befuddledlabs.opensyncdance/Runtime/opensyncdance.asmdef.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 0716d6b1db7647d41837fb5428fb2531 +AssemblyDefinitionImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/befuddledlabs.opensyncdance/Samples.meta b/Packages/befuddledlabs.opensyncdance/Samples.meta new file mode 100644 index 0000000..004e6ef --- /dev/null +++ b/Packages/befuddledlabs.opensyncdance/Samples.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: acde519e5982f6c41b614b1890b44e44 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/OSD_ExampleActionAnimator.controller b/Packages/befuddledlabs.opensyncdance/Samples/OSD_ExampleActionAnimator.controller similarity index 100% rename from OSD_ExampleActionAnimator.controller rename to Packages/befuddledlabs.opensyncdance/Samples/OSD_ExampleActionAnimator.controller diff --git a/OSD_ExampleActionAnimator.controller.meta b/Packages/befuddledlabs.opensyncdance/Samples/OSD_ExampleActionAnimator.controller.meta similarity index 100% rename from OSD_ExampleActionAnimator.controller.meta rename to Packages/befuddledlabs.opensyncdance/Samples/OSD_ExampleActionAnimator.controller.meta diff --git a/OSD_ExampleFXAnimator.controller b/Packages/befuddledlabs.opensyncdance/Samples/OSD_ExampleFXAnimator.controller similarity index 100% rename from OSD_ExampleFXAnimator.controller rename to Packages/befuddledlabs.opensyncdance/Samples/OSD_ExampleFXAnimator.controller diff --git a/OSD_ExampleFXAnimator.controller.meta b/Packages/befuddledlabs.opensyncdance/Samples/OSD_ExampleFXAnimator.controller.meta similarity index 100% rename from OSD_ExampleFXAnimator.controller.meta rename to Packages/befuddledlabs.opensyncdance/Samples/OSD_ExampleFXAnimator.controller.meta diff --git a/OpenSyncDanceTest.unity b/Packages/befuddledlabs.opensyncdance/Samples/OpenSyncDanceTest.unity similarity index 100% rename from OpenSyncDanceTest.unity rename to Packages/befuddledlabs.opensyncdance/Samples/OpenSyncDanceTest.unity diff --git a/OpenSyncDanceTest.unity.meta b/Packages/befuddledlabs.opensyncdance/Samples/OpenSyncDanceTest.unity.meta similarity index 100% rename from OpenSyncDanceTest.unity.meta rename to Packages/befuddledlabs.opensyncdance/Samples/OpenSyncDanceTest.unity.meta diff --git a/Packages/befuddledlabs.opensyncdance/package.json b/Packages/befuddledlabs.opensyncdance/package.json new file mode 100644 index 0000000..afd0478 --- /dev/null +++ b/Packages/befuddledlabs.opensyncdance/package.json @@ -0,0 +1,16 @@ +{ + "name": "befuddledlabs.opensyncdance", + "displayName": "Open Sync Dance", + "version": "0.0.1", + "url": "https://github.com/BefuddledLabs/OpenSyncDance", + "author": { + "name": "BefuddledLabs" + }, + "unity": "2022.3", + "description": "Tools for easier Avatar Creation", + "vpmDependencies": { + "com.vrchat.avatars": "^3.1.0", + "dev.hai-vr.animator-as-code.v1": "^1.0.9941", + "dev.hai-vr.animator-as-code.v1.vrchat": "^1.0.9941" + } +} \ No newline at end of file diff --git a/Packages/befuddledlabs.opensyncdance/package.json.meta b/Packages/befuddledlabs.opensyncdance/package.json.meta new file mode 100644 index 0000000..fc75daf --- /dev/null +++ b/Packages/befuddledlabs.opensyncdance/package.json.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: f6c57710dd962994daf13d461d4dead0 +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/README.md b/README.md new file mode 100644 index 0000000..4ca8b38 --- /dev/null +++ b/README.md @@ -0,0 +1,23 @@ +# Open Sync Dance + +> [!WARNING] +> This package is under heavy development. Things may break! Use at your own risk. + +## Dependencies + +- [Haï's Animator As Code](https://github.com/hai-vr/av3-animator-as-code) +- [Haï's Animator As Code - VRChat](https://github.com/hai-vr/animator-as-code-vrchat) + +## Development + +To make modifications to this package: + +1. Clone this repository to a non-unity project folder. +2. In the **Unity** package manager: add package from disk. +3. The package should be editable via Unity and any external editor. + +## Acknowledgements + +- [*DeltaNeverUsed*](https://github.com/DeltaNeverUsed) 💻 +- [*Nara*](https://github.com/Naraenda) 💻 +- [*Airishayn*](https://x.com/Airishayn1/) 🎨 diff --git a/Website/app.js b/Website/app.js new file mode 100644 index 0000000..b15c8fe --- /dev/null +++ b/Website/app.js @@ -0,0 +1,231 @@ +import { baseLayerLuminance, StandardLuminance } from 'https://unpkg.com/@fluentui/web-components'; + +const LISTING_URL = "{{ listingInfo.Url }}"; + +const PACKAGES = { +{{~ for package in packages ~}} + "{{ package.Name }}": { + name: "{{ package.Name }}", + displayName: "{{ if package.DisplayName; package.DisplayName; end; }}", + description: "{{ if package.Description; package.Description; end; }}", + version: "{{ package.Version }}", + author: { + name: "{{ if package.Author.Name; package.Author.Name; end; }}", + url: "{{ if package.Author.Url; package.Author.Url; end; }}", + }, + dependencies: { + {{~ for dependency in package.Dependencies ~}} + "{{ dependency.Name }}": "{{ dependency.Version }}", + {{~ end ~}} + }, + keywords: [ + {{~ for keyword in package.Keywords ~}} + "{{ keyword }}", + {{~ end ~}} + ], + license: "{{ package.License }}", + licensesUrl: "{{ package.LicensesUrl }}", + }, +{{~ end ~}} +}; + +const setTheme = () => { + const isDarkTheme = () => window.matchMedia("(prefers-color-scheme: dark)").matches; + if (isDarkTheme()) { + baseLayerLuminance.setValueFor(document.documentElement, StandardLuminance.DarkMode); + } else { + baseLayerLuminance.setValueFor(document.documentElement, StandardLuminance.LightMode); + } +} + +(() => { + setTheme(); + + window.matchMedia('(prefers-color-scheme: dark)').addEventListener('change', () => { + setTheme(); + }); + + const packageGrid = document.getElementById('packageGrid'); + + const searchInput = document.getElementById('searchInput'); + searchInput.addEventListener('input', ({ target: { value = '' }}) => { + const items = packageGrid.querySelectorAll('fluent-data-grid-row[row-type="default"]'); + items.forEach(item => { + if (value === '') { + item.style.display = 'grid'; + return; + } + if ( + item.dataset?.packageName?.toLowerCase()?.includes(value.toLowerCase()) || + item.dataset?.packageId?.toLowerCase()?.includes(value.toLowerCase()) + ) { + item.style.display = 'grid'; + } else { + item.style.display = 'none'; + } + }); + }); + + const urlBarHelpButton = document.getElementById('urlBarHelp'); + const addListingToVccHelp = document.getElementById('addListingToVccHelp'); + urlBarHelpButton.addEventListener('click', () => { + addListingToVccHelp.hidden = false; + }); + const addListingToVccHelpClose = document.getElementById('addListingToVccHelpClose'); + addListingToVccHelpClose.addEventListener('click', () => { + addListingToVccHelp.hidden = true; + }); + + const vccListingInfoUrlFieldCopy = document.getElementById('vccListingInfoUrlFieldCopy'); + vccListingInfoUrlFieldCopy.addEventListener('click', () => { + const vccUrlField = document.getElementById('vccListingInfoUrlField'); + vccUrlField.select(); + navigator.clipboard.writeText(vccUrlField.value); + vccUrlFieldCopy.appearance = 'accent'; + setTimeout(() => { + vccUrlFieldCopy.appearance = 'neutral'; + }, 1000); + }); + + const vccAddRepoButton = document.getElementById('vccAddRepoButton'); + vccAddRepoButton.addEventListener('click', () => window.location.assign(`vcc://vpm/addRepo?url=${encodeURIComponent(LISTING_URL)}`)); + + const vccUrlFieldCopy = document.getElementById('vccUrlFieldCopy'); + vccUrlFieldCopy.addEventListener('click', () => { + const vccUrlField = document.getElementById('vccUrlField'); + vccUrlField.select(); + navigator.clipboard.writeText(vccUrlField.value); + vccUrlFieldCopy.appearance = 'accent'; + setTimeout(() => { + vccUrlFieldCopy.appearance = 'neutral'; + }, 1000); + }); + + const rowMoreMenu = document.getElementById('rowMoreMenu'); + const hideRowMoreMenu = e => { + if (rowMoreMenu.contains(e.target)) return; + document.removeEventListener('click', hideRowMoreMenu); + rowMoreMenu.hidden = true; + } + + const rowMenuButtons = document.querySelectorAll('.rowMenuButton'); + rowMenuButtons.forEach(button => { + button.addEventListener('click', e => { + if (rowMoreMenu?.hidden) { + rowMoreMenu.style.top = `${e.clientY + e.target.clientHeight}px`; + rowMoreMenu.style.left = `${e.clientX - 120}px`; + rowMoreMenu.hidden = false; + + const downloadLink = rowMoreMenu.querySelector('#rowMoreMenuDownload'); + const downloadListener = () => { + window.open(e?.target?.dataset?.packageUrl, '_blank'); + } + downloadLink.addEventListener('change', () => { + downloadListener(); + downloadLink.removeEventListener('change', downloadListener); + }); + + setTimeout(() => { + document.addEventListener('click', hideRowMoreMenu); + }, 1); + } + }); + }); + + const packageInfoModal = document.getElementById('packageInfoModal'); + const packageInfoModalClose = document.getElementById('packageInfoModalClose'); + packageInfoModalClose.addEventListener('click', () => { + packageInfoModal.hidden = true; + }); + + // Fluent dialogs use nested shadow-rooted elements, so we need to use JS to style them + const modalControl = packageInfoModal.shadowRoot.querySelector('.control'); + modalControl.style.maxHeight = "90%"; + modalControl.style.transition = 'height 0.2s ease-in-out'; + modalControl.style.overflowY = 'hidden'; + + const packageInfoName = document.getElementById('packageInfoName'); + const packageInfoId = document.getElementById('packageInfoId'); + const packageInfoVersion = document.getElementById('packageInfoVersion'); + const packageInfoDescription = document.getElementById('packageInfoDescription'); + const packageInfoAuthor = document.getElementById('packageInfoAuthor'); + const packageInfoDependencies = document.getElementById('packageInfoDependencies'); + const packageInfoKeywords = document.getElementById('packageInfoKeywords'); + const packageInfoLicense = document.getElementById('packageInfoLicense'); + + const rowAddToVccButtons = document.querySelectorAll('.rowAddToVccButton'); + rowAddToVccButtons.forEach((button) => { + button.addEventListener('click', () => window.location.assign(`vcc://vpm/addRepo?url=${encodeURIComponent(LISTING_URL)}`)); + }); + + const rowPackageInfoButton = document.querySelectorAll('.rowPackageInfoButton'); + rowPackageInfoButton.forEach((button) => { + button.addEventListener('click', e => { + const packageId = e.target.dataset?.packageId; + const packageInfo = PACKAGES?.[packageId]; + if (!packageInfo) { + console.error(`Did not find package ${packageId}. Packages available:`, PACKAGES); + return; + } + + packageInfoName.textContent = packageInfo.displayName; + packageInfoId.textContent = packageId; + packageInfoVersion.textContent = `v${packageInfo.version}`; + packageInfoDescription.textContent = packageInfo.description; + packageInfoAuthor.textContent = packageInfo.author.name; + packageInfoAuthor.href = packageInfo.author.url; + + if ((packageInfo.keywords?.length ?? 0) === 0) { + packageInfoKeywords.parentElement.classList.add('hidden'); + } else { + packageInfoKeywords.parentElement.classList.remove('hidden'); + packageInfoKeywords.innerHTML = null; + packageInfo.keywords.forEach(keyword => { + const keywordDiv = document.createElement('div'); + keywordDiv.classList.add('me-2', 'mb-2', 'badge'); + keywordDiv.textContent = keyword; + packageInfoKeywords.appendChild(keywordDiv); + }); + } + + if (!packageInfo.license?.length && !packageInfo.licensesUrl?.length) { + packageInfoLicense.parentElement.classList.add('hidden'); + } else { + packageInfoLicense.parentElement.classList.remove('hidden'); + packageInfoLicense.textContent = packageInfo.license ?? 'See License'; + packageInfoLicense.href = packageInfo.licensesUrl ?? '#'; + } + + packageInfoDependencies.innerHTML = null; + Object.entries(packageInfo.dependencies).forEach(([name, version]) => { + const depRow = document.createElement('li'); + depRow.classList.add('mb-2'); + depRow.textContent = `${name} @ v${version}`; + packageInfoDependencies.appendChild(depRow); + }); + + packageInfoModal.hidden = false; + + setTimeout(() => { + const height = packageInfoModal.querySelector('.col').clientHeight; + modalControl.style.setProperty('--dialog-height', `${height + 14}px`); + }, 1); + }); + }); + + const packageInfoVccUrlFieldCopy = document.getElementById('packageInfoVccUrlFieldCopy'); + packageInfoVccUrlFieldCopy.addEventListener('click', () => { + const vccUrlField = document.getElementById('packageInfoVccUrlField'); + vccUrlField.select(); + navigator.clipboard.writeText(vccUrlField.value); + vccUrlFieldCopy.appearance = 'accent'; + setTimeout(() => { + vccUrlFieldCopy.appearance = 'neutral'; + }, 1000); + }); + + const packageInfoListingHelp = document.getElementById('packageInfoListingHelp'); + packageInfoListingHelp.addEventListener('click', () => { + addListingToVccHelp.hidden = false; + }); +})(); \ No newline at end of file diff --git a/Website/banner.png b/Website/banner.png new file mode 100644 index 0000000000000000000000000000000000000000..11f5fffefbc0aad3caf4c2bab43473b93b556052 GIT binary patch literal 61160 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%0D_ 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 a5%X`!50>64ZUi&Q)bJr=28ZZdtoc7lZNXOn literal 0 HcmV?d00001 diff --git a/Website/index.html b/Website/index.html new file mode 100644 index 0000000..8bb119c --- /dev/null +++ b/Website/index.html @@ -0,0 +1,221 @@ + + + + + + VCC Listing + + + + + +
+
+ {{~ if listingInfo.BannerImage; ~}} +
+ {{~ end; ~}} +

+ {{~ listingInfo.Name ~}} +

+ {{~ if listingInfo.Description; ~}} +
{{ listingInfo.Description }}
+ {{~ end; ~}} +
+ {{~ if listingInfo.Author.Email; ~}} + + {{ listingInfo.Author.Email }} + + {{~ end; ~}} + + {{~ if listingInfo.InfoLink.Url ~}} + + {{~ end; ~}} +
+
+
+ + + Add to VCC + + + + + Copy + + + How to add a listing to your VCC + + + + + + +
+ +
+ +
+ + + + + + + Name + + + Type + + + + + {{~ for package in packages ~}} + + +
+
{{ package.DisplayName }}
+
{{ package.Description }}
+
{{ package.Name }}
+
+
+ + {{ package.Type }} + + + Add to VCC + + + + + + + + + + + +
+ {{~ end ~}} +
+
+ {{~ if listingInfo.InfoLink.Url ~}} + + {{~ end; ~}} +
+ + + diff --git a/Website/styles.css b/Website/styles.css new file mode 100644 index 0000000..ce999b0 --- /dev/null +++ b/Website/styles.css @@ -0,0 +1,356 @@ +:root { + color-scheme: light dark; +} + +* { + box-sizing: border-box; +} + +body { + padding: 0; + margin: 0; + min-width: 100vw; + min-height: 100vh; + display: flex; + align-items: center; + justify-content: center; + font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif; + color: var(--neutral-foreground-rest); +} + +.hidden { + display: none !important; +} + +.row { + display: flex; + flex-direction: row; +} + +.col { + display: flex; + flex-direction: column; +} + +.content { + max-width: 1000px; + width: 100%; + margin: 0 auto; +} + +.align-items-center { + align-items: center; +} + +.justify-content-between { + justify-content: space-between; +} + +.justify-content-end { + justify-content: flex-end; +} + +h1 { + margin-bottom: 0.5rem; +} + +.caption1 { + font-size: 1rem; + color: var(--neutral-foreground-hover); +} + +.caption2 { + font-size: 0.8rem; + margin-top: 0.25rem; + color: var(--neutral-foreground-rest); +} + +.packages { + margin: 0.5rem 0 1rem 0; + max-width: 90%; + padding: 0.25rem; + display: flex; + flex: 1; +} + +#packageGrid { + overflow-y: auto; + width: 100%; + max-height: 40rem; +} + +.packages .packageName { + font-size: 1.1rem; + font-weight: 600; + margin: 0.25rem 0; +} + +.searchBlock { + margin-top: 1rem; + width: 100%; + max-width: 90%; +} + +.searchBlock .root { + width: 100%; +} + +#searchInput { + width: 100%; +} + +.vccUrlField { + min-width: 450px; + max-width: 90%; + flex-grow:1; +} + +#addListingToVccHelp { + z-index: 11; +} + +#packageInfoModal { + z-index: 10; +} + +#rowMoreMenu { + top: 0; + left: 0; + position: absolute; + z-index: 10; +} + +#rowMoreMenu a { + display: block; + text-decoration: none; + color: var(--neutral-foreground-rest); +} + +.bannerImage { + aspect-ratio: 5 / 1; + border-radius: 6px; + max-width: 90%; + width: 100%; + background-size: cover; + background-position: center; + background-repeat: no-repeat; + margin-bottom: 0.25rem; +} + +.badge { + border-radius: 4px; + padding: 0.25rem 0.5rem; + background-color: var(--neutral-fill-hover); +} + +.m-0 { + margin: 0; +} + +.m-1 { + margin: 0.25rem; +} + +.m-2 { + margin: 0.5rem; +} + +.m-3 { + margin: 0.75rem; +} + +.m-4 { + margin: 1rem; +} + +.m-5 { + margin: 2rem; +} + +.mt-1 { + margin-top: 0.25rem; +} + +.mt-2 { + margin-top: 0.5rem; +} + +.mt-3 { + margin-top: 0.75rem; +} + +.mt-4 { + margin-top: 1rem; +} + +.mt-5 { + margin-top: 2rem; +} + +.mb-1 { + margin-bottom: 0.25rem; +} + +.mb-2 { + margin-bottom: 0.5rem; +} + +.mb-3 { + margin-bottom: 0.75rem; +} + +.mb-4 { + margin-bottom: 1rem; +} + +.mb-5 { + margin-bottom: 2rem; +} + +.ms-1 { + margin-left: 0.25rem; +} + +.ms-2 { + margin-left: 0.5rem; +} + +.ms-3 { + margin-left: 0.75rem; +} + +.ms-4 { + margin-left: 1rem; +} + +.ms-5 { + margin-left: 2rem; +} + +.me-1 { + margin-right: 0.25rem; +} + +.me-2 { + margin-right: 0.5rem; +} + +.me-3 { + margin-right: 0.75rem; +} + +.me-4 { + margin-right: 1rem; +} + +.me-5 { + margin-right: 2rem; +} + +.p-1 { + padding: 0.25rem; +} + +.p-2 { + padding: 0.5rem; +} + +.p-3 { + padding: 0.75rem; +} + +.p-4 { + padding: 1rem; +} + +.p-5 { + padding: 2rem; +} + +.pt-1 { + padding-top: 0.25rem; +} + +.pt-2 { + padding-top: 0.5rem; +} + +.pt-3 { + padding-top: 0.75rem; +} + +.pt-4 { + padding-top: 1rem; +} + +.pt-5 { + padding-top: 2rem; +} + +.pb-1 { + padding-bottom: 0.25rem; +} + +.pb-2 { + padding-bottom: 0.5rem; +} + +.pb-3 { + padding-bottom: 0.75rem; +} + +.pb-4 { + padding-bottom: 1rem; +} + +.pb-5 { + padding-bottom: 2rem; +} + +.ps-1 { + padding-left: 0.25rem; +} + +.ps-2 { + padding-left: 0.5rem; +} + +.ps-3 { + padding-left: 0.75rem; +} + +.ps-4 { + padding-left: 1rem; +} + +.ps-5 { + padding-left: 2rem; +} + +.pe-1 { + padding-right: 0.25rem; +} + +.pe-2 { + padding-right: 0.5rem; +} + +.pe-3 { + padding-right: 0.75rem; +} + +.pe-4 { + padding-right: 1rem; +} + +.pe-5 { + padding-right: 2rem; +} + +.w-100 { + width: 100%; +} + +.flex-1 { + flex: 1; +} \ No newline at end of file