From c91af45415cfb40006f1b8c9c1ef59f8702e92f3 Mon Sep 17 00:00:00 2001 From: Yusyuriv Date: Sat, 9 Mar 2024 07:24:52 +0600 Subject: [PATCH 1/8] A lot of small fixes Fix broken links, fix typos, rephrase complex sentences, fix incorrect markup, simplify markup --- README.md | 4 +- _coverpage.md | 12 +++-- _sidebar.md | 6 +-- bookmark-custom-locations.md | 5 +- develop-dotnet-plugins.md | 36 +++++++-------- how-to-create-a-theme.md | 89 +++++++++++++++++++----------------- index.html | 22 ++++----- json-rpc-settings.md | 2 +- json-rpc.md | 14 +++--- nodejs-develop-plugins.md | 12 ++--- nodejs-plugin-references.md | 2 +- nodejs-setup-project.md | 8 ++-- nodejs-write-code.md | 18 ++++---- plugin.json.md | 2 +- port-plugins.md | 10 ++-- py-develop-plugins.md | 22 ++++----- py-plugin-references.md | 2 +- py-setup-project.md | 12 ++--- py-write-code.md | 20 ++++---- testing.md | 4 +- usage-tips.md | 16 +++---- 21 files changed, 158 insertions(+), 160 deletions(-) diff --git a/README.md b/README.md index 30c5246..310cb61 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,5 @@ ## Welcome -Here you will find documentation on usage tips, design information, plugin development and more. +Here you will find documentation on usage tips, design information, plugin development, and more. -If you have just started using Flow, please head over to the [Usage Tips](/usage-tips.md) section to find out how you can get the most out of Flow. Otherwise if you are completely new to Flow and want to find out its features and give it a spin, please visit [here](https://github.com/Flow-Launcher/Flow.Launcher/#-features). +If you have just started using Flow, please head over to the [Usage Tips](/usage-tips.md) section to find out how you can get the most out of Flow. Otherwise, if you are completely new to Flow and want to find out its features and give it a spin, please visit [here](https://github.com/Flow-Launcher/Flow.Launcher/#-features). diff --git a/_coverpage.md b/_coverpage.md index 8a66e85..8c44996 100644 --- a/_coverpage.md +++ b/_coverpage.md @@ -1,8 +1,10 @@ -

- - - -

