diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..0d3ee89 --- /dev/null +++ b/.gitignore @@ -0,0 +1,8 @@ +out +dist +node_modules +.vscode-test/ +*.vsix +/package-lock.json +/.edkCode +/site \ No newline at end of file diff --git a/docs/Images/compile-file.png b/docs/Images/compile-file.png new file mode 100644 index 0000000..e6b8dbf Binary files /dev/null and b/docs/Images/compile-file.png differ diff --git a/docs/Images/discover-build-folders.png b/docs/Images/discover-build-folders.png new file mode 100644 index 0000000..ed9ad9a Binary files /dev/null and b/docs/Images/discover-build-folders.png differ diff --git a/docs/Images/goto-overwrite.png b/docs/Images/goto-overwrite.png new file mode 100644 index 0000000..5dc7b5f Binary files /dev/null and b/docs/Images/goto-overwrite.png differ diff --git a/docs/Images/mcp-server.png b/docs/Images/mcp-server.png new file mode 100644 index 0000000..affb277 Binary files /dev/null and b/docs/Images/mcp-server.png differ diff --git a/docs/Images/module-info.png b/docs/Images/module-info.png new file mode 100644 index 0000000..72569fb Binary files /dev/null and b/docs/Images/module-info.png differ diff --git a/docs/Images/settings-ui.png b/docs/Images/settings-ui.png new file mode 100644 index 0000000..f5b831d Binary files /dev/null and b/docs/Images/settings-ui.png differ diff --git a/docs/Images/sidebar.png b/docs/Images/sidebar.png new file mode 100644 index 0000000..d505064 Binary files /dev/null and b/docs/Images/sidebar.png differ diff --git a/docs/Images/workspace-dragdrop.png b/docs/Images/workspace-dragdrop.png new file mode 100644 index 0000000..df9a454 Binary files /dev/null and b/docs/Images/workspace-dragdrop.png differ diff --git a/docs/Images/workspace-filter.png b/docs/Images/workspace-filter.png new file mode 100644 index 0000000..5781d60 Binary files /dev/null and b/docs/Images/workspace-filter.png differ diff --git a/docs/Images/workspace-reveal.png b/docs/Images/workspace-reveal.png new file mode 100644 index 0000000..3ffdeb3 Binary files /dev/null and b/docs/Images/workspace-reveal.png differ diff --git a/docs/Images/workspace-search.png b/docs/Images/workspace-search.png new file mode 100644 index 0000000..e39630e Binary files /dev/null and b/docs/Images/workspace-search.png differ diff --git a/docs/Images/workspace-select.png b/docs/Images/workspace-select.png new file mode 100644 index 0000000..cfdf0b4 Binary files /dev/null and b/docs/Images/workspace-select.png differ diff --git a/docs/Images/workspace-view.png b/docs/Images/workspace-view.png new file mode 100644 index 0000000..c0877a6 Binary files /dev/null and b/docs/Images/workspace-view.png differ diff --git a/docs/Images/workspace-welcome.png b/docs/Images/workspace-welcome.png new file mode 100644 index 0000000..0b096cf Binary files /dev/null and b/docs/Images/workspace-welcome.png differ diff --git a/docs/Index-source-code.md b/docs/Index-source-code.md new file mode 100644 index 0000000..4f212e7 --- /dev/null +++ b/docs/Index-source-code.md @@ -0,0 +1,92 @@ +# Quick start +Most of the extension functionality will work out of the box on any given EDK2 project. However it will have the full set of features enabled when the source code is compiled and the workspace is loaded. + +## Loading the workspace + +When you open a folder that contains an EDK2 project, look for the **Edk2Code icon** in the activity bar on the left side of VS Code. Clicking it opens the Edk2Code sidebar, which contains the **Workspace** and **Module Info** views. + +![Edk2Code sidebar](Images/sidebar.png) + +The **Workspace** view will guide you through loading your build configuration. If nothing is loaded yet, you will see the welcome screen: + +![Workspace welcome view](Images/workspace-welcome.png) + +### Option 1 — Auto-discover build folders (recommended) + +If you have already compiled your EDK2 project, click **Discover Build Folders**. The extension will scan your workspace and detect all existing build output folders automatically. + +Once discovery completes, click **Use discovered folders** to load the detected configurations. The Workspace view will populate with your DSC, INF, and source file hierarchy. + +You can also trigger this at any time from the [command palette](https://code.visualstudio.com/docs/getstarted/userinterface#_command-palette): + +``` +> EDK2: Discover build folders +> EDK2: Use discovered build folders +``` + +### Option 2 — Manual configuration + +Click **Open EDK2 Configuration** (or run `EDK2: Workspace configuration (UI)`) to open the settings panel and manually specify: + +- **DSC paths** — the main `.dsc` files for your platform +- **Build Defines** — any `-D` flags used in your build command +- **Package paths** — extra package roots passed to the build + +``` +> EDK2: Workspace configuration (UI) +``` + +### Rebuild / Rescan + +To force a full re-index after a new build, use: + +``` +> EDK2: Rebuild index database +``` + +To reload using the existing configuration without changing any settings: + +``` +> EDK2: Rescan index database +``` + +## Enable compile information + +You can use the [compile information](https://github.com/tianocore/edk2/commit/4ad7ea9c842289aed6ed519f9fce33cf37cfc2a9) build feature from EDK2 to provide more build information to the extension. This is optional but recommended + +To enable the compile information you need to enable the [build report flag](https://tianocore-docs.github.io/edk2-BuildSpecification/release-1.28/13_build_reports/#13-build-reports) in the EDK2 `build` command and set `-Y COMPILE_INFO`. You can check more information about EDK build process [here](https://github.com/tianocore/tianocore.github.io/wiki/Windows-systems#build) + +For example, if you want to build `EmulatorPkg` from EDK2 source, your build command will look like this: + +```shell +build -p EmulatorPkg\EmulatorPkg.dsc -t VS2019 -a IA32 -Y COMPILE_INFO -y BuildReport.log +``` + +This will generate [compile information](https://github.com/tianocore/edk2/commit/4ad7ea9c842289aed6ed519f9fce33cf37cfc2a9) in your build folder. + +`-Y COMPILE_INFO -y BuildReport.log` will add to your build folder the `CompileInfo` folder: + +`x:\Edk2\Build\EmulatorIA32\DEBUG_VS2019\CompileInfo` + +# Files produced after parsing + +After parsing is completed, some files will be created in `.edkCode` folder on your workspace. + +## .ignore +This is a list of all your the files in your source that were not used during compilation. The generation of this file can be disabled in the extension settings. This file is used by VSCODE to ignore unused files. You can toggle the use of .ignore file in search: + +![Search ignore](https://github.com/intel/Edk2Code/assets/62723455/d0485a5e-d53e-4a09-b17d-34c056a382b9) + +## compile_commands.json +This is the [compilation database](https://clang.llvm.org/docs/JSONCompilationDatabase.html) generated during build process. You can setup your [C/C++ VSCODE plugging](https://code.visualstudio.com/docs/cpp/faq-cpp#_how-do-i-get-intellisense-to-work-correctly) to use this compilation database to get better C parsing. + +To setup compile commands in your workspace, open `C/C++: edit configurations (UI)` in command palette. Under **Advance Settings** look for **Compile commands** property. Set the path for `${workspaceFolder}\.edkCode\compile_commands.json` as shown in the following image: + + +![Compile commands](https://github.com/intel/Edk2Code/assets/62723455/b7e65859-f1ce-4409-badf-7efd5b6b96c2) + +The EDK2Code extension will detect if `compile_commands.json` exists and will prompt the user to update the configuration + +## cscope.files +This is the list of all your files used in compilation. This file is used by [Cscope](https://cscope.sourceforge.net) to help provide C definitions. + diff --git a/docs/documentation/Settings.md b/docs/documentation/Settings.md new file mode 100644 index 0000000..4104118 --- /dev/null +++ b/docs/documentation/Settings.md @@ -0,0 +1,37 @@ +# Extension settings + +### Edk2code: Log Level + +Used to debug the extension development. Its recommended to keep on None unless you are debugging the Edk2Code extension. + +---- + +### Edk2code: Generate Ignore File + +Generates `.ignore` file as part of [source index process](https://github.com/intel/Edk2Code/wiki/Index-source-code) + +---- + +### Edk2code: Use Cscope + +Enable or disable cscope integration. When disabled, the cscope database will not be built or queried, and features that depend on it (call hierarchy, cscope-based `Go to definition`) will be unavailable. + +A reload of VS Code is required after changing this setting. + +---- + +### Edk2code: Mcp Server Port + +Port number used by the MCP SSE server started with `EDK2: Start MCP SSE Server`. + +Default: `3100`. + +---- + +### Edk2code: Cscope Overwrite Path + +Overwrites the path used to invoke the `cscope` executable. Leave empty to use the one available on `PATH`. + +A reload of VS Code is required after changing this setting. + +---- diff --git a/docs/documentation/Workspace-settings.md b/docs/documentation/Workspace-settings.md new file mode 100644 index 0000000..0e11367 --- /dev/null +++ b/docs/documentation/Workspace-settings.md @@ -0,0 +1,45 @@ +# Workspace settings + +The workspace configuration controls which DSC files, build defines, and package paths the extension uses when parsing your EDK2 project. + +## Configuration UI + +The easiest way to manage the workspace settings is through the graphical configuration panel. Open it from the Workspace view title bar (`$(gear)` icon) or via the command palette: + +``` +> EDK2: Workspace configuration (UI) +``` + +![Workspace settings UI](../Images/settings-ui.png) + +The panel lets you set: + +- **DSC paths** — the main `.dsc` files for your platform (relative to the workspace root). +- **Build Defines** — definitions injected in your build command with `-D` (e.g. `ARCH=X64`). +- **Package paths** — additional package roots passed to the EDK2 build. + +## Configuration file + +The settings are stored in `.edkCode/edk2_workspace_properties.json` inside your workspace. You can also edit this file directly or open it with: + +``` +> EDK2: Workspace configuration (JSON) +``` + +```json +{ + "packagePaths": [], + "dscPaths": [ + "OvmfPkg\\OvmfPkgX64.dsc" + ], + "buildDefines": [ + "ARCH=X64" + ] +} +``` + +**dscPaths** — Each entry should be a main DSC file used for compilation. + +**buildDefines** — Definitions injected in your build command with `-D`. Add or modify entries to match your build. + +> After any modification to this file, VS Code will prompt you to reload the index. diff --git a/docs/documentation/documentation.md b/docs/documentation/documentation.md new file mode 100644 index 0000000..678421e --- /dev/null +++ b/docs/documentation/documentation.md @@ -0,0 +1,293 @@ +# Documentation +Before you start testing the functionality of the extension, please index your [source code](../Index-source-code.md). + +## Configuration +You can check your workspace configuration with command: + +``` +> EDK2: Workspace configuration (UI) +``` + +This configuration will be automatically populated after you indexed your [source code](../Index-source-code.md). + +- **DSC relative path** Are the main `DSC` files for your workspace +- **Build Defines** Build defines that were injected in your EDK2 build command +- **Package paths** are the paths set for the EDK2 Build command. + +You can manually change this configuration. After any manual modification the user will be prompted to rescan the Index. + +## Interface + +### Status bar +When you open a file in the editor, you will see in the status bar a warning if the file you are looking has been compiled or not: + +![Status bar](https://github.com/intel/Edk2Code/assets/62723455/893be801-0977-48cc-98b3-1f119d9f7679) + +The following commands are expected to work only on files that have been used in compilation. + +### Global commands +This commands are only accessible using the [command palette](https://code.visualstudio.com/docs/getstarted/userinterface#_command-palette) (⌨F1) + +#### EDK2: Open library +Will show a list of all the libraries compiled. + +![Open library](https://github.com/intel/Edk2Code/assets/62723455/396d9432-4cc8-4a11-ac76-c307b3409534) + + +#### EDK2: Open Module +Will show a list of all the modules compiled. + + +#### EDK2: Rebuild index database +This will clean up the current source index and will create a new one. See [Quick start](../Index-source-code.md) for details. + +#### EDK2: Rescan index database +This will use the previous index configuration and will recreate the index without changing the workspace settings + +## EDK2 language support +After you source code has been indexed you will see some of the features of using Edk2Code extension + +> **⚠ IMPORTANT** Before continuing please index your code following this [instructions](../Index-source-code.md) + + +### INF files +#### Inf files will show syntax highlight: + +![image](https://github.com/intel/Edk2Code/assets/62723455/bbe1fff6-6cd0-4d4c-9ca2-0e7455cc8a50) + +#### Outline tree + +![Outline tree](https://github.com/intel/Edk2Code/assets/62723455/845fe6b2-71a3-47bf-93cb-1b0d3ac48051) + +#### Source goto definition +Right click on a source file name and then select `Go To Definition` (F12) + +![Go to Definition](https://github.com/intel/Edk2Code/assets/62723455/5e12a914-cbac-4512-971a-554c589f6e42) + +This will open the source file selected. This also works for `LibraryClasses`, `Pcd` and `Packages`: + +![Goto Library](https://github.com/intel/Edk2Code/assets/62723455/278457ce-dea6-4235-a624-a3f856e4588c) + +The results shown are based on your DSC parsing. + +#### LibraryClasses Auto completion +Start typing on the `LibraryClasses` section will show suggestions of libraries that can be included in that INF file: + +![Auto complete](https://github.com/intel/Edk2Code/assets/62723455/4fb165cf-9f0a-4903-b14c-12bf05dd374e) + +This suggestions are based on DEC files in `Packages` section. + +#### Goto DSC Declaration +Right click on an anywhere in an INF file and select `EDK2: Goto DSC Declaration` + +![Go to DSC](https://github.com/intel/Edk2Code/assets/62723455/933014af-6f40-4349-9606-93030a4fe359) + +This will open the DSC file where this INF file was declared. + +#### Library usage +If the INF file is a library, right click and select `EDK2: Show Library usage`: + +![image](https://github.com/intel/Edk2Code/assets/62723455/92a1543d-00a8-4ba7-b63a-799f523aae4d) + +This will show what modules are using your library: + +![Library usage](https://github.com/intel/Edk2Code/assets/62723455/9019f46a-b6ad-49d4-bec8-e7cd3d3ed133) + +### DSC Files + +#### Syntax highlight +DSC files have full syntax highlighting for sections, conditionals (`!if`, `!else`, `!endif`), includes (`!include`), macros, PCDs, and module entries. + +#### Outline +The Outline view shows all sections (`[LibraryClasses]`, `[Components]`, `[PcdsFixedAtBuild]`, etc.) and their entries, allowing quick navigation within large DSC files. + +#### Variable defines resolution +DSC files will dim source that hasn't been compiled based on DEFINES. +You can see the value of the defines if you hover your mouse over. + +This also works with `PCD` values + +![Variable resolution](https://github.com/intel/Edk2Code/assets/62723455/e0c8d40f-9ae8-404a-9ca9-d799744bf8b5) + + +#### Goto Definition +Right click on a file path and select `Go to Definition` (F12) to open that file. + +#### Goto DSC inclusion +Right click and select `Go to DSC Inclusion` to see if this DSC file was included (`!Include`) in other DSC file. + +### DEC + +#### Syntax highlight +DEC files have syntax highlighting for section headers, GUID definitions, PCD declarations, library class definitions, and include paths. + +#### Outline +The Outline view shows all sections (`[Guids]`, `[Protocols]`, `[Ppis]`, `[LibraryClasses]`, `[Pcds*]`, etc.) for easy navigation. + +### C files +#### Call Hierarchy +Right on a function name and select `Show Call Hierarchy`: + +![image](https://github.com/intel/Edk2Code/assets/62723455/686a95c2-a935-47bb-a4a2-7a12b6c3366c) + +This will open the References view with the [call Hierarchy](https://devblogs.microsoft.com/cppblog/c-extension-in-vs-code-1-16-release-call-hierarchy-more/) of the selected function. Edk2Code extension will filter unused calls from the view. + +![image](https://github.com/intel/Edk2Code/assets/62723455/7c5ed101-5926-41cb-9107-cd2da2350e63) + +#### Go to INF +When you are on a C file, Right click and select `Go to INF`: + +![image](https://github.com/intel/Edk2Code/assets/62723455/79b5c67a-7514-4f9f-8f16-27dcae38ae07) + +This will open the .inf file that compiled that C file. + +#### Go to Definition +Right click on a C symbol (function, variable, etc) and select `EDK2: Go To Definition` to open the symbol definition. This differs from regular `Go to Definition` command provided by VSCODE as this will uses CSCOPE and compiled files to query the definitions. Sometimes it gives better results. + +### VFR + +#### Syntax highlight +VFR (Visual Forms Representation) files have syntax highlighting for form definitions, questions, one-of selections, checkboxes, strings, and other HII form elements. + +#### Outline +The Outline view shows the form set, individual forms, and their question elements, making it easy to navigate complex VFR layouts. + +### ACPI + +#### Syntax highlight +ASL (ACPI Source Language) files have syntax highlighting for device definitions, methods, operators, named objects, and resource descriptors. + +#### Outline +The Outline view shows the ASL definition block structure including devices, methods, scopes, and named objects for easy navigation. + +#### Help +Hover on keywords of your ASL code and you will see help extracted from ACPI specification (6.3) + +![image](https://github.com/intel/Edk2Code/assets/62723455/441eb15f-3f9e-47f3-acb3-4ff26f021536) + +#### Auto complete +Start typing anywhere in your *.asl files and you will see autocomplete suggestions of ASL specification. + +![image](https://github.com/intel/Edk2Code/assets/62723455/2569cdfc-bf32-41f0-a9ce-aebd5aba5605) + +## Edk2Code sidebar + +Starting in version `2.0.0`, the extension installs its own activity bar container. All Edk2Code views are grouped under this entry, which exposes two views: **Workspace** and **Module Info**. + +![Edk2Code sidebar](../Images/sidebar.png) + + +### Workspace view + +The **Workspace** view shows your parsed EDK2 workspace as a single, persistent tree. It replaces the older *Module Map*, *Library Tree* and *Reference Tree* commands with one navigable hierarchy of DSC → INF → libraries / sources / headers. + +![Workspace view](../Images/workspace-view.png) + + +When no workspace is loaded yet, the welcome view offers quick actions to discover build folders or open the configuration UI. + +![Workspace welcome](../Images/workspace-welcome.png) + + +The view title bar exposes the following actions: + +| Action | Command | Description | +|--------|---------|-------------| +| `$(gear)` | `EDK2: Workspace configuration (UI)` | Open the graphical configuration panel. | +| `$(repo)` | `EDK2: Select Workspace` | Switch between loaded build configurations. | +| `$(target)` | `EDK2: Reveal active editor in workspace tree` | Locate the active file in the tree. | +| `$(search)` | `EDK2: Search workspace tree` | Find a node by name. | +| `$(filter)` | `EDK2: Filter workspace symbols` | Hide grayed-out / inactive elements. | +| `$(copy)` | `EDK2: Copy workspace tree` | Copy the tree (or a sub-tree) as text. | +| `$(refresh)` | `EDK2: Refresh workspace config` | Reload the workspace configuration. | +| `$(close)` | `EDK2: Unload workspace` | Clear the currently loaded configuration. | + +Additional capabilities: + +- **Drag and drop** to rearrange tree nodes. +- **Right-click → Copy path** on any node. +- Searching for symbols from the command palette will automatically switch to the workspace that owns the result. + +![Workspace search](../Images/workspace-search.png) + + +### Module Info view + +The **Module Info** view shows EDK2 module information for the file currently open in the editor. As soon as you open a C, INF or related source file that belongs to a module, the view populates with: + +- The owning INF and its DSC declaration +- Libraries linked to the module +- Quick navigation actions (go to definition, open file, go to DSC declaration) + +Double-click any entry to jump directly to the corresponding source location. + +![Module Info view](../Images/module-info.png) + + +## Build folder auto-discovery + +EDK2Code can scan your workspace and detect existing build output folders automatically — you don't need to point the extension at them manually. + +- `EDK2: Discover build folders` scans the workspace. +- `EDK2: Use discovered build folders` loads the detected folders as workspace configurations. +- The Workspace welcome view exposes both actions when nothing is loaded yet. + +![Discover build folders](../Images/discover-build-folders.png) + + +## Compile EDK2 file + +You can compile an individual EDK2 C file directly from the editor without running a full EDK2 build: + +- A play (`$(play)`) icon is shown in the editor title bar on supported source files. +- The command `EDK2: Compile Edk2 file` invokes the compiler for the active `.c` file using the flags and include paths recorded in `compile_commands.json`. + +![Compile EDK2 file](../Images/compile-file.png) + + +> **⚠ NOTE** This compiles the **single C file** in isolation — it runs outside the regular EDK2 build system and does **not** link or produce a final binary. It is intended as a fast feedback loop to catch syntax and type errors in a single translation unit without waiting for a full platform build. + +> **⚠ REQUIREMENT** This feature requires a `compile_commands.json` to be present in your workspace. This file is generated automatically when you [enable compile information](../Index-source-code.md#enable-compile-information) during your EDK2 build using the `-Y COMPILE_INFO` flag. + +## Goto overwriting definition + +When a symbol is overwritten in a DSC (libraries, PCDs, modules), a new code action lets you jump to the *overwriting* definition instead of the original. + +![Goto overwriting definition](../Images/goto-overwrite.png) + + +## MCP server + +EDK2Code can expose a **[Model Context Protocol (MCP)](https://code.visualstudio.com/docs/copilot/chat/mcp-servers) SSE server** so AI agents and tools (such as GitHub Copilot or other MCP-compatible clients) can query your parsed EDK2 workspace directly. + +![MCP server](../Images/mcp-server.png) + + +### Starting and stopping + +Open the **Workspace configuration (UI)** panel (`EDK2: Workspace configuration (UI)`) and use the **Start MCP Server** / **Stop MCP Server** button in the MCP section, or run the commands from the palette: + +``` +> EDK2: Start MCP SSE Server +> EDK2: Stop MCP SSE Server +``` + +The `edk2code.mcpServerPort` setting controls the listening port (default `3100`). + +### Auto-configure workspace MCP + +To let VS Code and GitHub Copilot discover the server automatically, click **Auto-configure workspace MCP** in the Settings UI. This writes (or updates) the `edk2code` server entry in your workspace's `.vscode/mcp.json` file: + +```json +{ + "servers": { + "edk2code": { + "type": "sse", + "url": "http://localhost:3100/sse" + } + } +} +``` + +Once this file exists, VS Code will list the `edk2code` server under **MCP Servers** in Copilot Chat and any other MCP-compatible client. See the [VS Code MCP documentation](https://code.visualstudio.com/docs/copilot/chat/mcp-servers) for more details on how MCP servers work. + diff --git a/docs/documentation/index.md b/docs/documentation/index.md new file mode 100644 index 0000000..804be8f --- /dev/null +++ b/docs/documentation/index.md @@ -0,0 +1,2 @@ +# Index database + diff --git a/docs/index.md b/docs/index.md new file mode 100644 index 0000000..094936d --- /dev/null +++ b/docs/index.md @@ -0,0 +1,16 @@ +# EDK2Code + +Star + +The EDK2Code Extension for Visual Studio Code enhances the development experience for engineers working with the EDK2 (UEFI) codebase by providing features such as syntax highlighting, code navigation, and error detection. This extension integrates these capabilities directly into Visual Studio Code, enabling developers to streamline their workflow and increase productivity. + +By leveraging the EDK2Code extension, developers can easily navigate through code, quickly identify errors, and benefit from improved readability of EDK2 source files. This results in a more efficient development process and a smoother coding experience. + +Additionally, the extension supports various EDK2-specific commands accessible via the command palette, such as rebuilding the index database and configuring the workspace. This comprehensive toolset empowers developers to work more effectively with EDK2 projects, ultimately leading to higher quality code and faster development cycles. + +Check YouTube video presentation on **UEFIForum** Channel + +[![YouTube presentation](https://img.youtube.com/vi/2Js9nSPKtd8/0.jpg)](https://www.youtube.com/watch?v=2Js9nSPKtd8) + + Github +VSCODE \ No newline at end of file diff --git a/docs/releases/1.0.9.md b/docs/releases/1.0.9.md new file mode 100644 index 0000000..a58b903 --- /dev/null +++ b/docs/releases/1.0.9.md @@ -0,0 +1,25 @@ +Thanks for using the **Edk2Code** Vscode extension. + +🎉 If you find this extension useful 🎉: + +- ⭐ Give a start on [Github](https://github.com/intel/Edk2Code) +- 📜 Leave a review in [Vscode marketplace](https://marketplace.visualstudio.com/items?itemName=intel-corporation.edk2code) + +## 1.0.9 + +### DSC analysis +Shows problems in DSC files + +![alt text](1.0.9/dscProblems.png) + + +### Module map +Added context menu action `Show Module Map`. This action is available on INF files and will open `EDK2 module map` side panel to show: +- Library tree +- Source files tree (including Header files) +![alt text](1.0.9/moduleMap.png) + + +You can also copy the path of the element selected in `EDK2 module map` using mouse context menu. + +![alt text](1.0.9/copyTree.png) \ No newline at end of file diff --git a/docs/releases/1.0.9/copyTree.png b/docs/releases/1.0.9/copyTree.png new file mode 100644 index 0000000..9118eb0 Binary files /dev/null and b/docs/releases/1.0.9/copyTree.png differ diff --git a/docs/releases/1.0.9/dscProblems.png b/docs/releases/1.0.9/dscProblems.png new file mode 100644 index 0000000..be91aa0 Binary files /dev/null and b/docs/releases/1.0.9/dscProblems.png differ diff --git a/docs/releases/1.0.9/moduleMap.png b/docs/releases/1.0.9/moduleMap.png new file mode 100644 index 0000000..169b1f4 Binary files /dev/null and b/docs/releases/1.0.9/moduleMap.png differ diff --git a/docs/releases/2.0.0.md b/docs/releases/2.0.0.md new file mode 100644 index 0000000..3cdb1dc --- /dev/null +++ b/docs/releases/2.0.0.md @@ -0,0 +1,137 @@ +# 2.0.0 + +## Edk2Code sidebar + +The extension now lives in a dedicated **activity bar container**. All Edk2Code views (Workspace, Module Info) are grouped together in the sidebar instead of being attached to the Explorer view. + +![Edk2Code sidebar activity bar entry](../Images/sidebar.png) + + +---- + +## Workspace view + +The new **Workspace** view is a single, persistent tree representation of your parsed EDK2 workspace. It replaces the previous *Module Map*, *Reference Tree* and *Library Tree* commands. + +![Workspace view](../Images/workspace-view.png) + + +Key capabilities: + +- **Sub-trees and includes** — DSC, INF, FDF and source files are organized hierarchically. Header includes and library sub-trees are integrated into the tree. +- **Search** — Click the `$(search)` action in the view title bar to find any node in the workspace tree. + + ![Workspace search](../Images/workspace-search.png) + + +- **Filter inactive elements** — Toggle the `$(filter)` action to hide grayed-out (inactive) items. + + ![Filter inactive](../Images/workspace-filter.png) + + +- **Reveal active editor** — The `$(target)` action jumps from the currently open file to its location in the workspace tree. + + ![Reveal in workspace tree](../Images/workspace-reveal.png) + + +- **Drag and drop** — Reorganize nodes in the workspace tree directly with the mouse. + + ![Drag and drop](../Images/workspace-dragdrop.png) + + +- **Multiple workspaces** — When multiple build configurations are loaded, switch between them from the `$(repo)` action in the title bar. Searching for symbols automatically switches to the workspace that owns the result. + + ![Select workspace](../Images/workspace-select.png) + + +- **Copy node path / Copy tree** — Quickly copy the path of a node, or export the entire tree as text via the `$(copy)` action. +- **Welcome view** — When no workspace is loaded, the view guides you through discovering build folders or opening the configuration UI. + + ![Welcome view](../Images/workspace-welcome.png) + + +---- + +## Module Info view + +The new **Module Info** view shows the EDK2 module information for the file you are currently editing. As soon as you open a C, INF or related source file that belongs to a module, the view populates with: + +- The owning INF and its DSC declaration +- Libraries linked to the module +- Quick navigation actions (go to definition, open file, go to DSC declaration) + +Double-click any entry to jump directly to the corresponding source location. + +![Module Info view](../Images/module-info.png) + + +---- + +## Build folder auto-discovery + +EDK2Code can now scan your workspace and automatically detect existing build output folders, so you don't have to point the extension at them manually. + +- Run **`EDK2: Discover build folders`** to scan the workspace. +- Once discovered, run **`EDK2: Use discovered build folders`** to load them directly. +- The Workspace view welcome page surfaces these actions when nothing is loaded yet. + +![Build folder discovery](../Images/discover-build-folders.png) + + +---- + +## Compile EDK2 file + +You can now compile an individual EDK2 file (e.g. a `.c` belonging to a module) directly from the editor. + +- A play (`$(play)`) icon is shown in the editor title bar on supported source files. +- The command **`EDK2: Compile Edk2 file`** invokes the build for the parent module of the active file. + +![Compile EDK2 file button](../Images/compile-file.png) + + +---- + +## MCP server integration + +EDK2Code now exposes an **MCP (Model Context Protocol) SSE server** that lets AI agents and external tools query your parsed EDK2 workspace. + +- Start with **`EDK2: Start MCP SSE Server`** and stop with **`EDK2: Stop MCP SSE Server`**. +- Configure the listening port via the `edk2code.mcpServerPort` setting (default `3100`). + +![MCP server](../Images/mcp-server.png) + + +---- + +## Settings UI + +A redesigned graphical **Workspace configuration (UI)** panel makes managing build configurations easier — no more hand-editing JSON for common setups. + +- Launch from the Workspace view title bar (`$(gear)` icon) or via the **`EDK2: Workspace configuration (UI)`** command. + +![Settings UI](../Images/settings-ui.png) + + +---- + +## Goto overwriting definition + +When a symbol is overwritten in a DSC (libraries, PCDs, modules), a new code action lets you jump directly to the *overwriting* definition. + +![Goto overwriting definition](../Images/goto-overwrite.png) + + +---- + +## Other improvements + +- **Disable cscope** — A new `edk2code.useCscope` setting lets you turn off cscope integration entirely. When disabled, the cscope database is not built or queried (call hierarchy and cscope-based go-to-definition become unavailable). +- **Unload workspace** — New `EDK2: Unload workspace` command to clear the currently loaded build configuration. +- **Refresh workspace config** — Reload the workspace configuration without restarting VS Code. +- **Focus INF from C files** — Improved navigation from C source files back to their owning INF module. +- **Better module symbols** — DSC parser now recognizes module sub-context sections, build options, and provides improved symbols for libraries and modules. +- **Loading and discovery indicators** — Progress indicators are shown while the workspace is being parsed or build folders are being discovered. +- **Improved grayout controller** — Inactive code regions are computed and updated more reliably. +- **Path improvements** — Missing paths now report folders instead of file names, and tooltips include the full path. +- **Extensive test suite** — New parser and workspace tests covering ASL, DEC, DSC, FDF, INF and VFR. diff --git a/docs/requirements.md b/docs/requirements.md new file mode 100644 index 0000000..43ffca6 --- /dev/null +++ b/docs/requirements.md @@ -0,0 +1,10 @@ +# Requirements +#### [Visual Studio Code](https://code.visualstudio.com/download) `^1.77.0` +#### Cscope +Cscope is used for some C related functionality of the extension. On windows systems the cscope comes already included in the extension. + +For linux systems you need to install cscope manually. + +Ubuntu installation example: `sudo apt install cscope` + +Additionally, you can use the vscode setting `edk2code.cscopeOverwritePath` to point cscope to your preferred installation path. diff --git a/docs/theme/css/codicon.min.css b/docs/theme/css/codicon.min.css new file mode 100644 index 0000000..876e056 --- /dev/null +++ b/docs/theme/css/codicon.min.css @@ -0,0 +1,8 @@ +/** + * Minified by jsDelivr using clean-css v5.3.1. + * Original file: /npm/vscode-codicons@0.0.17/dist/codicon.css + * + * Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files + */ +@font-face{font-family:codicon;src:url("codicon.ttf?54702f639320b60466e6f56678165405") format("truetype")}.codicon[class*=codicon-]{font:normal normal normal 16px/1 codicon;display:inline-block;text-decoration:none;text-rendering:auto;text-align:center;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;user-select:none;-webkit-user-select:none;-ms-user-select:none}.codicon-add:before{content:"\ea60"}.codicon-plus:before{content:"\ea60"}.codicon-gist-new:before{content:"\ea60"}.codicon-repo-create:before{content:"\ea60"}.codicon-lightbulb:before{content:"\ea61"}.codicon-light-bulb:before{content:"\ea61"}.codicon-repo:before{content:"\ea62"}.codicon-repo-delete:before{content:"\ea62"}.codicon-gist-fork:before{content:"\ea63"}.codicon-repo-forked:before{content:"\ea63"}.codicon-git-pull-request:before{content:"\ea64"}.codicon-git-pull-request-abandoned:before{content:"\ea64"}.codicon-record-keys:before{content:"\ea65"}.codicon-keyboard:before{content:"\ea65"}.codicon-tag:before{content:"\ea66"}.codicon-tag-add:before{content:"\ea66"}.codicon-tag-remove:before{content:"\ea66"}.codicon-person:before{content:"\ea67"}.codicon-person-follow:before{content:"\ea67"}.codicon-person-outline:before{content:"\ea67"}.codicon-person-filled:before{content:"\ea67"}.codicon-git-branch:before{content:"\ea68"}.codicon-git-branch-create:before{content:"\ea68"}.codicon-git-branch-delete:before{content:"\ea68"}.codicon-source-control:before{content:"\ea68"}.codicon-mirror:before{content:"\ea69"}.codicon-mirror-public:before{content:"\ea69"}.codicon-star:before{content:"\ea6a"}.codicon-star-add:before{content:"\ea6a"}.codicon-star-delete:before{content:"\ea6a"}.codicon-star-empty:before{content:"\ea6a"}.codicon-comment:before{content:"\ea6b"}.codicon-comment-add:before{content:"\ea6b"}.codicon-alert:before{content:"\ea6c"}.codicon-warning:before{content:"\ea6c"}.codicon-search:before{content:"\ea6d"}.codicon-search-save:before{content:"\ea6d"}.codicon-log-out:before{content:"\ea6e"}.codicon-sign-out:before{content:"\ea6e"}.codicon-log-in:before{content:"\ea6f"}.codicon-sign-in:before{content:"\ea6f"}.codicon-eye:before{content:"\ea70"}.codicon-eye-unwatch:before{content:"\ea70"}.codicon-eye-watch:before{content:"\ea70"}.codicon-circle-filled:before{content:"\ea71"}.codicon-primitive-dot:before{content:"\ea71"}.codicon-close-dirty:before{content:"\ea71"}.codicon-debug-breakpoint:before{content:"\ea71"}.codicon-debug-breakpoint-disabled:before{content:"\ea71"}.codicon-debug-hint:before{content:"\ea71"}.codicon-primitive-square:before{content:"\ea72"}.codicon-edit:before{content:"\ea73"}.codicon-pencil:before{content:"\ea73"}.codicon-info:before{content:"\ea74"}.codicon-issue-opened:before{content:"\ea74"}.codicon-gist-private:before{content:"\ea75"}.codicon-git-fork-private:before{content:"\ea75"}.codicon-lock:before{content:"\ea75"}.codicon-mirror-private:before{content:"\ea75"}.codicon-close:before{content:"\ea76"}.codicon-remove-close:before{content:"\ea76"}.codicon-x:before{content:"\ea76"}.codicon-repo-sync:before{content:"\ea77"}.codicon-sync:before{content:"\ea77"}.codicon-clone:before{content:"\ea78"}.codicon-desktop-download:before{content:"\ea78"}.codicon-beaker:before{content:"\ea79"}.codicon-microscope:before{content:"\ea79"}.codicon-vm:before{content:"\ea7a"}.codicon-device-desktop:before{content:"\ea7a"}.codicon-file:before{content:"\ea7b"}.codicon-file-text:before{content:"\ea7b"}.codicon-more:before{content:"\ea7c"}.codicon-ellipsis:before{content:"\ea7c"}.codicon-kebab-horizontal:before{content:"\ea7c"}.codicon-mail-reply:before{content:"\ea7d"}.codicon-reply:before{content:"\ea7d"}.codicon-organization:before{content:"\ea7e"}.codicon-organization-filled:before{content:"\ea7e"}.codicon-organization-outline:before{content:"\ea7e"}.codicon-new-file:before{content:"\ea7f"}.codicon-file-add:before{content:"\ea7f"}.codicon-new-folder:before{content:"\ea80"}.codicon-file-directory-create:before{content:"\ea80"}.codicon-trash:before{content:"\ea81"}.codicon-trashcan:before{content:"\ea81"}.codicon-history:before{content:"\ea82"}.codicon-clock:before{content:"\ea82"}.codicon-folder:before{content:"\ea83"}.codicon-file-directory:before{content:"\ea83"}.codicon-symbol-folder:before{content:"\ea83"}.codicon-logo-github:before{content:"\ea84"}.codicon-mark-github:before{content:"\ea84"}.codicon-github:before{content:"\ea84"}.codicon-terminal:before{content:"\ea85"}.codicon-console:before{content:"\ea85"}.codicon-repl:before{content:"\ea85"}.codicon-zap:before{content:"\ea86"}.codicon-symbol-event:before{content:"\ea86"}.codicon-error:before{content:"\ea87"}.codicon-stop:before{content:"\ea87"}.codicon-variable:before{content:"\ea88"}.codicon-symbol-variable:before{content:"\ea88"}.codicon-array:before{content:"\ea8a"}.codicon-symbol-array:before{content:"\ea8a"}.codicon-symbol-module:before{content:"\ea8b"}.codicon-symbol-package:before{content:"\ea8b"}.codicon-symbol-namespace:before{content:"\ea8b"}.codicon-symbol-object:before{content:"\ea8b"}.codicon-symbol-method:before{content:"\ea8c"}.codicon-symbol-function:before{content:"\ea8c"}.codicon-symbol-constructor:before{content:"\ea8c"}.codicon-symbol-boolean:before{content:"\ea8f"}.codicon-symbol-null:before{content:"\ea8f"}.codicon-symbol-numeric:before{content:"\ea90"}.codicon-symbol-number:before{content:"\ea90"}.codicon-symbol-structure:before{content:"\ea91"}.codicon-symbol-struct:before{content:"\ea91"}.codicon-symbol-parameter:before{content:"\ea92"}.codicon-symbol-type-parameter:before{content:"\ea92"}.codicon-symbol-key:before{content:"\ea93"}.codicon-symbol-text:before{content:"\ea93"}.codicon-symbol-reference:before{content:"\ea94"}.codicon-go-to-file:before{content:"\ea94"}.codicon-symbol-enum:before{content:"\ea95"}.codicon-symbol-value:before{content:"\ea95"}.codicon-symbol-ruler:before{content:"\ea96"}.codicon-symbol-unit:before{content:"\ea96"}.codicon-activate-breakpoints:before{content:"\ea97"}.codicon-archive:before{content:"\ea98"}.codicon-arrow-both:before{content:"\ea99"}.codicon-arrow-down:before{content:"\ea9a"}.codicon-arrow-left:before{content:"\ea9b"}.codicon-arrow-right:before{content:"\ea9c"}.codicon-arrow-small-down:before{content:"\ea9d"}.codicon-arrow-small-left:before{content:"\ea9e"}.codicon-arrow-small-right:before{content:"\ea9f"}.codicon-arrow-small-up:before{content:"\eaa0"}.codicon-arrow-up:before{content:"\eaa1"}.codicon-bell:before{content:"\eaa2"}.codicon-bold:before{content:"\eaa3"}.codicon-book:before{content:"\eaa4"}.codicon-bookmark:before{content:"\eaa5"}.codicon-debug-breakpoint-conditional-unverified:before{content:"\eaa6"}.codicon-debug-breakpoint-conditional:before{content:"\eaa7"}.codicon-debug-breakpoint-conditional-disabled:before{content:"\eaa7"}.codicon-debug-breakpoint-data-unverified:before{content:"\eaa8"}.codicon-debug-breakpoint-data:before{content:"\eaa9"}.codicon-debug-breakpoint-data-disabled:before{content:"\eaa9"}.codicon-debug-breakpoint-log-unverified:before{content:"\eaaa"}.codicon-debug-breakpoint-log:before{content:"\eaab"}.codicon-debug-breakpoint-log-disabled:before{content:"\eaab"}.codicon-briefcase:before{content:"\eaac"}.codicon-broadcast:before{content:"\eaad"}.codicon-browser:before{content:"\eaae"}.codicon-bug:before{content:"\eaaf"}.codicon-calendar:before{content:"\eab0"}.codicon-case-sensitive:before{content:"\eab1"}.codicon-check:before{content:"\eab2"}.codicon-checklist:before{content:"\eab3"}.codicon-chevron-down:before{content:"\eab4"}.codicon-chevron-left:before{content:"\eab5"}.codicon-chevron-right:before{content:"\eab6"}.codicon-chevron-up:before{content:"\eab7"}.codicon-chrome-close:before{content:"\eab8"}.codicon-chrome-maximize:before{content:"\eab9"}.codicon-chrome-minimize:before{content:"\eaba"}.codicon-chrome-restore:before{content:"\eabb"}.codicon-circle-outline:before{content:"\eabc"}.codicon-debug-breakpoint-unverified:before{content:"\eabc"}.codicon-circle-slash:before{content:"\eabd"}.codicon-circuit-board:before{content:"\eabe"}.codicon-clear-all:before{content:"\eabf"}.codicon-clippy:before{content:"\eac0"}.codicon-close-all:before{content:"\eac1"}.codicon-cloud-download:before{content:"\eac2"}.codicon-cloud-upload:before{content:"\eac3"}.codicon-code:before{content:"\eac4"}.codicon-collapse-all:before{content:"\eac5"}.codicon-color-mode:before{content:"\eac6"}.codicon-comment-discussion:before{content:"\eac7"}.codicon-credit-card:before{content:"\eac9"}.codicon-dash:before{content:"\eacc"}.codicon-dashboard:before{content:"\eacd"}.codicon-database:before{content:"\eace"}.codicon-debug-continue:before{content:"\eacf"}.codicon-debug-disconnect:before{content:"\ead0"}.codicon-debug-pause:before{content:"\ead1"}.codicon-debug-restart:before{content:"\ead2"}.codicon-debug-start:before{content:"\ead3"}.codicon-debug-step-into:before{content:"\ead4"}.codicon-debug-step-out:before{content:"\ead5"}.codicon-debug-step-over:before{content:"\ead6"}.codicon-debug-stop:before{content:"\ead7"}.codicon-debug:before{content:"\ead8"}.codicon-device-camera-video:before{content:"\ead9"}.codicon-device-camera:before{content:"\eada"}.codicon-device-mobile:before{content:"\eadb"}.codicon-diff-added:before{content:"\eadc"}.codicon-diff-ignored:before{content:"\eadd"}.codicon-diff-modified:before{content:"\eade"}.codicon-diff-removed:before{content:"\eadf"}.codicon-diff-renamed:before{content:"\eae0"}.codicon-diff:before{content:"\eae1"}.codicon-discard:before{content:"\eae2"}.codicon-editor-layout:before{content:"\eae3"}.codicon-empty-window:before{content:"\eae4"}.codicon-exclude:before{content:"\eae5"}.codicon-extensions:before{content:"\eae6"}.codicon-eye-closed:before{content:"\eae7"}.codicon-file-binary:before{content:"\eae8"}.codicon-file-code:before{content:"\eae9"}.codicon-file-media:before{content:"\eaea"}.codicon-file-pdf:before{content:"\eaeb"}.codicon-file-submodule:before{content:"\eaec"}.codicon-file-symlink-directory:before{content:"\eaed"}.codicon-file-symlink-file:before{content:"\eaee"}.codicon-file-zip:before{content:"\eaef"}.codicon-files:before{content:"\eaf0"}.codicon-filter:before{content:"\eaf1"}.codicon-flame:before{content:"\eaf2"}.codicon-fold-down:before{content:"\eaf3"}.codicon-fold-up:before{content:"\eaf4"}.codicon-fold:before{content:"\eaf5"}.codicon-folder-active:before{content:"\eaf6"}.codicon-folder-opened:before{content:"\eaf7"}.codicon-gear:before{content:"\eaf8"}.codicon-gift:before{content:"\eaf9"}.codicon-gist-secret:before{content:"\eafa"}.codicon-gist:before{content:"\eafb"}.codicon-git-commit:before{content:"\eafc"}.codicon-git-compare:before{content:"\eafd"}.codicon-compare-changes:before{content:"\eafd"}.codicon-git-merge:before{content:"\eafe"}.codicon-github-action:before{content:"\eaff"}.codicon-github-alt:before{content:"\eb00"}.codicon-globe:before{content:"\eb01"}.codicon-grabber:before{content:"\eb02"}.codicon-graph:before{content:"\eb03"}.codicon-gripper:before{content:"\eb04"}.codicon-heart:before{content:"\eb05"}.codicon-home:before{content:"\eb06"}.codicon-horizontal-rule:before{content:"\eb07"}.codicon-hubot:before{content:"\eb08"}.codicon-inbox:before{content:"\eb09"}.codicon-issue-closed:before{content:"\eb0a"}.codicon-issue-reopened:before{content:"\eb0b"}.codicon-issues:before{content:"\eb0c"}.codicon-italic:before{content:"\eb0d"}.codicon-jersey:before{content:"\eb0e"}.codicon-json:before{content:"\eb0f"}.codicon-kebab-vertical:before{content:"\eb10"}.codicon-key:before{content:"\eb11"}.codicon-law:before{content:"\eb12"}.codicon-lightbulb-autofix:before{content:"\eb13"}.codicon-link-external:before{content:"\eb14"}.codicon-link:before{content:"\eb15"}.codicon-list-ordered:before{content:"\eb16"}.codicon-list-unordered:before{content:"\eb17"}.codicon-live-share:before{content:"\eb18"}.codicon-loading:before{content:"\eb19"}.codicon-location:before{content:"\eb1a"}.codicon-mail-read:before{content:"\eb1b"}.codicon-mail:before{content:"\eb1c"}.codicon-markdown:before{content:"\eb1d"}.codicon-megaphone:before{content:"\eb1e"}.codicon-mention:before{content:"\eb1f"}.codicon-milestone:before{content:"\eb20"}.codicon-mortar-board:before{content:"\eb21"}.codicon-move:before{content:"\eb22"}.codicon-multiple-windows:before{content:"\eb23"}.codicon-mute:before{content:"\eb24"}.codicon-no-newline:before{content:"\eb25"}.codicon-note:before{content:"\eb26"}.codicon-octoface:before{content:"\eb27"}.codicon-open-preview:before{content:"\eb28"}.codicon-package:before{content:"\eb29"}.codicon-paintcan:before{content:"\eb2a"}.codicon-pin:before{content:"\eb2b"}.codicon-play:before{content:"\eb2c"}.codicon-run:before{content:"\eb2c"}.codicon-plug:before{content:"\eb2d"}.codicon-preserve-case:before{content:"\eb2e"}.codicon-preview:before{content:"\eb2f"}.codicon-project:before{content:"\eb30"}.codicon-pulse:before{content:"\eb31"}.codicon-question:before{content:"\eb32"}.codicon-quote:before{content:"\eb33"}.codicon-radio-tower:before{content:"\eb34"}.codicon-reactions:before{content:"\eb35"}.codicon-references:before{content:"\eb36"}.codicon-refresh:before{content:"\eb37"}.codicon-regex:before{content:"\eb38"}.codicon-remote-explorer:before{content:"\eb39"}.codicon-remote:before{content:"\eb3a"}.codicon-remove:before{content:"\eb3b"}.codicon-replace-all:before{content:"\eb3c"}.codicon-replace:before{content:"\eb3d"}.codicon-repo-clone:before{content:"\eb3e"}.codicon-repo-force-push:before{content:"\eb3f"}.codicon-repo-pull:before{content:"\eb40"}.codicon-repo-push:before{content:"\eb41"}.codicon-report:before{content:"\eb42"}.codicon-request-changes:before{content:"\eb43"}.codicon-rocket:before{content:"\eb44"}.codicon-root-folder-opened:before{content:"\eb45"}.codicon-root-folder:before{content:"\eb46"}.codicon-rss:before{content:"\eb47"}.codicon-ruby:before{content:"\eb48"}.codicon-save-all:before{content:"\eb49"}.codicon-save-as:before{content:"\eb4a"}.codicon-save:before{content:"\eb4b"}.codicon-screen-full:before{content:"\eb4c"}.codicon-screen-normal:before{content:"\eb4d"}.codicon-search-stop:before{content:"\eb4e"}.codicon-server:before{content:"\eb50"}.codicon-settings-gear:before{content:"\eb51"}.codicon-settings:before{content:"\eb52"}.codicon-shield:before{content:"\eb53"}.codicon-smiley:before{content:"\eb54"}.codicon-sort-precedence:before{content:"\eb55"}.codicon-split-horizontal:before{content:"\eb56"}.codicon-split-vertical:before{content:"\eb57"}.codicon-squirrel:before{content:"\eb58"}.codicon-star-full:before{content:"\eb59"}.codicon-star-half:before{content:"\eb5a"}.codicon-symbol-class:before{content:"\eb5b"}.codicon-symbol-color:before{content:"\eb5c"}.codicon-symbol-constant:before{content:"\eb5d"}.codicon-symbol-enum-member:before{content:"\eb5e"}.codicon-symbol-field:before{content:"\eb5f"}.codicon-symbol-file:before{content:"\eb60"}.codicon-symbol-interface:before{content:"\eb61"}.codicon-symbol-keyword:before{content:"\eb62"}.codicon-symbol-misc:before{content:"\eb63"}.codicon-symbol-operator:before{content:"\eb64"}.codicon-symbol-property:before{content:"\eb65"}.codicon-wrench:before{content:"\eb65"}.codicon-wrench-subaction:before{content:"\eb65"}.codicon-symbol-snippet:before{content:"\eb66"}.codicon-tasklist:before{content:"\eb67"}.codicon-telescope:before{content:"\eb68"}.codicon-text-size:before{content:"\eb69"}.codicon-three-bars:before{content:"\eb6a"}.codicon-thumbsdown:before{content:"\eb6b"}.codicon-thumbsup:before{content:"\eb6c"}.codicon-tools:before{content:"\eb6d"}.codicon-triangle-down:before{content:"\eb6e"}.codicon-triangle-left:before{content:"\eb6f"}.codicon-triangle-right:before{content:"\eb70"}.codicon-triangle-up:before{content:"\eb71"}.codicon-twitter:before{content:"\eb72"}.codicon-unfold:before{content:"\eb73"}.codicon-unlock:before{content:"\eb74"}.codicon-unmute:before{content:"\eb75"}.codicon-unverified:before{content:"\eb76"}.codicon-verified:before{content:"\eb77"}.codicon-versions:before{content:"\eb78"}.codicon-vm-active:before{content:"\eb79"}.codicon-vm-outline:before{content:"\eb7a"}.codicon-vm-running:before{content:"\eb7b"}.codicon-watch:before{content:"\eb7c"}.codicon-whitespace:before{content:"\eb7d"}.codicon-whole-word:before{content:"\eb7e"}.codicon-window:before{content:"\eb7f"}.codicon-word-wrap:before{content:"\eb80"}.codicon-zoom-in:before{content:"\eb81"}.codicon-zoom-out:before{content:"\eb82"}.codicon-list-filter:before{content:"\eb83"}.codicon-list-flat:before{content:"\eb84"}.codicon-list-selection:before{content:"\eb85"}.codicon-selection:before{content:"\eb85"}.codicon-list-tree:before{content:"\eb86"}.codicon-debug-breakpoint-function-unverified:before{content:"\eb87"}.codicon-debug-breakpoint-function:before{content:"\eb88"}.codicon-debug-breakpoint-function-disabled:before{content:"\eb88"}.codicon-debug-stackframe-active:before{content:"\eb89"}.codicon-debug-stackframe-dot:before{content:"\eb8a"}.codicon-debug-stackframe:before{content:"\eb8b"}.codicon-debug-stackframe-focused:before{content:"\eb8b"}.codicon-debug-breakpoint-unsupported:before{content:"\eb8c"}.codicon-symbol-string:before{content:"\eb8d"}.codicon-debug-reverse-continue:before{content:"\eb8e"}.codicon-debug-step-back:before{content:"\eb8f"}.codicon-debug-restart-frame:before{content:"\eb90"}.codicon-debug-alt:before{content:"\eb91"}.codicon-call-incoming:before{content:"\eb92"}.codicon-call-outgoing:before{content:"\eb93"}.codicon-menu:before{content:"\eb94"}.codicon-expand-all:before{content:"\eb95"}.codicon-feedback:before{content:"\eb96"}.codicon-group-by-ref-type:before{content:"\eb97"}.codicon-ungroup-by-ref-type:before{content:"\eb98"}.codicon-account:before{content:"\eb99"}.codicon-bell-dot:before{content:"\eb9a"}.codicon-debug-console:before{content:"\eb9b"}.codicon-library:before{content:"\eb9c"}.codicon-output:before{content:"\eb9d"}.codicon-run-all:before{content:"\eb9e"}.codicon-sync-ignored:before{content:"\eb9f"}.codicon-pinned:before{content:"\eba0"}.codicon-github-inverted:before{content:"\eba1"}.codicon-server-process:before{content:"\eba2"}.codicon-server-environment:before{content:"\eba3"}.codicon-pass:before{content:"\eba4"}.codicon-stop-circle:before{content:"\eba5"}.codicon-play-circle:before{content:"\eba6"}.codicon-record:before{content:"\eba7"}.codicon-debug-alt-small:before{content:"\eba8"}.codicon-vm-connect:before{content:"\eba9"}.codicon-cloud:before{content:"\ebaa"}.codicon-merge:before{content:"\ebab"}.codicon-export:before{content:"\ebac"}.codicon-graph-left:before{content:"\ebad"}.codicon-magnet:before{content:"\ebae"}.codicon-notebook:before{content:"\ebaf"}.codicon-redo:before{content:"\ebb0"}.codicon-check-all:before{content:"\ebb1"}.codicon-pinned-dirty:before{content:"\ebb2"}.codicon-pass-filled:before{content:"\ebb3"}.codicon-circle-large-filled:before{content:"\ebb4"}.codicon-circle-large-outline:before{content:"\ebb5"}.codicon-combine:before{content:"\ebb6"}.codicon-gather:before{content:"\ebb6"}.codicon-table:before{content:"\ebb7"}.codicon-variable-group:before{content:"\ebb8"}.codicon-type-hierarchy:before{content:"\ebb9"}.codicon-type-hierarchy-sub:before{content:"\ebba"}.codicon-type-hierarchy-super:before{content:"\ebbb"}.codicon-git-pull-request-create:before{content:"\ebbc"}.codicon-run-above:before{content:"\ebbd"}.codicon-run-below:before{content:"\ebbe"}.codicon-notebook-template:before{content:"\ebbf"}.codicon-debug-rerun:before{content:"\ebc0"}.codicon-workspace-trusted:before{content:"\ebc1"}.codicon-workspace-untrusted:before{content:"\ebc2"}.codicon-workspace-unknown:before{content:"\ebc3"}.codicon-terminal-cmd:before{content:"\ebc4"}.codicon-terminal-debian:before{content:"\ebc5"}.codicon-terminal-linux:before{content:"\ebc6"}.codicon-terminal-powershell:before{content:"\ebc7"}.codicon-terminal-tmux:before{content:"\ebc8"}.codicon-terminal-ubuntu:before{content:"\ebc9"}.codicon-terminal-bash:before{content:"\ebca"}.codicon-arrow-swap:before{content:"\ebcb"}.codicon-copy:before{content:"\ebcc"}.codicon-person-add:before{content:"\ebcd"}.codicon-filter-filled:before{content:"\ebce"}.codicon-wand:before{content:"\ebcf"}.codicon-debug-line-by-line:before{content:"\ebd0"} +/*# sourceMappingURL=/sm/47c7ce03f4cac9715a318ba6ea5c13243805f44c191b161889f343f193aee1e3.map */ \ No newline at end of file diff --git a/docs/theme/css/codicon.ttf b/docs/theme/css/codicon.ttf new file mode 100644 index 0000000..807c949 Binary files /dev/null and b/docs/theme/css/codicon.ttf differ diff --git a/docs/theme/css/extra.css b/docs/theme/css/extra.css new file mode 100644 index 0000000..0842339 --- /dev/null +++ b/docs/theme/css/extra.css @@ -0,0 +1,33 @@ +.clipboard { + position: relative; + display: block; + float: right; + right: 29px; + line-height: 0px; + width: 0px; + top: 10px; + font-size: x-small; + cursor: pointer; + color: rgb(0,0,0,0.5); +} + +.header-link span.btn-clipboard-link { + display: none; +} + +.header-link:hover span.btn-clipboard-link { + display: inline; +} + +.clipboard:hover { + color: var(--md-accent-fg-color); + transition: color 125ms; +} + +.btn-clipboard-link{ + margin-left: 5px; + cursor: pointer; + color: rgb(0,0,0,0.5); + +} + diff --git a/docs/theme/js/clipboard.min.js b/docs/theme/js/clipboard.min.js new file mode 100644 index 0000000..1103f81 --- /dev/null +++ b/docs/theme/js/clipboard.min.js @@ -0,0 +1,7 @@ +/*! + * clipboard.js v2.0.11 + * https://clipboardjs.com/ + * + * Licensed MIT © Zeno Rocha + */ +!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.ClipboardJS=e():t.ClipboardJS=e()}(this,function(){return n={686:function(t,e,n){"use strict";n.d(e,{default:function(){return b}});var e=n(279),i=n.n(e),e=n(370),u=n.n(e),e=n(817),r=n.n(e);function c(t){try{return document.execCommand(t)}catch(t){return}}var a=function(t){t=r()(t);return c("cut"),t};function o(t,e){var n,o,t=(n=t,o="rtl"===document.documentElement.getAttribute("dir"),(t=document.createElement("textarea")).style.fontSize="12pt",t.style.border="0",t.style.padding="0",t.style.margin="0",t.style.position="absolute",t.style[o?"right":"left"]="-9999px",o=window.pageYOffset||document.documentElement.scrollTop,t.style.top="".concat(o,"px"),t.setAttribute("readonly",""),t.value=n,t);return e.container.appendChild(t),e=r()(t),c("copy"),t.remove(),e}var f=function(t){var e=10&&s(a.width)/e.offsetWidth||1,p=e.offsetHeight>0&&s(a.height)/e.offsetHeight||1);var u=(n(e)?t(e):window).visualViewport,l=!c()&&i,d=(a.left+(l&&u?u.offsetLeft:0))/f,h=(a.top+(l&&u?u.offsetTop:0))/p,m=a.width/f,v=a.height/p;return{width:m,height:v,top:h,right:d+m,bottom:h+v,left:d,x:d,y:h}}function u(e){var n=t(e);return{scrollLeft:n.pageXOffset,scrollTop:n.pageYOffset}}function l(e){return e?(e.nodeName||"").toLowerCase():null}function d(e){return((n(e)?e.ownerDocument:e.document)||window.document).documentElement}function h(e){return p(d(e)).left+u(e).scrollLeft}function m(e){return t(e).getComputedStyle(e)}function v(e){var t=m(e),n=t.overflow,r=t.overflowX,o=t.overflowY;return/auto|scroll|overlay|hidden/.test(n+o+r)}function y(e,n,o){void 0===o&&(o=!1);var i,a,f=r(n),c=r(n)&&function(e){var t=e.getBoundingClientRect(),n=s(t.width)/e.offsetWidth||1,r=s(t.height)/e.offsetHeight||1;return 1!==n||1!==r}(n),m=d(n),y=p(e,c,o),g={scrollLeft:0,scrollTop:0},b={x:0,y:0};return(f||!f&&!o)&&(("body"!==l(n)||v(m))&&(g=(i=n)!==t(i)&&r(i)?{scrollLeft:(a=i).scrollLeft,scrollTop:a.scrollTop}:u(i)),r(n)?((b=p(n,!0)).x+=n.clientLeft,b.y+=n.clientTop):m&&(b.x=h(m))),{x:y.left+g.scrollLeft-b.x,y:y.top+g.scrollTop-b.y,width:y.width,height:y.height}}function g(e){var t=p(e),n=e.offsetWidth,r=e.offsetHeight;return Math.abs(t.width-n)<=1&&(n=t.width),Math.abs(t.height-r)<=1&&(r=t.height),{x:e.offsetLeft,y:e.offsetTop,width:n,height:r}}function b(e){return"html"===l(e)?e:e.assignedSlot||e.parentNode||(o(e)?e.host:null)||d(e)}function x(e){return["html","body","#document"].indexOf(l(e))>=0?e.ownerDocument.body:r(e)&&v(e)?e:x(b(e))}function w(e,n){var r;void 0===n&&(n=[]);var o=x(e),i=o===(null==(r=e.ownerDocument)?void 0:r.body),a=t(o),s=i?[a].concat(a.visualViewport||[],v(o)?o:[]):o,f=n.concat(s);return i?f:f.concat(w(b(s)))}function O(e){return["table","td","th"].indexOf(l(e))>=0}function j(e){return r(e)&&"fixed"!==m(e).position?e.offsetParent:null}function E(e){for(var n=t(e),i=j(e);i&&O(i)&&"static"===m(i).position;)i=j(i);return i&&("html"===l(i)||"body"===l(i)&&"static"===m(i).position)?n:i||function(e){var t=/firefox/i.test(f());if(/Trident/i.test(f())&&r(e)&&"fixed"===m(e).position)return null;var n=b(e);for(o(n)&&(n=n.host);r(n)&&["html","body"].indexOf(l(n))<0;){var i=m(n);if("none"!==i.transform||"none"!==i.perspective||"paint"===i.contain||-1!==["transform","perspective"].indexOf(i.willChange)||t&&"filter"===i.willChange||t&&i.filter&&"none"!==i.filter)return n;n=n.parentNode}return null}(e)||n}var D="top",A="bottom",L="right",P="left",M="auto",k=[D,A,L,P],W="start",B="end",H="viewport",T="popper",R=k.reduce((function(e,t){return e.concat([t+"-"+W,t+"-"+B])}),[]),S=[].concat(k,[M]).reduce((function(e,t){return e.concat([t,t+"-"+W,t+"-"+B])}),[]),V=["beforeRead","read","afterRead","beforeMain","main","afterMain","beforeWrite","write","afterWrite"];function q(e){var t=new Map,n=new Set,r=[];function o(e){n.add(e.name),[].concat(e.requires||[],e.requiresIfExists||[]).forEach((function(e){if(!n.has(e)){var r=t.get(e);r&&o(r)}})),r.push(e)}return e.forEach((function(e){t.set(e.name,e)})),e.forEach((function(e){n.has(e.name)||o(e)})),r}function C(e,t){var n=t.getRootNode&&t.getRootNode();if(e.contains(t))return!0;if(n&&o(n)){var r=t;do{if(r&&e.isSameNode(r))return!0;r=r.parentNode||r.host}while(r)}return!1}function N(e){return Object.assign({},e,{left:e.x,top:e.y,right:e.x+e.width,bottom:e.y+e.height})}function I(e,r,o){return r===H?N(function(e,n){var r=t(e),o=d(e),i=r.visualViewport,a=o.clientWidth,s=o.clientHeight,f=0,p=0;if(i){a=i.width,s=i.height;var u=c();(u||!u&&"fixed"===n)&&(f=i.offsetLeft,p=i.offsetTop)}return{width:a,height:s,x:f+h(e),y:p}}(e,o)):n(r)?function(e,t){var n=p(e,!1,"fixed"===t);return n.top=n.top+e.clientTop,n.left=n.left+e.clientLeft,n.bottom=n.top+e.clientHeight,n.right=n.left+e.clientWidth,n.width=e.clientWidth,n.height=e.clientHeight,n.x=n.left,n.y=n.top,n}(r,o):N(function(e){var t,n=d(e),r=u(e),o=null==(t=e.ownerDocument)?void 0:t.body,a=i(n.scrollWidth,n.clientWidth,o?o.scrollWidth:0,o?o.clientWidth:0),s=i(n.scrollHeight,n.clientHeight,o?o.scrollHeight:0,o?o.clientHeight:0),f=-r.scrollLeft+h(e),c=-r.scrollTop;return"rtl"===m(o||n).direction&&(f+=i(n.clientWidth,o?o.clientWidth:0)-a),{width:a,height:s,x:f,y:c}}(d(e)))}function _(e,t,o,s){var f="clippingParents"===t?function(e){var t=w(b(e)),o=["absolute","fixed"].indexOf(m(e).position)>=0&&r(e)?E(e):e;return n(o)?t.filter((function(e){return n(e)&&C(e,o)&&"body"!==l(e)})):[]}(e):[].concat(t),c=[].concat(f,[o]),p=c[0],u=c.reduce((function(t,n){var r=I(e,n,s);return t.top=i(r.top,t.top),t.right=a(r.right,t.right),t.bottom=a(r.bottom,t.bottom),t.left=i(r.left,t.left),t}),I(e,p,s));return u.width=u.right-u.left,u.height=u.bottom-u.top,u.x=u.left,u.y=u.top,u}function F(e){return e.split("-")[0]}function U(e){return e.split("-")[1]}function z(e){return["top","bottom"].indexOf(e)>=0?"x":"y"}function X(e){var t,n=e.reference,r=e.element,o=e.placement,i=o?F(o):null,a=o?U(o):null,s=n.x+n.width/2-r.width/2,f=n.y+n.height/2-r.height/2;switch(i){case D:t={x:s,y:n.y-r.height};break;case A:t={x:s,y:n.y+n.height};break;case L:t={x:n.x+n.width,y:f};break;case P:t={x:n.x-r.width,y:f};break;default:t={x:n.x,y:n.y}}var c=i?z(i):null;if(null!=c){var p="y"===c?"height":"width";switch(a){case W:t[c]=t[c]-(n[p]/2-r[p]/2);break;case B:t[c]=t[c]+(n[p]/2-r[p]/2)}}return t}function Y(e){return Object.assign({},{top:0,right:0,bottom:0,left:0},e)}function G(e,t){return t.reduce((function(t,n){return t[n]=e,t}),{})}function J(e,t){void 0===t&&(t={});var r=t,o=r.placement,i=void 0===o?e.placement:o,a=r.strategy,s=void 0===a?e.strategy:a,f=r.boundary,c=void 0===f?"clippingParents":f,u=r.rootBoundary,l=void 0===u?H:u,h=r.elementContext,m=void 0===h?T:h,v=r.altBoundary,y=void 0!==v&&v,g=r.padding,b=void 0===g?0:g,x=Y("number"!=typeof b?b:G(b,k)),w=m===T?"reference":T,O=e.rects.popper,j=e.elements[y?w:m],E=_(n(j)?j:j.contextElement||d(e.elements.popper),c,l,s),P=p(e.elements.reference),M=X({reference:P,element:O,strategy:"absolute",placement:i}),W=N(Object.assign({},O,M)),B=m===T?W:P,R={top:E.top-B.top+x.top,bottom:B.bottom-E.bottom+x.bottom,left:E.left-B.left+x.left,right:B.right-E.right+x.right},S=e.modifiersData.offset;if(m===T&&S){var V=S[i];Object.keys(R).forEach((function(e){var t=[L,A].indexOf(e)>=0?1:-1,n=[D,A].indexOf(e)>=0?"y":"x";R[e]+=V[n]*t}))}return R}var K={placement:"bottom",modifiers:[],strategy:"absolute"};function Q(){for(var e=arguments.length,t=new Array(e),n=0;n=0?-1:1,i="function"==typeof n?n(Object.assign({},t,{placement:e})):n,a=i[0],s=i[1];return a=a||0,s=(s||0)*o,[P,L].indexOf(r)>=0?{x:s,y:a}:{x:a,y:s}}(n,t.rects,i),e}),{}),s=a[t.placement],f=s.x,c=s.y;null!=t.modifiersData.popperOffsets&&(t.modifiersData.popperOffsets.x+=f,t.modifiersData.popperOffsets.y+=c),t.modifiersData[r]=a}},se={left:"right",right:"left",bottom:"top",top:"bottom"};function fe(e){return e.replace(/left|right|bottom|top/g,(function(e){return se[e]}))}var ce={start:"end",end:"start"};function pe(e){return e.replace(/start|end/g,(function(e){return ce[e]}))}function ue(e,t){void 0===t&&(t={});var n=t,r=n.placement,o=n.boundary,i=n.rootBoundary,a=n.padding,s=n.flipVariations,f=n.allowedAutoPlacements,c=void 0===f?S:f,p=U(r),u=p?s?R:R.filter((function(e){return U(e)===p})):k,l=u.filter((function(e){return c.indexOf(e)>=0}));0===l.length&&(l=u);var d=l.reduce((function(t,n){return t[n]=J(e,{placement:n,boundary:o,rootBoundary:i,padding:a})[F(n)],t}),{});return Object.keys(d).sort((function(e,t){return d[e]-d[t]}))}var le={name:"flip",enabled:!0,phase:"main",fn:function(e){var t=e.state,n=e.options,r=e.name;if(!t.modifiersData[r]._skip){for(var o=n.mainAxis,i=void 0===o||o,a=n.altAxis,s=void 0===a||a,f=n.fallbackPlacements,c=n.padding,p=n.boundary,u=n.rootBoundary,l=n.altBoundary,d=n.flipVariations,h=void 0===d||d,m=n.allowedAutoPlacements,v=t.options.placement,y=F(v),g=f||(y===v||!h?[fe(v)]:function(e){if(F(e)===M)return[];var t=fe(e);return[pe(e),t,pe(t)]}(v)),b=[v].concat(g).reduce((function(e,n){return e.concat(F(n)===M?ue(t,{placement:n,boundary:p,rootBoundary:u,padding:c,flipVariations:h,allowedAutoPlacements:m}):n)}),[]),x=t.rects.reference,w=t.rects.popper,O=new Map,j=!0,E=b[0],k=0;k=0,S=R?"width":"height",V=J(t,{placement:B,boundary:p,rootBoundary:u,altBoundary:l,padding:c}),q=R?T?L:P:T?A:D;x[S]>w[S]&&(q=fe(q));var C=fe(q),N=[];if(i&&N.push(V[H]<=0),s&&N.push(V[q]<=0,V[C]<=0),N.every((function(e){return e}))){E=B,j=!1;break}O.set(B,N)}if(j)for(var I=function(e){var t=b.find((function(t){var n=O.get(t);if(n)return n.slice(0,e).every((function(e){return e}))}));if(t)return E=t,"break"},_=h?3:1;_>0;_--){if("break"===I(_))break}t.placement!==E&&(t.modifiersData[r]._skip=!0,t.placement=E,t.reset=!0)}},requiresIfExists:["offset"],data:{_skip:!1}};function de(e,t,n){return i(e,a(t,n))}var he={name:"preventOverflow",enabled:!0,phase:"main",fn:function(e){var t=e.state,n=e.options,r=e.name,o=n.mainAxis,s=void 0===o||o,f=n.altAxis,c=void 0!==f&&f,p=n.boundary,u=n.rootBoundary,l=n.altBoundary,d=n.padding,h=n.tether,m=void 0===h||h,v=n.tetherOffset,y=void 0===v?0:v,b=J(t,{boundary:p,rootBoundary:u,padding:d,altBoundary:l}),x=F(t.placement),w=U(t.placement),O=!w,j=z(x),M="x"===j?"y":"x",k=t.modifiersData.popperOffsets,B=t.rects.reference,H=t.rects.popper,T="function"==typeof y?y(Object.assign({},t.rects,{placement:t.placement})):y,R="number"==typeof T?{mainAxis:T,altAxis:T}:Object.assign({mainAxis:0,altAxis:0},T),S=t.modifiersData.offset?t.modifiersData.offset[t.placement]:null,V={x:0,y:0};if(k){if(s){var q,C="y"===j?D:P,N="y"===j?A:L,I="y"===j?"height":"width",_=k[j],X=_+b[C],Y=_-b[N],G=m?-H[I]/2:0,K=w===W?B[I]:H[I],Q=w===W?-H[I]:-B[I],Z=t.elements.arrow,$=m&&Z?g(Z):{width:0,height:0},ee=t.modifiersData["arrow#persistent"]?t.modifiersData["arrow#persistent"].padding:{top:0,right:0,bottom:0,left:0},te=ee[C],ne=ee[N],re=de(0,B[I],$[I]),oe=O?B[I]/2-G-re-te-R.mainAxis:K-re-te-R.mainAxis,ie=O?-B[I]/2+G+re+ne+R.mainAxis:Q+re+ne+R.mainAxis,ae=t.elements.arrow&&E(t.elements.arrow),se=ae?"y"===j?ae.clientTop||0:ae.clientLeft||0:0,fe=null!=(q=null==S?void 0:S[j])?q:0,ce=_+ie-fe,pe=de(m?a(X,_+oe-fe-se):X,_,m?i(Y,ce):Y);k[j]=pe,V[j]=pe-_}if(c){var ue,le="x"===j?D:P,he="x"===j?A:L,me=k[M],ve="y"===M?"height":"width",ye=me+b[le],ge=me-b[he],be=-1!==[D,P].indexOf(x),xe=null!=(ue=null==S?void 0:S[M])?ue:0,we=be?ye:me-B[ve]-H[ve]-xe+R.altAxis,Oe=be?me+B[ve]+H[ve]-xe-R.altAxis:ge,je=m&&be?function(e,t,n){var r=de(e,t,n);return r>n?n:r}(we,me,Oe):de(m?we:ye,me,m?Oe:ge);k[M]=je,V[M]=je-me}t.modifiersData[r]=V}},requiresIfExists:["offset"]};var me={name:"arrow",enabled:!0,phase:"main",fn:function(e){var t,n=e.state,r=e.name,o=e.options,i=n.elements.arrow,a=n.modifiersData.popperOffsets,s=F(n.placement),f=z(s),c=[P,L].indexOf(s)>=0?"height":"width";if(i&&a){var p=function(e,t){return Y("number"!=typeof(e="function"==typeof e?e(Object.assign({},t.rects,{placement:t.placement})):e)?e:G(e,k))}(o.padding,n),u=g(i),l="y"===f?D:P,d="y"===f?A:L,h=n.rects.reference[c]+n.rects.reference[f]-a[f]-n.rects.popper[c],m=a[f]-n.rects.reference[f],v=E(i),y=v?"y"===f?v.clientHeight||0:v.clientWidth||0:0,b=h/2-m/2,x=p[l],w=y-u[c]-p[d],O=y/2-u[c]/2+b,j=de(x,O,w),M=f;n.modifiersData[r]=((t={})[M]=j,t.centerOffset=j-O,t)}},effect:function(e){var t=e.state,n=e.options.element,r=void 0===n?"[data-popper-arrow]":n;null!=r&&("string"!=typeof r||(r=t.elements.popper.querySelector(r)))&&C(t.elements.popper,r)&&(t.elements.arrow=r)},requires:["popperOffsets"],requiresIfExists:["preventOverflow"]};function ve(e,t,n){return void 0===n&&(n={x:0,y:0}),{top:e.top-t.height-n.y,right:e.right-t.width+n.x,bottom:e.bottom-t.height+n.y,left:e.left-t.width-n.x}}function ye(e){return[D,L,A,P].some((function(t){return e[t]>=0}))}var ge={name:"hide",enabled:!0,phase:"main",requiresIfExists:["preventOverflow"],fn:function(e){var t=e.state,n=e.name,r=t.rects.reference,o=t.rects.popper,i=t.modifiersData.preventOverflow,a=J(t,{elementContext:"reference"}),s=J(t,{altBoundary:!0}),f=ve(a,r),c=ve(s,o,i),p=ye(f),u=ye(c);t.modifiersData[n]={referenceClippingOffsets:f,popperEscapeOffsets:c,isReferenceHidden:p,hasPopperEscaped:u},t.attributes.popper=Object.assign({},t.attributes.popper,{"data-popper-reference-hidden":p,"data-popper-escaped":u})}},be=Z({defaultModifiers:[ee,te,oe,ie]}),xe=[ee,te,oe,ie,ae,le,he,me,ge],we=Z({defaultModifiers:xe});e.applyStyles=ie,e.arrow=me,e.computeStyles=oe,e.createPopper=we,e.createPopperLite=be,e.defaultModifiers=xe,e.detectOverflow=J,e.eventListeners=ee,e.flip=le,e.hide=ge,e.offset=ae,e.popperGenerator=Z,e.popperOffsets=te,e.preventOverflow=he,Object.defineProperty(e,"__esModule",{value:!0})})); +//# sourceMappingURL=popper.min.js.map diff --git a/docs/theme/js/tippy-bundle.umd.min.js b/docs/theme/js/tippy-bundle.umd.min.js new file mode 100644 index 0000000..9f4f8bc --- /dev/null +++ b/docs/theme/js/tippy-bundle.umd.min.js @@ -0,0 +1,2 @@ +!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e(require("@popperjs/core")):"function"==typeof define&&define.amd?define(["@popperjs/core"],e):(t=t||self).tippy=e(t.Popper)}(this,(function(t){"use strict";var e="undefined"!=typeof window&&"undefined"!=typeof document,n=!!e&&!!window.msCrypto,r={passive:!0,capture:!0},o=function(){return document.body};function i(t,e,n){if(Array.isArray(t)){var r=t[e];return null==r?Array.isArray(n)?n[e]:n:r}return t}function a(t,e){var n={}.toString.call(t);return 0===n.indexOf("[object")&&n.indexOf(e+"]")>-1}function s(t,e){return"function"==typeof t?t.apply(void 0,e):t}function u(t,e){return 0===e?t:function(r){clearTimeout(n),n=setTimeout((function(){t(r)}),e)};var n}function p(t,e){var n=Object.assign({},t);return e.forEach((function(t){delete n[t]})),n}function c(t){return[].concat(t)}function f(t,e){-1===t.indexOf(e)&&t.push(e)}function l(t){return t.split("-")[0]}function d(t){return[].slice.call(t)}function v(t){return Object.keys(t).reduce((function(e,n){return void 0!==t[n]&&(e[n]=t[n]),e}),{})}function m(){return document.createElement("div")}function g(t){return["Element","Fragment"].some((function(e){return a(t,e)}))}function h(t){return a(t,"MouseEvent")}function b(t){return!(!t||!t._tippy||t._tippy.reference!==t)}function y(t){return g(t)?[t]:function(t){return a(t,"NodeList")}(t)?d(t):Array.isArray(t)?t:d(document.querySelectorAll(t))}function w(t,e){t.forEach((function(t){t&&(t.style.transitionDuration=e+"ms")}))}function x(t,e){t.forEach((function(t){t&&t.setAttribute("data-state",e)}))}function E(t){var e,n=c(t)[0];return null!=n&&null!=(e=n.ownerDocument)&&e.body?n.ownerDocument:document}function O(t,e,n){var r=e+"EventListener";["transitionend","webkitTransitionEnd"].forEach((function(e){t[r](e,n)}))}function C(t,e){for(var n=e;n;){var r;if(t.contains(n))return!0;n=null==n.getRootNode||null==(r=n.getRootNode())?void 0:r.host}return!1}var T={isTouch:!1},A=0;function L(){T.isTouch||(T.isTouch=!0,window.performance&&document.addEventListener("mousemove",D))}function D(){var t=performance.now();t-A<20&&(T.isTouch=!1,document.removeEventListener("mousemove",D)),A=t}function k(){var t=document.activeElement;if(b(t)){var e=t._tippy;t.blur&&!e.state.isVisible&&t.blur()}}var R=Object.assign({appendTo:o,aria:{content:"auto",expanded:"auto"},delay:0,duration:[300,250],getReferenceClientRect:null,hideOnClick:!0,ignoreAttributes:!1,interactive:!1,interactiveBorder:2,interactiveDebounce:0,moveTransition:"",offset:[0,10],onAfterUpdate:function(){},onBeforeUpdate:function(){},onCreate:function(){},onDestroy:function(){},onHidden:function(){},onHide:function(){},onMount:function(){},onShow:function(){},onShown:function(){},onTrigger:function(){},onUntrigger:function(){},onClickOutside:function(){},placement:"top",plugins:[],popperOptions:{},render:null,showOnCreate:!1,touch:!0,trigger:"mouseenter focus",triggerTarget:null},{animateFill:!1,followCursor:!1,inlinePositioning:!1,sticky:!1},{allowHTML:!1,animation:"fade",arrow:!0,content:"",inertia:!1,maxWidth:350,role:"tooltip",theme:"",zIndex:9999}),P=Object.keys(R);function j(t){var e=(t.plugins||[]).reduce((function(e,n){var r,o=n.name,i=n.defaultValue;o&&(e[o]=void 0!==t[o]?t[o]:null!=(r=R[o])?r:i);return e}),{});return Object.assign({},t,e)}function M(t,e){var n=Object.assign({},e,{content:s(e.content,[t])},e.ignoreAttributes?{}:function(t,e){return(e?Object.keys(j(Object.assign({},R,{plugins:e}))):P).reduce((function(e,n){var r=(t.getAttribute("data-tippy-"+n)||"").trim();if(!r)return e;if("content"===n)e[n]=r;else try{e[n]=JSON.parse(r)}catch(t){e[n]=r}return e}),{})}(t,e.plugins));return n.aria=Object.assign({},R.aria,n.aria),n.aria={expanded:"auto"===n.aria.expanded?e.interactive:n.aria.expanded,content:"auto"===n.aria.content?e.interactive?null:"describedby":n.aria.content},n}function V(t,e){t.innerHTML=e}function I(t){var e=m();return!0===t?e.className="tippy-arrow":(e.className="tippy-svg-arrow",g(t)?e.appendChild(t):V(e,t)),e}function S(t,e){g(e.content)?(V(t,""),t.appendChild(e.content)):"function"!=typeof e.content&&(e.allowHTML?V(t,e.content):t.textContent=e.content)}function B(t){var e=t.firstElementChild,n=d(e.children);return{box:e,content:n.find((function(t){return t.classList.contains("tippy-content")})),arrow:n.find((function(t){return t.classList.contains("tippy-arrow")||t.classList.contains("tippy-svg-arrow")})),backdrop:n.find((function(t){return t.classList.contains("tippy-backdrop")}))}}function N(t){var e=m(),n=m();n.className="tippy-box",n.setAttribute("data-state","hidden"),n.setAttribute("tabindex","-1");var r=m();function o(n,r){var o=B(e),i=o.box,a=o.content,s=o.arrow;r.theme?i.setAttribute("data-theme",r.theme):i.removeAttribute("data-theme"),"string"==typeof r.animation?i.setAttribute("data-animation",r.animation):i.removeAttribute("data-animation"),r.inertia?i.setAttribute("data-inertia",""):i.removeAttribute("data-inertia"),i.style.maxWidth="number"==typeof r.maxWidth?r.maxWidth+"px":r.maxWidth,r.role?i.setAttribute("role",r.role):i.removeAttribute("role"),n.content===r.content&&n.allowHTML===r.allowHTML||S(a,t.props),r.arrow?s?n.arrow!==r.arrow&&(i.removeChild(s),i.appendChild(I(r.arrow))):i.appendChild(I(r.arrow)):s&&i.removeChild(s)}return r.className="tippy-content",r.setAttribute("data-state","hidden"),S(r,t.props),e.appendChild(n),n.appendChild(r),o(t.props,t.props),{popper:e,onUpdate:o}}N.$$tippy=!0;var H=1,U=[],_=[];function z(e,a){var p,g,b,y,A,L,D,k,P=M(e,Object.assign({},R,j(v(a)))),V=!1,I=!1,S=!1,N=!1,z=[],F=u(wt,P.interactiveDebounce),W=H++,X=(k=P.plugins).filter((function(t,e){return k.indexOf(t)===e})),Y={id:W,reference:e,popper:m(),popperInstance:null,props:P,state:{isEnabled:!0,isVisible:!1,isDestroyed:!1,isMounted:!1,isShown:!1},plugins:X,clearDelayTimeouts:function(){clearTimeout(p),clearTimeout(g),cancelAnimationFrame(b)},setProps:function(t){if(Y.state.isDestroyed)return;at("onBeforeUpdate",[Y,t]),bt();var n=Y.props,r=M(e,Object.assign({},n,v(t),{ignoreAttributes:!0}));Y.props=r,ht(),n.interactiveDebounce!==r.interactiveDebounce&&(pt(),F=u(wt,r.interactiveDebounce));n.triggerTarget&&!r.triggerTarget?c(n.triggerTarget).forEach((function(t){t.removeAttribute("aria-expanded")})):r.triggerTarget&&e.removeAttribute("aria-expanded");ut(),it(),J&&J(n,r);Y.popperInstance&&(Ct(),At().forEach((function(t){requestAnimationFrame(t._tippy.popperInstance.forceUpdate)})));at("onAfterUpdate",[Y,t])},setContent:function(t){Y.setProps({content:t})},show:function(){var t=Y.state.isVisible,e=Y.state.isDestroyed,n=!Y.state.isEnabled,r=T.isTouch&&!Y.props.touch,a=i(Y.props.duration,0,R.duration);if(t||e||n||r)return;if(et().hasAttribute("disabled"))return;if(at("onShow",[Y],!1),!1===Y.props.onShow(Y))return;Y.state.isVisible=!0,tt()&&($.style.visibility="visible");it(),dt(),Y.state.isMounted||($.style.transition="none");if(tt()){var u=rt(),p=u.box,c=u.content;w([p,c],0)}L=function(){var t;if(Y.state.isVisible&&!N){if(N=!0,$.offsetHeight,$.style.transition=Y.props.moveTransition,tt()&&Y.props.animation){var e=rt(),n=e.box,r=e.content;w([n,r],a),x([n,r],"visible")}st(),ut(),f(_,Y),null==(t=Y.popperInstance)||t.forceUpdate(),at("onMount",[Y]),Y.props.animation&&tt()&&function(t,e){mt(t,e)}(a,(function(){Y.state.isShown=!0,at("onShown",[Y])}))}},function(){var t,e=Y.props.appendTo,n=et();t=Y.props.interactive&&e===o||"parent"===e?n.parentNode:s(e,[n]);t.contains($)||t.appendChild($);Y.state.isMounted=!0,Ct()}()},hide:function(){var t=!Y.state.isVisible,e=Y.state.isDestroyed,n=!Y.state.isEnabled,r=i(Y.props.duration,1,R.duration);if(t||e||n)return;if(at("onHide",[Y],!1),!1===Y.props.onHide(Y))return;Y.state.isVisible=!1,Y.state.isShown=!1,N=!1,V=!1,tt()&&($.style.visibility="hidden");if(pt(),vt(),it(!0),tt()){var o=rt(),a=o.box,s=o.content;Y.props.animation&&(w([a,s],r),x([a,s],"hidden"))}st(),ut(),Y.props.animation?tt()&&function(t,e){mt(t,(function(){!Y.state.isVisible&&$.parentNode&&$.parentNode.contains($)&&e()}))}(r,Y.unmount):Y.unmount()},hideWithInteractivity:function(t){nt().addEventListener("mousemove",F),f(U,F),F(t)},enable:function(){Y.state.isEnabled=!0},disable:function(){Y.hide(),Y.state.isEnabled=!1},unmount:function(){Y.state.isVisible&&Y.hide();if(!Y.state.isMounted)return;Tt(),At().forEach((function(t){t._tippy.unmount()})),$.parentNode&&$.parentNode.removeChild($);_=_.filter((function(t){return t!==Y})),Y.state.isMounted=!1,at("onHidden",[Y])},destroy:function(){if(Y.state.isDestroyed)return;Y.clearDelayTimeouts(),Y.unmount(),bt(),delete e._tippy,Y.state.isDestroyed=!0,at("onDestroy",[Y])}};if(!P.render)return Y;var q=P.render(Y),$=q.popper,J=q.onUpdate;$.setAttribute("data-tippy-root",""),$.id="tippy-"+Y.id,Y.popper=$,e._tippy=Y,$._tippy=Y;var G=X.map((function(t){return t.fn(Y)})),K=e.hasAttribute("aria-expanded");return ht(),ut(),it(),at("onCreate",[Y]),P.showOnCreate&&Lt(),$.addEventListener("mouseenter",(function(){Y.props.interactive&&Y.state.isVisible&&Y.clearDelayTimeouts()})),$.addEventListener("mouseleave",(function(){Y.props.interactive&&Y.props.trigger.indexOf("mouseenter")>=0&&nt().addEventListener("mousemove",F)})),Y;function Q(){var t=Y.props.touch;return Array.isArray(t)?t:[t,0]}function Z(){return"hold"===Q()[0]}function tt(){var t;return!(null==(t=Y.props.render)||!t.$$tippy)}function et(){return D||e}function nt(){var t=et().parentNode;return t?E(t):document}function rt(){return B($)}function ot(t){return Y.state.isMounted&&!Y.state.isVisible||T.isTouch||y&&"focus"===y.type?0:i(Y.props.delay,t?0:1,R.delay)}function it(t){void 0===t&&(t=!1),$.style.pointerEvents=Y.props.interactive&&!t?"":"none",$.style.zIndex=""+Y.props.zIndex}function at(t,e,n){var r;(void 0===n&&(n=!0),G.forEach((function(n){n[t]&&n[t].apply(n,e)})),n)&&(r=Y.props)[t].apply(r,e)}function st(){var t=Y.props.aria;if(t.content){var n="aria-"+t.content,r=$.id;c(Y.props.triggerTarget||e).forEach((function(t){var e=t.getAttribute(n);if(Y.state.isVisible)t.setAttribute(n,e?e+" "+r:r);else{var o=e&&e.replace(r,"").trim();o?t.setAttribute(n,o):t.removeAttribute(n)}}))}}function ut(){!K&&Y.props.aria.expanded&&c(Y.props.triggerTarget||e).forEach((function(t){Y.props.interactive?t.setAttribute("aria-expanded",Y.state.isVisible&&t===et()?"true":"false"):t.removeAttribute("aria-expanded")}))}function pt(){nt().removeEventListener("mousemove",F),U=U.filter((function(t){return t!==F}))}function ct(t){if(!T.isTouch||!S&&"mousedown"!==t.type){var n=t.composedPath&&t.composedPath()[0]||t.target;if(!Y.props.interactive||!C($,n)){if(c(Y.props.triggerTarget||e).some((function(t){return C(t,n)}))){if(T.isTouch)return;if(Y.state.isVisible&&Y.props.trigger.indexOf("click")>=0)return}else at("onClickOutside",[Y,t]);!0===Y.props.hideOnClick&&(Y.clearDelayTimeouts(),Y.hide(),I=!0,setTimeout((function(){I=!1})),Y.state.isMounted||vt())}}}function ft(){S=!0}function lt(){S=!1}function dt(){var t=nt();t.addEventListener("mousedown",ct,!0),t.addEventListener("touchend",ct,r),t.addEventListener("touchstart",lt,r),t.addEventListener("touchmove",ft,r)}function vt(){var t=nt();t.removeEventListener("mousedown",ct,!0),t.removeEventListener("touchend",ct,r),t.removeEventListener("touchstart",lt,r),t.removeEventListener("touchmove",ft,r)}function mt(t,e){var n=rt().box;function r(t){t.target===n&&(O(n,"remove",r),e())}if(0===t)return e();O(n,"remove",A),O(n,"add",r),A=r}function gt(t,n,r){void 0===r&&(r=!1),c(Y.props.triggerTarget||e).forEach((function(e){e.addEventListener(t,n,r),z.push({node:e,eventType:t,handler:n,options:r})}))}function ht(){var t;Z()&&(gt("touchstart",yt,{passive:!0}),gt("touchend",xt,{passive:!0})),(t=Y.props.trigger,t.split(/\s+/).filter(Boolean)).forEach((function(t){if("manual"!==t)switch(gt(t,yt),t){case"mouseenter":gt("mouseleave",xt);break;case"focus":gt(n?"focusout":"blur",Et);break;case"focusin":gt("focusout",Et)}}))}function bt(){z.forEach((function(t){var e=t.node,n=t.eventType,r=t.handler,o=t.options;e.removeEventListener(n,r,o)})),z=[]}function yt(t){var e,n=!1;if(Y.state.isEnabled&&!Ot(t)&&!I){var r="focus"===(null==(e=y)?void 0:e.type);y=t,D=t.currentTarget,ut(),!Y.state.isVisible&&h(t)&&U.forEach((function(e){return e(t)})),"click"===t.type&&(Y.props.trigger.indexOf("mouseenter")<0||V)&&!1!==Y.props.hideOnClick&&Y.state.isVisible?n=!0:Lt(t),"click"===t.type&&(V=!n),n&&!r&&Dt(t)}}function wt(t){var e=t.target,n=et().contains(e)||$.contains(e);"mousemove"===t.type&&n||function(t,e){var n=e.clientX,r=e.clientY;return t.every((function(t){var e=t.popperRect,o=t.popperState,i=t.props.interactiveBorder,a=l(o.placement),s=o.modifiersData.offset;if(!s)return!0;var u="bottom"===a?s.top.y:0,p="top"===a?s.bottom.y:0,c="right"===a?s.left.x:0,f="left"===a?s.right.x:0,d=e.top-r+u>i,v=r-e.bottom-p>i,m=e.left-n+c>i,g=n-e.right-f>i;return d||v||m||g}))}(At().concat($).map((function(t){var e,n=null==(e=t._tippy.popperInstance)?void 0:e.state;return n?{popperRect:t.getBoundingClientRect(),popperState:n,props:P}:null})).filter(Boolean),t)&&(pt(),Dt(t))}function xt(t){Ot(t)||Y.props.trigger.indexOf("click")>=0&&V||(Y.props.interactive?Y.hideWithInteractivity(t):Dt(t))}function Et(t){Y.props.trigger.indexOf("focusin")<0&&t.target!==et()||Y.props.interactive&&t.relatedTarget&&$.contains(t.relatedTarget)||Dt(t)}function Ot(t){return!!T.isTouch&&Z()!==t.type.indexOf("touch")>=0}function Ct(){Tt();var n=Y.props,r=n.popperOptions,o=n.placement,i=n.offset,a=n.getReferenceClientRect,s=n.moveTransition,u=tt()?B($).arrow:null,p=a?{getBoundingClientRect:a,contextElement:a.contextElement||et()}:e,c=[{name:"offset",options:{offset:i}},{name:"preventOverflow",options:{padding:{top:2,bottom:2,left:5,right:5}}},{name:"flip",options:{padding:5}},{name:"computeStyles",options:{adaptive:!s}},{name:"$$tippy",enabled:!0,phase:"beforeWrite",requires:["computeStyles"],fn:function(t){var e=t.state;if(tt()){var n=rt().box;["placement","reference-hidden","escaped"].forEach((function(t){"placement"===t?n.setAttribute("data-placement",e.placement):e.attributes.popper["data-popper-"+t]?n.setAttribute("data-"+t,""):n.removeAttribute("data-"+t)})),e.attributes.popper={}}}}];tt()&&u&&c.push({name:"arrow",options:{element:u,padding:3}}),c.push.apply(c,(null==r?void 0:r.modifiers)||[]),Y.popperInstance=t.createPopper(p,$,Object.assign({},r,{placement:o,onFirstUpdate:L,modifiers:c}))}function Tt(){Y.popperInstance&&(Y.popperInstance.destroy(),Y.popperInstance=null)}function At(){return d($.querySelectorAll("[data-tippy-root]"))}function Lt(t){Y.clearDelayTimeouts(),t&&at("onTrigger",[Y,t]),dt();var e=ot(!0),n=Q(),r=n[0],o=n[1];T.isTouch&&"hold"===r&&o&&(e=o),e?p=setTimeout((function(){Y.show()}),e):Y.show()}function Dt(t){if(Y.clearDelayTimeouts(),at("onUntrigger",[Y,t]),Y.state.isVisible){if(!(Y.props.trigger.indexOf("mouseenter")>=0&&Y.props.trigger.indexOf("click")>=0&&["mouseleave","mousemove"].indexOf(t.type)>=0&&V)){var e=ot(!1);e?g=setTimeout((function(){Y.state.isVisible&&Y.hide()}),e):b=requestAnimationFrame((function(){Y.hide()}))}}else vt()}}function F(t,e){void 0===e&&(e={});var n=R.plugins.concat(e.plugins||[]);document.addEventListener("touchstart",L,r),window.addEventListener("blur",k);var o=Object.assign({},e,{plugins:n}),i=y(t).reduce((function(t,e){var n=e&&z(e,o);return n&&t.push(n),t}),[]);return g(t)?i[0]:i}F.defaultProps=R,F.setDefaultProps=function(t){Object.keys(t).forEach((function(e){R[e]=t[e]}))},F.currentInput=T;var W=Object.assign({},t.applyStyles,{effect:function(t){var e=t.state,n={popper:{position:e.options.strategy,left:"0",top:"0",margin:"0"},arrow:{position:"absolute"},reference:{}};Object.assign(e.elements.popper.style,n.popper),e.styles=n,e.elements.arrow&&Object.assign(e.elements.arrow.style,n.arrow)}}),X={mouseover:"mouseenter",focusin:"focus",click:"click"};var Y={name:"animateFill",defaultValue:!1,fn:function(t){var e;if(null==(e=t.props.render)||!e.$$tippy)return{};var n=B(t.popper),r=n.box,o=n.content,i=t.props.animateFill?function(){var t=m();return t.className="tippy-backdrop",x([t],"hidden"),t}():null;return{onCreate:function(){i&&(r.insertBefore(i,r.firstElementChild),r.setAttribute("data-animatefill",""),r.style.overflow="hidden",t.setProps({arrow:!1,animation:"shift-away"}))},onMount:function(){if(i){var t=r.style.transitionDuration,e=Number(t.replace("ms",""));o.style.transitionDelay=Math.round(e/10)+"ms",i.style.transitionDuration=t,x([i],"visible")}},onShow:function(){i&&(i.style.transitionDuration="0ms")},onHide:function(){i&&x([i],"hidden")}}}};var q={clientX:0,clientY:0},$=[];function J(t){var e=t.clientX,n=t.clientY;q={clientX:e,clientY:n}}var G={name:"followCursor",defaultValue:!1,fn:function(t){var e=t.reference,n=E(t.props.triggerTarget||e),r=!1,o=!1,i=!0,a=t.props;function s(){return"initial"===t.props.followCursor&&t.state.isVisible}function u(){n.addEventListener("mousemove",f)}function p(){n.removeEventListener("mousemove",f)}function c(){r=!0,t.setProps({getReferenceClientRect:null}),r=!1}function f(n){var r=!n.target||e.contains(n.target),o=t.props.followCursor,i=n.clientX,a=n.clientY,s=e.getBoundingClientRect(),u=i-s.left,p=a-s.top;!r&&t.props.interactive||t.setProps({getReferenceClientRect:function(){var t=e.getBoundingClientRect(),n=i,r=a;"initial"===o&&(n=t.left+u,r=t.top+p);var s="horizontal"===o?t.top:r,c="vertical"===o?t.right:n,f="horizontal"===o?t.bottom:r,l="vertical"===o?t.left:n;return{width:c-l,height:f-s,top:s,right:c,bottom:f,left:l}}})}function l(){t.props.followCursor&&($.push({instance:t,doc:n}),function(t){t.addEventListener("mousemove",J)}(n))}function d(){0===($=$.filter((function(e){return e.instance!==t}))).filter((function(t){return t.doc===n})).length&&function(t){t.removeEventListener("mousemove",J)}(n)}return{onCreate:l,onDestroy:d,onBeforeUpdate:function(){a=t.props},onAfterUpdate:function(e,n){var i=n.followCursor;r||void 0!==i&&a.followCursor!==i&&(d(),i?(l(),!t.state.isMounted||o||s()||u()):(p(),c()))},onMount:function(){t.props.followCursor&&!o&&(i&&(f(q),i=!1),s()||u())},onTrigger:function(t,e){h(e)&&(q={clientX:e.clientX,clientY:e.clientY}),o="focus"===e.type},onHidden:function(){t.props.followCursor&&(c(),p(),i=!0)}}}};var K={name:"inlinePositioning",defaultValue:!1,fn:function(t){var e,n=t.reference;var r=-1,o=!1,i=[],a={name:"tippyInlinePositioning",enabled:!0,phase:"afterWrite",fn:function(o){var a=o.state;t.props.inlinePositioning&&(-1!==i.indexOf(a.placement)&&(i=[]),e!==a.placement&&-1===i.indexOf(a.placement)&&(i.push(a.placement),t.setProps({getReferenceClientRect:function(){return function(t){return function(t,e,n,r){if(n.length<2||null===t)return e;if(2===n.length&&r>=0&&n[0].left>n[1].right)return n[r]||e;switch(t){case"top":case"bottom":var o=n[0],i=n[n.length-1],a="top"===t,s=o.top,u=i.bottom,p=a?o.left:i.left,c=a?o.right:i.right;return{top:s,bottom:u,left:p,right:c,width:c-p,height:u-s};case"left":case"right":var f=Math.min.apply(Math,n.map((function(t){return t.left}))),l=Math.max.apply(Math,n.map((function(t){return t.right}))),d=n.filter((function(e){return"left"===t?e.left===f:e.right===l})),v=d[0].top,m=d[d.length-1].bottom;return{top:v,bottom:m,left:f,right:l,width:l-f,height:m-v};default:return e}}(l(t),n.getBoundingClientRect(),d(n.getClientRects()),r)}(a.placement)}})),e=a.placement)}};function s(){var e;o||(e=function(t,e){var n;return{popperOptions:Object.assign({},t.popperOptions,{modifiers:[].concat(((null==(n=t.popperOptions)?void 0:n.modifiers)||[]).filter((function(t){return t.name!==e.name})),[e])})}}(t.props,a),o=!0,t.setProps(e),o=!1)}return{onCreate:s,onAfterUpdate:s,onTrigger:function(e,n){if(h(n)){var o=d(t.reference.getClientRects()),i=o.find((function(t){return t.left-2<=n.clientX&&t.right+2>=n.clientX&&t.top-2<=n.clientY&&t.bottom+2>=n.clientY})),a=o.indexOf(i);r=a>-1?a:r}},onHidden:function(){r=-1}}}};var Q={name:"sticky",defaultValue:!1,fn:function(t){var e=t.reference,n=t.popper;function r(e){return!0===t.props.sticky||t.props.sticky===e}var o=null,i=null;function a(){var s=r("reference")?(t.popperInstance?t.popperInstance.state.elements.reference:e).getBoundingClientRect():null,u=r("popper")?n.getBoundingClientRect():null;(s&&Z(o,s)||u&&Z(i,u))&&t.popperInstance&&t.popperInstance.update(),o=s,i=u,t.state.isMounted&&requestAnimationFrame(a)}return{onMount:function(){t.props.sticky&&a()}}}};function Z(t,e){return!t||!e||(t.top!==e.top||t.right!==e.right||t.bottom!==e.bottom||t.left!==e.left)}return e&&function(t){var e=document.createElement("style");e.textContent=t,e.setAttribute("data-tippy-stylesheet","");var n=document.head,r=document.querySelector("head>style,head>link");r?n.insertBefore(e,r):n.appendChild(e)}('.tippy-box[data-animation=fade][data-state=hidden]{opacity:0}[data-tippy-root]{max-width:calc(100vw - 10px)}.tippy-box{position:relative;background-color:#333;color:#fff;border-radius:4px;font-size:14px;line-height:1.4;white-space:normal;outline:0;transition-property:transform,visibility,opacity}.tippy-box[data-placement^=top]>.tippy-arrow{bottom:0}.tippy-box[data-placement^=top]>.tippy-arrow:before{bottom:-7px;left:0;border-width:8px 8px 0;border-top-color:initial;transform-origin:center top}.tippy-box[data-placement^=bottom]>.tippy-arrow{top:0}.tippy-box[data-placement^=bottom]>.tippy-arrow:before{top:-7px;left:0;border-width:0 8px 8px;border-bottom-color:initial;transform-origin:center bottom}.tippy-box[data-placement^=left]>.tippy-arrow{right:0}.tippy-box[data-placement^=left]>.tippy-arrow:before{border-width:8px 0 8px 8px;border-left-color:initial;right:-7px;transform-origin:center left}.tippy-box[data-placement^=right]>.tippy-arrow{left:0}.tippy-box[data-placement^=right]>.tippy-arrow:before{left:-7px;border-width:8px 8px 8px 0;border-right-color:initial;transform-origin:center right}.tippy-box[data-inertia][data-state=visible]{transition-timing-function:cubic-bezier(.54,1.5,.38,1.11)}.tippy-arrow{width:16px;height:16px;color:#333}.tippy-arrow:before{content:"";position:absolute;border-color:transparent;border-style:solid}.tippy-content{position:relative;padding:5px 9px;z-index:1}'),F.setDefaultProps({plugins:[Y,G,K,Q],render:N}),F.createSingleton=function(t,e){var n;void 0===e&&(e={});var r,o=t,i=[],a=[],s=e.overrides,u=[],f=!1;function l(){a=o.map((function(t){return c(t.props.triggerTarget||t.reference)})).reduce((function(t,e){return t.concat(e)}),[])}function d(){i=o.map((function(t){return t.reference}))}function v(t){o.forEach((function(e){t?e.enable():e.disable()}))}function g(t){return o.map((function(e){var n=e.setProps;return e.setProps=function(o){n(o),e.reference===r&&t.setProps(o)},function(){e.setProps=n}}))}function h(t,e){var n=a.indexOf(e);if(e!==r){r=e;var u=(s||[]).concat("content").reduce((function(t,e){return t[e]=o[n].props[e],t}),{});t.setProps(Object.assign({},u,{getReferenceClientRect:"function"==typeof u.getReferenceClientRect?u.getReferenceClientRect:function(){var t;return null==(t=i[n])?void 0:t.getBoundingClientRect()}}))}}v(!1),d(),l();var b={fn:function(){return{onDestroy:function(){v(!0)},onHidden:function(){r=null},onClickOutside:function(t){t.props.showOnCreate&&!f&&(f=!0,r=null)},onShow:function(t){t.props.showOnCreate&&!f&&(f=!0,h(t,i[0]))},onTrigger:function(t,e){h(t,e.currentTarget)}}}},y=F(m(),Object.assign({},p(e,["overrides"]),{plugins:[b].concat(e.plugins||[]),triggerTarget:a,popperOptions:Object.assign({},e.popperOptions,{modifiers:[].concat((null==(n=e.popperOptions)?void 0:n.modifiers)||[],[W])})})),w=y.show;y.show=function(t){if(w(),!r&&null==t)return h(y,i[0]);if(!r||null!=t){if("number"==typeof t)return i[t]&&h(y,i[t]);if(o.indexOf(t)>=0){var e=t.reference;return h(y,e)}return i.indexOf(t)>=0?h(y,t):void 0}},y.showNext=function(){var t=i[0];if(!r)return y.show(0);var e=i.indexOf(r);y.show(i[e+1]||t)},y.showPrevious=function(){var t=i[i.length-1];if(!r)return y.show(t);var e=i.indexOf(r),n=i[e-1]||t;y.show(n)};var x=y.setProps;return y.setProps=function(t){s=t.overrides||s,x(t)},y.setInstances=function(t){v(!0),u.forEach((function(t){return t()})),o=t,v(!1),d(),l(),u=g(y),y.setProps({triggerTarget:a})},u=g(y),y},F.delegate=function(t,e){var n=[],o=[],i=!1,a=e.target,s=p(e,["target"]),u=Object.assign({},s,{trigger:"manual",touch:!1}),f=Object.assign({touch:R.touch},s,{showOnCreate:!0}),l=F(t,u);function d(t){if(t.target&&!i){var n=t.target.closest(a);if(n){var r=n.getAttribute("data-tippy-trigger")||e.trigger||R.trigger;if(!n._tippy&&!("touchstart"===t.type&&"boolean"==typeof f.touch||"touchstart"!==t.type&&r.indexOf(X[t.type])<0)){var s=F(n,f);s&&(o=o.concat(s))}}}}function v(t,e,r,o){void 0===o&&(o=!1),t.addEventListener(e,r,o),n.push({node:t,eventType:e,handler:r,options:o})}return c(l).forEach((function(t){var e=t.destroy,a=t.enable,s=t.disable;t.destroy=function(t){void 0===t&&(t=!0),t&&o.forEach((function(t){t.destroy()})),o=[],n.forEach((function(t){var e=t.node,n=t.eventType,r=t.handler,o=t.options;e.removeEventListener(n,r,o)})),n=[],e()},t.enable=function(){a(),o.forEach((function(t){return t.enable()})),i=!1},t.disable=function(){s(),o.forEach((function(t){return t.disable()})),i=!0},function(t){var e=t.reference;v(e,"touchstart",d,r),v(e,"mouseover",d),v(e,"focusin",d),v(e,"click",d)}(t)})),l},F.hideAll=function(t){var e=void 0===t?{}:t,n=e.exclude,r=e.duration;_.forEach((function(t){var e=!1;if(n&&(e=b(n)?t.reference===n:t.popper===n.popper),!e){var o=t.props.duration;t.setProps({duration:r}),t.hide(),t.state.isDestroyed||t.setProps({duration:o})}}))},F.roundArrow='',F})); +//# sourceMappingURL=tippy-bundle.umd.min.js.map diff --git a/mkdocs.yml b/mkdocs.yml new file mode 100644 index 0000000..89b4830 --- /dev/null +++ b/mkdocs.yml @@ -0,0 +1,17 @@ +site_name: Edk2Code Vscode Extension +theme: + name: readthedocs + locale: en + +extra: + generator: false + +extra_css: + - theme/css/extra.css + - theme/css/codicon.min.css +extra_javascript: + - theme/js/popper.min.js + - theme/js/tippy-bundle.umd.min.js + - theme/js/clipboard.min.js + - theme/js/extra.js + - https://buttons.github.io/buttons.js \ No newline at end of file