From 4a369d1bc0ca020c7d038aa388af897f2ba30de9 Mon Sep 17 00:00:00 2001 From: Yusyuriv Date: Tue, 30 Apr 2024 12:16:00 +0600 Subject: [PATCH 1/4] Implement interactive list of plugins --- .github/workflows/plugin-updater.yml | 61 +- plugins.md | 173 +-- webcomponents/.gitignore | 2 + webcomponents/package-lock.json | 1172 +++++++++++++++++ webcomponents/package.json | 26 + webcomponents/rollup.config.dev.js | 28 + webcomponents/rollup.config.js | 30 + .../src/components/CodeDisplay.svelte | 73 + .../src/components/PasteHandler.svelte | 53 + .../src/components/PluginDisplay.svelte | 32 + .../src/components/PluginSpinner.svelte | 32 + .../SettingsCodeOutputDialog.svelte | 168 +++ .../src/components/SettingsEditDialog.svelte | 224 ++++ .../components/inputs/SettingsButton.svelte | 60 + .../components/inputs/SettingsCheckbox.svelte | 84 ++ .../components/inputs/SettingsDropdown.svelte | 109 ++ .../components/inputs/SettingsInput.svelte | 64 + webcomponents/src/index.ts | 5 + .../settings-generators/TypingGenerator.ts | 5 + .../src/settings-generators/index.ts | 4 + webcomponents/src/settings-generators/js.ts | 21 + webcomponents/src/settings-generators/py.ts | 24 + webcomponents/src/settings-generators/ts.ts | 20 + webcomponents/src/settings-generators/yaml.ts | 26 + webcomponents/src/theme-change-observer.ts | 31 + webcomponents/src/types.ts | 53 + .../src/webcomponents/PluginDirectory.svelte | 124 ++ .../SettingsComponentDemo.svelte | 131 ++ .../webcomponents/SettingsGenerator.svelte | 281 ++++ 29 files changed, 2926 insertions(+), 190 deletions(-) create mode 100644 webcomponents/.gitignore create mode 100644 webcomponents/package-lock.json create mode 100644 webcomponents/package.json create mode 100644 webcomponents/rollup.config.dev.js create mode 100644 webcomponents/rollup.config.js create mode 100644 webcomponents/src/components/CodeDisplay.svelte create mode 100644 webcomponents/src/components/PasteHandler.svelte create mode 100644 webcomponents/src/components/PluginDisplay.svelte create mode 100644 webcomponents/src/components/PluginSpinner.svelte create mode 100644 webcomponents/src/components/SettingsCodeOutputDialog.svelte create mode 100644 webcomponents/src/components/SettingsEditDialog.svelte create mode 100644 webcomponents/src/components/inputs/SettingsButton.svelte create mode 100644 webcomponents/src/components/inputs/SettingsCheckbox.svelte create mode 100644 webcomponents/src/components/inputs/SettingsDropdown.svelte create mode 100644 webcomponents/src/components/inputs/SettingsInput.svelte create mode 100644 webcomponents/src/index.ts create mode 100644 webcomponents/src/settings-generators/TypingGenerator.ts create mode 100644 webcomponents/src/settings-generators/index.ts create mode 100644 webcomponents/src/settings-generators/js.ts create mode 100644 webcomponents/src/settings-generators/py.ts create mode 100644 webcomponents/src/settings-generators/ts.ts create mode 100644 webcomponents/src/settings-generators/yaml.ts create mode 100644 webcomponents/src/theme-change-observer.ts create mode 100644 webcomponents/src/types.ts create mode 100644 webcomponents/src/webcomponents/PluginDirectory.svelte create mode 100644 webcomponents/src/webcomponents/SettingsComponentDemo.svelte create mode 100644 webcomponents/src/webcomponents/SettingsGenerator.svelte diff --git a/.github/workflows/plugin-updater.yml b/.github/workflows/plugin-updater.yml index 7c9e1cf..26c6702 100644 --- a/.github/workflows/plugin-updater.yml +++ b/.github/workflows/plugin-updater.yml @@ -1,41 +1,44 @@ name: Plugin Updater on: - schedule: - - cron: "0 0 * * *" workflow_dispatch: + push: + branches: + - main + paths: + - webcomponents/**.js + - webcomponents/**.ts + - webcomponents/**.json + - webcomponents/**.svelte jobs: - Update: + build-webcomponents: + name: Build web components runs-on: ubuntu-latest steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v4 with: token: ${{ secrets.UPDATER }} - - - uses: actions/setup-python@v2 + - name: Setup Node + uses: actions/setup-node@v4 with: - python-version: "3.x" - - - name: Install Dependencies - run: pip install -r ./ci/envs/requirements-plugin.txt - - - name: Update Plugin Informations - run: python ./ci/src/plugin_updater.py - env: - GH_TOKEN: ${{ github.token }} - REPOSITORY: "Flow-Launcher/Flow.Launcher.PluginsManifest" - PLUGIN_JSON: "plugins.json" - PLUGIN_MARKDOWN: "plugins.md" - PLUGIN_NAME: "Name" - PLUGIN_AUTHOR: "Author" - PLUGIN_DESCRIPTION: "Description" - PLUGIN_VERSION: "Version" - PLUGIN_WEBSITE: "Website" - - - name: Commit & Push changes - uses: stefanzweifel/git-auto-commit-action@v4 + node-version: 20 + - name: Get version + id: version + run: | + version=$(jq -r .version webcomponents/package.json) + echo "version=$version" >> $GITHUB_OUTPUT + - name: Build + run: | + cd webcomponents + npm install + npm run build + git config --local user.name "github-actions[bot]" + git config --local user.email "41898282+github-actions[bot]@users.noreply.github.com" + git add dist + git commit -m "Update web components build artifact" + - name: Put new build into the repo + uses: ad-m/github-push-action@master with: - commit_message: "DOC: update plugin list" - push_options: --force - branch: main + github_token: ${{ secrets.UPDATER }} + branch: ${{ github.ref }} diff --git a/plugins.md b/plugins.md index c2362cf..15f120c 100644 --- a/plugins.md +++ b/plugins.md @@ -1,165 +1,16 @@ Here are some plugins to add to the functionality of Flow-Launcher. - -| Name | Description | Author |Version| -|----------------------------------------------------------------------------------------------------|---------------------------------------------------------------------------------------------------------|----------------------------------------------|-------| -|[FendCalculator](https://github.com/IsaacTay/Flow.Launcher.Plugin.FendCalculator) |Arbitrary-precision unit-aware calculator. https://printfn.github.io/fend/ |IsaacTay |1.1.1 | -|[Smart Timestamps](https://github.com/DustofShadows/smart-timestamps-flowlauncher-plugin) |Generate smarter timestamps, look up dates, and copy them to your clipboard. |DustofShadows |1.0.1 | -|[Tailwindcss](https://github.com/areeburrub/tailwindcss-flow-launcher-plugin) |Search tailwindcss Docs |Areeb ur Rub |1.0.0 | -|[Plugin Runner](https://github.com/jjw24/Wox.Plugin.Runner) |Create simple command shortcuts |Jesse Barocio (@jessebarocio) |2.3.1 | -|[Dictionary](https://github.com/harrynull/Flow.Launcher.Dictionary) |English dictionary, word correction and synonym. |Harry Yu |2.3.2 | -|[SpotifyPremium](https://github.com/fow5040/Flow.Launcher.Plugin.SpotifyPremium) |Spotify Premium for Flow Launcher |Frank W. (@fow5040) |1.1.5 | -|[Clipboard History](https://github.com/liberize/Flow.Launcher.Plugin.ClipboardHistory) |a Clipboard History Plugin for FlowLauncher |liberize,Xenolphthalein |1.1.1 | -|[Window Walker](https://www.windowwalker.com/) |Alt-Tab alternative enabling searching through your windows. |betadele |3.0.1 | -|[Colors](https://github.com/Flow-Launcher/Flow.Launcher.Plugin.Color) |Provides HEX and RGB color preview. |qianlifeng, Vladimir Antos, bluray |2.0.1 | -|[Currency Converter](https://github.com/deefrawley/Flow.Launcher.Plugin.Currency) |Currency converter using the euro and rates at https://www.ecb.europa.eu/ |deefrawley |2.0.6 | -|[IP Address](https://github.com/taooceros/Flow.Plugin.IPAddress) |Shows your internal and external IP address |ishu3101 |1.2.2 | -|[Flow.Plugin.UrlEncode](https://github.com/taooceros/Flow.Plugin.UrlEncode) |urlencode or urldecode a string |cxfksword |1.0 | -|[Putty](https://github.com/jjw24/Flow.Launcher.Plugin.Putty) |Launch Putty Sessions |Konstantin Zaitcev, Kai Eichinger (@cH40zLord)|2.2.1 | -|[LibreTranslate](https://github.com/taooceros/Flow.LibreTranslate) |a translation plugin for Flow-Launcher |taooceros |1.0.1 | -|[Todoist](https://github.com/jjw24/Wox.Plugin.Todoist) |A plugin to add tasks to todoist. |DanielBV |3.0.1 | -|[Todos](https://github.com/jjw24/Wox.Plugin.Todos) |A simple todo app. |caoyue |2.0.1 | -|[Direct Translate](https://github.com/deefrawley/Flow.Launcher.Plugin.DirectTranslate) |Translate between any languages supported by textblob. |Drimix20 |2.1.0 | -|[GitHub](https://github.com/JohnTheGr8/Flow.Plugin.Github) |Search Github repositories and users, browse issues and PRs |Ioannis G. (@JohnTheGr8) |1.3.0 | -|[isPrime](https://github.com/lvonkacsoh/Flow.Launcher.Plugin.IsPrime) |Checks if the given arguments are prime numbers |lvonkacsoh |1.4.0 | -|[RollDice](https://github.com/lvonkacsoh/Flow.Launcher.RollDice) |Rolls the given dices and evaluates the expression |lvonkacsoh |2.0.1 | -|[Fancy Emoji](https://github.com/Ma-ve/Flow.Launcher.Plugin.FancyEmoji) |Search for emoji and add to your clipboard automatically |Mave |1.0.9 | -|[Timestamp](https://github.com/Garulf/Flow.Launcher.Plugin.Timestamp) |Show system time and could copy that |Zero |1.0.8 | -|[General Converter](https://github.com/deefrawley/Flow.Launcher.Plugin.GenConvert) |General weights and measures converter |deefrawley |2.0.1 | -|[HA-Commander](https://github.com/Garulf/HA-Commander) |Search, and interact with Home Assistant using Wox or Flow Launcher. |Garulf |5.1.1 | -|[CPPreference](https://github.com/peterschussheim/CPPreference-flow-plugin) |Search cppreference.com efficiently |Peter Schussheim |1.1.0 | -|[Search-MDI](https://github.com/Garulf/Search-MDI) |Search materialdesignicons.com |Garulf |3.0.3 | -|[Plexy](https://github.com/Garulf/plexy) |Search and cast your Plex Media Server Library |Garulf |2.0.0 | -|[Steam Search](https://github.com/Garulf/Steam-Search) |Search and launch your Steam Game library |Garulf |9.0.1 | -|[Twitchy](https://github.com/Garulf/twitchy) |Search and stream twitch.tv |Garulf |7.0.0 | -|[Quick Uninstaller](https://github.com/jjw24/Wox.Plugin.QuickUninstaller) |A plugin for uninstalling programs |Hogan Lee |2.0.0 | -|[nexusmods-search](https://github.com/Garulf/nexusmods-search) |Search Nexusmods.com |Garulf |0.2.3 | -|[Favorites](https://github.com/stax76/Flow.Launcher.Plugin.Favorites) |Flow Launcher plugin to define favorite apps, files, folders and URLs. |stax76 |1.5 | -|[Number Converter](https://github.com/liberize/Flow.Launcher.Plugin.NumberConverter) |Convert numbers between dec/oct/hex/bin |liberize |1.0.2 | -|[Window Services](https://github.com/Garulf/window-services) |Start and stop Windows services. |Garulf |1.1.5 | -|[Windows Dark Mode Toggle](https://github.com/Garulf/windows-dark-mode-toggle) |Toggle Window's Dark & Light modes |Garulf |1.0.3 | -|[Windows Startup](https://github.com/Garulf/Windows-Startup) |Control Windows start-up programs. |Garulf |1.0.2 | -|[TenorGIF](https://github.com/Garulf/TenorGIF) |Search Tenor for amazing GIFs! |Garulf |2.2.0 | -|[Hello World Node.js](https://github.com/Flow-Launcher/Flow.Launcher.Plugin.HelloWorldNodeJS) |TypeScript/JavaScript plugin example using Node.js |Flow Launcher |1.0.1 | -|[Emoji+](https://github.com/Garulf/emoji-plus) |Search and copy the right Emoji for any occasion. |Garulf |2.0.0 | -|[VS Code Workspaces](https://github.com/taooceros/Flow.Plugin.VSCodeWorkspace) |Search and open the previously used VS Code workspaces |ricardosantos9521, taooceros |1.3.1 | -|[Hello World Python](https://github.com/Flow-Launcher/Flow.Launcher.Plugin.HelloWorldPython) |Python Hello World example plugin |Flow Launcher |1.0.0 | -|[Epic Games Store Launcher](https://github.com/Garulf/Epic-Games-Store-Launcher) |Launch your Epic Game Store games |Garulf |2.0.0 | -|[Obsidian Notes](https://github.com/Garulf/obsidian-notes) |Search Obsidian notes |Garulf |1.1.4 | -|[Reddit Browser](https://github.com/Garulf/reddit-browser) |Search and browse Reddit |Garulf |1.0.2 | -|[Playnite](https://github.com/Garulf/playnite-plugin) |Search and launch your Playnite library. |Garulf |2.0.0 | -|[Windows Terminal profiles](https://github.com/paradox00/Flow.Launcher.Plugin.WindowsTerminal) |Windows Terminal profiles launcher |Aviv B.D. |0.0.10 | -|[Github Notifications](https://github.com/Garulf/github-notifications) |View your github notifications |Garulf |4.0.4 | -|[Github Quick Launcher](https://github.com/Garulf/github-quick-launcher) |Quickly access your personal repositories and stars. |Garulf |4.0.0 | -|[Kitty](https://github.com/lostping/Flow.Launcher.Plugin.Kitty) |Launch Kitty Sessions. |LostPing |1.0.6 | -|[Desktop Cleanup](https://github.com/umi-uyura/Flow.Launcher.Plugin.DesktopCleanup) |Clean files and folders on the desktop |Umi Uyura |1.0.1 | -|[Sonarr Search](https://github.com/Garulf/sonarr-search) |Search your Sonarr server library |Garulf |0.1.0 | -|[BetterTTV Twitch Emotes](https://github.com/Garulf/Betterttv-twitch-emotes) |Search Twitch.tv emotes via BetterTTV |Garulf |0.0.2 | -|[DuckDuckGo !bang](https://github.com/JohnTheGr8/Flow.Plugin.Bang) |Search on thousands of sites directly, with DuckDuckGo bangs |Ioannis G. (@JohnTheGr8) |1.3.3 | -|[Browser History](https://github.com/Garulf/browser-history) |Search your Web Browser history |Garulf |0.4.0 | -|[Heidi](https://github.com/lostping/Flow.Launcher.Plugin.Heidi) |Launch HeidiSQL Sessions. |LostPing |1.0.0 | -|[FlowYouTube](https://github.com/Garulf/FlowYouTube) |Search YouTube.com |Garulf |2.1.0 | -|[Base64](https://github.com/oSumAtrIX/Flow.Launcher.Plugin.Base64) |Encode or decode a string using Base64 encoding |oSumAtrIX |1.0.0 | -|[Base Converter](https://github.com/gissehel/BarLauncher-BaseConverter) |Convert values from one base to another (for example decimal to hexadecimal, etc.) |gissehel |2.0.8 | -|[Workspacer](https://github.com/gissehel/BarLauncher-Workspacer) |Create and manage workspaces |gissehel |2.0.6 | -|[WebApp launcher](https://github.com/gissehel/BarLauncher-WebApp) |Start a URL in a webapp mode |gissehel |2.0.16 | -|[Unit converter](https://github.com/gissehel/BarLauncher-UnitConverter) |Convert between physical units |gissehel |2.0.6 | -|[Wallpaper Engine Profile Selector](https://github.com/Garulf/wallpaper-engine-profile-selector) |Change your Wallpaper Engine Profile |Garulf |0.2.1 | -|[FlowRaindrop](https://github.com/Garulf/flow-raindrop) |Access Raindrop.io bookmarks with Flow Launcher/Wox |Garulf |1.0.0 | -|[WordReference](https://github.com/LeoDupont/Flow.Launcher.Plugin.WordReference) |WordReference translations (es, en, fr, it) |LeoDupont |1.0.1 | -|[DateDiff](https://github.com/LeoDupont/Flow.Launcher.Plugin.DateDiff) |Difference between two dates (documentation on website) |LeoDupont |1.1.0 | -|[Workflowy](https://github.com/brunolm/workflowy-wf) |Save notes directly into Workflowy |BrunoLM |1.0.0 | -|[DropboxFinder](https://github.com/AmeenAltajer/FlowLauncher.DropboxFinder) |A plugin for Flow Launcher to search files directly within Dropbox. |Ameen Altajer |1.1.0 | -|[AWS Toolkit](https://github.com/mjtimblin/Flow.Launcher.Plugin.AwsToolkit) |Open the AWS Console for services in your web browser |mikemorain, mjtimblin |1.0.3 | -|[Unity 3D Helper](https://github.com/falldeaf/unity-flowlauncher) |Unity3D project list/launcher |falldeaf |1.0.2 | -|[Search npm](https://github.com/gabrielcarloto/flow-search-npm) |Search npm packages |Gabriel Carloto |1.0.3 | -|[EmailTo](https://github.com/Echostorm44/FlowLauncherPluginEmailTo) |Flow plugin to spawn a new email in the system default client |Adam Marciniec |1.0.0 | -|[Search MDN](https://github.com/gabrielcarloto/flow-search-mdn) |Search MDN Web Docs |Gabriel Carloto |1.0.2 | -|[Translation Tool](https://github.com/qjcXu/Flow.Launcher.Translation) |A translation plugin by Baidu Translate |qjc |1.3.0 | -|[MyIPs](https://github.com/Echostorm44/FlowLauncherPluginMyIPs) |A plugin to tell you your internal and public IP excluding any coming from VM programs and the like |Adam Marciniec |1.0.1 | -|[Unity Engine](https://github.com/LeLocTai/Flow.Launcher.Plugin.UnityEngine) |Launch Unity Projects |LeLocTai |1.0.2 | -|[CurrencyPP](https://github.com/LeLocTai/Flow.Launcher.Plugin.CurrencyPP) |A better currency converter |Le Loc Tai |3.0.1 | -|[Poi Poi Clipboard](https://github.com/PikkamanV/Flow.Launcher.Plugin.PoiPoiClipboard) |Clear clipboard quickly to prevent password leakage |PikkamanV |1.0.0 | -|[Translation](https://github.com/cenyG/flow-launch-translate-plugin) |Node.js Translation plugin with Google Translate |cenygg |1.0.2 | -|[Cider](https://github.com/Monochromish/Flow.Launcher.Plugin.Cider) |Control Cider and it's playback with Flow Launcher |Monochromish |1.1.1 | -|[Google Translate](https://github.com/ralosant/FlowLauncher.Google.Translator) |Simple Plugin to use Google Translate in FlowLauncher |Raúl Losantos |1.0.0 | -|[Discord timestamps](https://github.com/Jessuhh/discord-timestamps-flowlauncher-plugin) |Generate discord timestamps |Jessuh |1.0.1 | -|[DevToys Launcher](https://github.com/umi-uyura/Flow.Launcher.Plugin.DevToysLauncher) |Launch DevToys tools |Umi Uyura |1.3.0 | -|[Minecraft Multi Launcher](https://github.com/Garulf/MC-Multi-Launcher) |Launch your Minecraft instances using MultiMC, PolyMC, and PrismLauncher |Garulf |1.2.1 | -|[Audio Device Selector](https://github.com/attilakapostyak/Flow.Launcher.Plugin.AudioDeviceSelector)|Easily change your playback device |AttilaKapostyak |1.0.3 | -|[OneNote](https://github.com/Odotocodot/Flow.Launcher.Plugin.OneNote) |Search your OneNote notes |Odotocodot |2.0.1 | -|[UUID Generator](https://github.com/vladislav-atakhanov/Flow.Launcher.Plugin.UUID) |Generate uuid4 and add to your clipboard. |Vladislav Atakhanov @vladislav-atakhanov |1.0.0 | -|[Hacker News](https://github.com/Joehoel/flow-hacker-news) |Flow Launcher plugin for viewing the front page of Hacker News |Joël Kuijper |1.0.0 | -|[Vercel](https://github.com/guilherssousa/flow-launcher-vercel-plugin) |View your Vercel projects. |Guilherme S. Sousa (@krteazy) |1.0.1 | -|[How Long To Beat](https://github.com/Tueska/fl-howlongtobeat) |Searches for the provided Name and returns the Playtime from HowLongToBeat |Tueska |1.0.1 | -|[JetBrainsIDEProjects](https://github.com/kenty02/Flow.Launcher.Plugin.JetBrainsIDEProjects) |Search projects in JetBrains IDEs |kenty02 |3.0.2 | -|[Youtube Downloader](https://github.com/DeepVoyager253/FlowLauncherYTDownload) |A youtube downloader |LordOfTheEel; Eyal.Br |0.1.2 | -|[7TV Emotes](https://github.com/WaterBoiledPizza/7TV-Emotes) |Search emotes from 7TV |Water Boiled Pizza |0.0.3 | -|[ChatGPT](https://github.com/MichielvanBeers/Flow.Launcher.Plugin.ChatGPT) |Plugin to use OpenAI's ChatGPT in Flow Launcher |MichielvanBeers |1.2.0 | -|[StringUtils](https://github.com/t-tan/Flow.Launcher.Plugin.StringUtils) |A multi-purpose plugin that supports UUID/GUID/random string generation, base64/URL encoding and decoding|t-tan |1.0.0 | -|[Anilist](https://github.com/DiekoMA/Flow.Launcher.Plugin.Anilist) |an anilist plugin for Flow-Launcher |DiekoMA |1.0.2 | -|[RemoveUSB](https://github.com/jonasw234/FlowLauncher.Plugin.RemoveUSB) |Removes USB drives |Jonas A. Wendorf |1.1.0 | -|[ClipboardR](https://github.com/rainyl/Flow.Launcher.Plugin.ClipboardR) |A clipboard plugin for Flow.Launcher, support pictures! |Rainyl |0.3.1 | -|[AudFlow](https://github.com/asmpro7/AudFlow) |Text to speech Plugin |Ahmed ElSaeed |2.1.1 | -|[Statis](https://github.com/asmpro7/StatisFlow) |Useful statistics plugin |Ahmed ElSaeed |1.1.0 | -|[CkFlow](https://github.com/asmpro7/CkFlow) |Plugin to check internet access and get the speed of download and upload |Ahmed ElSaeed |1.0.0 | -|[DeepFlow](https://github.com/DavidG33k/Flow.Launcher.Plugin.DeepFlow) |Plugin to use DeepL in FlowLauncher |Davide Gena |1.0.1 | -|[QrFlow](https://github.com/asmpro7/QrFlow) |Plugin to generate QR code |Ahmed ElSaeed |1.1.0 | -|[DdFlow](https://github.com/asmpro7/DdFlow) |Plugin for Get the day from the date |Ahmed ElSaeed |2.0.0 | -|[Toggl Track](https://github.com/JamesNZL/flow-toggl-plugin) |A time tracking plugin for Flow Launcher using Toggl Track |JamesNZL |4.1.0 | -|[When to Expect](https://github.com/jonasw234/FlowLauncher.Plugin.WhenToExpect) |Calculates how many tries are needed to expect an event (by default with ≥ 50 % probability). |Jonas A. Wendorf |1.0.0 | -|[ElementFlow](https://github.com/asmpro7/ElementFlow) |Data for all Chemical Elements |Ahmed ElSaeed |1.0.4 | -|[WinsFlow](https://github.com/asmpro7/WinsFlow) |Plugin to control your windows |Ahmed ElSaeed |1.0.0 | -|[VolumeFlow](https://github.com/asmpro7/VolumeFlow) |Plugin for control your Sound Volume |Ahmed ElSaeed |1.1.0 | -|[Registry](https://github.com/JohnTheGr8/Flow.Plugin.RegJump) |Navigate the registry and jump to specific keys in Registry Editor. |Ioannis G. (@JohnTheGr8) |1.0.0 | -|[AntdOpenBrowser](https://github.com/HenryTSZ/Flow.Launcher.AntdOpenBrowser) |Quickly open the antd component |HenryTSZ |1.0.2 | -|[Gitmoji](https://github.com/Galedrim/Flow.Launcher.Plugin.Gitmoji) |Search and copy the right Gitmoji. |Galedrim |1.0.0 | -|[Shortcuts](https://github.com/mantasjasikenas/flow-launcher-shortcuts-plugin) |Open user defined shortcut quickly from Flow Launcher |Mantelis |1.1.5 | -|[GamesLauncher](https://github.com/KrystianLesniak/Flow.Launcher.Plugin.GamesLauncher) |Search and launch games from multiple platforms like Steam, Epic Games etc. |KrystianLesniak |1.9.1 | -|[Snippets](https://github.com/Fermiz/Flow.Launcher.Snippets) |Simple plugin to save key/value snippets and copy to clipboard |Fermi Shuangqi Li |1.1.1 | -|[Visual Studio Launcher](https://github.com/Odotocodot/VisualStudio4Flow) |Open your recent solutions, projects and files in Visual Studio |Odotocodot |1.0.2 | -|[Add2Path](https://github.com/HorridModz/Flow.Launcher.Plugin.Add2Path) |Manage your PATH environment variable |HorridModz |1.0.0 | -|[Bulk URL Opener](https://github.com/tarikjaber/Bulk-URL-Opener) |Opens groups of tabs |Tarik Jaber |1.1.0 | -|[ryot](https://github.com/bretthysuik/Flow.Launcher.Plugin.Ryot) |Search your ryot tracker |bretthysuik |1.1.0 | -|[FabCalc](https://github.com/fabiochelly/Flow.Launcher.Plugin.FabCalc) |Advanced algebric and symbolic Calculator |Fabio |1.3.5 | -|[Browser Bookmarks](https://github.com/Flow-Launcher/Flow.Launcher) |Search your browser bookmarks |qianlifeng, Ioannis G. |3.2.0 | -|[Calculator](https://github.com/Flow-Launcher/Flow.Launcher) |Provide mathematical calculations.(Try 5*3-2 in Flow Launcher) |cxfksword |3.1.0 | -|[Explorer](https://github.com/Flow-Launcher/Flow.Launcher) |Find and manage files and folders via Windows Search or Everything |Jeremy Wu |3.1.6 | -|[Plugin Indicator](https://github.com/Flow-Launcher/Flow.Launcher) |Provides plugin action keyword suggestions |qianlifeng |3.0.3 | -|[Plugins Manager](https://github.com/Flow-Launcher/Flow.Launcher) |Management of installing, uninstalling or updating Flow Launcher plugins |Jeremy Wu |3.1.1 | -|[Process Killer](https://github.com/Flow-Launcher/Flow.Launcher.Plugin.ProcessKiller) |Kill running processes from Flow |Flow-Launcher |3.0.4 | -|[Program](https://github.com/Flow-Launcher/Flow.Launcher) |Search programs in Flow.Launcher |qianlifeng |3.2.1 | -|[Shell](https://github.com/Flow-Launcher/Flow.Launcher) |Provide executing commands from Flow Launcher |qianlifeng |3.2.1 | -|[System Commands](https://github.com/Flow-Launcher/Flow.Launcher) |Provide System related commands. e.g. shutdown,lock, setting etc. |qianlifeng |3.1.2 | -|[URL](https://github.com/Flow-Launcher/Flow.Launcher) |Open the typed URL from Flow Launcher |qianlifeng |3.0.4 | -|[Web Searches](https://github.com/Flow-Launcher/Flow.Launcher) |Provide the web search ability |qianlifeng |3.0.7 | -|[Windows Settings](https://github.com/Flow-Launcher/Flow.Launcher) |Search settings inside Control Panel and Settings App |TobiasSekan |4.0.7 | -|[Godot](https://github.com/DiekoMA/Flow.Launcher.Plugin.Godot) |Quickly launch your Godot projects from flow launcher |DiekoMA |1.0.2 | -|[RDP](https://github.com/MBeggiato/Flow.Launcher.Plugin.RDP) |RDP plugin for Flow Launcher |MBeggiato |1.0.15 | -|[Amazing Marvin](https://github.com/rrFlowLauncher/amazing_marvin) |Communication with Amazing Marvin over API |RrobertRr |0.2.0 | -|[IpMacAddress](https://github.com/seanmars/Flow.Launcher.Plugin.IpMacAddress) |Get ip and mac address of current machine |seanmars |1.0.0 | -|[WireGuard](https://github.com/flooxo/Flow.Lancher.Plugin.WireGuard) |Connect to VPN via WireGuard VPN interfaces |flooxo |1.0.2 | -|[EasySSH](https://github.com/Melv1no/Flow.Launcher.Plugin.easyssh) |ssh with Flow-Launcher |Melv1no |1.1.1.2| -|[Mcfunction ANSI highlighter](https://github.com/SuperAnt220/mcf-ansi-highlighter-flow) |highlights your minecraft command with ansi encoding to fancify them in your discord messages |SuperAnt_ |1.0.0 | -|[Notion Search](https://github.com/MinYn/flow-launcher-notion-plugin) |Notion Search API |MinYn |1.0.4 | -|[One-time Password](https://github.com/GoodbyeNJN/Flow.Launcher.Plugin.OneTimePassword) |Manage and generate time-based one-time passwords |GoodbyeNJN |1.0.0 | -|[TerrariaWiki](https://github.com/jonesy-b-dev/TerrariaWiki-flow-Plugin) |Plugin to search the Terraria wiki with |jonesy-b-dev |1.1.1 | -|[Guid Converter](https://github.com/NDiiong/Flow.Launcher.Plugin.GuidConverter/tree/main) |a Guid Converter for FlowLauncher |N.Duong |1.1.1 | -|[Temp Cleaner](https://github.com/NDiiong/Flow.Launcher.Plugin.TempCleaner/tree/main) |Temp Cleaner can help you delete all files in temporary folder (just run it) |N.Duong |1.1.0 | -|[Kaomoji](https://github.com/mawiseman/Flow.Launcher.Plugin.Kaomoji) |A Kaomoji extension for Flow-Launcher |mawiseman |1.0.1 | -|[UpsetGalgame](https://github.com/iuohua/FlowLauncherPlugin-upsetGalgame) |Search galgame on shinnku.com |luohua |0.1.1 | -|[URL Shortener](https://github.com/z1nc0r3/URL-Shortener-Plugin) |Plugin to shorten URLs |z1nc0r3 |1.1.0 | -|[Unicode Finder](https://github.com/z1nc0r3/Unicode-Finder-Plugin) |Find Unicode characters by name. |z1nc0r3 |1.0.0 | -|[Notion](https://github.com/AminSallah/Flow.Launcher.Plugin.Notion) |A Plugin For Search, Create, Edit and Delete Notion Pages. |Amin Salah |3.0.0 | -|[Azan](https://github.com/AminSallah/Flow.Launcher.Plugin.Azan) |A plugin to display prayer times. |Amin Salah |2.0.0 | -|[Win Hotkey](https://github.com/AminSallah/Flow.Launcher.Plugin.WinHotkey) |Trigger Flow Launcher by Win Key. |Amin Salah |3.4.0 | -|[TinyUrlPlugin](https://github.com/DevHJS/TinyUrlPlugin) |a plugin that use tinyurl api, it's very basic but powerful |haider |1.0.5 | -|[Fake Data](https://github.com/Yusyuriv/Flow.Launcher.Plugin.FakeData/tree/main) |Generates a variety of fake data using the Bogus library |Yusyuriv |1.0.0 | -|[Pokedex](https://github.com/Galedrim/Flow.Launcher.Plugin.Pokedex/tree/main) |Search Pokemon |Galedrim |1.0.0 | -|[Date Calculator](https://github.com/jasonz3157/Flow.Plugin.DateCalculator) |Date Calculator using Flow's embedded python |jasonz3157 |0.1.6 | -|[Astro](https://github.com/palmiak/astro-flow-launcher-plugin) |Search Astro Docs |palmiak |0.0.2 | -|[Remove.bg](https://github.com/z1nc0r3/remove.bg) |Remove backgrounds from images |z1nc0r3 |1.0.1 | - - + You can port existing Wox or PowerToys Run plugins that you use frequently by following the instructions from [Porting Plugins](https://flow-launcher.github.io/docs/#/port-plugins). + + diff --git a/webcomponents/.gitignore b/webcomponents/.gitignore new file mode 100644 index 0000000..78f2710 --- /dev/null +++ b/webcomponents/.gitignore @@ -0,0 +1,2 @@ +node_modules/ +.idea/ diff --git a/webcomponents/package-lock.json b/webcomponents/package-lock.json new file mode 100644 index 0000000..60dd492 --- /dev/null +++ b/webcomponents/package-lock.json @@ -0,0 +1,1172 @@ +{ + "name": "flow-launcher-docs-web-components", + "version": "1.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "flow-launcher-docs-web-components", + "version": "1.0.0", + "license": "ISC", + "devDependencies": { + "@rollup/plugin-node-resolve": "^15.2.3", + "@rollup/plugin-terser": "^0.4.4", + "@rollup/plugin-typescript": "^11.1.6", + "@types/js-yaml": "^4.0.9", + "js-yaml": "^4.1.0", + "rollup": "^4.12.0", + "rollup-plugin-svelte": "^7.1.6", + "svelte": "^4.2.12", + "svelte-preprocess": "^5.1.3", + "tslib": "^2.6.2", + "typescript": "^5.3.3" + } + }, + "node_modules/@ampproject/remapping": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz", + "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==", + "dev": true, + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "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, + "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, + "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, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/source-map": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.5.tgz", + "integrity": "sha512-UTYAUj/wviwdsMfzoSJspJxbkH5o1snzwX0//0ENX1u/55kkZZkcTZP6u9bwKGkv+dkk9at4m1Cpt0uY80kcpQ==", + "dev": true, + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.0", + "@jridgewell/trace-mapping": "^0.3.9" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.4.15", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", + "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", + "dev": true + }, + "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, + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@rollup/plugin-node-resolve": { + "version": "15.2.3", + "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-15.2.3.tgz", + "integrity": "sha512-j/lym8nf5E21LwBT4Df1VD6hRO2L2iwUeUmP7litikRsVp1H6NWx20NEp0Y7su+7XGc476GnXXc4kFeZNGmaSQ==", + "dev": true, + "dependencies": { + "@rollup/pluginutils": "^5.0.1", + "@types/resolve": "1.20.2", + "deepmerge": "^4.2.2", + "is-builtin-module": "^3.2.1", + "is-module": "^1.0.0", + "resolve": "^1.22.1" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "rollup": "^2.78.0||^3.0.0||^4.0.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } + } + }, + "node_modules/@rollup/plugin-terser": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/@rollup/plugin-terser/-/plugin-terser-0.4.4.tgz", + "integrity": "sha512-XHeJC5Bgvs8LfukDwWZp7yeqin6ns8RTl2B9avbejt6tZqsqvVoWI7ZTQrcNsfKEDWBTnTxM8nMDkO2IFFbd0A==", + "dev": true, + "dependencies": { + "serialize-javascript": "^6.0.1", + "smob": "^1.0.0", + "terser": "^5.17.4" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "rollup": "^2.0.0||^3.0.0||^4.0.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } + } + }, + "node_modules/@rollup/plugin-typescript": { + "version": "11.1.6", + "resolved": "https://registry.npmjs.org/@rollup/plugin-typescript/-/plugin-typescript-11.1.6.tgz", + "integrity": "sha512-R92yOmIACgYdJ7dJ97p4K69I8gg6IEHt8M7dUBxN3W6nrO8uUxX5ixl0yU/N3aZTi8WhPuICvOHXQvF6FaykAA==", + "dev": true, + "dependencies": { + "@rollup/pluginutils": "^5.1.0", + "resolve": "^1.22.1" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "rollup": "^2.14.0||^3.0.0||^4.0.0", + "tslib": "*", + "typescript": ">=3.7.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + }, + "tslib": { + "optional": true + } + } + }, + "node_modules/@rollup/pluginutils": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.1.0.tgz", + "integrity": "sha512-XTIWOPPcpvyKI6L1NHo0lFlCyznUEyPmPY1mc3KpPVDYulHSTvyeLNVW00QTLIAFNhR3kYnJTQHeGqU4M3n09g==", + "dev": true, + "dependencies": { + "@types/estree": "^1.0.0", + "estree-walker": "^2.0.2", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } + } + }, + "node_modules/@rollup/rollup-android-arm-eabi": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.12.0.tgz", + "integrity": "sha512-+ac02NL/2TCKRrJu2wffk1kZ+RyqxVUlbjSagNgPm94frxtr+XDL12E5Ll1enWskLrtrZ2r8L3wED1orIibV/w==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-android-arm64": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.12.0.tgz", + "integrity": "sha512-OBqcX2BMe6nvjQ0Nyp7cC90cnumt8PXmO7Dp3gfAju/6YwG0Tj74z1vKrfRz7qAv23nBcYM8BCbhrsWqO7PzQQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-darwin-arm64": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.12.0.tgz", + "integrity": "sha512-X64tZd8dRE/QTrBIEs63kaOBG0b5GVEd3ccoLtyf6IdXtHdh8h+I56C2yC3PtC9Ucnv0CpNFJLqKFVgCYe0lOQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-darwin-x64": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.12.0.tgz", + "integrity": "sha512-cc71KUZoVbUJmGP2cOuiZ9HSOP14AzBAThn3OU+9LcA1+IUqswJyR1cAJj3Mg55HbjZP6OLAIscbQsQLrpgTOg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-linux-arm-gnueabihf": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.12.0.tgz", + "integrity": "sha512-a6w/Y3hyyO6GlpKL2xJ4IOh/7d+APaqLYdMf86xnczU3nurFTaVN9s9jOXQg97BE4nYm/7Ga51rjec5nfRdrvA==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-gnu": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.12.0.tgz", + "integrity": "sha512-0fZBq27b+D7Ar5CQMofVN8sggOVhEtzFUwOwPppQt0k+VR+7UHMZZY4y+64WJ06XOhBTKXtQB/Sv0NwQMXyNAA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-musl": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.12.0.tgz", + "integrity": "sha512-eTvzUS3hhhlgeAv6bfigekzWZjaEX9xP9HhxB0Dvrdbkk5w/b+1Sxct2ZuDxNJKzsRStSq1EaEkVSEe7A7ipgQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-gnu": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.12.0.tgz", + "integrity": "sha512-ix+qAB9qmrCRiaO71VFfY8rkiAZJL8zQRXveS27HS+pKdjwUfEhqo2+YF2oI+H/22Xsiski+qqwIBxVewLK7sw==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-gnu": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.12.0.tgz", + "integrity": "sha512-TenQhZVOtw/3qKOPa7d+QgkeM6xY0LtwzR8OplmyL5LrgTWIXpTQg2Q2ycBf8jm+SFW2Wt/DTn1gf7nFp3ssVA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-musl": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.12.0.tgz", + "integrity": "sha512-LfFdRhNnW0zdMvdCb5FNuWlls2WbbSridJvxOvYWgSBOYZtgBfW9UGNJG//rwMqTX1xQE9BAodvMH9tAusKDUw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-win32-arm64-msvc": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.12.0.tgz", + "integrity": "sha512-JPDxovheWNp6d7AHCgsUlkuCKvtu3RB55iNEkaQcf0ttsDU/JZF+iQnYcQJSk/7PtT4mjjVG8N1kpwnI9SLYaw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-ia32-msvc": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.12.0.tgz", + "integrity": "sha512-fjtuvMWRGJn1oZacG8IPnzIV6GF2/XG+h71FKn76OYFqySXInJtseAqdprVTDTyqPxQOG9Exak5/E9Z3+EJ8ZA==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-msvc": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.12.0.tgz", + "integrity": "sha512-ZYmr5mS2wd4Dew/JjT0Fqi2NPB/ZhZ2VvPp7SmvPZb4Y1CG/LRcS6tcRo2cYU7zLK5A7cdbhWnnWmUjoI4qapg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@types/estree": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz", + "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==", + "dev": true + }, + "node_modules/@types/js-yaml": { + "version": "4.0.9", + "resolved": "https://registry.npmjs.org/@types/js-yaml/-/js-yaml-4.0.9.tgz", + "integrity": "sha512-k4MGaQl5TGo/iipqb2UDG2UwjXziSWkh0uysQelTlJpX1qGlpUZYm8PnO4DxG1qBomtJUdYJ6qR6xdIah10JLg==", + "dev": true + }, + "node_modules/@types/pug": { + "version": "2.0.10", + "resolved": "https://registry.npmjs.org/@types/pug/-/pug-2.0.10.tgz", + "integrity": "sha512-Sk/uYFOBAB7mb74XcpizmH0KOR2Pv3D2Hmrh1Dmy5BmK3MpdSa5kqZcg6EKBdklU0bFXX9gCfzvpnyUehrPIuA==", + "dev": true + }, + "node_modules/@types/resolve": { + "version": "1.20.2", + "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-1.20.2.tgz", + "integrity": "sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q==", + "dev": true + }, + "node_modules/acorn": { + "version": "8.11.3", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz", + "integrity": "sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "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 + }, + "node_modules/aria-query": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.0.tgz", + "integrity": "sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==", + "dev": true, + "dependencies": { + "dequal": "^2.0.3" + } + }, + "node_modules/axobject-query": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-4.0.0.tgz", + "integrity": "sha512-+60uv1hiVFhHZeO+Lz0RYzsVHy5Wr1ayX0mwda9KPDVLNJgZ1T9Ny7VmFbLDzxsH0D87I86vgj3gFrjTJUYznw==", + "dev": true, + "dependencies": { + "dequal": "^2.0.3" + } + }, + "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 + }, + "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, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/buffer-crc32": { + "version": "0.2.13", + "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", + "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "dev": true + }, + "node_modules/builtin-modules": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.3.0.tgz", + "integrity": "sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==", + "dev": true, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/code-red": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/code-red/-/code-red-1.0.4.tgz", + "integrity": "sha512-7qJWqItLA8/VPVlKJlFXU+NBlo/qyfs39aJcuMT/2ere32ZqvF5OSxgdM5xOfJJ7O429gg2HM47y8v9P+9wrNw==", + "dev": true, + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.4.15", + "@types/estree": "^1.0.1", + "acorn": "^8.10.0", + "estree-walker": "^3.0.3", + "periscopic": "^3.1.0" + } + }, + "node_modules/code-red/node_modules/estree-walker": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", + "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", + "dev": true, + "dependencies": { + "@types/estree": "^1.0.0" + } + }, + "node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true + }, + "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 + }, + "node_modules/css-tree": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-2.3.1.tgz", + "integrity": "sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw==", + "dev": true, + "dependencies": { + "mdn-data": "2.0.30", + "source-map-js": "^1.0.1" + }, + "engines": { + "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0" + } + }, + "node_modules/deepmerge": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", + "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/dequal": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", + "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/detect-indent": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-6.1.0.tgz", + "integrity": "sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/es6-promise": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-3.3.1.tgz", + "integrity": "sha512-SOp9Phqvqn7jtEUxPWdWfWoLmyt2VaJ6MpvP9Comy1MceMXqE6bxvaTu4iaxpYYPzhny28Lc+M87/c2cPK6lDg==", + "dev": true + }, + "node_modules/estree-walker": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", + "dev": true + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "dev": 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, + "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, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "dev": true + }, + "node_modules/hasown": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.1.tgz", + "integrity": "sha512-1/th4MHjnwncwXsIW6QMzlvYL9kG5e/CpVvLRZe4XPa8TOUNbCELqmvhDmnkNsAjwaG4+I8gJJL0JBvTTLO9qA==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "dev": true, + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "node_modules/is-builtin-module": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-3.2.1.tgz", + "integrity": "sha512-BSLE3HnV2syZ0FK0iMA/yUGplUeMmNz4AW5fnTunbCIqZi4vG3WjJT9FHMy5D69xmAYBHXQhJdALdpwVxV501A==", + "dev": true, + "dependencies": { + "builtin-modules": "^3.3.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-core-module": { + "version": "2.13.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.1.tgz", + "integrity": "sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==", + "dev": true, + "dependencies": { + "hasown": "^2.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-module": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz", + "integrity": "sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==", + "dev": true + }, + "node_modules/is-reference": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/is-reference/-/is-reference-3.0.2.tgz", + "integrity": "sha512-v3rht/LgVcsdZa3O2Nqs+NMowLOxeOm7Ay9+/ARQ2F+qEoANRcqrjAZKGN0v8ymUetZGgkp26LTnGT7H0Qo9Pg==", + "dev": true, + "dependencies": { + "@types/estree": "*" + } + }, + "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, + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/locate-character": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-character/-/locate-character-3.0.0.tgz", + "integrity": "sha512-SW13ws7BjaeJ6p7Q6CO2nchbYEc3X3J6WrmTTDto7yMPqVSZTUyY5Tjbid+Ab8gLnATtygYtiDIJGQRRn2ZOiA==", + "dev": true + }, + "node_modules/magic-string": { + "version": "0.30.8", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.8.tgz", + "integrity": "sha512-ISQTe55T2ao7XtlAStud6qwYPZjE4GK1S/BeVPus4jrq6JuOnQ00YKQC581RWhR122W7msZV263KzVeLoqidyQ==", + "dev": true, + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.4.15" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/mdn-data": { + "version": "2.0.30", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.30.tgz", + "integrity": "sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==", + "dev": true + }, + "node_modules/min-indent": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz", + "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "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, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/mkdirp": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", + "dev": true, + "dependencies": { + "minimist": "^1.2.6" + }, + "bin": { + "mkdirp": "bin/cmd.js" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dev": true, + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "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 + }, + "node_modules/periscopic": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/periscopic/-/periscopic-3.1.0.tgz", + "integrity": "sha512-vKiQ8RRtkl9P+r/+oefh25C3fhybptkHKCZSPlcXiJux2tJF55GnEj3BVn4A5gKfq9NWWXXrxkHBwVPUfH0opw==", + "dev": true, + "dependencies": { + "@types/estree": "^1.0.0", + "estree-walker": "^3.0.0", + "is-reference": "^3.0.0" + } + }, + "node_modules/periscopic/node_modules/estree-walker": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", + "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", + "dev": true, + "dependencies": { + "@types/estree": "^1.0.0" + } + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "dev": true, + "dependencies": { + "safe-buffer": "^5.1.0" + } + }, + "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, + "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.exports": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-2.0.2.tgz", + "integrity": "sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "dev": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + } + }, + "node_modules/rollup": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.12.0.tgz", + "integrity": "sha512-wz66wn4t1OHIJw3+XU7mJJQV/2NAfw5OAk6G6Hoo3zcvz/XOfQ52Vgi+AN4Uxoxi0KBBwk2g8zPrTDA4btSB/Q==", + "dev": true, + "dependencies": { + "@types/estree": "1.0.5" + }, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=18.0.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "@rollup/rollup-android-arm-eabi": "4.12.0", + "@rollup/rollup-android-arm64": "4.12.0", + "@rollup/rollup-darwin-arm64": "4.12.0", + "@rollup/rollup-darwin-x64": "4.12.0", + "@rollup/rollup-linux-arm-gnueabihf": "4.12.0", + "@rollup/rollup-linux-arm64-gnu": "4.12.0", + "@rollup/rollup-linux-arm64-musl": "4.12.0", + "@rollup/rollup-linux-riscv64-gnu": "4.12.0", + "@rollup/rollup-linux-x64-gnu": "4.12.0", + "@rollup/rollup-linux-x64-musl": "4.12.0", + "@rollup/rollup-win32-arm64-msvc": "4.12.0", + "@rollup/rollup-win32-ia32-msvc": "4.12.0", + "@rollup/rollup-win32-x64-msvc": "4.12.0", + "fsevents": "~2.3.2" + } + }, + "node_modules/rollup-plugin-svelte": { + "version": "7.1.6", + "resolved": "https://registry.npmjs.org/rollup-plugin-svelte/-/rollup-plugin-svelte-7.1.6.tgz", + "integrity": "sha512-nVFRBpGWI2qUY1OcSiEEA/kjCY2+vAjO9BI8SzA7NRrh2GTunLd6w2EYmnMt/atgdg8GvcNjLsmZmbQs/u4SQA==", + "dev": true, + "dependencies": { + "@rollup/pluginutils": "^4.1.0", + "resolve.exports": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "rollup": ">=2.0.0", + "svelte": ">=3.5.0" + } + }, + "node_modules/rollup-plugin-svelte/node_modules/@rollup/pluginutils": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-4.2.1.tgz", + "integrity": "sha512-iKnFXr7NkdZAIHiIWE+BX5ULi/ucVFYWD6TbAV+rZctiRTY2PL6tsIKhoIOaoskiWAkgu+VsbXgUVDNLHf+InQ==", + "dev": true, + "dependencies": { + "estree-walker": "^2.0.1", + "picomatch": "^2.2.2" + }, + "engines": { + "node": ">= 8.0.0" + } + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "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" + } + ] + }, + "node_modules/sander": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/sander/-/sander-0.5.1.tgz", + "integrity": "sha512-3lVqBir7WuKDHGrKRDn/1Ye3kwpXaDOMsiRP1wd6wpZW56gJhsbp5RqQpA6JG/P+pkXizygnr1dKR8vzWaVsfA==", + "dev": true, + "dependencies": { + "es6-promise": "^3.1.2", + "graceful-fs": "^4.1.3", + "mkdirp": "^0.5.1", + "rimraf": "^2.5.2" + } + }, + "node_modules/serialize-javascript": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz", + "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==", + "dev": true, + "dependencies": { + "randombytes": "^2.1.0" + } + }, + "node_modules/smob": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/smob/-/smob-1.4.1.tgz", + "integrity": "sha512-9LK+E7Hv5R9u4g4C3p+jjLstaLe11MDsL21UpYaCNmapvMkYhqCV4A/f/3gyH8QjMyh6l68q9xC85vihY9ahMQ==", + "dev": true + }, + "node_modules/sorcery": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/sorcery/-/sorcery-0.11.0.tgz", + "integrity": "sha512-J69LQ22xrQB1cIFJhPfgtLuI6BpWRiWu1Y3vSsIwK/eAScqJxd/+CJlUuHQRdX2C9NGFamq+KqNywGgaThwfHw==", + "dev": true, + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.4.14", + "buffer-crc32": "^0.2.5", + "minimist": "^1.2.0", + "sander": "^0.5.0" + }, + "bin": { + "sorcery": "bin/sorcery" + } + }, + "node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-js": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", + "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "dev": true, + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/strip-indent": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz", + "integrity": "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==", + "dev": true, + "dependencies": { + "min-indent": "^1.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, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/svelte": { + "version": "4.2.12", + "resolved": "https://registry.npmjs.org/svelte/-/svelte-4.2.12.tgz", + "integrity": "sha512-d8+wsh5TfPwqVzbm4/HCXC783/KPHV60NvwitJnyTA5lWn1elhXMNWhXGCJ7PwPa8qFUnyJNIyuIRt2mT0WMug==", + "dev": true, + "dependencies": { + "@ampproject/remapping": "^2.2.1", + "@jridgewell/sourcemap-codec": "^1.4.15", + "@jridgewell/trace-mapping": "^0.3.18", + "@types/estree": "^1.0.1", + "acorn": "^8.9.0", + "aria-query": "^5.3.0", + "axobject-query": "^4.0.0", + "code-red": "^1.0.3", + "css-tree": "^2.3.1", + "estree-walker": "^3.0.3", + "is-reference": "^3.0.1", + "locate-character": "^3.0.0", + "magic-string": "^0.30.4", + "periscopic": "^3.1.0" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/svelte-preprocess": { + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/svelte-preprocess/-/svelte-preprocess-5.1.3.tgz", + "integrity": "sha512-xxAkmxGHT+J/GourS5mVJeOXZzne1FR5ljeOUAMXUkfEhkLEllRreXpbl3dIYJlcJRfL1LO1uIAPpBpBfiqGPw==", + "dev": true, + "hasInstallScript": true, + "dependencies": { + "@types/pug": "^2.0.6", + "detect-indent": "^6.1.0", + "magic-string": "^0.30.5", + "sorcery": "^0.11.0", + "strip-indent": "^3.0.0" + }, + "engines": { + "node": ">= 16.0.0", + "pnpm": "^8.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.10.2", + "coffeescript": "^2.5.1", + "less": "^3.11.3 || ^4.0.0", + "postcss": "^7 || ^8", + "postcss-load-config": "^2.1.0 || ^3.0.0 || ^4.0.0 || ^5.0.0", + "pug": "^3.0.0", + "sass": "^1.26.8", + "stylus": "^0.55.0", + "sugarss": "^2.0.0 || ^3.0.0 || ^4.0.0", + "svelte": "^3.23.0 || ^4.0.0-next.0 || ^4.0.0 || ^5.0.0-next.0", + "typescript": ">=3.9.5 || ^4.0.0 || ^5.0.0" + }, + "peerDependenciesMeta": { + "@babel/core": { + "optional": true + }, + "coffeescript": { + "optional": true + }, + "less": { + "optional": true + }, + "postcss": { + "optional": true + }, + "postcss-load-config": { + "optional": true + }, + "pug": { + "optional": true + }, + "sass": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "typescript": { + "optional": true + } + } + }, + "node_modules/svelte/node_modules/estree-walker": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", + "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", + "dev": true, + "dependencies": { + "@types/estree": "^1.0.0" + } + }, + "node_modules/terser": { + "version": "5.28.1", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.28.1.tgz", + "integrity": "sha512-wM+bZp54v/E9eRRGXb5ZFDvinrJIOaTapx3WUokyVGZu5ucVCK55zEgGd5Dl2fSr3jUo5sDiERErUWLY6QPFyA==", + "dev": true, + "dependencies": { + "@jridgewell/source-map": "^0.3.3", + "acorn": "^8.8.2", + "commander": "^2.20.0", + "source-map-support": "~0.5.20" + }, + "bin": { + "terser": "bin/terser" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/tslib": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", + "dev": true + }, + "node_modules/typescript": { + "version": "5.3.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.3.3.tgz", + "integrity": "sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw==", + "dev": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "dev": true + } + } +} diff --git a/webcomponents/package.json b/webcomponents/package.json new file mode 100644 index 0000000..3e04468 --- /dev/null +++ b/webcomponents/package.json @@ -0,0 +1,26 @@ +{ + "name": "flow-launcher-docs-web-components", + "version": "1.0.0", + "description": "", + "main": "index.js", + "type": "module", + "scripts": { + "build": "rollup -c", + "dev": "rollup -c rollup.config.dev.js -w" + }, + "author": "", + "license": "ISC", + "devDependencies": { + "@rollup/plugin-node-resolve": "^15.2.3", + "@rollup/plugin-terser": "^0.4.4", + "@rollup/plugin-typescript": "^11.1.6", + "@types/js-yaml": "^4.0.9", + "js-yaml": "^4.1.0", + "rollup": "^4.12.0", + "rollup-plugin-svelte": "^7.1.6", + "svelte": "^4.2.12", + "svelte-preprocess": "^5.1.3", + "tslib": "^2.6.2", + "typescript": "^5.3.3" + } +} diff --git a/webcomponents/rollup.config.dev.js b/webcomponents/rollup.config.dev.js new file mode 100644 index 0000000..8764d7e --- /dev/null +++ b/webcomponents/rollup.config.dev.js @@ -0,0 +1,28 @@ +import svelte from "rollup-plugin-svelte"; +import resolve from "@rollup/plugin-node-resolve"; +import sveltePreprocess from "svelte-preprocess"; +import typescript from "@rollup/plugin-typescript"; + +export default { + input: 'src/index.ts', + output: { + sourcemap: false, + file: 'dist/flow-launcher-docs-web-components.js', + }, + plugins: [ + svelte({ + compilerOptions: { + customElement: true, + }, + preprocess: sveltePreprocess({typescript: true}), + }), + resolve({ + browser: true, + dedupe: ["svelte"] + }), + typescript(), + ], + watch: { + clearScreen: false, + }, +}; diff --git a/webcomponents/rollup.config.js b/webcomponents/rollup.config.js new file mode 100644 index 0000000..cc84b6f --- /dev/null +++ b/webcomponents/rollup.config.js @@ -0,0 +1,30 @@ +import svelte from "rollup-plugin-svelte"; +import resolve from "@rollup/plugin-node-resolve"; +import terser from "@rollup/plugin-terser"; +import sveltePreprocess from "svelte-preprocess"; +import typescript from "@rollup/plugin-typescript"; + +export default { + input: 'src/index.ts', + output: { + sourcemap: false, + file: 'dist/flow-launcher-docs-web-components.js', + }, + plugins: [ + svelte({ + compilerOptions: { + customElement: true, + }, + preprocess: sveltePreprocess({typescript: true}), + }), + resolve({ + browser: true, + dedupe: ["svelte"] + }), + typescript(), + terser(), + ], + watch: { + clearScreen: false, + }, +}; diff --git a/webcomponents/src/components/CodeDisplay.svelte b/webcomponents/src/components/CodeDisplay.svelte new file mode 100644 index 0000000..6280662 --- /dev/null +++ b/webcomponents/src/components/CodeDisplay.svelte @@ -0,0 +1,73 @@ + + +
+ {#if displayFilename} +
{filename}
+ {/if} +
+
{code}
+
+
+ + diff --git a/webcomponents/src/components/PasteHandler.svelte b/webcomponents/src/components/PasteHandler.svelte new file mode 100644 index 0000000..0d4c944 --- /dev/null +++ b/webcomponents/src/components/PasteHandler.svelte @@ -0,0 +1,53 @@ + + + diff --git a/webcomponents/src/components/PluginDisplay.svelte b/webcomponents/src/components/PluginDisplay.svelte new file mode 100644 index 0000000..ed741fb --- /dev/null +++ b/webcomponents/src/components/PluginDisplay.svelte @@ -0,0 +1,32 @@ + + + + + + + {plugin.Description} + {plugin.Author} + {plugin.Version} + + + diff --git a/webcomponents/src/components/PluginSpinner.svelte b/webcomponents/src/components/PluginSpinner.svelte new file mode 100644 index 0000000..287c244 --- /dev/null +++ b/webcomponents/src/components/PluginSpinner.svelte @@ -0,0 +1,32 @@ + + +
+ + diff --git a/webcomponents/src/components/SettingsCodeOutputDialog.svelte b/webcomponents/src/components/SettingsCodeOutputDialog.svelte new file mode 100644 index 0000000..e5b2dcc --- /dev/null +++ b/webcomponents/src/components/SettingsCodeOutputDialog.svelte @@ -0,0 +1,168 @@ + + + + + +
+ + +
+
Typings for your programming language:
+
+ + + +
+
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ Close +
+
+
+ + diff --git a/webcomponents/src/components/SettingsEditDialog.svelte b/webcomponents/src/components/SettingsEditDialog.svelte new file mode 100644 index 0000000..490f92d --- /dev/null +++ b/webcomponents/src/components/SettingsEditDialog.svelte @@ -0,0 +1,224 @@ + + + + + +
+
+
Input type:
+ +
+ + {#if data.type !== 'textBlock'} +
+
+ Input name to reference it in the code, it should follow the general JavaScript/Python naming conventions, + i.e. be named like thisIsMyVariable for JavaScript or this_is_my_variable for + Python: +
+ +
+ +
+
Input label (displayed to the left of the input):
+ +
+ {/if} + +
+
+ {#if data.type !== 'textBlock'} + Input description (displayed in smaller font right below the label): + {:else} + Text block content: + {/if} +
+ +
+ + {#if data.type === 'dropdown'} +
+
Dropdown options, one per line:
+ +
+ {/if} + + {#if data.type !== 'textBlock'} +
+
+ Input default value: + {#if data.type === 'checkbox'} + + {/if} +
+ {#if data.type === 'input' || data.type === 'inputWithFileBtn' || data.type === 'passwordBox'} + + {:else if data.type === 'textarea'} + + {:else if data.type === 'dropdown'} + + {/if} +
+ {/if} + +
+ + Cancel + + + + {editingMode ? "Save" : "Add"} + +
+
+
+ + diff --git a/webcomponents/src/components/inputs/SettingsButton.svelte b/webcomponents/src/components/inputs/SettingsButton.svelte new file mode 100644 index 0000000..57bd2dc --- /dev/null +++ b/webcomponents/src/components/inputs/SettingsButton.svelte @@ -0,0 +1,60 @@ + + + + + diff --git a/webcomponents/src/components/inputs/SettingsCheckbox.svelte b/webcomponents/src/components/inputs/SettingsCheckbox.svelte new file mode 100644 index 0000000..56832af --- /dev/null +++ b/webcomponents/src/components/inputs/SettingsCheckbox.svelte @@ -0,0 +1,84 @@ + + + + + diff --git a/webcomponents/src/components/inputs/SettingsDropdown.svelte b/webcomponents/src/components/inputs/SettingsDropdown.svelte new file mode 100644 index 0000000..f3e3c08 --- /dev/null +++ b/webcomponents/src/components/inputs/SettingsDropdown.svelte @@ -0,0 +1,109 @@ + + +
+ +
+ + diff --git a/webcomponents/src/components/inputs/SettingsInput.svelte b/webcomponents/src/components/inputs/SettingsInput.svelte new file mode 100644 index 0000000..337d206 --- /dev/null +++ b/webcomponents/src/components/inputs/SettingsInput.svelte @@ -0,0 +1,64 @@ + + +{#if !multiline} + + {#if password} + + {:else} + + {/if} +{:else} + +{/if} + + diff --git a/webcomponents/src/index.ts b/webcomponents/src/index.ts new file mode 100644 index 0000000..a228102 --- /dev/null +++ b/webcomponents/src/index.ts @@ -0,0 +1,5 @@ +import ComponentDemo from './webcomponents/SettingsComponentDemo.svelte'; +import SettingsGenerator from './webcomponents/SettingsGenerator.svelte'; +import PluginDirectory from './webcomponents/PluginDirectory.svelte'; + +export { ComponentDemo, SettingsGenerator, PluginDirectory }; diff --git a/webcomponents/src/settings-generators/TypingGenerator.ts b/webcomponents/src/settings-generators/TypingGenerator.ts new file mode 100644 index 0000000..b408f00 --- /dev/null +++ b/webcomponents/src/settings-generators/TypingGenerator.ts @@ -0,0 +1,5 @@ +import {ComponentData} from "../types"; + +export interface TypingGenerator { + (data: ComponentData[]): string; +} diff --git a/webcomponents/src/settings-generators/index.ts b/webcomponents/src/settings-generators/index.ts new file mode 100644 index 0000000..02c8599 --- /dev/null +++ b/webcomponents/src/settings-generators/index.ts @@ -0,0 +1,4 @@ +export {generateTypings as ts} from './ts'; +export {generateTypings as js} from './js'; +export {generateTypings as py} from './py'; +export {generateSettingsTemplate} from './yaml'; diff --git a/webcomponents/src/settings-generators/js.ts b/webcomponents/src/settings-generators/js.ts new file mode 100644 index 0000000..a6a1b56 --- /dev/null +++ b/webcomponents/src/settings-generators/js.ts @@ -0,0 +1,21 @@ +import type { TypingGenerator } from './TypingGenerator'; + +export const generateTypings = (data => { + return `/** + * @typedef {object} Settings + ${data + .filter(v => v.type !== 'textBlock') + .map(input => { + if (input.type !== 'dropdown') + return `* @property {${input.attributes.defaultValue ? `string` : `string | undefined`}} ${input.attributes.name}`; + else { + const options = input.attributes.options + ?.map(option => `"${option.replace(/"/g, '\\"')}"`) + .join(' | '); + return `* @property {${options}} ${input.attributes.name}`; + } + }) + .join('\n ') + } + */`; +}) satisfies TypingGenerator; diff --git a/webcomponents/src/settings-generators/py.ts b/webcomponents/src/settings-generators/py.ts new file mode 100644 index 0000000..9f7681c --- /dev/null +++ b/webcomponents/src/settings-generators/py.ts @@ -0,0 +1,24 @@ +import type { TypingGenerator } from './TypingGenerator'; + +export const generateTypings = (data => { + const hasLiteral = data.some(v => v.type === 'dropdown'); + return `from typing import TypedDict${hasLiteral ? ', Literal' : ''} + + +Settings = TypedDict('Settings', { + ${data + .filter(v => v.type !== 'textBlock') + .map(input => { + if (input.type !== 'dropdown') + return `'${input.attributes.name}': ${input.attributes.defaultValue ? `str` : `str | None`}`; + else { + const options = input.attributes.options + ?.map(option => `"${option.replace(/"/g, '\\"')}"`) + .join(', '); + return `'${input.attributes.name}': Literal[${options}]`; + } + }) + .join(',\n\t') + } +})`; +}) satisfies TypingGenerator; diff --git a/webcomponents/src/settings-generators/ts.ts b/webcomponents/src/settings-generators/ts.ts new file mode 100644 index 0000000..c435e82 --- /dev/null +++ b/webcomponents/src/settings-generators/ts.ts @@ -0,0 +1,20 @@ +import type { TypingGenerator } from './TypingGenerator'; + +export const generateTypings = (data => { + return `interface Settings { + ${data + .filter(v => v.type !== 'textBlock') + .map(input => { + if (input.type !== 'dropdown') + return `${input.attributes.name}: ${input.attributes.defaultValue ? `string` : `string | undefined`};`; + else { + const options = input.attributes.options + ?.map(option => `"${option.replace(/"/g, '\\"')}"`) + .join(' | '); + return `${input.attributes.name}: ${options};`; + } + }) + .join('\n\t') + } +}`; +}) satisfies TypingGenerator; diff --git a/webcomponents/src/settings-generators/yaml.ts b/webcomponents/src/settings-generators/yaml.ts new file mode 100644 index 0000000..56182c4 --- /dev/null +++ b/webcomponents/src/settings-generators/yaml.ts @@ -0,0 +1,26 @@ +import type { TypingGenerator } from './TypingGenerator'; +import type {ComponentDataWithId} from '../types'; +import { dump } from 'js-yaml'; + +export const generateSettingsTemplate = (data => { + const json: ComponentDataWithId[] = JSON.parse(JSON.stringify(data)); + for (const element of json) { + delete element.id; + if (element.attributes.defaultValue == null) delete element.attributes.defaultValue; + if (element.type !== 'dropdown') delete element.attributes.options; + if (!element.attributes.label) delete element.attributes.label; + if (!element.attributes.description) delete element.attributes.description; + if (element.type === 'textBlock') element.attributes = { description: element.attributes.description }; + if (element.type === 'checkbox') { + element.attributes.defaultValue = element.attributes.defaultValue === 'true' ? 'true' : 'false'; + } else { + if (!element.attributes.defaultValue?.toString().trim()) delete element.attributes.defaultValue; + } + + // Always put the `attributes` property after the `type` property for readability + const attributes = element.attributes; + delete element.attributes; + element.attributes = attributes; + } + return dump({ body: json }); +}) satisfies TypingGenerator; diff --git a/webcomponents/src/theme-change-observer.ts b/webcomponents/src/theme-change-observer.ts new file mode 100644 index 0000000..12c238c --- /dev/null +++ b/webcomponents/src/theme-change-observer.ts @@ -0,0 +1,31 @@ +import {onMount} from 'svelte'; +import type {Theme} from "./types"; + +export function useThemeChangeObserver(theme: Theme | undefined, updateTheme: (theme: Theme) => void) { + // If the theme was set manually, don't do anything + if (theme) return; + + // Do this once before onMount to prevent flickering + const link: HTMLLinkElement = document.querySelector('head > link[rel="stylesheet"][title="light"]'); + updateTheme(link?.disabled ? 'dark' : 'light'); + + onMount(() => { + if (theme) return; + const link: HTMLLinkElement = document.querySelector('head > link[rel="stylesheet"][title="light"]'); + + updateTheme(link?.disabled ? 'dark' : 'light'); + + if (!link) return; + + const observer = new MutationObserver(() => { + updateTheme(link?.disabled ? 'dark' : 'light'); + }); + + observer.observe(link, { + attributes: true, + childList: false, + }); + + return () => observer.disconnect(); + }); +} diff --git a/webcomponents/src/types.ts b/webcomponents/src/types.ts new file mode 100644 index 0000000..b5854aa --- /dev/null +++ b/webcomponents/src/types.ts @@ -0,0 +1,53 @@ +export type ComponentType = + | 'textBlock' + | 'input' + | 'inputWithFileBtn' + | 'textarea' + | 'passwordBox' + | 'dropdown' + | 'checkbox'; + +export interface ComponentAttributes { + name?: string; + label?: string; + description?: string; + options?: string[]; + defaultValue?: string | boolean; +} +export interface ComponentData { + id?: string; + type: ComponentType; + attributes: ComponentAttributes; +} +export interface FileData { + body?: ComponentData[]; +} + +export interface ComponentDataWithId extends ComponentData { + id?: string; +} + +export type Theme = 'light' | 'dark'; + +export interface FlowPlugin { + defaultIndex: number; + ID: string; + Name: string; + Description: string; + Author: string; + Version: string; + Language: 'csharp' | 'fsharp' | 'executable' | `${'javascript'|'typescript'|'python'}${'_v2'|''}`; + UrlDownload: string; + UrlSourceCode: string; + IcoPath: string; + DateAdded: string; + LatestReleaseDate?: string; +} + +declare global { + interface Window { + Prism: { + highlightElement(el: HTMLElement): void; + }; + } +} diff --git a/webcomponents/src/webcomponents/PluginDirectory.svelte b/webcomponents/src/webcomponents/PluginDirectory.svelte new file mode 100644 index 0000000..e0fce9b --- /dev/null +++ b/webcomponents/src/webcomponents/PluginDirectory.svelte @@ -0,0 +1,124 @@ + + + + +{#await pluginPromise} + +{:then _} + {#if plugins.length === 0} +

No plugins found

+ {:else} +
+ + +
+ + + + + + + + + + + + {#each searched as plugin (plugin.ID)} + + {/each} + +
NameDescriptionAuthorVersion
+ {/if} +{:catch error} +

+ An error occurred while downloading the list of plugins. + Try again +

+{/await} + + diff --git a/webcomponents/src/webcomponents/SettingsComponentDemo.svelte b/webcomponents/src/webcomponents/SettingsComponentDemo.svelte new file mode 100644 index 0000000..80e8616 --- /dev/null +++ b/webcomponents/src/webcomponents/SettingsComponentDemo.svelte @@ -0,0 +1,131 @@ + + + + +
+
+ {#if type !== 'textBlock'} +
{label}
+ {/if} +
{description}
+
+ {#if type !== 'textBlock'} +
+ {#if type === 'input'} + + {:else if type === 'inputWithFileBtn'} + + Browse + {:else if type === 'passwordBox'} + + {:else if type === 'textarea'} + + {:else if type === 'dropdown'} + + {:else if type === 'checkbox'} + + {/if} +
+ {/if} +
+ + diff --git a/webcomponents/src/webcomponents/SettingsGenerator.svelte b/webcomponents/src/webcomponents/SettingsGenerator.svelte new file mode 100644 index 0000000..5a8a381 --- /dev/null +++ b/webcomponents/src/webcomponents/SettingsGenerator.svelte @@ -0,0 +1,281 @@ + + + + + + +
+ {#if data.length > 0} +
+ + ❌ Remove all fields + + + + ⚙️ Generate SettingsTemplate.yaml + + + + ➕ Add new field + +
+ {/if} + + {#if data.length === 0} +
+ No fields added yet + + + ➕ Add new field + +
+ {:else} +
+ {#each data as item, index (item.id)} +
+
+ up(index)}> + {upButtonText} + + + down(index)}> + {downButtonText} + +
+ + + +
+ edit(index)}> + {editButtonText} + + + remove(index)}> + {removeButtonText} + +
+
+ {/each} +
+ {/if} +
+ + + + + + From 393f89d87ac1c7cfa830665ee4628e992ddd434e Mon Sep 17 00:00:00 2001 From: Yusyuriv Date: Tue, 30 Apr 2024 12:44:34 +0600 Subject: [PATCH 2/4] Allow Docsify to execute scripts in .md files --- index.html | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/index.html b/index.html index 4003520..48233e7 100644 --- a/index.html +++ b/index.html @@ -24,6 +24,7 @@ coverpage: false, mergeNavbar: true, loadSidebar: true, + executeScript: true, subMaxLevel: 4, search: 'auto', auto2top: true, @@ -57,4 +58,4 @@ - \ No newline at end of file + From 0676fa5c3379ff1495cb5a92967489bdad1dfb09 Mon Sep 17 00:00:00 2001 From: Yusyuriv Date: Tue, 30 Apr 2024 12:56:45 +0600 Subject: [PATCH 3/4] Add component demos in json-rpc-settings.md --- json-rpc-settings.md | 37 ++++++++++++++++++++++++++++++++++--- 1 file changed, 34 insertions(+), 3 deletions(-) diff --git a/json-rpc-settings.md b/json-rpc-settings.md index 9748656..a61ecb7 100644 --- a/json-rpc-settings.md +++ b/json-rpc-settings.md @@ -4,7 +4,7 @@ You might need to have some settings in your plugins that are easily changeable ### SettingsTemplate.yaml -This is a YAML files that contains the settings page layout for your plugin. It contains an object with a single property called `body`. The `body` property contains an array of objects that define the layout of the settings page. Each object in the `body` array is a section of the settings page. Each section takes up the entire width of the page, which means you can't have one input on the left and one on the right. The layout of each section is always static: input description on the left, input on the right. Every object in the `body` array has the same structure: a `type` property that defines the type of this input (text input, textarea etc.), and an `attributes` property that contains everything else the object needs to render, such as label, description, or default value. The following is a list of the different types of inputs that can be used in the `SettingsTemplate.yaml` file. +This is a YAML file that contains the settings page layout for your plugin. It contains an object with a single property called `body`. The `body` property contains an array of objects that define the layout of the settings page. Each object in the `body` array is a section of the settings page. Each section takes up the entire width of the page, which means you can't have one input on the left and one on the right. The layout of each section is always static: input description on the left, input on the right. Every object in the `body` array has the same structure: a `type` property that defines the type of this input (text input, textarea etc.), and an `attributes` property that contains everything else the object needs to render, such as label, description, or default value. The following is a list of the different input types that can be used in the `SettingsTemplate.yaml` file. --- @@ -15,6 +15,8 @@ type: textBlock attributes: description: This is a block of text. ``` + + | Property name | Property description | |---------------|----------------------| | `description` | The text to display. | @@ -29,6 +31,8 @@ attributes: description: Description of the input defaultValue: Hello there ``` + + | Property name | Property description | |----------------|--------------------------------------------------------------------------------------------------------------------------------------------------------| | `name` | The name of the input. This is the key that you will use to access the value of the input in the settings object. | @@ -46,6 +50,8 @@ attributes: description: Description of the input defaultValue: Hello there ``` + + | Property name | Property description | |----------------|--------------------------------------------------------------------------------------------------------------------------------------------------------| | `name` | The name of the input. This is the key that you will use to access the value of the input in the settings object. | @@ -64,6 +70,8 @@ attributes: description: Description of the input defaultValue: Hello there ``` + + | Property name | Property description | |----------------|------------------------------------------------------------------------------------------------------------------------------------------------------| | `name` | The name of the input. This is the key that you will use to access the value of the input in the settings object. | @@ -81,6 +89,8 @@ attributes: description: Description of the input defaultValue: secret password ``` + + | Property name | Property description | |----------------|--------------------------------------------------------------------------------------------------------------------------------------------------------| | `name` | The name of the input. This is the key that you will use to access the value of the input in the settings object. | @@ -102,6 +112,8 @@ attributes: - Option 2 - Option 3 ``` + + | Property name | Property description | |----------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| | `name` | The name of the input. This is the key that you will use to access the value of the input in the settings object. | @@ -120,6 +132,8 @@ attributes: description: Description of the checkbox defaultValue: true ``` + + | Property name | Property description | |----------------|-------------------------------------------------------------------------------------------------------------------------| | `name` | The name of the checkbox. This is the key that you will use to access the value of the checkbox in the settings object. | @@ -158,10 +172,27 @@ body: - "C#" - type: checkbox attributes: - name: Prefer shorter answers + name: preferShorterAnswers + label: Prefer shorter answers description: If checked, the plugin will try to give answer much shorter than the usual ones. defaultValue: false ``` + + + + + ### Visual editor for `SettingsTemplate.yaml` -You can use a [visual editor](https://flow-launcher-plugin-settings-generator.pages.dev/) for creating the `SettingsTemplate.yaml` file. When you're done editing, click the `Generate SettingsTemplate.yaml` file and copy-paste its contents into your `SettingsTemplate.yaml` file. Optionally, you can also copy the generated typings for your settings object in your preferred programming language. \ No newline at end of file +You can use a [visual editor](https://flow-launcher-plugin-settings-generator.pages.dev/) for creating the `SettingsTemplate.yaml` file. When you're done editing, click the `Generate SettingsTemplate.yaml` file and copy-paste its contents into your `SettingsTemplate.yaml` file. Optionally, you can also copy the generated typings for your settings object in your preferred programming language. + + From 6685609068f8c5854cca94394f6bb0e636e2eb11 Mon Sep 17 00:00:00 2001 From: Yusyuriv Date: Tue, 30 Apr 2024 13:04:25 +0600 Subject: [PATCH 4/4] Add visual SettingsTemplate.yaml editor --- _sidebar.md | 1 + json-rpc-settings.md | 2 +- json-rpc-visual-settingstemplate-editor.md | 18 ++++++++++++++++++ 3 files changed, 20 insertions(+), 1 deletion(-) create mode 100644 json-rpc-visual-settingstemplate-editor.md diff --git a/_sidebar.md b/_sidebar.md index 8f467c1..3e92d52 100644 --- a/_sidebar.md +++ b/_sidebar.md @@ -25,6 +25,7 @@ - JSONRPC - [**JSON RPC Introduction**](/json-rpc.md) - [**JSON RPC Plugin Settings**](/json-rpc-settings.md) + - [**Visual SettingsTemplate.yaml editor**](/json-rpc-visual-settingstemplate-editor.md) - Porting Plugins - [**Porting Plugins Guide**](/port-plugins.md) - [**How To Create A Theme**](/how-to-create-a-theme.md) diff --git a/json-rpc-settings.md b/json-rpc-settings.md index a61ecb7..d03589b 100644 --- a/json-rpc-settings.md +++ b/json-rpc-settings.md @@ -184,7 +184,7 @@ body: ### Visual editor for `SettingsTemplate.yaml` -You can use a [visual editor](https://flow-launcher-plugin-settings-generator.pages.dev/) for creating the `SettingsTemplate.yaml` file. When you're done editing, click the `Generate SettingsTemplate.yaml` file and copy-paste its contents into your `SettingsTemplate.yaml` file. Optionally, you can also copy the generated typings for your settings object in your preferred programming language. +You can use a [visual editor](#/json-rpc-visual-settingstemplate-editor) for creating the `SettingsTemplate.yaml` file. When you're done editing, click the `Generate SettingsTemplate.yaml` file and copy-paste its contents into your `SettingsTemplate.yaml` file. Optionally, you can also copy the generated typings for your settings object in your preferred programming language.