+ + Flow Launcher logo + # Flow Launcher diff --git a/_sidebar.md b/_sidebar.md index 8f467c1..f4c5deb 100644 --- a/_sidebar.md +++ b/_sidebar.md @@ -22,9 +22,9 @@ - [**Plugin references**](/nodejs-plugin-references.md) - Testing Plugins - [**Testing Guide**](/testing.md) - - JSONRPC - - [**JSON RPC Introduction**](/json-rpc.md) - - [**JSON RPC Plugin Settings**](/json-rpc-settings.md) + - JSON-RPC + - [**Introduction**](/json-rpc.md) + - [**Plugin Settings**](/json-rpc-settings.md) - Porting Plugins - [**Porting Plugins Guide**](/port-plugins.md) - [**How To Create A Theme**](/how-to-create-a-theme.md) diff --git a/bookmark-custom-locations.md b/bookmark-custom-locations.md index f2a1a70..cfdd7e1 100644 --- a/bookmark-custom-locations.md +++ b/bookmark-custom-locations.md @@ -1,8 +1,8 @@ ## Custom location list This page contains the information for setting custom browser locations for the Bookmark plugin that are not included by default. -- These locations may not be the exact path, but they are the typical bookmark location for each browser, you can use them as a reference guide. -- If you are using a browser that is not listed here, please update this document. It will help others. +- These locations may not be the exact path, but they are the typical bookmark location for each browser; you can use them as a reference guide. +- If you are using a browser not listed here, please update this document. It will help others. ---- @@ -14,4 +14,3 @@ This page contains the information for setting custom browser locations for the **LibreWolf** - Firefox Engine - C:\Users\username\AppData\RoamingRoaming\librewolf\Profiles\1tyx98jn.default-default - diff --git a/develop-dotnet-plugins.md b/develop-dotnet-plugins.md index 0cc5174..1f8496f 100644 --- a/develop-dotnet-plugins.md +++ b/develop-dotnet-plugins.md @@ -1,52 +1,52 @@ -Flow is written in C#, so plugins written in .Net platform can directly communicate with Flow without extra protocols. +Flow is written in C#, so plugins written in .NET platform can directly communicate with Flow without extra protocols. ## Initialization For C# Plugins, We recommend you use the [dotnet template](https://github.com/Flow-Launcher/dotnet-template) to generate a plugin template. -In order to be recognized as a Flow DotNet plugin, the directory needs to have at least two files -1. [`plugin.json`](plugin.json.md) -2. A Dotnet Assembly that implements **[IPlugin](API-Reference/Flow.Launcher.Plugin/iplugin.md)** or **[IAsyncPlugin](API-Reference/Flow.Launcher.Plugin/iasyncplugin.md)** (remember to reference [Flow.Launcher.Plugin](https://www.nuget.org/packages/Flow.Launcher.Plugin/) by Nuget). The plugin template will add the reference and create a `Main.cs` that implements `IPlugin`. +To be recognized as a Flow DotNet plugin, the directory needs to have at least two files +1. [`plugin.json`](/plugin.json.md) +2. A Dotnet Assembly that implements **[IPlugin](/API-Reference/Flow.Launcher.Plugin/IPlugin.md)** or **[IAsyncPlugin](/API-Reference/Flow.Launcher.Plugin/IAsyncPlugin.md)** (remember to reference [Flow.Launcher.Plugin](https://www.nuget.org/packages/Flow.Launcher.Plugin/) by Nuget). The plugin template will add the reference and create a `Main.cs` that implements `IPlugin`. -Find our API Reference [here](API-Reference/) +Find our API Reference [here](/API-Reference/Flow.Launcher.Plugin.md) A sample CSharp Plugin [here](https://github.com/Flow-Launcher/plugin-samples) ## IPlugin/IAsyncPlugin -The `Main`class that implements **[IPlugin](API-Reference/Flow.Launcher.Plugin/iplugin.md)** or **[IAsyncPlugin](API-Reference/Flow.Launcher.Plugin/iasyncplugin.md)** will handle the query search with Flow. +The `Main`class that implements **[IPlugin](/API-Reference/Flow.Launcher.Plugin/IPlugin.md)** or **[IAsyncPlugin](/API-Reference/Flow.Launcher.Plugin/IAsyncPlugin.md)** will handle the query search with Flow. -**[IPlugin](API-Reference/Flow.Launcher.Plugin/iplugin.md)** interface contains two required methods: +**[IPlugin](/API-Reference/Flow.Launcher.Plugin/IPlugin.md)** interface contains two required methods: 1. `void Init(PluginInitContext context)` - - [PluginInitContext](https://github.com/Flow-Launcher/Flow.Launcher/blob/master/API-Reference/Flow.Launcher.Plugin/PluginInitContext.cs) exposes some API from Flow and an metadata object for your plugin. + - [PluginInitContext](/API-Reference/Flow.Launcher.Plugin/PluginInitContext.md) exposes some API from Flow and a metadata object for your plugin. - It will be invoked before the invocation of `Query`, so you can do some preparation here. - We recommend you do expensive operations in this method instead of Object Constructor because this method will be executed in parallel with other plugins. 2. `List Query(Query query)` - - `Query` will be invoked when user activate this plugin with specific ActionKeyword. - - A `List` of [Result](/API-Reference/Flow.Launcher.Plugin/result.md) object should be returned. + - `Query` will be invoked when user activates this plugin with specific ActionKeyword. + - A `List` of [Result](/API-Reference/Flow.Launcher.Plugin/Result.md) object should be returned. - **[IAsyncPlugin](API-Reference/Flow.Launcher.Plugin/iasyncplugin.md)** is the async version of **[IPlugin](API-Reference/Flow.Launcher.Plugin/iplugin.md)** + **[IAsyncPlugin](/API-Reference/Flow.Launcher.Plugin/IAsyncPlugin.md)** is the async version of **[IPlugin](/API-Reference/Flow.Launcher.Plugin/IPlugin.md)** - Instead of implementing `Init` and `Query`, you will need to implement `InitAsync`and `QueryAsync`, which use `Task`,`Task` as return value to allow using `async/await` strategy - `QueryAsync` provides a `CancellationToken token` to allow you to check whether user has typed a new query. ## Additional interfaces -Besides the basic implementation of **IPlugin/IAsyncPlugin**, plugins can also implement a series of interfaces that belongs to **IFeatures** to control more communication with Flow. +Besides the basic implementation of **IPlugin/IAsyncPlugin**, plugins can also implement a series of interfaces that belong to **IFeatures** to control more communication with Flow. **Remarks**: You should implement these interfaces in the same class that implements **IPlugin/IAsyncPlugin**. -### [IContextMenu](API-Reference/Flow.Launcher.Plugin/icontextmenu.md) +### [IContextMenu](/API-Reference/Flow.Launcher.Plugin/IContextMenu.md) `LoadContextMenus` will be invoked when users expand the context menu of a specific Result. The return value of `LoadContextMenus` is similar to Results from `Query/QueryAsync`. -### [IReloadable](API-Reference/Flow.Launcher.Plugin/ireloadable.md)/[IAsyncReloadable](API-Reference/Flow.Launcher.Plugin/iasyncreloadable.md) +### [IReloadable](/API-Reference/Flow.Launcher.Plugin/IReloadable.md)/[IAsyncReloadable](API-Reference/Flow.Launcher.Plugin/IAsyncReloadable.md) `ReloadData/ReloadDataAsync` will be invoked when users click the `Reload Plugin Data` command from _sys_ plugin. Generally, it is used to reload some cache (such as the programs information cached in _Program_ plugin). -### [IPluginI18n](/API-Reference/Flow.Launcher.Plugin/iplugini18n.md) +### [IPluginI18n](/API-Reference/Flow.Launcher.Plugin/IPluginI18n.md) **IPluginI18n** means the plugin has been internationalized. Therefore, Flow will load the additional language resources from `/Languages` when loading the plugin. By implementing this interface with additional language files, Flow will be able to load plugin-specific localized language resources. You will be able to get the translated text with `IPublicAPI.GetTranslation(string key)`. @@ -60,13 +60,13 @@ The Language Resource file will need to be a list of **key/value** pair. Follow Plugins are required to implement **IPublicI18n** to let Flow load Language resources. -### [IResultUpdated](API-Reference/Flow.Launcher.Plugin/iresultupdated.md) +### [IResultUpdated](/API-Reference/Flow.Launcher.Plugin/IResultUpdated.md) -Implementing **IResultUpdated** provides a way to return part of the query results early. This is generally useful for plugins with long running queries. +Implementing **IResultUpdated** provides a way to return part of the query results early. This is generally useful for plugins with long-running queries. To early return a result to Flow, you will need to invoke `ResultUpdated` event with an `ResultUpdatedEventArgs`, which includes the current `Query` object and the List of `Result` objects similar to the return value in `Query(Async)`. ### [IDisposable](https://docs.microsoft.com/en-us/dotnet/api/system.idisposable) *Flow 1.8.0 or higher* -Implementing **IDisposable** to dispose unmanaged resource in the plugin. `Dispose()` will be called when Flow exit. \ No newline at end of file +Implementing **IDisposable** to dispose unmanaged resource in the plugin. `Dispose()` will be called when Flow exit. diff --git a/how-to-create-a-theme.md b/how-to-create-a-theme.md index 2d07893..7dbd769 100644 --- a/how-to-create-a-theme.md +++ b/how-to-create-a-theme.md @@ -6,7 +6,7 @@ If you make a theme for the first time, refer to the existing theme. Copy the ** ## ⛔ Caution ⛔ -Place the theme you created in the Theme folder inside the UserData directory, for roaming this is located at **%APPDATA%\\FlowLauncher\\Themes\\** (AppData Roaming path) and for portable it is by default **%localappdata%\\FlowLauncher\app-\\\\UserData\\Themes\\** (AppData Local path). Flow will read from the UserData directory for custom themes and its own app directory for default themes, so make sure you do not place in the location outside of UserData because it will be erased along with the default theme files after an update. +Place the theme you created in the Theme folder inside the UserData directory, for roaming this is located at `%APPDATA%\FlowLauncher\Themes\` (AppData Roaming path) and for portable it is by default `%localappdata%\FlowLauncher\app-\UserData\Themes\` (AppData Local path). Flow will read from the UserData directory for custom themes and its own app directory for default themes. Make sure you do not place in the location outside of UserData because it will be erased along with the default theme files after an update. ## Theme elements @@ -14,32 +14,32 @@ The theme file allows you to set the following parts. Each style has a key, and (*There is a possibility of changing/deleting this part depending on the version.*) - +![Flow Launcher screenshot](https://cdn.jsdelivr.net/gh/Flow-Launcher/docs@raw/main/assets/themelayout.png) -
+
### WindowBorderStyle In this item, you can set the color, border size, border color, and corner radius of the basic window. -``` +```xml - ``` +``` -Window border thickness is recommended from 1 or 2. Corner radius recommends 0, 5 or less. +Window border thickness is recommended from 1 or 2. Recommended corner radius is 0, 5 or less. -
+
### QueryBoxStyle This is the style of the basic search window. You can set the font size, color of cursor, font color, input window height. If the font size is reduced, the height of the window is also reduced, so the height must be specified. -``` +```xml ``` -
+
### QuerySuggestionBoxStyle This is the style of the recommended search word that appears after the search word. The font size & Height should be the same as the QueryBoxStyle, and a more translucent color is recommended. -``` +```xml ``` -
+
### PendingLineStyle It is possible to set the color of the loading bar that is sometimes displayed. -``` +```xml ``` -
+
### SearchIconStyle This is the style of the magnifying glass icon displayed on the right side of the search window. Color & Size can be changed or hidden. (The picture change will be updated later.) -``` +```xml ``` -
+
### ItemTitleSelectedStyle You can specify a color that changes when the item is focused. The font size should be the same as ItemTitleStyle. -``` +```xml ``` -
+
### ItemSubTitleStyle This is the filepath part of the search result. The font size and color can be adjusted. -``` +```xml ``` -
+
### ItemSubTitleSelectedStyle You can specify a color that changes when the item is focused. The font size should be the same as ItemSubTitleStyle. -``` +```xml ``` -
+
### ItemHotkeyStyle Specifies the color and size of the Hotkey font. -``` +```xml ``` -
+
### ItemHotkeySelectedStyle -You can specify a color that changes when the item is focused. The font size should be the same as ItemHotkeyStyle. +You can specify a color that changes when the item is focused. The font size should be the same as `ItemHotkeyStyle`. -``` +```xml ``` -
+
### ItemSelectedBackgroundColor -This is the background color that is emphasized when the item is selected. +This is the background color emphasized when the item is selected. -```#3c454e``` +```xml +#3c454e +``` -
+
### HighlightStyle It emphasizes the part where the search word matches the result. Color and Font Weight can be set. -``` +```xml ``` -
+
### ThumbStyle Specifies the color and size of the scroll bar. -``` +```xml ``` -
+
### SeparatorStyle -Set the size, height, color, and margin of the horizontal line.If you don't think you need it, you can get rid of it. +Set the size, height, color, and margin of the horizontal line. If you don't think you need it, you can get rid of it. -``` +```xml @@ -251,5 +255,4 @@ Specifies the color of the glyph icon. ## Let's share it! Once you have crafted your perfect theme, why not share it with the community: -[Theme Gallery]( -https://github.com/Flow-Launcher/Flow.Launcher/discussions/1438) +[Theme Gallery](https://github.com/Flow-Launcher/Flow.Launcher/discussions/1438) diff --git a/index.html b/index.html index 92e8521..e9499e6 100644 --- a/index.html +++ b/index.html @@ -7,11 +7,11 @@ - + - - - + + + @@ -46,15 +46,9 @@ - - - + + + - \ No newline at end of file + diff --git a/json-rpc-settings.md b/json-rpc-settings.md index 9748656..cea66e7 100644 --- a/json-rpc-settings.md +++ b/json-rpc-settings.md @@ -164,4 +164,4 @@ 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. \ 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. diff --git a/json-rpc.md b/json-rpc.md index cf31886..0c7bcca 100644 --- a/json-rpc.md +++ b/json-rpc.md @@ -6,21 +6,21 @@ In Flow Launcher, we use JSON-RPC as a **local** procedure call protocol to bind So we need to build a **common API** between Flow and Plugin. -![JSON RPC](/assets/jsonrpc.png) +![JSON-RPC](/assets/jsonrpc.png) ### Example - `-->` denotes data sent to FLow. - `<--` denotes data coming from Flow. -```json +```js --> {"method": "query", "parameters": [""]} <-- {"Title": "title", "SubTitle": "sub title", "IconPath": "favicon.ico"} ``` ## Flow Launcher API -API is located [here](https://github.com/Flow-Launcher/Flow.Launcher/blob/master/Flow.Launcher.Plugin/Interfaces/IPublicAPI.cs) +API is located [here](/API-Reference/Flow.Launcher.Plugin/IPublicAPI.md) ### API List @@ -42,7 +42,7 @@ API is located [here](https://github.com/Flow-Launcher/Flow.Launcher/blob/master ### JSON RPC Formatting -```json +```js { "method": "Flow Launcher API Name", "parameters": [] @@ -54,7 +54,7 @@ API is located [here](https://github.com/Flow-Launcher/Flow.Launcher/blob/master - `query`, string - `requery`, bool -```json +```js { "method": "Flow.Launcher.ChangeQuery", "parameters": [query, requery] @@ -65,7 +65,7 @@ API is located [here](https://github.com/Flow-Launcher/Flow.Launcher/blob/master - `cmd`, string -```json +```js { "method": "Flow.Launcher.ShellRun", "parameters": [cmd] @@ -78,7 +78,7 @@ API is located [here](https://github.com/Flow-Launcher/Flow.Launcher/blob/master - `sub_title`, string - `ico_path`, string(path) -```json +```js { "method": "Flow.Launcher.ShowMsg", "parameters": [title, sub_title, ico_path] diff --git a/nodejs-develop-plugins.md b/nodejs-develop-plugins.md index 6ad1637..24211d1 100644 --- a/nodejs-develop-plugins.md +++ b/nodejs-develop-plugins.md @@ -4,14 +4,14 @@ Plugins written in TypeScript/JavaScript use the [JSON-RPC](https://flow-launche Although not a hard requirement, this guide will use Node.js to run the TypeScript/JavaScript. We will refer to TypeScript/JavaScript plugin as Node.js plugin from here on. -When building a Node.js plugins there are several things to be mindful of: +When building a Node.js plugin, there are several things to be mindful of: * The most important thing is we do not expect users to have to manually install the dependencies via npm because we aim to provide a seamless experience for them. This can be achieved by adding the following three things to your project: - 1. Add a GitHub workflow- use a GitHub workflow that will install all your plugin's dependencies including the modules inside a folder called 'node_modules'. - 2. Publish all as a zip- zip up your project including a lib directory that contains the modules and publish it to GitHub Releases page. - 3. Point your module path to the node_modules directory- reference all the modules to that directory. + 1. Add a GitHub workflow — use a GitHub workflow that will install all your plugin's dependencies including the modules inside a folder called `node_modules`. + 2. Publish all as a zip — zip up your project including a lib directory that contains the modules and publish it to GitHub Releases page. + 3. Point your module path to the node_modules directory — reference all the modules to that directory. -* Users can use their system-installed Node.js with Flow Launcher, but in most circumstances, they will most likely be using Flow Launcher's download of [Node.js](https://nodejs.org/dist/v16.18.0/node-v16.18.0-win-x64.zip)). This download of portable Node.js version is isolated from the user's system and can be simply removed. +* Users can use their system-installed Node.js with Flow Launcher, but in most circumstances, they will most likely be using Flow Launcher's download of [Node.js](https://nodejs.org/dist/v16.18.0/node-v16.18.0-win-x64.zip). This download of portable Node.js version is isolated from the user's system and can be simply removed. ### Simple Example -Have a look at this simple example plugin [here](https://github.com/Flow-Launcher/Flow.Launcher.Plugin.HelloWorldNodeJS), notice it has a folder called '.github/workflows' and a file called 'Publish Release.yml'. This is the workflow file that GitHub Workflow uses to run the CI/CD for the project. Moving out of that folder you can go into the [main.js](https://github.com/Flow-Launcher/Flow.Launcher.Plugin.HelloWorldNodeJS/blob/main/main.js) file, this is the entry file for your plugin. +Have a look at this simple example plugin [here](https://github.com/Flow-Launcher/Flow.Launcher.Plugin.HelloWorldNodeJS), notice it has a folder called `.github/workflows` and a file called `Publish Release.yml`. This is the workflow file that GitHub Workflow uses to run the CI/CD for the project. Moving out of that folder, you can go into the [main.js](https://github.com/Flow-Launcher/Flow.Launcher.Plugin.HelloWorldNodeJS/blob/main/main.js) file; this is the entry file for your plugin. diff --git a/nodejs-plugin-references.md b/nodejs-plugin-references.md index 9c0978e..eca2608 100644 --- a/nodejs-plugin-references.md +++ b/nodejs-plugin-references.md @@ -1,6 +1,6 @@ ### Good references to follow -Here are some plugins which could help you build out your own or serve as a reference point: +Here are some plugins that could help you build out your own or serve as a reference point: - Plugin Template https://github.com/Joehoel/flow-launcher-plugin-template-node - Discord Timestamps https://github.com/Jessuhh/discord-timestamps-flowlauncher-plugin - NPM Search https://github.com/gabrielcarloto/flow-search-npm diff --git a/nodejs-setup-project.md b/nodejs-setup-project.md index ce82294..676eb9b 100644 --- a/nodejs-setup-project.md +++ b/nodejs-setup-project.md @@ -20,7 +20,7 @@ push: node-version: '17.3.0' ``` -4. The project's release version is obtained from your plugin.json automatically by the ci, so when built it will be appended to the zip file later: +4. The project's release version is obtained from your plugin.json automatically by the CI, so when built, it will be appended to the zip file later: ```yml - name: get version @@ -41,7 +41,7 @@ push: ``` ### 2. Publish as zip -The final step to the workflow file is this publish section, which will publish the zip file you generated, upload to GitHub Releases page and tag with the version generated from the previous step from your plugin.json file. Remember again to replace `Flow.Launcher.Plugin.HelloWorldNodeJS` with the name of your plugin. +The final step to the workflow file is this `Publish` section, which will publish the zip file you generated, upload to GitHub Releases page and tag with the version generated from the previous step from your plugin.json file. Remember again to replace `Flow.Launcher.Plugin.HelloWorldNodeJS` with the name of your plugin. ```yml - name: Publish @@ -56,7 +56,7 @@ The final step to the workflow file is this publish section, which will publish Feel free to also have a read of this [blog post](https://blog.ipswitch.com/how-to-build-your-first-github-actions-workflow) which does a simple explanation of how to use GitHub Actions Workflow. ### 3. Use node_modules directory -Once the 'node_modules' folder is included in your zip release, it can then be used without needing the user to manually npm install the plugin's dependencies. You just have to tell the plugin during runtime to find those modules in your local node_modules directory. Do this by using this exact copy of the following block of code in your [main.js](https://github.com/Flow-Launcher/Flow.Launcher.Plugin.HelloWorldNodeJS/blob/main/main.js): +Once the `node_modules` folder is included in your zip release, it can then be used without needing the user to manually npm install the plugin's dependencies. You just have to tell the plugin during runtime to find those modules in your local node_modules directory. Do this by using this exact copy of the following code block in your [main.js](https://github.com/Flow-Launcher/Flow.Launcher.Plugin.HelloWorldNodeJS/blob/main/main.js): ```javascript -const open = require('./node_modules/open') +const open = require('./node_modules/open'); ``` diff --git a/nodejs-write-code.md b/nodejs-write-code.md index e8cffa1..a0e8d83 100644 --- a/nodejs-write-code.md +++ b/nodejs-write-code.md @@ -5,10 +5,10 @@ It is a good practice that you create a branch for each of the new feature/fixes ### 2. main.js your main.js should look something like below: -``` -const open = require('./node_modules/open') +```js +const open = require('./node_modules/open'); -const { method, parameters } = JSON.parse(process.argv[2]) +const { method, parameters } = JSON.parse(process.argv[2]); if (method === "query") { console.log(JSON.stringify( @@ -28,8 +28,8 @@ if (method === "query") { } if (method === "do_something_for_query") { - url = parameters[0] - do_something_for_query(url) + url = parameters[0]; + do_something_for_query(url); } function do_something_for_query(url) { @@ -42,7 +42,7 @@ function do_something_for_query(url) { ### 3. Query entry point **if (method === "query")** -This if statement captures the args passed via JsonRPC defined as `const { method, parameters } = JSON.parse(process.argv[2])`, so if 'method' is 'query' then the console.log's code block will be run. As result is an array, you can also specify a single or multiple results. +This if statement captures the args passed via JSON-RPC defined as `const { method, parameters } = JSON.parse(process.argv[2])`, so if `method` is `'query'` then the console.log's code block will be run. As the `result` property is an array, you can also specify a single or multiple results. ### 4. Assigning an action to your results **JsonRPCAction** @@ -59,11 +59,11 @@ node "%plugin_dir%/main.js" %* ``` ### 6 Result score -The `score` field provides the ability to assign a weight to your score, the higher the score is, the higher the result from the plugin would show in flow's result list. The range in which you assign the score is usually between 0-100. You can keep it as 0 if your plugin generally uses an action keyword to trigger, but if you are using a global action keyword - `*` then the average weight for a plugin would be 50. Additionally users can also tweak the score via Flow's plugin setting as well. +The `score` field provides the ability to assign a weight to your score; the higher the score is, the higher the result from the plugin would show in flow's result list. The range in which you assign the score is usually between 0–100. You can keep it as 0 if your plugin generally uses an action keyword to trigger, but if you are using a global action keyword - `*` then the average weight for a plugin would be 50. Additionally, users can tweak the score via Flow's plugin setting as well. ### 7. Your plugin.json -You will also need to if not yet already, create a plugin.json file that will instruct Flow on how to load your plugin. +You will also need to, if not yet already, create a plugin.json file that will instruct Flow on how to load your plugin. This file should be placed in the top level folder. -To revisit what to include in your plugin.json, visit [here](https://flow-launcher.github.io/docs/#/plugin.json) +To revisit what to include in your plugin.json, visit [here](/plugin.json.md) diff --git a/plugin.json.md b/plugin.json.md index 6591b31..3d8919d 100644 --- a/plugin.json.md +++ b/plugin.json.md @@ -3,7 +3,7 @@ `plugin.json` is the manifest files of your plugin. It is required for Flow to understand how to communicate with your plugin. It must be in the plugin root directory. -```json +```js { "ID":"", //Plugin ID,32 bit UUID "ActionKeyword":"", //Plugin default action keyword (* means no specific action keyword) diff --git a/port-plugins.md b/port-plugins.md index 9420830..d681144 100644 --- a/port-plugins.md +++ b/port-plugins.md @@ -3,17 +3,17 @@ ### Notes - When porting, please keep the author's commit history -- Flow Launcher targets minimum .Net 5, so older plugins should be upgraded to keep the continuity of their future developments +- Flow Launcher targets minimum .NET 5, so older plugins should be upgraded to keep the continuity of their future developments - All dll libraries used by the plugin should be outputted and included in the final build, to do this, set the attribute CopyLocalLockFileAssemblies in your project file to true ### Steps 1. To start off, you can fork/create a new repo, either way the project's commit history must be kept. If it's forked, you can just start updating it. If it's a new repo, do this by first cloning the repo, then add your new repo as a new repo remote, remove the original remote and then push to it -2. Use try convert tool from https://github.com/dotnet/try-convert -3. Try-convert -w path-to-folder-or-solution-or-project +2. Use `try-convert` tool from https://github.com/dotnet/try-convert +3. `try-convert -w path-to-folder-or-solution-or-project` 4. May need to fix on the project file, a good template to follow is the [Explorer plugin](https://github.com/Flow-Launcher/Flow.Launcher/blob/dev/Plugins/Flow.Launcher.Plugin.Explorer/Flow.Launcher.Plugin.Explorer.csproj) project: - - fix to net5.0-windows - - set the output location as 'Output\Release\' + - fix `` to `net5.0-windows` + - set the output location as `Output\Release\` - add `true` and `false` to the csproj file - bump version to 2.0.0 and fix up any missing attributes if necessary 5. Update code and fix plugin's setting layout if necessary diff --git a/py-develop-plugins.md b/py-develop-plugins.md index 642772b..a4e8145 100644 --- a/py-develop-plugins.md +++ b/py-develop-plugins.md @@ -2,21 +2,21 @@ Python plugins use the [JSON-RPC](https://flow-launcher.github.io/docs/#/json-rpc) protocol to communicate with Flow via JSON structured calls. -When building a Python plugins there are several things to be mindful of: +When building a Python plugins, there are several things to be mindful of: * The most important thing is we do not expect users to have to manually install the dependencies in requirements.txt because we aim to provide a seamless experience for them. This can be achieved by adding the following three things to your project: - 1. Add a GitHub workflow- use a GitHub workflow that will install all your plugin's dependencies including the Python flowlauncher module to a folder called Lib inside your plugin. - 2. Publish all as a zip- zip up your project including a lib directory that contains the modules and publish it to GitHub Releases page. - 3. Point your module imports to the lib directory- reference all the modules to that directory where they are first imported. + 1. Add a GitHub workflow — use a GitHub workflow that will install all your plugin's dependencies including the Python flowlauncher module to a folder called Lib inside your plugin. + 2. Publish all as a zip — zip up your project including a lib directory that contains the modules and publish it to GitHub Releases page. + 3. Point your module imports to the lib directory — reference all the modules to that directory where they are first imported. * Users can use their own system-installed Python with Flow Launcher, but in most circumstances they will most likely be using Flow Launcher's download of [Embedded Python](https://docs.python.org/3/using/windows.html#the-embeddable-package). This download is isolated from the users system and does not prepend the scripts run directory to the system `PATH`.[ref](https://bugs.python.org/issue28245) If you need to import external files please follow the example below. -* It should also be noted that external libraries that include compiled code can pose compatibility issues with different versions of Python. This is because the compiled code is platform-specific and tied to a specific version of Python. If you *must* use an external library with compiled code you may look at alternative packaging methods such as: [nuitka](http://nuitka.net/), or [pyinstaller](https://pyinstaller.org/en/stable/). +* It should also be noted that external libraries that include compiled code can pose compatibility issues with different versions of Python. This is because the compiled code is platform-specific and tied to a specific version of Python. If you *must* use an external library with compiled code, you may look at alternative packaging methods such as [nuitka](http://nuitka.net/), or [pyinstaller](https://pyinstaller.org/en/stable/). ### Simple Example -Have a look at this simple example plugin [here](https://github.com/Flow-Launcher/Flow.Launcher.Plugin.HelloWorldPython), notice it has a folder called '.github/workflows' and a file called 'Publish Release.yml'. This is the workflow file that GitHub Workflow uses to run the CI/CD for the project. +Have a look at this simple example plugin [here](https://github.com/Flow-Launcher/Flow.Launcher.Plugin.HelloWorldPython), notice it has a folder called `.github/workflows` and a file called 'Publish Release.yml'. This is the workflow file that GitHub Workflow uses to run the CI/CD for the project. -Moving out of that folder you can go into the [main.py](https://github.com/Flow-Launcher/Flow.Launcher.Plugin.HelloWorldPython/blob/main/main.py) file, this is the entry file for your plugin. Notice it has this code block: +Moving out of that folder, you can go into the [main.py](https://github.com/Flow-Launcher/Flow.Launcher.Plugin.HelloWorldPython/blob/main/main.py) file; this is the entry file for your plugin. Notice it has this code block: ```python import sys from pathlib import Path @@ -26,7 +26,7 @@ paths = (".", "lib", "plugin") sys.path = [str(plugindir / p) for p in paths] + sys.path ``` -Now that we've added our `lib` folder to the sys.path we can now import our external libraries like so: +Now that we've added our `lib` folder to `sys.path`, we can now import our external libraries like so: ```python from flowlauncher import FlowLauncher #external library import webbrowser #Not external @@ -38,9 +38,9 @@ We inherit from the FlowLauncher class provided by the FlowLauncher library we i class HelloWorld(FlowLauncher): ``` -When a user activates our plugin we can retrieve their query by providing a `query` method. Flow Launcher provides the argument `query` with the users text. +When a user activates our plugin, we can retrieve their query by providing a `query` method. Flow Launcher provides the argument `query` with the users text. -To send a response back we need to return a list of dictonaries as shown below. The `JsonRPCAction` dict allows you to provide a method that will be called by Flow Launcher with the parameters you provided. This method *must* be part of your plugin class. +To send a response back, we need to return a list of dictionaries as shown below. The `JsonRPCAction` dict allows you to provide a method that will be called by Flow Launcher with the parameters you provided. This method *must* be part of your plugin class. ```python def query(self, query): @@ -65,7 +65,7 @@ This method will be called when a user selects our result: webbrowser.open(url) ``` -The context menu is activated when the user uses shift+Enter or right clicks on a result. The context menu is similar to the `query` method except it does not receive a `query` argument but a `data` argument with a list of values from the result selected. +The context menu is activated when the user uses Shift+Enter or right-clicks on a result. The context menu is similar to the `query` method except it does not receive a `query` argument but a `data` argument with a list of values from the result selected. ```python def context_menu(self, data): diff --git a/py-plugin-references.md b/py-plugin-references.md index dcacb3e..98187bd 100644 --- a/py-plugin-references.md +++ b/py-plugin-references.md @@ -1,6 +1,6 @@ ### Good references to follow -Here are some plugins which could help you build out your own or serve as a reference point: +Here are some plugins that could help you build out your own or serve as a reference point: - IsPrime https://github.com/lvonkacsoh/Flow.Launcher.Plugin.IsPrime - RollDice https://github.com/lvonkacsoh/Flow.Launcher.RollDice - FancyEmoji https://github.com/Ma-ve/Flow.Launcher.Plugin.FancyEmoji diff --git a/py-setup-project.md b/py-setup-project.md index 3998e1c..a4560c3 100644 --- a/py-setup-project.md +++ b/py-setup-project.md @@ -18,7 +18,7 @@ push: python_ver: 3.11 ``` -4. The project's release version is obtained from your plugin.json automatically by the ci, so when built it will be appended to the zip file later: +4. The project's release version is obtained from your plugin.json automatically by the ci, so when built, it will be appended to the zip file later: ```yml - name: get version @@ -29,9 +29,9 @@ push: prop_path: 'Version' ``` -5. The 'Install dependencies' section is where you will do most of your CI work. Notice it installs the requirements.txt and outputs it with the `-t` parameter to the `./lib` folder. This tells pip to dump all the installed modules to the local lib folder which you will zip up along with your project using the `zip -r Flow.Launcher.Plugin.HelloWorldPython.zip . -x '*.git*'`, where you replace this `Flow.Launcher.Plugin.HelloWorldPython` with the name of your plugin. +5. The `Install dependencies` section is where you will do most of your CI work. Notice it installs the requirements.txt and outputs it with the `-t` parameter to the `./lib` folder. This tells pip to dump all the installed modules to the local lib folder which you will zip up along with your project using the `zip -r Flow.Launcher.Plugin.HelloWorldPython.zip . -x '*.git*'`, where you replace this `Flow.Launcher.Plugin.HelloWorldPython` with the name of your plugin. - You can also add additional steps here to unpack/install any additional dependencies your plugin requires, for example compiling additional translation files like [this](https://github.com/deefrawley/Flow.Launcher.Plugin.Currency/blob/23770ee929af059b1b1b7f9b5f3327b692ac9587/.github/workflows/Publish%20Release.yml#L34) + You can also add additional steps here to unpack/install any additional dependencies your plugin requires, for example, compiling additional translation files like [this](https://github.com/deefrawley/Flow.Launcher.Plugin.Currency/blob/23770ee929af059b1b1b7f9b5f3327b692ac9587/.github/workflows/Publish%20Release.yml#L34) ```yml - name: Install dependencies @@ -42,7 +42,7 @@ push: ``` ### 2. Publish as zip -The final step to the workflow file is this publish section, which will publish the zip file you generated, upload to GitHub Releases page and tag with the version generated from the previous step from your plugin.json file. Remember again to replace `Flow.Launcher.Plugin.HelloWorldPython` with the name of your plugin. +The final step to the workflow file is this `publish` section, which will publish the zip file you generated, upload to GitHub Releases page and tag with the version generated from the previous step from your plugin.json file. Remember again to replace `Flow.Launcher.Plugin.HelloWorldPython` with the name of your plugin. ```yml - name: Publish if: success() @@ -57,7 +57,7 @@ The final step to the workflow file is this publish section, which will publish Feel free to also have a read of this [blog post](https://blog.ipswitch.com/how-to-build-your-first-github-actions-workflow) which does a simple explanation of how to use GitHub Actions Workflow. ### 3. Use lib directory -Once the lib folder is included in your zip release, it can then be used without needing the user to manually pip install. You just have to tell during runtime to find those modules in your local lib folder. Do this by using this exact copy of the following block of code: +Once the lib folder is included in your zip release, it can then be used without needing the user to manually pip install. You just have to tell during runtime to find those modules in your local lib folder. Do this by using this exact copy of the following code block: ```python import sys from pathlib import Path @@ -67,4 +67,4 @@ paths = (".", "lib", "plugin") sys.path = [str(plugindir / p) for p in paths] + sys.path ``` -Add the above code into your init file at the top, usually this is the [main.py](https://github.com/Flow-Launcher/Flow.Launcher.Plugin.HelloWorldPython/blob/main/main.py) file. This block of code appends the path of your lib and plugin directories on the user's machine to `sys.path`. `sys.path` is a built-in variable within the sys module, which contains a list of directories that the Python interpreter will search in for the required module. Effectively we are telling the interpreter if the required modules in your plugin are not found among its built-in modules then look through the list of directories defined by sys.path, which should have all the modules installed by your GitHub workflow in the 'lib' folder. +Add the above code into your init file at the top, usually this is the [main.py](https://github.com/Flow-Launcher/Flow.Launcher.Plugin.HelloWorldPython/blob/main/main.py) file. This block of code appends the path of your lib and plugin directories on the user's machine to `sys.path`. `sys.path` is a built-in variable within the sys module, which contains a list of directories that the Python interpreter will search in for the required module. Effectively, we are telling the interpreter if the required modules in your plugin are not found among its built-in modules then look through the list of directories defined by `sys.path`, which should have all the modules installed by your GitHub workflow in the 'lib' folder. diff --git a/py-write-code.md b/py-write-code.md index b19981f..4cf4377 100644 --- a/py-write-code.md +++ b/py-write-code.md @@ -1,10 +1,10 @@ ### 1. Start with a branch -Since we have created a CI for your plugin in the [previous step](https://flow-launcher.github.io/docs/#/py-setup-project), which includes creating a release when you push/merge to the 'main' branch, it is then necessary to create another git branch separate to your 'main' branch so you can continue to work on your plugin with git commits and pushes without creating a new release each time. +Since we have created a CI for your plugin in the [previous step](/py-setup-project.md), which includes creating a release when you push/merge to the 'main' branch, it is then necessary to create another git branch separate to your `main` branch, so you can continue to work on your plugin with git commits and pushes without creating a new release each time. -It is a good practice that you create a branch for each of the new feature/fixes you are releasing for your plugin, if you are not sure how to do so then follow this [video tutorial](https://www.gitkraken.com/learn/git/problems/create-git-branch). Once you have fully finished developing your plugin with your new branch, then you can merge it into the 'main' branch, which will consequently create a new release for your plugin with a version from your `plugin.json`. +It is a good practice that you create a branch for each of the new feature/fixes you are releasing for your plugin, if you are not sure how to do so, then follow this [video tutorial](https://www.gitkraken.com/learn/git/problems/create-git-branch). Once you have fully finished developing your plugin with your new branch, then you can merge it into the 'main' branch, which will consequently create a new release for your plugin with a version from your `plugin.json`. ### 2. main.py -your main.py should look something like below: +your `main.py` should look something like below: ```python import sys,os @@ -55,12 +55,12 @@ if __name__ == "__main__": ``` -
+
### 3. Query entry point **def query(self, query):** -This is the main entry to your plugin and the return block will be a list of the results that your plugin returns, which could be a single or many results. +This is the main entry to your plugin, and the return block will be a list of the results that your plugin returns, which could be a single or many results. ### 4. Assigning an action to your results **JsonRPCAction** @@ -71,17 +71,17 @@ In this example, if the user selects the result, the `open_url` method will be c ### 5. Create an additional context menu **def context_menu(self, data):** -This method creates a context menu for your results, where the user can carry out additional tasks when they go to the context menue via pressing `Shift + Enter`. A context menu could be helpful if you want some tasks specific to your returned results, for example the Explorer plugin would return a list of file results, and when going to the context menu of one of the result users can select to copy the file. +This method creates a context menu for your results, where the user can carry out additional tasks when they go to the context menu via pressing `Shift + Enter`. A context menu could be helpful if you want some tasks specific to your returned results. For example, the Explorer plugin would return a list of file results, and when going to the context menu of one of the result users can select to copy the file. -To attach a method to your context menu result, do the same as for normal results where you define a JsonRPCAction item with the method and parameters you want to call and pass through. In this case the context menu will simply open the HelloWorldPython plugin's GitHub repo. +To attach a method to your context menu result, do the same as for normal results where you define a JsonRPCAction item with the method and parameters you want to call and pass through. In this case, the context menu will simply open the HelloWorldPython plugin's GitHub repo. ### 6 Result score -The `score` field provides the ability to assign a weight to your score, the higher the score is, the higher the result from the plugin would show in flow's result list. The range in which you assign the score is usually between 0-100. You can keep it as 0 if your plugin generally uses an action keyword to trigger, but if you are using a global action keyword - `*` then the average weight for a plugin would be 50. Additionally users can also tweak the score via Flow's plugin setting as well. +The `score` field provides the ability to assign a weight to your score; the higher the score is, the higher the result from the plugin would show in flow's result list. The range in which you assign the score is usually between 0–100. You can keep it as 0 if your plugin generally uses an action keyword to trigger, but if you are using a global action keyword - `*` then the average weight for a plugin would be 50. Additionally, users can tweak the score via Flow's plugin setting as well. ### 7. Your plugin.json -You will also need to if not yet already, create a plugin.json file that will instruct Flow on how to load your plugin. +You will also need to, if not yet already, create a plugin.json file that will instruct Flow on how to load your plugin. This file should be placed in the top level folder. -To revisit what to include in your plugin.json, visit [here](https://flow-launcher.github.io/docs/#/plugin.json) +To revisit what to include in your plugin.json, visit [here](/plugin.json.md) diff --git a/testing.md b/testing.md index f9848ec..4d1cc1f 100644 --- a/testing.md +++ b/testing.md @@ -1,6 +1,6 @@ ### Testing your plugin -After successfully building a plugin, it can be tested locally by moving the output files into Flow Launcher's `FlowLauncher\Plugins` directory accessible via the `userdata` command in Flow Launcher. Alternatively, if you are building .Net (C# or F#) plugins you can have your IDE build the artefact directly to that location (remember not to check this build output path into Git though). +After successfully building a plugin, it can be tested locally by moving the output files into Flow Launcher's `FlowLauncher\Plugins` directory accessible via the `userdata` command in Flow Launcher. Alternatively, if you are building .NET (C# or F#) plugins, you can have your IDE build the artifact directly to that location (remember not to check this build output path into Git though). ### Detail Steps @@ -11,4 +11,4 @@ After successfully building a plugin, it can be tested locally by moving the out 4. Copy and paste the newly built plugin folder into this folder. 5. Execute `Restart Flow Launcher` to reload the new plugin. -Tip: .Net plugins (e.g. C# and F#) will require you to restart flow every time you make a change and build a new artefact to reload the plugin, but Python and JS/TS plugins you can edit the plugin directly. +Tip: .NET plugins (e.g. C# and F#) will require you to restart flow every time you make a change and build a new artifact to reload the plugin, but Python and JS/TS plugins you can edit the plugin directly. diff --git a/usage-tips.md b/usage-tips.md index 93eb37b..1dc8fec 100644 --- a/usage-tips.md +++ b/usage-tips.md @@ -1,22 +1,22 @@ - Search programs, bookmarks and control panel items using: - - Acronyms eg. `gk` or `gp` for GitKraken Preview. + - Acronyms e.g. `gk` or `gp` for GitKraken Preview. - Fuzzy eg. `acr` or `rea` for Acrobat Reader DC. - - Single word eg.`code` or `visual` for Visual Studio Code. + - Single word e.g. `code` or `visual` for Visual Studio Code. - Press `F5` while in the query window or type `reload plugin data` to reload all plugin data. -- Right click on a result will also take you to the context menu for additional actions. +- Right-click on a result will also take you to the context menu for additional actions. - Flow's settings including installed plugins are located at: - If using roaming: `%APPDATA%\FlowLauncher` - If using portable, by default: `%localappdata%\FlowLauncher\app-\UserData` - To back up your Flow's settings including installed plugins, simply back up your UserData folder. You can locate it quickly via querying `flow launcher userdata`. -- To restore your saved settings, ensure Flow is exited, simply delete the current UserData folder and copy yours in. Start Flow and all your settings will be setup. One exception however is your saved Quick Access files and folder paths in Explorer plugin you may need to update if the locations have changed. +- To restore your saved settings, ensure Flow is exited, simply delete the current UserData folder and copy yours in. Start Flow and all your settings will be setup. One exception, however, is your saved Quick Access files and folder paths in the Explorer plugin you may need to update if the locations have changed. - When migrating from a system with a high screen resolution to one with a lower resolution, it may be necessary to adjust "SettingWindowWidth", "SettingWindowHeight" "SettingWindowTop" and "SettingWindowLeft" as the settings may otherwise appear outside the visible area. Default values for 1920x1080: 1000, 700, 0, 0. -- Resetting Flow back to default settings is also easy, simply move/delete the UserData folder after closing the app and the defaults will be recreated. +- Resetting Flow back to default settings is also easy, simply move/delete the UserData folder after closing the app, and the defaults will be recreated. - Both Program and Bookmarks plugin will automatically detect new changes, so your newly installed apps or bookmarks will be available soon after they are added. - If your plugin is not triggering, open Flow's settings and go to the Plugins tab, click on the plugin and check if it is set to a particular action keyword. You can set the plugin's action keyword to global: `*` but be wary sometimes a plugin sets a dedicated keyword is because it may return lots of results cluttering the result list. - For Explorer plugin results, you can press `Ctrl + Enter` to open the folder directly instead of navigating into the folder. -- You can save your frequently used or favourite files/folder locations via Explorer plugin. Navigate to the file/location you want to save, then go to context menu and select `Add to Quick Access`. It will be particularly handy if you have set a custom action keyword instead of the default '*', which when used will display your list of saved Quick Access files and folders. You can change the default action keyword via the plugin's settings page. -- Flow is published as a self-contained app, this means on Windows machines (7 and up) Flow can run straight away without needing to install .Net runtime and framework. Coupled with portable mode, it can be stored on Dropbox or cloud storage provider and run on any Windows machines. The slight drawback is that the installed package size is slightly bigger at around 250mb because it needs to bundle the required .Net components together. -- Prioritize the plugin results order, this can be done by going to the plugin's settings page. Under the plugin's title and the description, click the number next to 'Priority', this is where you can assign weight to the plugin's result. The higher the weight is, the higher the selected plugin's results will be in Flow's result list. +- You can save your frequently used or favourite files/folder locations via Explorer plugin. Navigate to the file/location you want to save, then go to a context menu and select `Add to Quick Access`. It will be particularly handy if you have set a custom action keyword instead of the default '*', which when used will display your list of saved Quick Access files and folders. You can change the default action keyword via the plugin's settings page. +- Flow is published as a self-contained app, this means on Windows machines (7 and up) Flow can run straight away without needing to install .NET runtime and framework. Coupled with portable mode, it can be stored on Dropbox or cloud storage provider and run on any Windows machines. The slight drawback is that the installed package size is slightly bigger at around 250mb because it needs to bundle the required .NET components together. +- Prioritize the plugin results order, this can be done by going to the plugin's settings page. Under the plugin's title and the description, click the number next to 'Priority'; this is where you can assign weight to the plugin's result. The higher the weight is, the higher the selected plugin's results will be in Flow's result list. - Press ctrl + enter/click on a Shell plugin command will run it directly as admin. - In the plugins download list, you can press ctrl + enter/click to open the plugin's url. - Explorer's Search action keyword combines both Path and Index search, so you can use it without worrying about which action keyword to use for what, just put in what you need to search for. Path (searches a specific path) and Index (search a file or folder name) search allows users to do just their specific searches and are disabled by default. From 252e7d2bc25bea4a979378a159c1c7ec563c19a1 Mon Sep 17 00:00:00 2001 From: Yusyuriv Date: Sat, 9 Mar 2024 07:41:12 +0600 Subject: [PATCH 2/8] Fix wording and link in how-to-create-a-theme.md --- how-to-create-a-theme.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/how-to-create-a-theme.md b/how-to-create-a-theme.md index 7dbd769..a682fed 100644 --- a/how-to-create-a-theme.md +++ b/how-to-create-a-theme.md @@ -6,15 +6,15 @@ If you make a theme for the first time, refer to the existing theme. Copy the ** ## ⛔ Caution ⛔ -Place the theme you created in the Theme folder inside the UserData directory, for roaming this is located at `%APPDATA%\FlowLauncher\Themes\` (AppData Roaming path) and for portable it is by default `%localappdata%\FlowLauncher\app-\UserData\Themes\` (AppData Local path). Flow will read from the UserData directory for custom themes and its own app directory for default themes. Make sure you do not place in the location outside of UserData because it will be erased along with the default theme files after an update. +Place the theme you created in the Theme folder inside the UserData directory, for roaming this is located at `%APPDATA%\FlowLauncher\Themes\` (AppData Roaming path) and for portable it is by default `%localappdata%\FlowLauncher\app-\UserData\Themes\` (AppData Local path). Flow will read from the UserData directory for custom themes and its own app directory for default themes. Make sure you do not place in the location outside UserData because it will be erased along with the default theme files after an update. ## Theme elements -The theme file allows you to set the following parts. Each style has a key, and there are items that can be modified. If theme have a key that is not described in this document, we recommend you not to modify it separately. +The theme file allows you to set the following parts. Each style has a key, and there are items that can be modified. If theme has a key not described in this document, we recommend you not to modify it separately. (*There is a possibility of changing/deleting this part depending on the version.*) -![Flow Launcher screenshot](https://cdn.jsdelivr.net/gh/Flow-Launcher/docs@raw/main/assets/themelayout.png) +![Flow Launcher screenshot](https://cdn.jsdelivr.net/gh/Flow-Launcher/docs@main/assets/themelayout.png)
From 822a2e774c5cf139f93c64eaf8184557343f2a98 Mon Sep 17 00:00:00 2001 From: Yusyuriv Date: Sat, 9 Mar 2024 13:28:23 +0600 Subject: [PATCH 3/8] Add favicon --- index.html | 1 + 1 file changed, 1 insertion(+) diff --git a/index.html b/index.html index e9499e6..1082450 100644 --- a/index.html +++ b/index.html @@ -8,6 +8,7 @@ + From ba2348b2fa8f8c12a8b1892730d60c96bf85b29c Mon Sep 17 00:00:00 2001 From: Yusyuriv Date: Sat, 9 Mar 2024 18:45:41 +0600 Subject: [PATCH 4/8] Fix a bunch of things on the Explorer plugin page --- plugin-explorer-usage.md | 30 ++++++++++++++---------------- 1 file changed, 14 insertions(+), 16 deletions(-) diff --git a/plugin-explorer-usage.md b/plugin-explorer-usage.md index 250700b..2001a0d 100644 --- a/plugin-explorer-usage.md +++ b/plugin-explorer-usage.md @@ -1,6 +1,6 @@ ## Explorer Plugin -The Explorer plugin is a default plugin that installs with Flow Launcher. Previously there was an Explorer Plugin and an Everything Plugin but these were merged and you can now choose which search engine will search for what through Flow. If you don't already have the Everything search tool from Voidtools installed, Flow will automatically download and install it if you choose it as your search index engine. To trigger automatic install, fire a search and click the "Warning: Everything is not running" result. Flow Launcher currently only supports v1.4.x of Everything and not the 1.5 alpha branch. (For 1.5 alpha support please refer to [this](https://github.com/Flow-Launcher/Flow.Launcher/issues/1716) link) +The Explorer plugin is a default plugin that installs with Flow Launcher. Previously there was an Explorer Plugin and an Everything Plugin, but these were merged, and you can now choose which search engine will search for what through Flow. If you don't already have the Everything search tool from Voidtools installed, Flow will automatically download and install it if you choose it as your search index engine. To trigger automatic install, fire a search and click the "Warning: Everything is not running" result. Flow Launcher currently only supports v1.4.x of Everything and not the 1.5 alpha branch. (For 1.5 alpha support, please refer to [this](https://github.com/Flow-Launcher/Flow.Launcher/issues/1716) link) Here is how to configure this plugin: @@ -11,47 +11,45 @@ Here is how to configure this plugin: - *Use search result's location as the working directory of the executable* : tick this so Flow will set the working directory of any application you run through the Explorer plugin to the directory of the executable - *Hit enter to open folder in Default File Manager* : tick this box to have the ENTER key open the current directory in the default file manager rather than have Flow go into this directory for further browsing. - *File editor path* and *Folder editor path* : These two options allow you to set a program to open either files or folders, when you right mouse click / SHIFT + ENTER context menu a search result. Note these options will only appear in the context menu if you have set them here. -For example to set up this plugin so you can open any directory in Visual Studio Code, first add the path to your Visual Studio Code install in the Folder editor path setting: +For example, to set up this plugin, so you can open any directory in Visual Studio Code, first add the path to your Visual Studio Code install in the Folder editor path setting: - Folder editor path option +![Folder editor path option](/assets/explorer_1a.png) - then search for a folder, and then right mouse click / SHIFT + ENTER: +then search for a folder, and then right mouse click / SHIFT + ENTER: - Example folder search +![Example folder search](/assets/explorer_1b.png) - and then choose the *Open With Editor* option - - Context menu example +and then choose the *Open With Editor* option + +![Context menu example](/assets/explorer_1c.png) - *Shell path* : set the executable shell to be launched when the right mouse click / SHIFT + ENTER is chosen. This defaults to the Windows `cmd` -- *Index search engine*, *Content search engine* and *Directory recursive search engine*: These three options let you choose whether Windows Index or Everything (if you have it installed) for specific tasks. The Index is for general filename search, the Content is for searching within text files and the Directory recursive is for listing sub directories within a directory. -- *Open Windows index option*: this opens the Windows Indexing system setting so you can see and adjust exactlky what the Windows Index service is doing. +- *Index search engine*, *Content search engine* and *Directory recursive search engine*: These three options let you choose whether Windows Index or Everything (if you have it installed) for specific tasks. The Index is for general filename search, the Content is for searching within text files and the Directory recursive is for listing subdirectories within a directory. +- *Open Windows index option*: this opens the Windows Indexing system setting, so you can see and adjust exactly what the Windows Index service is doing. #### Everything Setting tab ---- ![Everything Setting tab](/assets/explorer_2.png) - *Search full path* : use the Everything option to search the full path and not just the filename. Equivalent to the `path:` modifier within Everything. - *Sort Option* : dropdown list to show how the search results are sorted. -- *Everything Path* : If you have Everything installed, Flow Launcher will try and find the installation to use but if you are having issues or it is installed in a non standard dirctory you can specify it explicitly here. +- *Everything Path* : If you have Everything installed, Flow Launcher will try and find the installation to use, but if you are having issues, or it is installed in a non-standard directory, you can specify it explicitly here. #### Customised Action Keywords tab ---- ![Customise Action Keywords tab](/assets/explorer_3.png) -- For each option here you can choose a custom keyword to trigger that specific type of search. Anything with a `*` is searched for when you type anything in Flow Launcher or if you give the Explorer plugin a global keyword. For example the default to search within documents is set to `doc:` (this is done as searching the contents of documents is slow and so should only trigger when that is definitely what you want to do). If you don't care about exactly what type of search is executed, just use the 'Search' keyword. +- For each option here you can choose a custom keyword to trigger that specific type of search. Anything with a `*` is searched for when you type anything in Flow Launcher or if you give the Explorer plugin a global keyword. For example, the default to search within documents is set to `doc:` (this is done as searching the contents of documents is slow and so should only trigger when that is definitely what you want to do). If you don't care about exactly what type of search is executed, just use the 'Search' keyword. #### Quick Access Links tab ---- ![Quick Access Links tab](/assets/explorer_4.png) -- Here you can add directories that you work with often, and would like to be returned as soon as you start typing their source location. Directories can also be added and removed from this list with the right mouse click / SHIFT + ENTER context menu from any search result that is a directory. +- Here you can add directories that you often work with, and would like to be returned as soon as you start typing their source location. Directories can also be added and removed from this list with the right mouse click / SHIFT + ENTER context menu from any search result that is a directory. #### Index Search Excluded Paths tab ---- ![Index Search Excluded Paths tab](/assets/explorer_5.png) -- Adding a directory here will exclude it from the Flow Launcher search, over riding any settings you maye have in Windows Indexing or Everything. +- Adding a directory here will exclude it from the Flow Launcher search, over-riding any settings you maye have in Windows Indexing or Everything. ### Using Everything If you do choose to use Everything to search, [these Everything commands](https://www.voidtools.com/support/everything/searching/) may be useful to reference. - - From cfcaa22a43a62678e97b9055d70cea6c89181b92 Mon Sep 17 00:00:00 2001 From: Yusyuriv Date: Sat, 9 Mar 2024 18:47:40 +0600 Subject: [PATCH 5/8] Remove a bunch of unnecessary `simply` and `just` words --- nodejs-release-project.md | 2 +- py-release-project.md | 2 +- usage-tips.md | 8 ++++---- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/nodejs-release-project.md b/nodejs-release-project.md index 6791419..9b7bee5 100644 --- a/nodejs-release-project.md +++ b/nodejs-release-project.md @@ -1,2 +1,2 @@ ### Release your plugin to Flow's Plugin Store -When you are ready to release your plugin for people to enjoy, simply head over to Flow's [plugin repo](https://github.com/Flow-Launcher/Flow.Launcher.PluginsManifest) and follow the instructions there in the readme. +When you are ready to release your plugin for people to enjoy, head over to Flow's [plugin repo](https://github.com/Flow-Launcher/Flow.Launcher.PluginsManifest) and follow the instructions there in the readme. diff --git a/py-release-project.md b/py-release-project.md index 0547cb1..334d38d 100644 --- a/py-release-project.md +++ b/py-release-project.md @@ -1,2 +1,2 @@ ### Release your plugin to Flow's Plugin Store -When you are ready to release your plugin for people to enjoy, simply head over to Flow's [plugin repo](https://github.com/Flow-Launcher/Flow.Launcher.PluginsManifest) and follow the instructions there in the readme. +When you are ready to release your plugin for people to enjoy, head over to Flow's [plugin repo](https://github.com/Flow-Launcher/Flow.Launcher.PluginsManifest) and follow the instructions there in the readme. diff --git a/usage-tips.md b/usage-tips.md index 1dc8fec..ba3953d 100644 --- a/usage-tips.md +++ b/usage-tips.md @@ -7,10 +7,10 @@ - Flow's settings including installed plugins are located at: - If using roaming: `%APPDATA%\FlowLauncher` - If using portable, by default: `%localappdata%\FlowLauncher\app-\UserData` -- To back up your Flow's settings including installed plugins, simply back up your UserData folder. You can locate it quickly via querying `flow launcher userdata`. -- To restore your saved settings, ensure Flow is exited, simply delete the current UserData folder and copy yours in. Start Flow and all your settings will be setup. One exception, however, is your saved Quick Access files and folder paths in the Explorer plugin you may need to update if the locations have changed. +- To back up your Flow's settings including installed plugins, back up your UserData folder. You can locate it quickly via querying `flow launcher userdata`. +- To restore your saved settings, ensure Flow is exited, delete the current UserData folder and copy yours in. Start Flow and all your settings will be setup. One exception, however, is your saved Quick Access files and folder paths in the Explorer plugin you may need to update if the locations have changed. - When migrating from a system with a high screen resolution to one with a lower resolution, it may be necessary to adjust "SettingWindowWidth", "SettingWindowHeight" "SettingWindowTop" and "SettingWindowLeft" as the settings may otherwise appear outside the visible area. Default values for 1920x1080: 1000, 700, 0, 0. -- Resetting Flow back to default settings is also easy, simply move/delete the UserData folder after closing the app, and the defaults will be recreated. +- Resetting Flow back to default settings is also easy, move/delete the UserData folder after closing the app, and the defaults will be recreated. - Both Program and Bookmarks plugin will automatically detect new changes, so your newly installed apps or bookmarks will be available soon after they are added. - If your plugin is not triggering, open Flow's settings and go to the Plugins tab, click on the plugin and check if it is set to a particular action keyword. You can set the plugin's action keyword to global: `*` but be wary sometimes a plugin sets a dedicated keyword is because it may return lots of results cluttering the result list. - For Explorer plugin results, you can press `Ctrl + Enter` to open the folder directly instead of navigating into the folder. @@ -19,5 +19,5 @@ - Prioritize the plugin results order, this can be done by going to the plugin's settings page. Under the plugin's title and the description, click the number next to 'Priority'; this is where you can assign weight to the plugin's result. The higher the weight is, the higher the selected plugin's results will be in Flow's result list. - Press ctrl + enter/click on a Shell plugin command will run it directly as admin. - In the plugins download list, you can press ctrl + enter/click to open the plugin's url. -- Explorer's Search action keyword combines both Path and Index search, so you can use it without worrying about which action keyword to use for what, just put in what you need to search for. Path (searches a specific path) and Index (search a file or folder name) search allows users to do just their specific searches and are disabled by default. +- Explorer's Search action keyword combines both Path and Index search, so you can use it without worrying about which action keyword to use for what, put in what you need to search for. Path (searches a specific path) and Index (search a file or folder name) search allows users to do just their specific searches and are disabled by default. - Whilst in the query window and searching inside a directory, pressing `Ctrl + Backspace` will go back up one level in the directory tree. From 47d9c82f60b48c7e2232f896590ef5c4a9111e9f Mon Sep 17 00:00:00 2001 From: Yusyuriv Date: Sat, 9 Mar 2024 18:54:10 +0600 Subject: [PATCH 6/8] Slightly change some wording and formatting --- nodejs-setup-project.md | 4 ++-- py-setup-project.md | 6 +++--- py-write-code.md | 2 +- usage-tips.md | 2 +- 4 files changed, 7 insertions(+), 7 deletions(-) diff --git a/nodejs-setup-project.md b/nodejs-setup-project.md index 676eb9b..cf3e41d 100644 --- a/nodejs-setup-project.md +++ b/nodejs-setup-project.md @@ -31,7 +31,7 @@ push: prop_path: 'Version' ``` -5. The 'Install dependencies' section is where you will do most of your CI work. It will run `npm install`, which will output all the dependencies specified in package.json into the 'node_modules' directory. The workflow will then zip them up along with your project using `zip -r Flow.Launcher.Plugin.HelloWorldNodeJS.zip . -x '*.git*'`, where you replace this `Flow.Launcher.Plugin.HelloWorldNodeJS` with the name of your plugin. +5. The **Install dependencies** section is where you will do most of your CI work. It will run `npm install`, which will output all the dependencies specified in package.json into the 'node_modules' directory. The workflow will then zip them up along with your project using `zip -r Flow.Launcher.Plugin.HelloWorldNodeJS.zip . -x '*.git*'`, where you replace this `Flow.Launcher.Plugin.HelloWorldNodeJS` with the name of your plugin. ```yml - name: Install dependencies @@ -41,7 +41,7 @@ push: ``` ### 2. Publish as zip -The final step to the workflow file is this `Publish` section, which will publish the zip file you generated, upload to GitHub Releases page and tag with the version generated from the previous step from your plugin.json file. Remember again to replace `Flow.Launcher.Plugin.HelloWorldNodeJS` with the name of your plugin. +The final step to the workflow file is this **Publish** section, which will publish the zip file you generated, upload to GitHub Releases page and tag with the version generated from the previous step from your plugin.json file. Remember again to replace `Flow.Launcher.Plugin.HelloWorldNodeJS` with the name of your plugin. ```yml - name: Publish diff --git a/py-setup-project.md b/py-setup-project.md index a4560c3..90aeda9 100644 --- a/py-setup-project.md +++ b/py-setup-project.md @@ -18,7 +18,7 @@ push: python_ver: 3.11 ``` -4. The project's release version is obtained from your plugin.json automatically by the ci, so when built, it will be appended to the zip file later: +4. The project's release version is obtained from your plugin.json automatically by the CI, so when built, it will be appended to the zip file later: ```yml - name: get version @@ -29,7 +29,7 @@ push: prop_path: 'Version' ``` -5. The `Install dependencies` section is where you will do most of your CI work. Notice it installs the requirements.txt and outputs it with the `-t` parameter to the `./lib` folder. This tells pip to dump all the installed modules to the local lib folder which you will zip up along with your project using the `zip -r Flow.Launcher.Plugin.HelloWorldPython.zip . -x '*.git*'`, where you replace this `Flow.Launcher.Plugin.HelloWorldPython` with the name of your plugin. +5. The **Install dependencies** section is where you will do most of your CI work. Notice it installs the requirements.txt and outputs it with the `-t` parameter to the `./lib` folder. This tells pip to dump all the installed modules to the local lib folder which you will zip up along with your project using the `zip -r Flow.Launcher.Plugin.HelloWorldPython.zip . -x '*.git*'`, where you replace this `Flow.Launcher.Plugin.HelloWorldPython` with the name of your plugin. You can also add additional steps here to unpack/install any additional dependencies your plugin requires, for example, compiling additional translation files like [this](https://github.com/deefrawley/Flow.Launcher.Plugin.Currency/blob/23770ee929af059b1b1b7f9b5f3327b692ac9587/.github/workflows/Publish%20Release.yml#L34) @@ -42,7 +42,7 @@ push: ``` ### 2. Publish as zip -The final step to the workflow file is this `publish` section, which will publish the zip file you generated, upload to GitHub Releases page and tag with the version generated from the previous step from your plugin.json file. Remember again to replace `Flow.Launcher.Plugin.HelloWorldPython` with the name of your plugin. +The final step to the workflow file is this **Publish** section, which will publish the zip file you generated, upload to GitHub Releases page and tag with the version generated from the previous step from your plugin.json file. Remember again to replace `Flow.Launcher.Plugin.HelloWorldPython` with the name of your plugin. ```yml - name: Publish if: success() diff --git a/py-write-code.md b/py-write-code.md index 4cf4377..ee861b6 100644 --- a/py-write-code.md +++ b/py-write-code.md @@ -76,7 +76,7 @@ This method creates a context menu for your results, where the user can carry ou To attach a method to your context menu result, do the same as for normal results where you define a JsonRPCAction item with the method and parameters you want to call and pass through. In this case, the context menu will simply open the HelloWorldPython plugin's GitHub repo. ### 6 Result score -The `score` field provides the ability to assign a weight to your score; the higher the score is, the higher the result from the plugin would show in flow's result list. The range in which you assign the score is usually between 0–100. You can keep it as 0 if your plugin generally uses an action keyword to trigger, but if you are using a global action keyword - `*` then the average weight for a plugin would be 50. Additionally, users can tweak the score via Flow's plugin setting as well. +The `score` field provides the ability to assign a weight to your score; the higher the score is, the higher the result from the plugin would show in flow's result list. The range in which you assign the score is usually between 0–100. You can keep it as 0 if your plugin generally uses an action keyword to trigger, but if you are using a global action keyword (`*`) then the average weight for a plugin would be 50. Additionally, users can tweak the score via Flow's plugin setting as well. ### 7. Your plugin.json diff --git a/usage-tips.md b/usage-tips.md index ba3953d..c2d49d4 100644 --- a/usage-tips.md +++ b/usage-tips.md @@ -14,7 +14,7 @@ - Both Program and Bookmarks plugin will automatically detect new changes, so your newly installed apps or bookmarks will be available soon after they are added. - If your plugin is not triggering, open Flow's settings and go to the Plugins tab, click on the plugin and check if it is set to a particular action keyword. You can set the plugin's action keyword to global: `*` but be wary sometimes a plugin sets a dedicated keyword is because it may return lots of results cluttering the result list. - For Explorer plugin results, you can press `Ctrl + Enter` to open the folder directly instead of navigating into the folder. -- You can save your frequently used or favourite files/folder locations via Explorer plugin. Navigate to the file/location you want to save, then go to a context menu and select `Add to Quick Access`. It will be particularly handy if you have set a custom action keyword instead of the default '*', which when used will display your list of saved Quick Access files and folders. You can change the default action keyword via the plugin's settings page. +- You can save your frequently used or favourite files/folder locations via Explorer plugin. Navigate to the file/location you want to save, then go to the context menu and select `Add to Quick Access`. It will be particularly handy if you have set a custom action keyword instead of the default '*', which when used will display your list of saved Quick Access files and folders. You can change the default action keyword via the plugin's settings page. - Flow is published as a self-contained app, this means on Windows machines (7 and up) Flow can run straight away without needing to install .NET runtime and framework. Coupled with portable mode, it can be stored on Dropbox or cloud storage provider and run on any Windows machines. The slight drawback is that the installed package size is slightly bigger at around 250mb because it needs to bundle the required .NET components together. - Prioritize the plugin results order, this can be done by going to the plugin's settings page. Under the plugin's title and the description, click the number next to 'Priority'; this is where you can assign weight to the plugin's result. The higher the weight is, the higher the selected plugin's results will be in Flow's result list. - Press ctrl + enter/click on a Shell plugin command will run it directly as admin. From 7b77390e2eb406ba822c5a7fdc358cb0067b595a Mon Sep 17 00:00:00 2001 From: Yusyuriv Date: Wed, 24 Apr 2024 23:38:32 +0600 Subject: [PATCH 7/8] Test build workflow --- .github/workflows/plugin-updater.yml | 59 +- index.html | 1 + plugins.md | 168 +-- webcomponents/.gitignore | 3 + 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 ++++ 30 files changed, 2924 insertions(+), 187 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..13af558 100644 --- a/.github/workflows/plugin-updater.yml +++ b/.github/workflows/plugin-updater.yml @@ -1,41 +1,38 @@ name: Plugin Updater on: - schedule: - - cron: "0 0 * * *" workflow_dispatch: + push: + branches: + - main + paths: + - webcomponents/**.js + - webcomponents/**.ts + - webcomponents/**.json + - webcomponents/**.svelte + +permissions: + contents: write jobs: - Update: + build-webcomponents: + name: Build web components runs-on: ubuntu-latest steps: - - uses: actions/checkout@v2 - with: - token: ${{ secrets.UPDATER }} - - - uses: actions/setup-python@v2 + - uses: actions/checkout@v4 + - 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 + - name: Publish web components + uses: softprops/action-gh-release@v2 with: - commit_message: "DOC: update plugin list" - push_options: --force - branch: main + files: webcomponents/dist/flow-launcher-docs-web-components.js + tag_name: webcomponents-v${{ steps.version.outputs.version }} diff --git a/index.html b/index.html index 1082450..4d7d5f2 100644 --- a/index.html +++ b/index.html @@ -27,6 +27,7 @@ loadSidebar: true, subMaxLevel: 4, search: 'auto', + executeScript: true, auto2top: true, plugins: [ function (hook, vm) { diff --git a/plugins.md b/plugins.md index 717d6fe..1b240b0 100644 --- a/plugins.md +++ b/plugins.md @@ -1,160 +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 | -|[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.8 | -|[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.0 | -|[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.3 | -|[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.4 | -|[GamesLauncher](https://github.com/KrystianLesniak/Flow.Launcher.Plugin.GamesLauncher) |Search and launch games from multiple platforms like Steam, Epic Games etc. |KrystianLesniak |1.9.0 | -|[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.3 | -|[Browser Bookmarks](https://github.com/Flow-Launcher/Flow.Launcher) |Search your browser bookmarks |qianlifeng, Ioannis G. |3.1.5 | -|[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.5 | -|[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.0 | -|[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.0 | -|[Shell](https://github.com/Flow-Launcher/Flow.Launcher) |Provide executing commands from Flow Launcher |qianlifeng |3.2.0 | -|[System Commands](https://github.com/Flow-Launcher/Flow.Launcher) |Provide System related commands. e.g. shutdown,lock, setting etc. |qianlifeng |3.1.1 | -|[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.6 | -|[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.0.1 | -|[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 |2.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.1.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 | - - + 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..5c1bfd3 --- /dev/null +++ b/webcomponents/.gitignore @@ -0,0 +1,3 @@ +node_modules/ +dist/ +.idea/ diff --git a/webcomponents/package-lock.json b/webcomponents/package-lock.json new file mode 100644 index 0000000..9111287 --- /dev/null +++ b/webcomponents/package-lock.json @@ -0,0 +1,1172 @@ +{ + "name": "flow-launcher-docs-jsonrpc-settings-web-components", + "version": "1.1.1", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "flow-launcher-docs-jsonrpc-settings-web-components", + "version": "1.1.1", + "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..1c95323 --- /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..5e897e7 --- /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 afe48156dce898601b4d1e8de737b592a1d26a51 Mon Sep 17 00:00:00 2001 From: Yusyuriv Date: Thu, 25 Apr 2024 00:06:44 +0600 Subject: [PATCH 8/8] Revert "Test build workflow" This reverts commit 7b77390e2eb406ba822c5a7fdc358cb0067b595a. --- .github/workflows/plugin-updater.yml | 59 +- index.html | 1 - plugins.md | 168 ++- webcomponents/.gitignore | 3 - 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 ---- 30 files changed, 187 insertions(+), 2924 deletions(-) delete mode 100644 webcomponents/.gitignore delete mode 100644 webcomponents/package-lock.json delete mode 100644 webcomponents/package.json delete mode 100644 webcomponents/rollup.config.dev.js delete mode 100644 webcomponents/rollup.config.js delete mode 100644 webcomponents/src/components/CodeDisplay.svelte delete mode 100644 webcomponents/src/components/PasteHandler.svelte delete mode 100644 webcomponents/src/components/PluginDisplay.svelte delete mode 100644 webcomponents/src/components/PluginSpinner.svelte delete mode 100644 webcomponents/src/components/SettingsCodeOutputDialog.svelte delete mode 100644 webcomponents/src/components/SettingsEditDialog.svelte delete mode 100644 webcomponents/src/components/inputs/SettingsButton.svelte delete mode 100644 webcomponents/src/components/inputs/SettingsCheckbox.svelte delete mode 100644 webcomponents/src/components/inputs/SettingsDropdown.svelte delete mode 100644 webcomponents/src/components/inputs/SettingsInput.svelte delete mode 100644 webcomponents/src/index.ts delete mode 100644 webcomponents/src/settings-generators/TypingGenerator.ts delete mode 100644 webcomponents/src/settings-generators/index.ts delete mode 100644 webcomponents/src/settings-generators/js.ts delete mode 100644 webcomponents/src/settings-generators/py.ts delete mode 100644 webcomponents/src/settings-generators/ts.ts delete mode 100644 webcomponents/src/settings-generators/yaml.ts delete mode 100644 webcomponents/src/theme-change-observer.ts delete mode 100644 webcomponents/src/types.ts delete mode 100644 webcomponents/src/webcomponents/PluginDirectory.svelte delete mode 100644 webcomponents/src/webcomponents/SettingsComponentDemo.svelte delete mode 100644 webcomponents/src/webcomponents/SettingsGenerator.svelte diff --git a/.github/workflows/plugin-updater.yml b/.github/workflows/plugin-updater.yml index 13af558..7c9e1cf 100644 --- a/.github/workflows/plugin-updater.yml +++ b/.github/workflows/plugin-updater.yml @@ -1,38 +1,41 @@ name: Plugin Updater on: + schedule: + - cron: "0 0 * * *" workflow_dispatch: - push: - branches: - - main - paths: - - webcomponents/**.js - - webcomponents/**.ts - - webcomponents/**.json - - webcomponents/**.svelte - -permissions: - contents: write jobs: - build-webcomponents: - name: Build web components + Update: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v4 - - name: Setup Node - uses: actions/setup-node@v4 + - uses: actions/checkout@v2 + with: + token: ${{ secrets.UPDATER }} + + - uses: actions/setup-python@v2 with: - 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 - - name: Publish web components - uses: softprops/action-gh-release@v2 + 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 with: - files: webcomponents/dist/flow-launcher-docs-web-components.js - tag_name: webcomponents-v${{ steps.version.outputs.version }} + commit_message: "DOC: update plugin list" + push_options: --force + branch: main diff --git a/index.html b/index.html index 4d7d5f2..1082450 100644 --- a/index.html +++ b/index.html @@ -27,7 +27,6 @@ loadSidebar: true, subMaxLevel: 4, search: 'auto', - executeScript: true, auto2top: true, plugins: [ function (hook, vm) { diff --git a/plugins.md b/plugins.md index 1b240b0..717d6fe 100644 --- a/plugins.md +++ b/plugins.md @@ -1,16 +1,160 @@ 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 | +|[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.8 | +|[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.0 | +|[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.3 | +|[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.4 | +|[GamesLauncher](https://github.com/KrystianLesniak/Flow.Launcher.Plugin.GamesLauncher) |Search and launch games from multiple platforms like Steam, Epic Games etc. |KrystianLesniak |1.9.0 | +|[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.3 | +|[Browser Bookmarks](https://github.com/Flow-Launcher/Flow.Launcher) |Search your browser bookmarks |qianlifeng, Ioannis G. |3.1.5 | +|[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.5 | +|[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.0 | +|[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.0 | +|[Shell](https://github.com/Flow-Launcher/Flow.Launcher) |Provide executing commands from Flow Launcher |qianlifeng |3.2.0 | +|[System Commands](https://github.com/Flow-Launcher/Flow.Launcher) |Provide System related commands. e.g. shutdown,lock, setting etc. |qianlifeng |3.1.1 | +|[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.6 | +|[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.0.1 | +|[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 |2.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.1.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 | -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). + - +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 deleted file mode 100644 index 5c1bfd3..0000000 --- a/webcomponents/.gitignore +++ /dev/null @@ -1,3 +0,0 @@ -node_modules/ -dist/ -.idea/ diff --git a/webcomponents/package-lock.json b/webcomponents/package-lock.json deleted file mode 100644 index 9111287..0000000 --- a/webcomponents/package-lock.json +++ /dev/null @@ -1,1172 +0,0 @@ -{ - "name": "flow-launcher-docs-jsonrpc-settings-web-components", - "version": "1.1.1", - "lockfileVersion": 3, - "requires": true, - "packages": { - "": { - "name": "flow-launcher-docs-jsonrpc-settings-web-components", - "version": "1.1.1", - "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 deleted file mode 100644 index 3e04468..0000000 --- a/webcomponents/package.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "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 deleted file mode 100644 index 8764d7e..0000000 --- a/webcomponents/rollup.config.dev.js +++ /dev/null @@ -1,28 +0,0 @@ -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 deleted file mode 100644 index cc84b6f..0000000 --- a/webcomponents/rollup.config.js +++ /dev/null @@ -1,30 +0,0 @@ -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 deleted file mode 100644 index 6280662..0000000 --- a/webcomponents/src/components/CodeDisplay.svelte +++ /dev/null @@ -1,73 +0,0 @@ - - -
- {#if displayFilename} -
{filename}
- {/if} -
-
{code}
-
-
- - diff --git a/webcomponents/src/components/PasteHandler.svelte b/webcomponents/src/components/PasteHandler.svelte deleted file mode 100644 index 0d4c944..0000000 --- a/webcomponents/src/components/PasteHandler.svelte +++ /dev/null @@ -1,53 +0,0 @@ - - - diff --git a/webcomponents/src/components/PluginDisplay.svelte b/webcomponents/src/components/PluginDisplay.svelte deleted file mode 100644 index ed741fb..0000000 --- a/webcomponents/src/components/PluginDisplay.svelte +++ /dev/null @@ -1,32 +0,0 @@ - - - - - - - {plugin.Description} - {plugin.Author} - {plugin.Version} - - - diff --git a/webcomponents/src/components/PluginSpinner.svelte b/webcomponents/src/components/PluginSpinner.svelte deleted file mode 100644 index 1c95323..0000000 --- a/webcomponents/src/components/PluginSpinner.svelte +++ /dev/null @@ -1,32 +0,0 @@ - - -
- - diff --git a/webcomponents/src/components/SettingsCodeOutputDialog.svelte b/webcomponents/src/components/SettingsCodeOutputDialog.svelte deleted file mode 100644 index e5b2dcc..0000000 --- a/webcomponents/src/components/SettingsCodeOutputDialog.svelte +++ /dev/null @@ -1,168 +0,0 @@ - - - - - -
- - -
-
Typings for your programming language:
-
- - - -
-
- -
- -
- -
- -
- -
- -
- -
- Close -
-
-
- - diff --git a/webcomponents/src/components/SettingsEditDialog.svelte b/webcomponents/src/components/SettingsEditDialog.svelte deleted file mode 100644 index 490f92d..0000000 --- a/webcomponents/src/components/SettingsEditDialog.svelte +++ /dev/null @@ -1,224 +0,0 @@ - - - - - -
-
-
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 deleted file mode 100644 index 57bd2dc..0000000 --- a/webcomponents/src/components/inputs/SettingsButton.svelte +++ /dev/null @@ -1,60 +0,0 @@ - - - - - diff --git a/webcomponents/src/components/inputs/SettingsCheckbox.svelte b/webcomponents/src/components/inputs/SettingsCheckbox.svelte deleted file mode 100644 index 56832af..0000000 --- a/webcomponents/src/components/inputs/SettingsCheckbox.svelte +++ /dev/null @@ -1,84 +0,0 @@ - - - - - diff --git a/webcomponents/src/components/inputs/SettingsDropdown.svelte b/webcomponents/src/components/inputs/SettingsDropdown.svelte deleted file mode 100644 index f3e3c08..0000000 --- a/webcomponents/src/components/inputs/SettingsDropdown.svelte +++ /dev/null @@ -1,109 +0,0 @@ - - -
- -
- - diff --git a/webcomponents/src/components/inputs/SettingsInput.svelte b/webcomponents/src/components/inputs/SettingsInput.svelte deleted file mode 100644 index 337d206..0000000 --- a/webcomponents/src/components/inputs/SettingsInput.svelte +++ /dev/null @@ -1,64 +0,0 @@ - - -{#if !multiline} - - {#if password} - - {:else} - - {/if} -{:else} - -{/if} - - diff --git a/webcomponents/src/index.ts b/webcomponents/src/index.ts deleted file mode 100644 index a228102..0000000 --- a/webcomponents/src/index.ts +++ /dev/null @@ -1,5 +0,0 @@ -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 deleted file mode 100644 index b408f00..0000000 --- a/webcomponents/src/settings-generators/TypingGenerator.ts +++ /dev/null @@ -1,5 +0,0 @@ -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 deleted file mode 100644 index 02c8599..0000000 --- a/webcomponents/src/settings-generators/index.ts +++ /dev/null @@ -1,4 +0,0 @@ -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 deleted file mode 100644 index a6a1b56..0000000 --- a/webcomponents/src/settings-generators/js.ts +++ /dev/null @@ -1,21 +0,0 @@ -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 deleted file mode 100644 index 9f7681c..0000000 --- a/webcomponents/src/settings-generators/py.ts +++ /dev/null @@ -1,24 +0,0 @@ -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 deleted file mode 100644 index c435e82..0000000 --- a/webcomponents/src/settings-generators/ts.ts +++ /dev/null @@ -1,20 +0,0 @@ -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 deleted file mode 100644 index 56182c4..0000000 --- a/webcomponents/src/settings-generators/yaml.ts +++ /dev/null @@ -1,26 +0,0 @@ -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 deleted file mode 100644 index 12c238c..0000000 --- a/webcomponents/src/theme-change-observer.ts +++ /dev/null @@ -1,31 +0,0 @@ -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 deleted file mode 100644 index b5854aa..0000000 --- a/webcomponents/src/types.ts +++ /dev/null @@ -1,53 +0,0 @@ -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 deleted file mode 100644 index 5e897e7..0000000 --- a/webcomponents/src/webcomponents/PluginDirectory.svelte +++ /dev/null @@ -1,124 +0,0 @@ - - - - -{#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 deleted file mode 100644 index 80e8616..0000000 --- a/webcomponents/src/webcomponents/SettingsComponentDemo.svelte +++ /dev/null @@ -1,131 +0,0 @@ - - - - -
-
- {#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 deleted file mode 100644 index 5a8a381..0000000 --- a/webcomponents/src/webcomponents/SettingsGenerator.svelte +++ /dev/null @@ -1,281 +0,0 @@ - - - - - - -
- {#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} -
- - - - - -