From ed6ef25e66fdb7db79fdfa6408b2ff32e785dc61 Mon Sep 17 00:00:00 2001 From: "Steven C. Buttgereit" Date: Fri, 9 Jan 2026 17:23:52 -0800 Subject: [PATCH] Update msbms_build_lib documentation This is a simple rebuild. It's unclear if there were substantive changes, but the rebuild should at least put us at the most recent version of the tool's docs. --- .../auxiliary/msbms_build_lib/.build | 8 +-- .../auxiliary/msbms_build_lib/404.html | 16 +++--- .../Mix.Tasks.Msbms.Db.Clean.html | 19 +++---- .../Mix.Tasks.Msbms.Db.Docs.html | 19 +++---- .../Mix.Tasks.Msbms.Elixir.Build.html | 19 +++---- .../Mix.Tasks.Msbms.Elixir.Clean.html | 19 +++---- .../Mix.Tasks.Msbms.Elixir.Deps.html | 19 +++---- .../Mix.Tasks.Msbms.Elixir.Docs.html | 19 +++---- .../Mix.Tasks.Msbms.Elixir.Scaffold.html | 19 +++---- .../Mix.Tasks.Msbms.Elixir.Test.html | 19 +++---- .../Mix.Tasks.Msbms.Meta.Gencomplist.html | 19 +++---- .../msbms_build_lib/MsbmsBuildLib.Types.html | 27 +++++----- .../msbms_build_lib/MsbmsBuildLib.html | 50 +++++++++++------- .../msbms_build_lib/api-reference.html | 18 +++---- .../{html-DPJLHKSM.js => html-Y223O6DN.js} | 18 +++---- .../dist/html-elixir-KV3YOVJ3.css | 6 --- .../dist/html-elixir-RLZO5U2C.css | 6 +++ ...ta-6DDC0733.js => search_data-6FAF4665.js} | 2 +- .../dist/sidebar_items-2DA0BB0B.js | 1 - .../dist/sidebar_items-A487BB95.js | 1 + .../auxiliary/msbms_build_lib/index.html | 4 +- .../msbms_build_lib/msbms_build_lib.epub | Bin 41770 -> 41773 bytes .../auxiliary/msbms_build_lib/search.html | 18 +++---- 23 files changed, 183 insertions(+), 163 deletions(-) rename documentation/technical/auxiliary/msbms_build_lib/dist/{html-DPJLHKSM.js => html-Y223O6DN.js} (88%) delete mode 100644 documentation/technical/auxiliary/msbms_build_lib/dist/html-elixir-KV3YOVJ3.css create mode 100644 documentation/technical/auxiliary/msbms_build_lib/dist/html-elixir-RLZO5U2C.css rename documentation/technical/auxiliary/msbms_build_lib/dist/{search_data-6DDC0733.js => search_data-6FAF4665.js} (63%) delete mode 100644 documentation/technical/auxiliary/msbms_build_lib/dist/sidebar_items-2DA0BB0B.js create mode 100644 documentation/technical/auxiliary/msbms_build_lib/dist/sidebar_items-A487BB95.js diff --git a/documentation/technical/auxiliary/msbms_build_lib/.build b/documentation/technical/auxiliary/msbms_build_lib/.build index b6dee7851..6d6b41364 100644 --- a/documentation/technical/auxiliary/msbms_build_lib/.build +++ b/documentation/technical/auxiliary/msbms_build_lib/.build @@ -11,14 +11,14 @@ Mix.Tasks.Msbms.Meta.Gencomplist.html MsbmsBuildLib.Types.html MsbmsBuildLib.html api-reference.html -dist/html-DPJLHKSM.js -dist/html-elixir-KV3YOVJ3.css +dist/html-Y223O6DN.js +dist/html-elixir-RLZO5U2C.css dist/lato-latin-400-normal-W7754I4D.woff2 dist/lato-latin-700-normal-2XVSBPG4.woff2 dist/lato-latin-ext-400-normal-N27NCBWW.woff2 dist/lato-latin-ext-700-normal-Q2L5DVMW.woff2 dist/remixicon-QPNJX265.woff2 -dist/search_data-6DDC0733.js -dist/sidebar_items-2DA0BB0B.js +dist/search_data-6FAF4665.js +dist/sidebar_items-A487BB95.js index.html search.html diff --git a/documentation/technical/auxiliary/msbms_build_lib/404.html b/documentation/technical/auxiliary/msbms_build_lib/404.html index f1bc93a85..e4d7fd41e 100644 --- a/documentation/technical/auxiliary/msbms_build_lib/404.html +++ b/documentation/technical/auxiliary/msbms_build_lib/404.html @@ -4,19 +4,19 @@ - - + + - 404 — msbms_build_lib v1.2.0 + 404 — msbms_build_lib v1.2.1 - + - + - + @@ -39,7 +39,7 @@ msbms_build_lib @@ -101,7 +101,7 @@

Built using - ExDoc (v0.38.2) for the + ExDoc (v0.38.4) for the Elixir programming language diff --git a/documentation/technical/auxiliary/msbms_build_lib/Mix.Tasks.Msbms.Db.Clean.html b/documentation/technical/auxiliary/msbms_build_lib/Mix.Tasks.Msbms.Db.Clean.html index d950423c1..16dfcb465 100644 --- a/documentation/technical/auxiliary/msbms_build_lib/Mix.Tasks.Msbms.Db.Clean.html +++ b/documentation/technical/auxiliary/msbms_build_lib/Mix.Tasks.Msbms.Db.Clean.html @@ -4,17 +4,17 @@ - - + + - mix msbms.db.clean — msbms_build_lib v1.2.0 + mix msbms.db.clean — msbms_build_lib v1.2.1 - + - + - + @@ -37,7 +37,7 @@ msbms_build_lib

@@ -76,7 +76,7 @@

mix msbms.db.clean - (msbms_build_lib v1.2.0) + (msbms_build_lib v1.2.1)

@@ -135,6 +135,7 @@

Functions

+
@@ -175,7 +176,7 @@

run(args)

Built using - ExDoc (v0.38.2) for the + ExDoc (v0.38.4) for the Elixir programming language diff --git a/documentation/technical/auxiliary/msbms_build_lib/Mix.Tasks.Msbms.Db.Docs.html b/documentation/technical/auxiliary/msbms_build_lib/Mix.Tasks.Msbms.Db.Docs.html index 2ef4072a9..3ef99dce4 100644 --- a/documentation/technical/auxiliary/msbms_build_lib/Mix.Tasks.Msbms.Db.Docs.html +++ b/documentation/technical/auxiliary/msbms_build_lib/Mix.Tasks.Msbms.Db.Docs.html @@ -4,17 +4,17 @@ - - + + - mix msbms.db.docs — msbms_build_lib v1.2.0 + mix msbms.db.docs — msbms_build_lib v1.2.1 - + - + - + @@ -37,7 +37,7 @@ msbms_build_lib

@@ -76,7 +76,7 @@

mix msbms.db.docs - (msbms_build_lib v1.2.0) + (msbms_build_lib v1.2.1)

@@ -141,6 +141,7 @@

Functions

+
@@ -181,7 +182,7 @@

run(args)

Built using - ExDoc (v0.38.2) for the + ExDoc (v0.38.4) for the Elixir programming language diff --git a/documentation/technical/auxiliary/msbms_build_lib/Mix.Tasks.Msbms.Elixir.Build.html b/documentation/technical/auxiliary/msbms_build_lib/Mix.Tasks.Msbms.Elixir.Build.html index a33de0f45..98853a436 100644 --- a/documentation/technical/auxiliary/msbms_build_lib/Mix.Tasks.Msbms.Elixir.Build.html +++ b/documentation/technical/auxiliary/msbms_build_lib/Mix.Tasks.Msbms.Elixir.Build.html @@ -4,17 +4,17 @@ - - + + - mix msbms.elixir.build — msbms_build_lib v1.2.0 + mix msbms.elixir.build — msbms_build_lib v1.2.1 - + - + - + @@ -37,7 +37,7 @@ msbms_build_lib

@@ -76,7 +76,7 @@

mix msbms.elixir.build - (msbms_build_lib v1.2.0) + (msbms_build_lib v1.2.1)

@@ -138,6 +138,7 @@

Functions

+
@@ -178,7 +179,7 @@

run(args)

Built using - ExDoc (v0.38.2) for the + ExDoc (v0.38.4) for the Elixir programming language diff --git a/documentation/technical/auxiliary/msbms_build_lib/Mix.Tasks.Msbms.Elixir.Clean.html b/documentation/technical/auxiliary/msbms_build_lib/Mix.Tasks.Msbms.Elixir.Clean.html index 74754bfdd..1e30039c3 100644 --- a/documentation/technical/auxiliary/msbms_build_lib/Mix.Tasks.Msbms.Elixir.Clean.html +++ b/documentation/technical/auxiliary/msbms_build_lib/Mix.Tasks.Msbms.Elixir.Clean.html @@ -4,17 +4,17 @@ - - + + - mix msbms.elixir.clean — msbms_build_lib v1.2.0 + mix msbms.elixir.clean — msbms_build_lib v1.2.1 - + - + - + @@ -37,7 +37,7 @@ msbms_build_lib

@@ -76,7 +76,7 @@

mix msbms.elixir.clean - (msbms_build_lib v1.2.0) + (msbms_build_lib v1.2.1)

@@ -142,6 +142,7 @@

Functions

+
@@ -182,7 +183,7 @@

run(args)

Built using - ExDoc (v0.38.2) for the + ExDoc (v0.38.4) for the Elixir programming language diff --git a/documentation/technical/auxiliary/msbms_build_lib/Mix.Tasks.Msbms.Elixir.Deps.html b/documentation/technical/auxiliary/msbms_build_lib/Mix.Tasks.Msbms.Elixir.Deps.html index 316ada07b..9e98b3bdd 100644 --- a/documentation/technical/auxiliary/msbms_build_lib/Mix.Tasks.Msbms.Elixir.Deps.html +++ b/documentation/technical/auxiliary/msbms_build_lib/Mix.Tasks.Msbms.Elixir.Deps.html @@ -4,17 +4,17 @@ - - + + - mix msbms.elixir.deps — msbms_build_lib v1.2.0 + mix msbms.elixir.deps — msbms_build_lib v1.2.1 - + - + - + @@ -37,7 +37,7 @@ msbms_build_lib

@@ -76,7 +76,7 @@

mix msbms.elixir.deps - (msbms_build_lib v1.2.0) + (msbms_build_lib v1.2.1)

@@ -142,6 +142,7 @@

Functions

+
@@ -182,7 +183,7 @@

run(args)

Built using - ExDoc (v0.38.2) for the + ExDoc (v0.38.4) for the Elixir programming language diff --git a/documentation/technical/auxiliary/msbms_build_lib/Mix.Tasks.Msbms.Elixir.Docs.html b/documentation/technical/auxiliary/msbms_build_lib/Mix.Tasks.Msbms.Elixir.Docs.html index e92417f1c..5a4710b3b 100644 --- a/documentation/technical/auxiliary/msbms_build_lib/Mix.Tasks.Msbms.Elixir.Docs.html +++ b/documentation/technical/auxiliary/msbms_build_lib/Mix.Tasks.Msbms.Elixir.Docs.html @@ -4,17 +4,17 @@ - - + + - mix msbms.elixir.docs — msbms_build_lib v1.2.0 + mix msbms.elixir.docs — msbms_build_lib v1.2.1 - + - + - + @@ -37,7 +37,7 @@ msbms_build_lib

@@ -76,7 +76,7 @@

mix msbms.elixir.docs - (msbms_build_lib v1.2.0) + (msbms_build_lib v1.2.1)

@@ -136,6 +136,7 @@

Functions

+
@@ -176,7 +177,7 @@

run(args)

Built using - ExDoc (v0.38.2) for the + ExDoc (v0.38.4) for the Elixir programming language diff --git a/documentation/technical/auxiliary/msbms_build_lib/Mix.Tasks.Msbms.Elixir.Scaffold.html b/documentation/technical/auxiliary/msbms_build_lib/Mix.Tasks.Msbms.Elixir.Scaffold.html index 08ffb433a..8790b69d2 100644 --- a/documentation/technical/auxiliary/msbms_build_lib/Mix.Tasks.Msbms.Elixir.Scaffold.html +++ b/documentation/technical/auxiliary/msbms_build_lib/Mix.Tasks.Msbms.Elixir.Scaffold.html @@ -4,17 +4,17 @@ - - + + - mix msbms.elixir.scaffold — msbms_build_lib v1.2.0 + mix msbms.elixir.scaffold — msbms_build_lib v1.2.1 - + - + - + @@ -37,7 +37,7 @@ msbms_build_lib

@@ -76,7 +76,7 @@

mix msbms.elixir.scaffold - (msbms_build_lib v1.2.0) + (msbms_build_lib v1.2.1)

@@ -150,6 +150,7 @@

Functions

+
@@ -190,7 +191,7 @@

run(args)

Built using - ExDoc (v0.38.2) for the + ExDoc (v0.38.4) for the Elixir programming language diff --git a/documentation/technical/auxiliary/msbms_build_lib/Mix.Tasks.Msbms.Elixir.Test.html b/documentation/technical/auxiliary/msbms_build_lib/Mix.Tasks.Msbms.Elixir.Test.html index f00761969..9986b11d5 100644 --- a/documentation/technical/auxiliary/msbms_build_lib/Mix.Tasks.Msbms.Elixir.Test.html +++ b/documentation/technical/auxiliary/msbms_build_lib/Mix.Tasks.Msbms.Elixir.Test.html @@ -4,17 +4,17 @@ - - + + - mix msbms.elixir.test — msbms_build_lib v1.2.0 + mix msbms.elixir.test — msbms_build_lib v1.2.1 - + - + - + @@ -37,7 +37,7 @@ msbms_build_lib

@@ -76,7 +76,7 @@

mix msbms.elixir.test - (msbms_build_lib v1.2.0) + (msbms_build_lib v1.2.1)

@@ -137,6 +137,7 @@

Functions

+
@@ -177,7 +178,7 @@

run(args)

Built using - ExDoc (v0.38.2) for the + ExDoc (v0.38.4) for the Elixir programming language diff --git a/documentation/technical/auxiliary/msbms_build_lib/Mix.Tasks.Msbms.Meta.Gencomplist.html b/documentation/technical/auxiliary/msbms_build_lib/Mix.Tasks.Msbms.Meta.Gencomplist.html index 115193cee..0764f17f6 100644 --- a/documentation/technical/auxiliary/msbms_build_lib/Mix.Tasks.Msbms.Meta.Gencomplist.html +++ b/documentation/technical/auxiliary/msbms_build_lib/Mix.Tasks.Msbms.Meta.Gencomplist.html @@ -4,17 +4,17 @@ - - + + - mix msbms.meta.gencomplist — msbms_build_lib v1.2.0 + mix msbms.meta.gencomplist — msbms_build_lib v1.2.1 - + - + - + @@ -37,7 +37,7 @@ msbms_build_lib

@@ -76,7 +76,7 @@

mix msbms.meta.gencomplist - (msbms_build_lib v1.2.0) + (msbms_build_lib v1.2.1)

@@ -143,6 +143,7 @@

Functions

+
@@ -183,7 +184,7 @@

run(args)

Built using - ExDoc (v0.38.2) for the + ExDoc (v0.38.4) for the Elixir programming language diff --git a/documentation/technical/auxiliary/msbms_build_lib/MsbmsBuildLib.Types.html b/documentation/technical/auxiliary/msbms_build_lib/MsbmsBuildLib.Types.html index ce48bf56e..115d1c140 100644 --- a/documentation/technical/auxiliary/msbms_build_lib/MsbmsBuildLib.Types.html +++ b/documentation/technical/auxiliary/msbms_build_lib/MsbmsBuildLib.Types.html @@ -4,17 +4,17 @@ - - + + - MsbmsBuildLib.Types — msbms_build_lib v1.2.0 + MsbmsBuildLib.Types — msbms_build_lib v1.2.1 - + - + - + @@ -37,7 +37,7 @@ msbms_build_lib

@@ -76,7 +76,7 @@

MsbmsBuildLib.Types - (msbms_build_lib v1.2.0) + (msbms_build_lib v1.2.1)

@@ -175,6 +175,7 @@

Types

+
@@ -288,8 +289,8 @@

components()

A list of component names for batch operations.

This type represents a collection of component names that can be processed together in build operations. An empty list typically indicates that all -available components should be processed.

Examples

iex> components = ["mscmp_syst_enums", "mscmp_syst_utils"]
-iex> MsbmsBuildLib.clean_build(base_dir, components)
+available components should be processed.

Examples

iex> components = ["mscmp_syst_enums", "mscmp_syst_utils"]
+iex> MsbmsBuildLib.clean_build(base_dir, components)
@@ -364,10 +365,10 @@

migration_target()

"analytics_db")

  • component_path - The absolute file system path to the root directory of the component's Elixir project, where migration files and configuration are located

  • Examples

    # MCP subsystem with application database
    -{"mssub_mcp", "application_db", "/full/path/to/project/subsystems/mssub_mcp"}
    +{"mssub_mcp", "application_db", "/full/path/to/project/subsystems/mssub_mcp"}
     
     # Analytics subsystem with specialized database
    -{"mssub_analytics", "analytics_db", "/full/path/to/project/subsystems/mssub_analytics"}

    Usage

    These tuples are used by the migration build system to locate migration +{"mssub_analytics", "analytics_db", "/full/path/to/project/subsystems/mssub_analytics"}

    Usage

    These tuples are used by the migration build system to locate migration files, determine the appropriate build process, and coordinate database schema updates across different deployment environments.

    @@ -393,7 +394,7 @@

    migration_target()

    Built using - ExDoc (v0.38.2) for the + ExDoc (v0.38.4) for the Elixir programming language diff --git a/documentation/technical/auxiliary/msbms_build_lib/MsbmsBuildLib.html b/documentation/technical/auxiliary/msbms_build_lib/MsbmsBuildLib.html index e8d9a191d..25cf5a69a 100644 --- a/documentation/technical/auxiliary/msbms_build_lib/MsbmsBuildLib.html +++ b/documentation/technical/auxiliary/msbms_build_lib/MsbmsBuildLib.html @@ -4,17 +4,17 @@ - - + + - MsbmsBuildLib — msbms_build_lib v1.2.0 + MsbmsBuildLib — msbms_build_lib v1.2.1 - + - + - + @@ -37,7 +37,7 @@ msbms_build_lib

    @@ -76,7 +76,7 @@

    MsbmsBuildLib - (msbms_build_lib v1.2.0) + (msbms_build_lib v1.2.1)

    @@ -423,6 +423,7 @@

    Constants Retrieval

    +
    @@ -603,6 +604,7 @@

    Build Cleaning

    +
    @@ -767,6 +769,7 @@

    Build Documentation

    +
    @@ -831,6 +834,7 @@

    Documentation Generation

    +
    @@ -860,19 +864,19 @@

    generate_component_list_doc(base_dir, opts (dependencies, descriptions, documentation links), and generates a formatted markdown file suitable for Hugo/Docsy static site generation.

    Parameters

    • base_dir - The base directory path where the project is located
    • opts - Keyword list of options:
      • :output_path - Output file path relative to base_dir (default: "documentation/book/content/en/technical/system-components-list.md")
      • :dry_run - If true, generates content but doesn't write file (default: false)

    Returns

    • {:ok, output_path} - Path to the generated file on success (when dry_run is false)
    • {:ok, content} - Generated content as string on success (when dry_run is true)
    • {:error, message} - Error message if generation fails

    Examples

    # Generate with default output path
    -MsbmsBuildLib.generate_component_list_doc("/path/to/project")
    +MsbmsBuildLib.generate_component_list_doc("/path/to/project")
     
     # Generate with custom output path
    -MsbmsBuildLib.generate_component_list_doc(
    +MsbmsBuildLib.generate_component_list_doc(
       "/path/to/project",
       output_path: "docs/components.md"
    -)
    +)
     
     # Generate without writing file (dry run)
    -{:ok, content} = MsbmsBuildLib.generate_component_list_doc(
    +{:ok, content} = MsbmsBuildLib.generate_component_list_doc(
       "/path/to/project",
       dry_run: true
    -)
    +)
    @@ -886,6 +890,7 @@

    Dependency Management

    +
    @@ -950,6 +955,7 @@

    Test Execution

    +
    @@ -990,6 +996,7 @@

    Build Elixir

    +
    @@ -1028,6 +1035,7 @@

    Build Migrations

    +
    @@ -1066,6 +1074,7 @@

    Project Scaffolding

    +
    @@ -1093,29 +1102,29 @@

    scaffold_elixir_component(base_dir, compone

    Scaffolds a new Elixir component from templates.

    Creates a new Elixir component project structure based on the standard templates, with all files properly configured for the new component.

    Parameters

    • base_dir - The base directory path where the project is located
    • component_name - The name of the component (e.g., "mscmp_syst_new_feature")
    • target_path - The relative path where the component should be created
    • opts - Optional configuration options

    Options

    • :component_display_name - Human-friendly name for the component
    • :component_description - Brief description of the component
    • :comp_short_name - Override the derived short component name (removes categorizing prefix)
    • :module_name - Override the derived module name (PascalCase of full component name)
    • :module_short_name - Override the derived short module name (PascalCase of short component name)

    Returns

    • :ok on successful scaffolding
    • {:error, message} if scaffolding fails

    Examples

    # Create a new system component (names derived automatically)
    -MsbmsBuildLib.scaffold_elixir_component(
    +MsbmsBuildLib.scaffold_elixir_component(
       "/path/to/project",
       "mscmp_syst_new_feature",
       "app_server/components/system",
       component_display_name: "New Feature Component",
       component_description: "Provides new feature functionality."
    -)
    +)
     
     # Create a new application component
    -MsbmsBuildLib.scaffold_elixir_component(
    +MsbmsBuildLib.scaffold_elixir_component(
       "/path/to/project",
       "msapp_new_app",
       "app_server/components/application"
    -)
    +)
     
     # Override derived names for edge cases
    -MsbmsBuildLib.scaffold_elixir_component(
    +MsbmsBuildLib.scaffold_elixir_component(
       "/path/to/project",
       "legacy_system_component",
       "app_server/components/system",
       comp_short_name: "legacy",
       module_short_name: "Legacy"
    -)
    +)
    @@ -1129,6 +1138,7 @@

    Utility

    +
    @@ -1201,7 +1211,7 @@

    set_log_level(level)

    Built using - ExDoc (v0.38.2) for the + ExDoc (v0.38.4) for the Elixir programming language diff --git a/documentation/technical/auxiliary/msbms_build_lib/api-reference.html b/documentation/technical/auxiliary/msbms_build_lib/api-reference.html index 07ac35e08..a18a625a1 100644 --- a/documentation/technical/auxiliary/msbms_build_lib/api-reference.html +++ b/documentation/technical/auxiliary/msbms_build_lib/api-reference.html @@ -4,17 +4,17 @@ - - + + - API Reference — msbms_build_lib v1.2.0 + API Reference — msbms_build_lib v1.2.1 - + - + - + @@ -37,7 +37,7 @@ msbms_build_lib

    @@ -74,7 +74,7 @@
    -

    API Reference msbms_build_lib v#1.2.0

    +

    API Reference msbms_build_lib v#1.2.1

    @@ -212,7 +212,7 @@

    Mix Tasks

    Built using - ExDoc (v0.38.2) for the + ExDoc (v0.38.4) for the Elixir programming language diff --git a/documentation/technical/auxiliary/msbms_build_lib/dist/html-DPJLHKSM.js b/documentation/technical/auxiliary/msbms_build_lib/dist/html-Y223O6DN.js similarity index 88% rename from documentation/technical/auxiliary/msbms_build_lib/dist/html-DPJLHKSM.js rename to documentation/technical/auxiliary/msbms_build_lib/dist/html-Y223O6DN.js index 8d3e30977..6982ab0be 100644 --- a/documentation/technical/auxiliary/msbms_build_lib/dist/html-DPJLHKSM.js +++ b/documentation/technical/auxiliary/msbms_build_lib/dist/html-Y223O6DN.js @@ -1,9 +1,9 @@ -(()=>{var Ps=Object.create;var Kn=Object.defineProperty;var Os=Object.getOwnPropertyDescriptor;var Is=Object.getOwnPropertyNames;var As=Object.getPrototypeOf,Cs=Object.prototype.hasOwnProperty;var L=(t,e)=>()=>(e||t((e={exports:{}}).exports,e),e.exports);var Rs=(t,e,n,r)=>{if(e&&typeof e=="object"||typeof e=="function")for(let i of Is(e))!Cs.call(t,i)&&i!==n&&Kn(t,i,{get:()=>e[i],enumerable:!(r=Os(e,i))||r.enumerable});return t};var Y=(t,e,n)=>(n=t!=null?Ps(As(t)):{},Rs(e||!t||!t.__esModule?Kn(n,"default",{value:t,enumerable:!0}):n,t));var wr=L((cc,yr)=>{var vr="Expected a function",mr=NaN,Bs="[object Symbol]",Qs=/^\s+|\s+$/g,qs=/^[-+]0x[0-9a-f]+$/i,Fs=/^0b[01]+$/i,Vs=/^0o[0-7]+$/i,$s=parseInt,Us=typeof global=="object"&&global&&global.Object===Object&&global,js=typeof self=="object"&&self&&self.Object===Object&&self,Ws=Us||js||Function("return this")(),zs=Object.prototype,Gs=zs.toString,Ks=Math.max,Ys=Math.min,Bt=function(){return Ws.Date.now()};function Js(t,e,n){var r,i,s,o,a,l,u=0,c=!1,d=!1,h=!0;if(typeof t!="function")throw new TypeError(vr);e=gr(e)||0,Fe(n)&&(c=!!n.leading,d="maxWait"in n,s=d?Ks(gr(n.maxWait)||0,e):s,h="trailing"in n?!!n.trailing:h);function p(S){var R=r,U=i;return r=i=void 0,u=S,o=t.apply(U,R),o}function g(S){return u=S,a=setTimeout(w,e),c?p(S):o}function m(S){var R=S-l,U=S-u,ee=e-R;return d?Ys(ee,s-U):ee}function v(S){var R=S-l,U=S-u;return l===void 0||R>=e||R<0||d&&U>=s}function w(){var S=Bt();if(v(S))return x(S);a=setTimeout(w,m(S))}function x(S){return a=void 0,h&&r?p(S):(r=i=void 0,o)}function P(){a!==void 0&&clearTimeout(a),u=0,r=l=i=a=void 0}function q(){return a===void 0?o:x(Bt())}function $(){var S=Bt(),R=v(S);if(r=arguments,i=this,l=S,R){if(a===void 0)return g(l);if(d)return a=setTimeout(w,e),p(l)}return a===void 0&&(a=setTimeout(w,e)),o}return $.cancel=P,$.flush=q,$}function Xs(t,e,n){var r=!0,i=!0;if(typeof t!="function")throw new TypeError(vr);return Fe(n)&&(r="leading"in n?!!n.leading:r,i="trailing"in n?!!n.trailing:i),Js(t,e,{leading:r,maxWait:e,trailing:i})}function Fe(t){var e=typeof t;return!!t&&(e=="object"||e=="function")}function Zs(t){return!!t&&typeof t=="object"}function eo(t){return typeof t=="symbol"||Zs(t)&&Gs.call(t)==Bs}function gr(t){if(typeof t=="number")return t;if(eo(t))return mr;if(Fe(t)){var e=typeof t.valueOf=="function"?t.valueOf():t;t=Fe(e)?e+"":e}if(typeof t!="string")return t===0?t:+t;t=t.replace(Qs,"");var n=Fs.test(t);return n||Vs.test(t)?$s(t.slice(2),n?2:8):qs.test(t)?mr:+t}yr.exports=Xs});var F=L(D=>{"use strict";D.__esModule=!0;D.extend=Cr;D.indexOf=po;D.escapeExpression=mo;D.isEmpty=go;D.createFrame=vo;D.blockParams=yo;D.appendContextPath=wo;var uo={"&":"&","<":"<",">":">",'"':""","'":"'","`":"`","=":"="},co=/[&<>"'`=]/g,ho=/[&<>"'`=]/;function fo(t){return uo[t]}function Cr(t){for(var e=1;e{"use strict";je.__esModule=!0;var Kt=["description","fileName","lineNumber","endLineNumber","message","name","number","stack"];function Yt(t,e){var n=e&&e.loc,r=void 0,i=void 0,s=void 0,o=void 0;n&&(r=n.start.line,i=n.end.line,s=n.start.column,o=n.end.column,t+=" - "+r+":"+s);for(var a=Error.prototype.constructor.call(this,t),l=0;l{"use strict";We.__esModule=!0;var Jt=F();We.default=function(t){t.registerHelper("blockHelperMissing",function(e,n){var r=n.inverse,i=n.fn;if(e===!0)return i(this);if(e===!1||e==null)return r(this);if(Jt.isArray(e))return e.length>0?(n.ids&&(n.ids=[n.name]),t.helpers.each(e,n)):r(this);if(n.data&&n.ids){var s=Jt.createFrame(n.data);s.contextPath=Jt.appendContextPath(n.data.contextPath,n.name),n={data:s}}return i(e,n)})};Hr.exports=We.default});var Br=L((ze,Dr)=>{"use strict";ze.__esModule=!0;function bo(t){return t&&t.__esModule?t:{default:t}}var we=F(),Eo=X(),xo=bo(Eo);ze.default=function(t){t.registerHelper("each",function(e,n){if(!n)throw new xo.default("Must pass iterator to #each");var r=n.fn,i=n.inverse,s=0,o="",a=void 0,l=void 0;n.data&&n.ids&&(l=we.appendContextPath(n.data.contextPath,n.ids[0])+"."),we.isFunction(e)&&(e=e.call(this)),n.data&&(a=we.createFrame(n.data));function u(g,m,v){a&&(a.key=g,a.index=m,a.first=m===0,a.last=!!v,l&&(a.contextPath=l+g)),o=o+r(e[g],{data:a,blockParams:we.blockParams([e[g],g],[l+g,null])})}if(e&&typeof e=="object")if(we.isArray(e))for(var c=e.length;s{"use strict";Ge.__esModule=!0;function ko(t){return t&&t.__esModule?t:{default:t}}var So=X(),Lo=ko(So);Ge.default=function(t){t.registerHelper("helperMissing",function(){if(arguments.length!==1)throw new Lo.default('Missing helper: "'+arguments[arguments.length-1].name+'"')})};Qr.exports=Ge.default});var Ur=L((Ke,$r)=>{"use strict";Ke.__esModule=!0;function To(t){return t&&t.__esModule?t:{default:t}}var Fr=F(),_o=X(),Vr=To(_o);Ke.default=function(t){t.registerHelper("if",function(e,n){if(arguments.length!=2)throw new Vr.default("#if requires exactly one argument");return Fr.isFunction(e)&&(e=e.call(this)),!n.hash.includeZero&&!e||Fr.isEmpty(e)?n.inverse(this):n.fn(this)}),t.registerHelper("unless",function(e,n){if(arguments.length!=2)throw new Vr.default("#unless requires exactly one argument");return t.helpers.if.call(this,e,{fn:n.inverse,inverse:n.fn,hash:n.hash})})};$r.exports=Ke.default});var Wr=L((Ye,jr)=>{"use strict";Ye.__esModule=!0;Ye.default=function(t){t.registerHelper("log",function(){for(var e=[void 0],n=arguments[arguments.length-1],r=0;r{"use strict";Je.__esModule=!0;Je.default=function(t){t.registerHelper("lookup",function(e,n,r){return e&&r.lookupProperty(e,n)})};zr.exports=Je.default});var Yr=L((Xe,Kr)=>{"use strict";Xe.__esModule=!0;function Po(t){return t&&t.__esModule?t:{default:t}}var be=F(),Oo=X(),Io=Po(Oo);Xe.default=function(t){t.registerHelper("with",function(e,n){if(arguments.length!=2)throw new Io.default("#with requires exactly one argument");be.isFunction(e)&&(e=e.call(this));var r=n.fn;if(be.isEmpty(e))return n.inverse(this);var i=n.data;return n.data&&n.ids&&(i=be.createFrame(n.data),i.contextPath=be.appendContextPath(n.data.contextPath,n.ids[0])),r(e,{data:i,blockParams:be.blockParams([e],[i&&i.contextPath])})})};Kr.exports=Xe.default});var Xt=L(Ze=>{"use strict";Ze.__esModule=!0;Ze.registerDefaultHelpers=jo;Ze.moveHelperToHooks=Wo;function se(t){return t&&t.__esModule?t:{default:t}}var Ao=Nr(),Co=se(Ao),Ro=Br(),Mo=se(Ro),Ho=qr(),No=se(Ho),Do=Ur(),Bo=se(Do),Qo=Wr(),qo=se(Qo),Fo=Gr(),Vo=se(Fo),$o=Yr(),Uo=se($o);function jo(t){Co.default(t),Mo.default(t),No.default(t),Bo.default(t),qo.default(t),Vo.default(t),Uo.default(t)}function Wo(t,e,n){t.helpers[e]&&(t.hooks[e]=t.helpers[e],n||delete t.helpers[e])}});var Xr=L((et,Jr)=>{"use strict";et.__esModule=!0;var zo=F();et.default=function(t){t.registerDecorator("inline",function(e,n,r,i){var s=e;return n.partials||(n.partials={},s=function(o,a){var l=r.partials;r.partials=zo.extend({},l,n.partials);var u=e(o,a);return r.partials=l,u}),n.partials[i.args[0]]=i.fn,s})};Jr.exports=et.default});var Zr=L(Zt=>{"use strict";Zt.__esModule=!0;Zt.registerDefaultDecorators=Jo;function Go(t){return t&&t.__esModule?t:{default:t}}var Ko=Xr(),Yo=Go(Ko);function Jo(t){Yo.default(t)}});var en=L((tt,ei)=>{"use strict";tt.__esModule=!0;var Xo=F(),fe={methodMap:["debug","info","warn","error"],level:"info",lookupLevel:function(e){if(typeof e=="string"){var n=Xo.indexOf(fe.methodMap,e.toLowerCase());n>=0?e=n:e=parseInt(e,10)}return e},log:function(e){if(e=fe.lookupLevel(e),typeof console<"u"&&fe.lookupLevel(fe.level)<=e){var n=fe.methodMap[e];console[n]||(n="log");for(var r=arguments.length,i=Array(r>1?r-1:0),s=1;s{"use strict";tn.__esModule=!0;tn.createNewLookupObject=ea;var Zo=F();function ea(){for(var t=arguments.length,e=Array(t),n=0;n{"use strict";Ee.__esModule=!0;Ee.createProtoAccessControl=ia;Ee.resultIsAllowed=sa;Ee.resetLoggedProperties=aa;function ta(t){if(t&&t.__esModule)return t;var e={};if(t!=null)for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&(e[n]=t[n]);return e.default=t,e}var ni=ti(),na=en(),ra=ta(na),nt=Object.create(null);function ia(t){var e=Object.create(null);e.constructor=!1,e.__defineGetter__=!1,e.__defineSetter__=!1,e.__lookupGetter__=!1;var n=Object.create(null);return n.__proto__=!1,{properties:{whitelist:ni.createNewLookupObject(n,t.allowedProtoProperties),defaultValue:t.allowProtoPropertiesByDefault},methods:{whitelist:ni.createNewLookupObject(e,t.allowedProtoMethods),defaultValue:t.allowProtoMethodsByDefault}}}function sa(t,e,n){return ri(typeof t=="function"?e.methods:e.properties,n)}function ri(t,e){return t.whitelist[e]!==void 0?t.whitelist[e]===!0:t.defaultValue!==void 0?t.defaultValue:(oa(e),!1)}function oa(t){nt[t]!==!0&&(nt[t]=!0,ra.log("error",'Handlebars: Access has been denied to resolve the property "'+t+`" because it is not an "own property" of its parent. +(()=>{var Ps=Object.create;var Kn=Object.defineProperty;var Os=Object.getOwnPropertyDescriptor;var Is=Object.getOwnPropertyNames;var As=Object.getPrototypeOf,Cs=Object.prototype.hasOwnProperty;var L=(t,e)=>()=>(e||t((e={exports:{}}).exports,e),e.exports);var Rs=(t,e,n,r)=>{if(e&&typeof e=="object"||typeof e=="function")for(let i of Is(e))!Cs.call(t,i)&&i!==n&&Kn(t,i,{get:()=>e[i],enumerable:!(r=Os(e,i))||r.enumerable});return t};var Y=(t,e,n)=>(n=t!=null?Ps(As(t)):{},Rs(e||!t||!t.__esModule?Kn(n,"default",{value:t,enumerable:!0}):n,t));var wr=L((hc,yr)=>{var vr="Expected a function",mr=NaN,Bs="[object Symbol]",Qs=/^\s+|\s+$/g,qs=/^[-+]0x[0-9a-f]+$/i,Fs=/^0b[01]+$/i,Vs=/^0o[0-7]+$/i,$s=parseInt,Us=typeof global=="object"&&global&&global.Object===Object&&global,js=typeof self=="object"&&self&&self.Object===Object&&self,Ws=Us||js||Function("return this")(),zs=Object.prototype,Gs=zs.toString,Ks=Math.max,Ys=Math.min,Bt=function(){return Ws.Date.now()};function Js(t,e,n){var r,i,s,o,a,l,u=0,c=!1,d=!1,h=!0;if(typeof t!="function")throw new TypeError(vr);e=gr(e)||0,Fe(n)&&(c=!!n.leading,d="maxWait"in n,s=d?Ks(gr(n.maxWait)||0,e):s,h="trailing"in n?!!n.trailing:h);function p(S){var R=r,U=i;return r=i=void 0,u=S,o=t.apply(U,R),o}function g(S){return u=S,a=setTimeout(w,e),c?p(S):o}function m(S){var R=S-l,U=S-u,ee=e-R;return d?Ys(ee,s-U):ee}function v(S){var R=S-l,U=S-u;return l===void 0||R>=e||R<0||d&&U>=s}function w(){var S=Bt();if(v(S))return x(S);a=setTimeout(w,m(S))}function x(S){return a=void 0,h&&r?p(S):(r=i=void 0,o)}function P(){a!==void 0&&clearTimeout(a),u=0,r=l=i=a=void 0}function q(){return a===void 0?o:x(Bt())}function $(){var S=Bt(),R=v(S);if(r=arguments,i=this,l=S,R){if(a===void 0)return g(l);if(d)return a=setTimeout(w,e),p(l)}return a===void 0&&(a=setTimeout(w,e)),o}return $.cancel=P,$.flush=q,$}function Xs(t,e,n){var r=!0,i=!0;if(typeof t!="function")throw new TypeError(vr);return Fe(n)&&(r="leading"in n?!!n.leading:r,i="trailing"in n?!!n.trailing:i),Js(t,e,{leading:r,maxWait:e,trailing:i})}function Fe(t){var e=typeof t;return!!t&&(e=="object"||e=="function")}function Zs(t){return!!t&&typeof t=="object"}function eo(t){return typeof t=="symbol"||Zs(t)&&Gs.call(t)==Bs}function gr(t){if(typeof t=="number")return t;if(eo(t))return mr;if(Fe(t)){var e=typeof t.valueOf=="function"?t.valueOf():t;t=Fe(e)?e+"":e}if(typeof t!="string")return t===0?t:+t;t=t.replace(Qs,"");var n=Fs.test(t);return n||Vs.test(t)?$s(t.slice(2),n?2:8):qs.test(t)?mr:+t}yr.exports=Xs});var F=L(D=>{"use strict";D.__esModule=!0;D.extend=Cr;D.indexOf=po;D.escapeExpression=mo;D.isEmpty=go;D.createFrame=vo;D.blockParams=yo;D.appendContextPath=wo;var uo={"&":"&","<":"<",">":">",'"':""","'":"'","`":"`","=":"="},co=/[&<>"'`=]/g,ho=/[&<>"'`=]/;function fo(t){return uo[t]}function Cr(t){for(var e=1;e{"use strict";je.__esModule=!0;var Kt=["description","fileName","lineNumber","endLineNumber","message","name","number","stack"];function Yt(t,e){var n=e&&e.loc,r=void 0,i=void 0,s=void 0,o=void 0;n&&(r=n.start.line,i=n.end.line,s=n.start.column,o=n.end.column,t+=" - "+r+":"+s);for(var a=Error.prototype.constructor.call(this,t),l=0;l{"use strict";We.__esModule=!0;var Jt=F();We.default=function(t){t.registerHelper("blockHelperMissing",function(e,n){var r=n.inverse,i=n.fn;if(e===!0)return i(this);if(e===!1||e==null)return r(this);if(Jt.isArray(e))return e.length>0?(n.ids&&(n.ids=[n.name]),t.helpers.each(e,n)):r(this);if(n.data&&n.ids){var s=Jt.createFrame(n.data);s.contextPath=Jt.appendContextPath(n.data.contextPath,n.name),n={data:s}}return i(e,n)})};Hr.exports=We.default});var Br=L((ze,Dr)=>{"use strict";ze.__esModule=!0;function bo(t){return t&&t.__esModule?t:{default:t}}var be=F(),Eo=X(),xo=bo(Eo);ze.default=function(t){t.registerHelper("each",function(e,n){if(!n)throw new xo.default("Must pass iterator to #each");var r=n.fn,i=n.inverse,s=0,o="",a=void 0,l=void 0;n.data&&n.ids&&(l=be.appendContextPath(n.data.contextPath,n.ids[0])+"."),be.isFunction(e)&&(e=e.call(this)),n.data&&(a=be.createFrame(n.data));function u(g,m,v){a&&(a.key=g,a.index=m,a.first=m===0,a.last=!!v,l&&(a.contextPath=l+g)),o=o+r(e[g],{data:a,blockParams:be.blockParams([e[g],g],[l+g,null])})}if(e&&typeof e=="object")if(be.isArray(e))for(var c=e.length;s{"use strict";Ge.__esModule=!0;function ko(t){return t&&t.__esModule?t:{default:t}}var So=X(),Lo=ko(So);Ge.default=function(t){t.registerHelper("helperMissing",function(){if(arguments.length!==1)throw new Lo.default('Missing helper: "'+arguments[arguments.length-1].name+'"')})};Qr.exports=Ge.default});var Ur=L((Ke,$r)=>{"use strict";Ke.__esModule=!0;function To(t){return t&&t.__esModule?t:{default:t}}var Fr=F(),_o=X(),Vr=To(_o);Ke.default=function(t){t.registerHelper("if",function(e,n){if(arguments.length!=2)throw new Vr.default("#if requires exactly one argument");return Fr.isFunction(e)&&(e=e.call(this)),!n.hash.includeZero&&!e||Fr.isEmpty(e)?n.inverse(this):n.fn(this)}),t.registerHelper("unless",function(e,n){if(arguments.length!=2)throw new Vr.default("#unless requires exactly one argument");return t.helpers.if.call(this,e,{fn:n.inverse,inverse:n.fn,hash:n.hash})})};$r.exports=Ke.default});var Wr=L((Ye,jr)=>{"use strict";Ye.__esModule=!0;Ye.default=function(t){t.registerHelper("log",function(){for(var e=[void 0],n=arguments[arguments.length-1],r=0;r{"use strict";Je.__esModule=!0;Je.default=function(t){t.registerHelper("lookup",function(e,n,r){return e&&r.lookupProperty(e,n)})};zr.exports=Je.default});var Yr=L((Xe,Kr)=>{"use strict";Xe.__esModule=!0;function Po(t){return t&&t.__esModule?t:{default:t}}var Ee=F(),Oo=X(),Io=Po(Oo);Xe.default=function(t){t.registerHelper("with",function(e,n){if(arguments.length!=2)throw new Io.default("#with requires exactly one argument");Ee.isFunction(e)&&(e=e.call(this));var r=n.fn;if(Ee.isEmpty(e))return n.inverse(this);var i=n.data;return n.data&&n.ids&&(i=Ee.createFrame(n.data),i.contextPath=Ee.appendContextPath(n.data.contextPath,n.ids[0])),r(e,{data:i,blockParams:Ee.blockParams([e],[i&&i.contextPath])})})};Kr.exports=Xe.default});var Xt=L(Ze=>{"use strict";Ze.__esModule=!0;Ze.registerDefaultHelpers=jo;Ze.moveHelperToHooks=Wo;function se(t){return t&&t.__esModule?t:{default:t}}var Ao=Nr(),Co=se(Ao),Ro=Br(),Mo=se(Ro),Ho=qr(),No=se(Ho),Do=Ur(),Bo=se(Do),Qo=Wr(),qo=se(Qo),Fo=Gr(),Vo=se(Fo),$o=Yr(),Uo=se($o);function jo(t){Co.default(t),Mo.default(t),No.default(t),Bo.default(t),qo.default(t),Vo.default(t),Uo.default(t)}function Wo(t,e,n){t.helpers[e]&&(t.hooks[e]=t.helpers[e],n||delete t.helpers[e])}});var Xr=L((et,Jr)=>{"use strict";et.__esModule=!0;var zo=F();et.default=function(t){t.registerDecorator("inline",function(e,n,r,i){var s=e;return n.partials||(n.partials={},s=function(o,a){var l=r.partials;r.partials=zo.extend({},l,n.partials);var u=e(o,a);return r.partials=l,u}),n.partials[i.args[0]]=i.fn,s})};Jr.exports=et.default});var Zr=L(Zt=>{"use strict";Zt.__esModule=!0;Zt.registerDefaultDecorators=Jo;function Go(t){return t&&t.__esModule?t:{default:t}}var Ko=Xr(),Yo=Go(Ko);function Jo(t){Yo.default(t)}});var en=L((tt,ei)=>{"use strict";tt.__esModule=!0;var Xo=F(),fe={methodMap:["debug","info","warn","error"],level:"info",lookupLevel:function(e){if(typeof e=="string"){var n=Xo.indexOf(fe.methodMap,e.toLowerCase());n>=0?e=n:e=parseInt(e,10)}return e},log:function(e){if(e=fe.lookupLevel(e),typeof console<"u"&&fe.lookupLevel(fe.level)<=e){var n=fe.methodMap[e];console[n]||(n="log");for(var r=arguments.length,i=Array(r>1?r-1:0),s=1;s{"use strict";tn.__esModule=!0;tn.createNewLookupObject=ea;var Zo=F();function ea(){for(var t=arguments.length,e=Array(t),n=0;n{"use strict";xe.__esModule=!0;xe.createProtoAccessControl=ia;xe.resultIsAllowed=sa;xe.resetLoggedProperties=aa;function ta(t){if(t&&t.__esModule)return t;var e={};if(t!=null)for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&(e[n]=t[n]);return e.default=t,e}var ni=ti(),na=en(),ra=ta(na),nt=Object.create(null);function ia(t){var e=Object.create(null);e.constructor=!1,e.__defineGetter__=!1,e.__defineSetter__=!1,e.__lookupGetter__=!1;var n=Object.create(null);return n.__proto__=!1,{properties:{whitelist:ni.createNewLookupObject(n,t.allowedProtoProperties),defaultValue:t.allowProtoPropertiesByDefault},methods:{whitelist:ni.createNewLookupObject(e,t.allowedProtoMethods),defaultValue:t.allowProtoMethodsByDefault}}}function sa(t,e,n){return ri(typeof t=="function"?e.methods:e.properties,n)}function ri(t,e){return t.whitelist[e]!==void 0?t.whitelist[e]===!0:t.defaultValue!==void 0?t.defaultValue:(oa(e),!1)}function oa(t){nt[t]!==!0&&(nt[t]=!0,ra.log("error",'Handlebars: Access has been denied to resolve the property "'+t+`" because it is not an "own property" of its parent. You can add a runtime option to disable the check or this warning: See https://handlebarsjs.com/api-reference/runtime-options.html#options-to-control-prototype-access for details`))}function aa(){Object.keys(nt).forEach(function(t){delete nt[t]})}});var an=L(j=>{"use strict";j.__esModule=!0;j.HandlebarsEnvironment=on;function ii(t){return t&&t.__esModule?t:{default:t}}var oe=F(),la=X(),rn=ii(la),ua=Xt(),ca=Zr(),da=en(),rt=ii(da),ha=nn(),fa="4.7.7";j.VERSION=fa;var pa=8;j.COMPILER_REVISION=pa;var ma=7;j.LAST_COMPATIBLE_COMPILER_REVISION=ma;var ga={1:"<= 1.0.rc.2",2:"== 1.0.0-rc.3",3:"== 1.0.0-rc.4",4:"== 1.x.x",5:"== 2.0.0-alpha.x",6:">= 2.0.0-beta.1",7:">= 4.0.0 <4.3.0",8:">= 4.3.0"};j.REVISION_CHANGES=ga;var sn="[object Object]";function on(t,e,n){this.helpers=t||{},this.partials=e||{},this.decorators=n||{},ua.registerDefaultHelpers(this),ca.registerDefaultDecorators(this)}on.prototype={constructor:on,logger:rt.default,log:rt.default.log,registerHelper:function(e,n){if(oe.toString.call(e)===sn){if(n)throw new rn.default("Arg not supported with multiple helpers");oe.extend(this.helpers,e)}else this.helpers[e]=n},unregisterHelper:function(e){delete this.helpers[e]},registerPartial:function(e,n){if(oe.toString.call(e)===sn)oe.extend(this.partials,e);else{if(typeof n>"u")throw new rn.default('Attempting to register a partial called "'+e+'" as undefined');this.partials[e]=n}},unregisterPartial:function(e){delete this.partials[e]},registerDecorator:function(e,n){if(oe.toString.call(e)===sn){if(n)throw new rn.default("Arg not supported with multiple decorators");oe.extend(this.decorators,e)}else this.decorators[e]=n},unregisterDecorator:function(e){delete this.decorators[e]},resetLoggedPropertyAccesses:function(){ha.resetLoggedProperties()}};var va=rt.default.log;j.log=va;j.createFrame=oe.createFrame;j.logger=rt.default});var oi=L((it,si)=>{"use strict";it.__esModule=!0;function ln(t){this.string=t}ln.prototype.toString=ln.prototype.toHTML=function(){return""+this.string};it.default=ln;si.exports=it.default});var ai=L(un=>{"use strict";un.__esModule=!0;un.wrapHelper=ya;function ya(t,e){if(typeof t!="function")return t;var n=function(){var i=arguments[arguments.length-1];return arguments[arguments.length-1]=e(i),t.apply(this,arguments)};return n}});var hi=L(Z=>{"use strict";Z.__esModule=!0;Z.checkRevision=Sa;Z.template=La;Z.wrapProgram=st;Z.resolvePartial=Ta;Z.invokePartial=_a;Z.noop=ci;function wa(t){return t&&t.__esModule?t:{default:t}}function ba(t){if(t&&t.__esModule)return t;var e={};if(t!=null)for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&(e[n]=t[n]);return e.default=t,e}var Ea=F(),z=ba(Ea),xa=X(),G=wa(xa),K=an(),li=Xt(),ka=ai(),ui=nn();function Sa(t){var e=t&&t[0]||1,n=K.COMPILER_REVISION;if(!(e>=K.LAST_COMPATIBLE_COMPILER_REVISION&&e<=K.COMPILER_REVISION))if(e{"use strict";ot.__esModule=!0;ot.default=function(t){var e=typeof global<"u"?global:window,n=e.Handlebars;t.noConflict=function(){return e.Handlebars===t&&(e.Handlebars=n),t}};fi.exports=ot.default});var ae=L((at,yi)=>{"use strict";at.__esModule=!0;function dn(t){return t&&t.__esModule?t:{default:t}}function hn(t){if(t&&t.__esModule)return t;var e={};if(t!=null)for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&(e[n]=t[n]);return e.default=t,e}var Aa=an(),mi=hn(Aa),Ca=oi(),Ra=dn(Ca),Ma=X(),Ha=dn(Ma),Na=F(),cn=hn(Na),Da=hi(),gi=hn(Da),Ba=pi(),Qa=dn(Ba);function vi(){var t=new mi.HandlebarsEnvironment;return cn.extend(t,mi),t.SafeString=Ra.default,t.Exception=Ha.default,t.Utils=cn,t.escapeExpression=cn.escapeExpression,t.VM=gi,t.template=function(e){return gi.template(e,t)},t}var xe=vi();xe.create=vi;Qa.default(xe);xe.default=xe;at.default=xe;yi.exports=at.default});var zi=L((ji,Wi)=>{(function(){var t=function(e){var n=new t.Builder;return n.pipeline.add(t.trimmer,t.stopWordFilter,t.stemmer),n.searchPipeline.add(t.stemmer),e.call(n,n),n.build()};t.version="2.3.9";t.utils={},t.utils.warn=function(e){return function(n){e.console&&console.warn&&console.warn(n)}}(this),t.utils.asString=function(e){return e==null?"":e.toString()},t.utils.clone=function(e){if(e==null)return e;for(var n=Object.create(null),r=Object.keys(e),i=0;i0){var c=t.utils.clone(n)||{};c.position=[a,u],c.index=s.length,s.push(new t.Token(r.slice(a,o),c))}a=o+1}}return s},t.tokenizer.separator=/[\s\-]+/;t.Pipeline=function(){this._stack=[]},t.Pipeline.registeredFunctions=Object.create(null),t.Pipeline.registerFunction=function(e,n){n in this.registeredFunctions&&t.utils.warn("Overwriting existing registered function: "+n),e.label=n,t.Pipeline.registeredFunctions[e.label]=e},t.Pipeline.warnIfFunctionNotRegistered=function(e){var n=e.label&&e.label in this.registeredFunctions;n||t.utils.warn(`Function is not registered with pipeline. This may cause problems when serialising the index. -`,e)},t.Pipeline.load=function(e){var n=new t.Pipeline;return e.forEach(function(r){var i=t.Pipeline.registeredFunctions[r];if(i)n.add(i);else throw new Error("Cannot load unregistered function: "+r)}),n},t.Pipeline.prototype.add=function(){var e=Array.prototype.slice.call(arguments);e.forEach(function(n){t.Pipeline.warnIfFunctionNotRegistered(n),this._stack.push(n)},this)},t.Pipeline.prototype.after=function(e,n){t.Pipeline.warnIfFunctionNotRegistered(n);var r=this._stack.indexOf(e);if(r==-1)throw new Error("Cannot find existingFn");r=r+1,this._stack.splice(r,0,n)},t.Pipeline.prototype.before=function(e,n){t.Pipeline.warnIfFunctionNotRegistered(n);var r=this._stack.indexOf(e);if(r==-1)throw new Error("Cannot find existingFn");this._stack.splice(r,0,n)},t.Pipeline.prototype.remove=function(e){var n=this._stack.indexOf(e);n!=-1&&this._stack.splice(n,1)},t.Pipeline.prototype.run=function(e){for(var n=this._stack.length,r=0;r1&&(oe&&(r=s),o!=e);)i=r-n,s=n+Math.floor(i/2),o=this.elements[s*2];if(o==e||o>e)return s*2;if(ol?c+=2:a==l&&(n+=r[u+1]*i[c+1],u+=2,c+=2);return n},t.Vector.prototype.similarity=function(e){return this.dot(e)/this.magnitude()||0},t.Vector.prototype.toArray=function(){for(var e=new Array(this.elements.length/2),n=1,r=0;n0){var o=s.str.charAt(0),a;o in s.node.edges?a=s.node.edges[o]:(a=new t.TokenSet,s.node.edges[o]=a),s.str.length==1&&(a.final=!0),i.push({node:a,editsRemaining:s.editsRemaining,str:s.str.slice(1)})}if(s.editsRemaining!=0){if("*"in s.node.edges)var l=s.node.edges["*"];else{var l=new t.TokenSet;s.node.edges["*"]=l}if(s.str.length==0&&(l.final=!0),i.push({node:l,editsRemaining:s.editsRemaining-1,str:s.str}),s.str.length>1&&i.push({node:s.node,editsRemaining:s.editsRemaining-1,str:s.str.slice(1)}),s.str.length==1&&(s.node.final=!0),s.str.length>=1){if("*"in s.node.edges)var u=s.node.edges["*"];else{var u=new t.TokenSet;s.node.edges["*"]=u}s.str.length==1&&(u.final=!0),i.push({node:u,editsRemaining:s.editsRemaining-1,str:s.str.slice(1)})}if(s.str.length>1){var c=s.str.charAt(0),d=s.str.charAt(1),h;d in s.node.edges?h=s.node.edges[d]:(h=new t.TokenSet,s.node.edges[d]=h),s.str.length==1&&(h.final=!0),i.push({node:h,editsRemaining:s.editsRemaining-1,str:c+s.str.slice(2)})}}}return r},t.TokenSet.fromString=function(e){for(var n=new t.TokenSet,r=n,i=0,s=e.length;i=e;n--){var r=this.uncheckedNodes[n],i=r.child.toString();i in this.minimizedNodes?r.parent.edges[r.char]=this.minimizedNodes[i]:(r.child._str=i,this.minimizedNodes[i]=r.child),this.uncheckedNodes.pop()}};t.Index=function(e){this.invertedIndex=e.invertedIndex,this.fieldVectors=e.fieldVectors,this.tokenSet=e.tokenSet,this.fields=e.fields,this.pipeline=e.pipeline},t.Index.prototype.search=function(e){return this.query(function(n){var r=new t.QueryParser(e,n);r.parse()})},t.Index.prototype.query=function(e){for(var n=new t.Query(this.fields),r=Object.create(null),i=Object.create(null),s=Object.create(null),o=Object.create(null),a=Object.create(null),l=0;l1?this._b=1:this._b=e},t.Builder.prototype.k1=function(e){this._k1=e},t.Builder.prototype.add=function(e,n){var r=e[this._ref],i=Object.keys(this._fields);this._documents[r]=n||{},this.documentCount+=1;for(var s=0;s=this.length)return t.QueryLexer.EOS;var e=this.str.charAt(this.pos);return this.pos+=1,e},t.QueryLexer.prototype.width=function(){return this.pos-this.start},t.QueryLexer.prototype.ignore=function(){this.start==this.pos&&(this.pos+=1),this.start=this.pos},t.QueryLexer.prototype.backup=function(){this.pos-=1},t.QueryLexer.prototype.acceptDigitRun=function(){var e,n;do e=this.next(),n=e.charCodeAt(0);while(n>47&&n<58);e!=t.QueryLexer.EOS&&this.backup()},t.QueryLexer.prototype.more=function(){return this.pos1&&(e.backup(),e.emit(t.QueryLexer.TERM)),e.ignore(),e.more())return t.QueryLexer.lexText},t.QueryLexer.lexEditDistance=function(e){return e.ignore(),e.acceptDigitRun(),e.emit(t.QueryLexer.EDIT_DISTANCE),t.QueryLexer.lexText},t.QueryLexer.lexBoost=function(e){return e.ignore(),e.acceptDigitRun(),e.emit(t.QueryLexer.BOOST),t.QueryLexer.lexText},t.QueryLexer.lexEOS=function(e){e.width()>0&&e.emit(t.QueryLexer.TERM)},t.QueryLexer.termSeparator=t.tokenizer.separator,t.QueryLexer.lexText=function(e){for(;;){var n=e.next();if(n==t.QueryLexer.EOS)return t.QueryLexer.lexEOS;if(n.charCodeAt(0)==92){e.escapeCharacter();continue}if(n==":")return t.QueryLexer.lexField;if(n=="~")return e.backup(),e.width()>0&&e.emit(t.QueryLexer.TERM),t.QueryLexer.lexEditDistance;if(n=="^")return e.backup(),e.width()>0&&e.emit(t.QueryLexer.TERM),t.QueryLexer.lexBoost;if(n=="+"&&e.width()===1||n=="-"&&e.width()===1)return e.emit(t.QueryLexer.PRESENCE),t.QueryLexer.lexText;if(n.match(t.QueryLexer.termSeparator))return t.QueryLexer.lexTerm}},t.QueryParser=function(e,n){this.lexer=new t.QueryLexer(e),this.query=n,this.currentClause={},this.lexemeIdx=0},t.QueryParser.prototype.parse=function(){this.lexer.run(),this.lexemes=this.lexer.lexemes;for(var e=t.QueryParser.parseClause;e;)e=e(this);return this.query},t.QueryParser.prototype.peekLexeme=function(){return this.lexemes[this.lexemeIdx]},t.QueryParser.prototype.consumeLexeme=function(){var e=this.peekLexeme();return this.lexemeIdx+=1,e},t.QueryParser.prototype.nextClause=function(){var e=this.currentClause;this.query.clause(e),this.currentClause={}},t.QueryParser.parseClause=function(e){var n=e.peekLexeme();if(n!=null)switch(n.type){case t.QueryLexer.PRESENCE:return t.QueryParser.parsePresence;case t.QueryLexer.FIELD:return t.QueryParser.parseField;case t.QueryLexer.TERM:return t.QueryParser.parseTerm;default:var r="expected either a field or a term, found "+n.type;throw n.str.length>=1&&(r+=" with value '"+n.str+"'"),new t.QueryParseError(r,n.start,n.end)}},t.QueryParser.parsePresence=function(e){var n=e.consumeLexeme();if(n!=null){switch(n.str){case"-":e.currentClause.presence=t.Query.presence.PROHIBITED;break;case"+":e.currentClause.presence=t.Query.presence.REQUIRED;break;default:var r="unrecognised presence operator'"+n.str+"'";throw new t.QueryParseError(r,n.start,n.end)}var i=e.peekLexeme();if(i==null){var r="expecting term or field, found nothing";throw new t.QueryParseError(r,n.start,n.end)}switch(i.type){case t.QueryLexer.FIELD:return t.QueryParser.parseField;case t.QueryLexer.TERM:return t.QueryParser.parseTerm;default:var r="expecting term or field, found '"+i.type+"'";throw new t.QueryParseError(r,i.start,i.end)}}},t.QueryParser.parseField=function(e){var n=e.consumeLexeme();if(n!=null){if(e.query.allFields.indexOf(n.str)==-1){var r=e.query.allFields.map(function(o){return"'"+o+"'"}).join(", "),i="unrecognised field '"+n.str+"', possible fields: "+r;throw new t.QueryParseError(i,n.start,n.end)}e.currentClause.fields=[n.str];var s=e.peekLexeme();if(s==null){var i="expecting term, found nothing";throw new t.QueryParseError(i,n.start,n.end)}switch(s.type){case t.QueryLexer.TERM:return t.QueryParser.parseTerm;default:var i="expecting term, found '"+s.type+"'";throw new t.QueryParseError(i,s.start,s.end)}}},t.QueryParser.parseTerm=function(e){var n=e.consumeLexeme();if(n!=null){e.currentClause.term=n.str.toLowerCase(),n.str.indexOf("*")!=-1&&(e.currentClause.usePipeline=!1);var r=e.peekLexeme();if(r==null){e.nextClause();return}switch(r.type){case t.QueryLexer.TERM:return e.nextClause(),t.QueryParser.parseTerm;case t.QueryLexer.FIELD:return e.nextClause(),t.QueryParser.parseField;case t.QueryLexer.EDIT_DISTANCE:return t.QueryParser.parseEditDistance;case t.QueryLexer.BOOST:return t.QueryParser.parseBoost;case t.QueryLexer.PRESENCE:return e.nextClause(),t.QueryParser.parsePresence;default:var i="Unexpected lexeme type '"+r.type+"'";throw new t.QueryParseError(i,r.start,r.end)}}},t.QueryParser.parseEditDistance=function(e){var n=e.consumeLexeme();if(n!=null){var r=parseInt(n.str,10);if(isNaN(r)){var i="edit distance must be numeric";throw new t.QueryParseError(i,n.start,n.end)}e.currentClause.editDistance=r;var s=e.peekLexeme();if(s==null){e.nextClause();return}switch(s.type){case t.QueryLexer.TERM:return e.nextClause(),t.QueryParser.parseTerm;case t.QueryLexer.FIELD:return e.nextClause(),t.QueryParser.parseField;case t.QueryLexer.EDIT_DISTANCE:return t.QueryParser.parseEditDistance;case t.QueryLexer.BOOST:return t.QueryParser.parseBoost;case t.QueryLexer.PRESENCE:return e.nextClause(),t.QueryParser.parsePresence;default:var i="Unexpected lexeme type '"+s.type+"'";throw new t.QueryParseError(i,s.start,s.end)}}},t.QueryParser.parseBoost=function(e){var n=e.consumeLexeme();if(n!=null){var r=parseInt(n.str,10);if(isNaN(r)){var i="boost must be numeric";throw new t.QueryParseError(i,n.start,n.end)}e.currentClause.boost=r;var s=e.peekLexeme();if(s==null){e.nextClause();return}switch(s.type){case t.QueryLexer.TERM:return e.nextClause(),t.QueryParser.parseTerm;case t.QueryLexer.FIELD:return e.nextClause(),t.QueryParser.parseField;case t.QueryLexer.EDIT_DISTANCE:return t.QueryParser.parseEditDistance;case t.QueryLexer.BOOST:return t.QueryParser.parseBoost;case t.QueryLexer.PRESENCE:return e.nextClause(),t.QueryParser.parsePresence;default:var i="Unexpected lexeme type '"+s.type+"'";throw new t.QueryParseError(i,s.start,s.end)}}},function(e,n){typeof define=="function"&&define.amd?define(n):typeof ji=="object"?Wi.exports=n():e.lunr=n()}(this,function(){return t})})()});var Yn=new URLSearchParams(window.location.search),Jn=window.self!==window.parent,Pt=Jn&&Yn.has("preview"),Ot=Jn&&Yn.has("hint"),A=Pt||Ot;function Ae(){return window.sidebarNodes||{}}function Xn(){return window.versionNodes||[]}var f=document.querySelector.bind(document),M=document.querySelectorAll.bind(document);function Zn(t){return t.replace(/[\-\[\]{}()*+?.,\\\^$|#\s]/g,"\\$&")}function Re(t){return String(t).replace(/&/g,"&").replace(//g,">").replace(/"/g,""")}function Me(){return document.getElementById("main").dataset.type}var Ce=["H1","H2","H3","H4","H5","H6"];function He(t=!1){let e=window.location.hash.replace(/^#/,"");if(!e)return t?document.getElementById("top-content"):null;let n=document.getElementById(e);if(!n)return null;if(n.matches(".detail"))return n;if(Ce.includes(n.tagName))return It(n);let r=Ms(n);return r||document.getElementById("top-content")}function Ms(t){let e=t.previousElementSibling;for(;e;){if(Ce.includes(e.tagName))return It(e);e=e.previousElementSibling}let n=t.parentNode;for(;n;){for(e=n.previousElementSibling;e;){if(Ce.includes(e.tagName))return It(e);e=e.previousElementSibling}n=n.parentNode}return null}function It(t){let e=document.createElement("div"),n=[t],r=t;for(;(r=r.nextSibling)&&!(Ce.includes(r.tagName)&&r.tagName<=t.tagName);)n.push(r);return e.append(...n),e}function er(t){return new URLSearchParams(window.location.search).get(t)}function At(t){return fetch(t).then(e=>e.ok).catch(()=>!1)}function he(t){return!t||t.trim()===""}function tr(t,e){let n;return function(...i){clearTimeout(n),n=setTimeout(()=>{n=null,t(...i)},e)}}function Ne(){return document.head.querySelector("meta[name=project][content]").content}function De(){return document.documentElement.classList.contains("apple-os")}function E(t,e,n){let r=document.createElement(t);for(let i in e)e[i]!=null&&r.setAttribute(i,e[i]);return n&&r.replaceChildren(...n),r}if(Pt&&A){let t=He(!0);if(t){document.body.classList.add("preview"),document.getElementById("content").replaceChildren(...t.childNodes);let e=document.getElementsByTagName("a:not([target=_blank]");for(let n of e)n.setAttribute("target","_parent");window.scrollTo(0,0),document.body.style.position="fixed",setTimeout(nr),window.addEventListener("resize",nr)}}function nr(){let t={type:"preview",contentHeight:document.getElementById("content").parentElement.offsetHeight};window.parent.postMessage(t,"*")}var ie={plain:"plain",function:"function",module:"module"},Hs=[{href:"typespecs.html#basic-types",hint:{kind:ie.plain,description:"Basic type"}},{href:"typespecs.html#literals",hint:{kind:ie.plain,description:"Literal"}},{href:"typespecs.html#built-in-types",hint:{kind:ie.plain,description:"Built-in type"}}],Be={cancelHintFetching:null};function rr(t){if(sr(t))return!0;let e=/#.*\//;return t.includes("#")&&!e.test(t)?!1:t.includes(".html")}function ir(t){let e=sr(t);return e?Promise.resolve(e):Ns(t)}function sr(t){let e=Hs.find(n=>t.includes(n.href));return e?e.hint:null}function Ns(t){let e=t.replace(".html",".html?hint=true");return new Promise((n,r)=>{let i=document.createElement("iframe");i.setAttribute("src",e),i.style.display="none";function s(a){let{href:l,hint:u}=a.data;e===l&&(o(),n(u))}Be.cancelHintFetching=()=>{o(),r(new Error("cancelled"))};function o(){i.remove(),window.removeEventListener("message",s),Be.cancelHintFetching=null}window.addEventListener("message",s),document.body.appendChild(i)})}function or(){Be.cancelHintFetching&&Be.cancelHintFetching()}function ar(t){let n=t.querySelector("h1").textContent,r=t.querySelector(".docstring > p"),i=r?r.innerHTML:"";return{kind:ie.function,title:n.trim(),description:i.trim()}}function lr(t){let n=t.querySelector("h1 > span").textContent,r=t.querySelector("#moduledoc p"),i=r?r.innerHTML:"";return{kind:ie.module,title:n.trim(),description:i.trim()}}if(Ot&&A){let t=He(),e=t?ar(t):["modules","tasks"].includes(Me())?lr(f(".content-inner")):null;if(e){let n={hint:{...e,version:Ne()},href:window.location.href};window.parent.postMessage(n,"*")}f(".content-inner")?.replaceChildren()}var Ct="ex_doc:settings",ur="dark",Rt="system",Mt="dark",Ht="light";var Ds={tooltips:!0,theme:null,livebookUrl:null},Nt=class{constructor(){this._subscribers=[],this._settings=Ds,this._loadSettings()}get(){return this._settings}update(e){let n=this._settings;this._settings={...this._settings,...e},this._subscribers.forEach(r=>r(this._settings,n)),this._storeSettings()}getAndSubscribe(e){this._subscribers.push(e),e(this._settings)}_loadSettings(){try{let e=localStorage.getItem(Ct);if(e){let n=JSON.parse(e);this._settings={...this._settings,...n}}this._loadSettingsLegacy()}catch(e){console.error(`Failed to load settings: ${e}`)}}_storeSettings(){try{this._storeSettingsLegacy(),localStorage.setItem(Ct,JSON.stringify(this._settings))}catch(e){console.error(`Failed to persist settings: ${e}`)}}_loadSettingsLegacy(){localStorage.getItem("tooltipsDisabled")!==null&&(this._settings={...this._settings,tooltips:!1}),localStorage.getItem("night-mode")==="true"&&(this._settings={...this._settings,nightMode:!0}),this._settings.nightMode===!0&&(this._settings={...this._settings,theme:"dark"})}_storeSettingsLegacy(){this._settings.tooltips?localStorage.removeItem("tooltipsDisabled"):localStorage.setItem("tooltipsDisabled","true"),this._settings.nightMode!==null?localStorage.setItem("night-mode",this._settings.nightMode===!0?"true":"false"):localStorage.removeItem("night-mode"),this._settings.theme!==null?(localStorage.setItem("night-mode",this._settings.theme==="dark"?"true":"false"),this._settings.nightMode=this._settings.theme==="dark"):(delete this._settings.nightMode,localStorage.removeItem("night-mode"))}},H=new Nt;var cr=!1,Qe=null,J=null;function dr(t){cr||(cr=!0,J=document.getElementById("toast"),J?.addEventListener("click",()=>{clearTimeout(Qe),J.classList.remove("show")})),J&&(clearTimeout(Qe),J.innerText=t,J.classList.add("show"),Qe=setTimeout(()=>{J.classList.remove("show"),Qe=setTimeout(function(){J.innerText=""},1e3)},5e3))}var Dt=[Rt,Mt,Ht],hr=window.matchMedia("(prefers-color-scheme: dark)");H.getAndSubscribe(fr);hr.addEventListener("change",fr);function fr(){let t=qe(),e=t===Mt||t!==Ht&&hr.matches;document.body.classList.toggle(ur,e)}function pr(){let t=Dt[Dt.indexOf(qe())+1]||Dt[0];H.update({theme:t}),dr(`Set theme to "${t}"`)}function qe(){return new URLSearchParams(window.location.search).get("theme")||H.get().theme||Rt}var _r=Y(wr());var Qt="sidebar_state",qt="closed",br="open",Er="sidebar_width";var Ve="sidebar-open",$e="sidebar-transition";var xr=!1;function kr(){if(xr)return;xr=!0;let t=document.getElementById("sidebar-list-nav");if(!t)return;let e=Me(),n={extras:t.dataset.extras||"Pages",modules:"Modules",tasks:'Mix Tasks'};Object.entries(n).forEach(([r,i])=>{let s=Ae()[r];if(!s?.length)return;let o=`${r}-list-tab-button`,a=`${r}-tab-panel`,l=r===e,u=E("button",{id:o,role:"tab",tabindex:l?0:-1,"aria-selected":l||void 0,"aria-controls":a});u.innerHTML=i,u.addEventListener("keydown",ro),u.addEventListener("click",io),t.appendChild(E("li",{},[u]));let c=E("ul",{class:"full-list"});c.addEventListener("click",so);let d=E("div",{id:a,class:"sidebar-tabpanel",role:"tabpanel","aria-labelledby":o,hidden:l?void 0:""},[c]);document.getElementById("sidebar").appendChild(d);let h="",p,g;c.replaceChildren(...s.flatMap(m=>{let v=[],w=Array.isArray(m.headers),x=w?void 0:"no",P=m?.url||`${m.id}.html`;return m.group!==h&&(v.push(E("li",{class:"group",translate:x},[m.group])),h=m.group,p=void 0),m.nested_context&&m.nested_context!==p?(p=m.nested_context,g!==p&&v.push(E("li",{class:"nesting-context",translate:"no","aria-hidden":!0},[p]))):g=m.title,v.push(E("li",{},[E("a",{href:P,translate:x},[m.nested_title||m.title,m.url?E("i",{class:"external-link ri-external-link-line"}):null].filter(Boolean)),...Vt(`node-${m.id}-headers`,w?to(m):no(m))])),v}))}),Ft(),requestAnimationFrame(Sr),window.addEventListener("hashchange",Ft),window.addEventListener("exdoc:loaded",Ft)}function Vt(t,e){return e.length?[E("button",{"aria-label":"expand","aria-expanded":!1,"aria-controls":t}),E("ul",{id:t},e)]:[]}function to(t){return t.headers.map(({id:e,anchor:n})=>E("li",{},[E("a",{href:`${t.id}.html#${n}`},[e])]))}function no(t){let e=[];return t.sections?.length&&e.push(E("li",{},[E("a",{href:`${t.id}.html#content`},["Sections"]),...Vt(`${t.id}-sections-list`,t.sections.map(({id:n,anchor:r})=>E("li",{},[E("a",{href:`${t.id}.html#${r}`},[n])])))])),t.nodeGroups&&(e.push(E("li",{},[E("a",{href:`${t.id}.html#summary`},["Summary"])])),e.push(...t.nodeGroups.map(({key:n,name:r,nodes:i})=>E("li",{},[E("a",{href:`${t.id}.html#${n}`},[r]),...Vt(`node-${t.id}-group-${n}-list`,i.map(({anchor:s,title:o,id:a})=>E("li",{},[E("a",{href:`${t.id}.html#${s}`,title:o,translate:"no"},[a])])))])))),e}function $t(t){let e=document.getElementById("sidebar-list-nav").querySelector("[aria-selected]");e!==t&&(e&&(e.removeAttribute("aria-selected"),e.setAttribute("tabindex","-1"),document.getElementById(e.getAttribute("aria-controls")).setAttribute("hidden","hidden")),t.setAttribute("aria-selected","true"),t.setAttribute("tabindex","0"),document.getElementById(t.getAttribute("aria-controls")).removeAttribute("hidden"))}function Sr(){f("#sidebar [role=tabpanel]:not([hidden]) a[aria-selected]")?.scrollIntoView()}function Ft(){let t=document.getElementById("sidebar"),{pathname:e,hash:n}=window.location,r=e.split("/").pop().replace(/\.html$/,"")+".html",i=t.querySelector(`li a[href="${r+n}"]`)||t.querySelector(`li a[href="${r}"]`);if(!i)return;t.querySelectorAll(".full-list a[aria-selected]").forEach(o=>{o.removeAttribute("aria-selected")}),t.querySelectorAll(".full-list button[aria-expanded=true]").forEach(o=>{o.setAttribute("aria-expanded",!1)});let s=i.parentElement;for(;s;){if(s.tagName==="LI"){let o=s.firstChild;o.setAttribute("aria-selected",o.getAttribute("href")===r?"page":"true");let a=o.nextSibling;a?.tagName==="BUTTON"&&a.setAttribute("aria-expanded",!0)}else if(s.role==="tabpanel"){s.hasAttribute("hidden")&&$t(document.getElementById(s.getAttribute("aria-labelledby")));break}s=s.parentElement}}function ro(t){if(!["ArrowRight","ArrowLeft"].includes(t.key))return;let e=Array.from(M('#sidebar-list-nav [role="tab"]')),r=e.indexOf(t.currentTarget)+(t.key==="ArrowRight"?1:-1),i=e.at(r%e.length);$t(i),i.focus()}function io(t){$t(t.currentTarget),Sr()}function so(t){let e=t.target;e.tagName==="BUTTON"&&e.setAttribute("aria-expanded",e.getAttribute("aria-expanded")==="false")}var ao=300,Pr=".sidebar-toggle",Ut=window.matchMedia(`screen and (max-width: ${768}px)`);if(!A){window.addEventListener("exdoc:loaded",Lr);let t=document.getElementById("sidebar"),e=f(Pr);e.addEventListener("click",Ue),document.body.addEventListener("click",i=>{Ut.matches&&jt()&&!t.contains(i.target)&&!e.contains(i.target)&&Ue()});let n=window.innerWidth;window.addEventListener("resize",(0,_r.default)(()=>{n!==window.innerWidth&&(n=window.innerWidth,Lr())},100));let r=new ResizeObserver(([i])=>{if(!i)return;let s=i.contentRect.width;sessionStorage.setItem(Er,s),document.body.style.setProperty("--sidebarWidth",`${s}px`)});t.addEventListener("mousedown",()=>r.observe(t)),t.addEventListener("mouseup",()=>r.unobserve(t)),window.addEventListener("hashchange",lo)}function Lr(){let e=sessionStorage.getItem(Qt)!==qt&&!Ut.matches;Ir(e)}function Ue(){let t=!jt();return sessionStorage.setItem(Qt,t?br:qt),Wt(t)}function jt(){return document.body.classList.contains(Ve)}function Or(){return document.body.classList.contains(Ve)&&!document.body.classList.contains($e)}function Ir(t){t&&kr(),document.body.classList.toggle(Ve,t),f(Pr).setAttribute("aria-expanded",t?"true":"false")}var Tr;function Wt(t){return new Promise(e=>{document.body.classList.add($e),document.body.scrollTop,Ir(t),clearTimeout(Tr),Tr=setTimeout(()=>{document.body.classList.remove($e),e()},ao)})}function Ar(){return Wt(!0)}function lo(){Ut.matches&&jt()&&Wt(!1)}var wi=Y(ae());var fn=Y(ae());fn.registerHelper("isArray",function(t,e){return Array.isArray(t)?e.fn(this):e.inverse(this)});fn.registerHelper("isNonEmptyArray",function(t,e){return Array.isArray(t)&&t.length>0?e.fn(this):e.inverse(this)});var bi=wi.template({1:function(t,e,n,r,i){var s,o,a=e??(t.nullContext||{}),l=t.hooks.helperMissing,u="function",c=t.escapeExpression,d=t.lookupProperty||function(h,p){if(Object.prototype.hasOwnProperty.call(h,p))return h[p]};return'

    -`},useData:!0});var pe=".autocomplete",pt=".autocomplete-suggestions",ft=".autocomplete-suggestion",C={autocompleteSuggestions:[],previewOpen:!1,selectedIdx:-1};function dl(){f(pe).classList.add("shown")}function vn(){f(pe).classList.remove("shown")}function Ai(){return f(pe).classList.contains("shown")}function yn(t){C.autocompleteSuggestions=Ti(t),C.selectedIdx=-1,he(t)?vn():(hl({term:t,suggestions:C.autocompleteSuggestions}),mt(0),dl())}function hl({term:t,suggestions:e}){let n=Ii({suggestions:e,term:t}),r=f(pe);r.innerHTML=n}function wn(){return C.selectedIdx===-1?null:C.autocompleteSuggestions[C.selectedIdx]}function mt(t){Ri(fl(t))}function Ci(t){if(t.data.type==="preview"){let{contentHeight:e}=t.data,n=f(".autocomplete-preview");n&&(n.style.height=`${e+32}px`,n.classList.remove("loading"))}}function Ri(t){C.selectedIdx=t;let e=f(pt),n=f(`${ft}.selected`),r=f(`${ft}[data-index="${C.selectedIdx}"]`);if(n&&n.classList.remove("selected"),r){if(C.previewOpen){Hi(),window.addEventListener("message",Ci),e.classList.add("previewing");let i=document.createElement("div");i.classList.add("autocomplete-preview"),i.classList.add("loading");let s=r.href.replace(".html",`.html?preview=true&theme=${qe()}`),o=document.createElement("iframe");o.setAttribute("src",s),i.appendChild(document.createElement("div")),i.appendChild(document.createElement("span")),i.appendChild(o),r.parentNode.insertBefore(i,r.nextSibling)}r.classList.add("selected"),r.scrollIntoView({block:"nearest"})}else e&&(e.scrollTop=0)}function Mi(){C.previewOpen?gt():bn()}function gt(){C.previewOpen=!1;let t=f(pt);t&&t.classList.remove("previewing"),Hi()}function bn(t){C.previewOpen=!0,t?t=t.closest(ft):t=f(`${ft}[data-index="${C.selectedIdx}"]`),t&&Ri(parseInt(t.dataset.index))}function Hi(){let t=f(".autocomplete-preview");t&&(t.remove(),window.removeEventListener("message",Ci))}function fl(t){let e=C.autocompleteSuggestions.length+1;return(C.selectedIdx+t+1+e)%e-1}var ke="form.search-bar input",pl="form.search-bar .search-close-button";A||window.addEventListener("exdoc:loaded",ml);function ml(){gl(),window.onTogglePreviewClick=function(t,e){t.preventDefault(),t.stopImmediatePropagation(),xn(),e?bn(t.target):gt()}}function Bi(t){let e=f(ke);e.value=t}function xn(){let t=f(ke);document.body.classList.add("search-focused"),t.focus()}function gl(){let t=f(ke);if(document.querySelector('meta[name="exdoc:autocomplete"][content="off"]'))return t.addEventListener("keydown",e=>{e.key==="Enter"&&Ni(e)}),!0;t.addEventListener("keydown",e=>{let n=De();e.key==="Escape"?(vt(),t.blur()):e.key==="Enter"?Ni(e):e.key==="ArrowUp"||n&&e.ctrlKey&&e.key==="p"?(mt(-1),e.preventDefault()):e.key==="ArrowDown"||n&&e.ctrlKey&&e.key==="n"?(mt(1),e.preventDefault()):e.key==="Tab"&&wn()!==null&&(Mi(),e.preventDefault())}),t.addEventListener("input",e=>{yn(e.target.value)}),t.addEventListener("focus",e=>{document.body.classList.contains("search-focused")||(document.body.classList.add("search-focused"),yn(e.target.value))}),t.addEventListener("blur",e=>{let n=e.relatedTarget,r=f(pt);if(n&&r&&r.contains(n))return setTimeout(()=>{Ai()&&t.focus()},1e3),null;yt()}),f(pe).addEventListener("click",e=>{e.shiftKey||e.ctrlKey?t.focus():(vt(),yt())}),f(pl).addEventListener("click",e=>{vt(),yt()})}function Ni(t){let e=f(ke),n=t.shiftKey||t.ctrlKey,r=wn();t.preventDefault();let i=n?"_blank":"_self",s=document.createElement("a");if(s.setAttribute("target",i),r)s.setAttribute("href",r.link);else{let o=document.querySelector('meta[name="exdoc:full-text-search-url"]'),a=o?o.getAttribute("content"):"search.html?q=";s.setAttribute("href",`${a}${encodeURIComponent(e.value)}`)}s.click(),n||(vt(),yt())}function vt(){let t=f(ke);t.value=""}function yt(){gt(),document.body.classList.remove("search-focused"),vn()}var En,Di=2;window.addEventListener("scroll",function(){let t=window.scrollY;if(En!==void 0){let e=t-En;t===0||e>Di?document.body.classList.remove("scroll-sticky"):t>0&&-e>Di&&document.body.classList.add("scroll-sticky")}En=Math.max(0,t)},!1);var Qi=Y(ae());var qi=Qi.template({1:function(t,e,n,r,i){var s,o=t.lookupProperty||function(a,l){if(Object.prototype.hasOwnProperty.call(a,l))return a[l]};return`
    +`},useData:!0});var pe=".autocomplete",pt=".autocomplete-suggestions",ft=".autocomplete-suggestion",C={autocompleteSuggestions:[],previewOpen:!1,selectedIdx:-1};function hl(){f(pe).classList.add("shown")}function vn(){f(pe).classList.remove("shown")}function Ai(){return f(pe).classList.contains("shown")}function yn(t){C.autocompleteSuggestions=Ti(t),C.selectedIdx=-1,he(t)?vn():(fl({term:t,suggestions:C.autocompleteSuggestions}),mt(0),hl())}function fl({term:t,suggestions:e}){let n=Ii({suggestions:e,term:t}),r=f(pe);r.innerHTML=n}function wn(){return C.selectedIdx===-1?null:C.autocompleteSuggestions[C.selectedIdx]}function mt(t){Ri(pl(t))}function Ci(t){if(t.data.type==="preview"){let{contentHeight:e}=t.data,n=f(".autocomplete-preview");n&&(n.style.height=`${e+32}px`,n.classList.remove("loading"))}}function Ri(t){C.selectedIdx=t;let e=f(pt),n=f(`${ft}.selected`),r=f(`${ft}[data-index="${C.selectedIdx}"]`);if(n&&n.classList.remove("selected"),r){if(C.previewOpen){Hi(),window.addEventListener("message",Ci),e.classList.add("previewing");let i=document.createElement("div");i.classList.add("autocomplete-preview"),i.classList.add("loading");let s=r.href.replace(".html",`.html?preview=true&theme=${qe()}`),o=document.createElement("iframe");o.setAttribute("src",s),i.appendChild(document.createElement("div")),i.appendChild(document.createElement("span")),i.appendChild(o),r.parentNode.insertBefore(i,r.nextSibling)}r.classList.add("selected"),r.scrollIntoView({block:"nearest"})}else e&&(e.scrollTop=0)}function Mi(){C.previewOpen?gt():bn()}function gt(){C.previewOpen=!1;let t=f(pt);t&&t.classList.remove("previewing"),Hi()}function bn(t){C.previewOpen=!0,t?t=t.closest(ft):t=f(`${ft}[data-index="${C.selectedIdx}"]`),t&&Ri(parseInt(t.dataset.index))}function Hi(){let t=f(".autocomplete-preview");t&&(t.remove(),window.removeEventListener("message",Ci))}function pl(t){let e=C.autocompleteSuggestions.length+1;return(C.selectedIdx+t+1+e)%e-1}var me="form.search-bar input",ml="form.search-bar .search-close-button";A||window.addEventListener("exdoc:loaded",gl);function gl(){yl(),vl(),window.onTogglePreviewClick=function(t,e){t.preventDefault(),t.stopImmediatePropagation(),xn(),e?bn(t.target):gt()}}function Bi(t){let e=f(me);e.value=t}function xn(){let t=f(me);document.body.classList.add("search-focused"),t.focus()}function vl(){let t=f(me),e=parseInt(document.querySelector('meta[name="exdoc:autocomplete-limit"]').content);e&&(window.autocompleteLimit=e),t.setAttribute("autocomplete-limit",e)}function yl(){let t=f(me);if(document.querySelector('meta[name="exdoc:autocomplete"][content="off"]'))return t.addEventListener("keydown",e=>{e.key==="Enter"&&Ni(e)}),!0;t.addEventListener("keydown",e=>{let n=De();e.key==="Escape"?(vt(),t.blur()):e.key==="Enter"?Ni(e):e.key==="ArrowUp"||n&&e.ctrlKey&&e.key==="p"?(mt(-1),e.preventDefault()):e.key==="ArrowDown"||n&&e.ctrlKey&&e.key==="n"?(mt(1),e.preventDefault()):e.key==="Tab"&&wn()!==null&&(Mi(),e.preventDefault())}),t.addEventListener("input",e=>{yn(e.target.value)}),t.addEventListener("focus",e=>{document.body.classList.contains("search-focused")||(document.body.classList.add("search-focused"),yn(e.target.value))}),t.addEventListener("blur",e=>{let n=e.relatedTarget,r=f(pt);if(n&&r&&r.contains(n))return setTimeout(()=>{Ai()&&t.focus()},1e3),null;yt()}),f(pe).addEventListener("click",e=>{e.shiftKey||e.ctrlKey?t.focus():(vt(),yt())}),f(ml).addEventListener("click",e=>{vt(),yt()})}function Ni(t){let e=f(me),n=t.shiftKey||t.ctrlKey,r=wn();t.preventDefault();let i=n?"_blank":"_self",s=document.createElement("a");if(s.setAttribute("target",i),r)s.setAttribute("href",r.link);else{let o=document.querySelector('meta[name="exdoc:full-text-search-url"]'),a=o?o.getAttribute("content"):"search.html?q=";s.setAttribute("href",`${a}${encodeURIComponent(e.value)}`)}s.click(),n||(vt(),yt())}function vt(){let t=f(me);t.value=""}function yt(){gt(),document.body.classList.remove("search-focused"),vn()}var En,Di=2;window.addEventListener("scroll",function(){let t=window.scrollY;if(En!==void 0){let e=t-En;t===0||e>Di?document.body.classList.remove("scroll-sticky"):t>0&&-e>Di&&document.body.classList.add("scroll-sticky")}En=Math.max(0,t)},!1);var Qi=Y(ae());var qi=Qi.template({1:function(t,e,n,r,i){var s,o=t.lookupProperty||function(a,l){if(Object.prototype.hasOwnProperty.call(a,l))return a[l]};return`
    `+t.escapeExpression(t.lambda((s=e!=null?o(e,"hint"):e)!=null?o(s,"description"):s,e))+`
    `},3:function(t,e,n,r,i){var s,o=t.lambda,a=t.escapeExpression,l=t.lookupProperty||function(u,c){if(Object.prototype.hasOwnProperty.call(u,c))return u[c]};return`
    @@ -70,7 +70,7 @@ See https://handlebarsjs.com/api-reference/runtime-options.html#options-to-contr `+((s=l(n,"if").call(e??(t.nullContext||{}),(s=e!=null?l(e,"hint"):e)!=null?l(s,"description"):s,{name:"if",hash:{},fn:t.program(4,i,0),inverse:t.noop,data:i,loc:{start:{line:12,column:2},end:{line:16,column:9}}}))!=null?s:"")},4:function(t,e,n,r,i){var s,o=t.lookupProperty||function(a,l){if(Object.prototype.hasOwnProperty.call(a,l))return a[l]};return`
    `+((s=t.lambda((s=e!=null?o(e,"hint"):e)!=null?o(s,"description"):s,e))!=null?s:"")+`
    -`},compiler:[8,">= 4.3.0"],main:function(t,e,n,r,i){var s,o=t.lookupProperty||function(a,l){if(Object.prototype.hasOwnProperty.call(a,l))return a[l]};return(s=o(n,"if").call(e??(t.nullContext||{}),e!=null?o(e,"isPlain"):e,{name:"if",hash:{},fn:t.program(1,i,0),inverse:t.program(3,i,0),data:i,loc:{start:{line:1,column:0},end:{line:17,column:7}}}))!=null?s:""},useData:!0});var vl='
    ',yl='.content a:not([data-no-tooltip=""])',kn=".tooltip",Fi=".tooltip .tooltip-body",Vi="body .content-inner",wl="#content",$i="tooltip-shown",Se=10,bl=Se*4,El=768,xl=450,kl=100,le={currentLinkElement:null,hoverDelayTimeout:null};window.addEventListener("exdoc:loaded",Sl);function Sl(){M(yl).forEach(t=>{Ll(t)&&(t.addEventListener("mouseenter",_l),t.addEventListener("mouseleave",Ol))})}function Ll(t){return!(Tl(t.href)||!rr(t.href))}function Tl(t){let e=t.replace(wl,"");return window.location.href.split("#")[0]===e}function _l(t){if(window.innerWidth{ir(e.href).then(Pl).catch(()=>{})},kl)}function Pl(t){let e=qi({isPlain:t.kind===ie.plain,hint:t}),n=f(Fi);n||(f(Vi).insertAdjacentHTML("beforeend",vl),n=f(Fi)),n.innerHTML=e,Il(),f(kn).classList.add($i)}function Ol(){le.currentLinkElement&&(clearTimeout(le.hoverDelayTimeout),or(),le.currentLinkElement=null,f(kn)?.classList.remove($i))}function Il(){if(!le.currentLinkElement)return;let t=f(kn),e=le.currentLinkElement.getBoundingClientRect(),n=f(Vi).getBoundingClientRect(),r=t.getBoundingClientRect(),i=Al(e,n);if(e.left+r.width+Se code:first-child):not(:has(.copy-button))").forEach(t=>{if(!Sn){let r=document.createElement("div");r.innerHTML=Ui,Sn=r.firstChild}let e=Sn.cloneNode(!0);t.appendChild(e);let n;e.addEventListener("click",()=>{clearTimeout(n);let r=Array.from(t.querySelectorAll("code > *:not(.unselectable)")).map(i=>i.textContent).join("");navigator.clipboard.writeText(r),e.classList.add("clicked"),e.disabled=!0,n=setTimeout(()=>{e.classList.remove("clicked"),e.disabled=!1},3e3)})})}var V=Y(zi());var Gi=Y(ae());var Ki=Gi.template({1:function(t,e,n,r,i){var s,o=t.lookupProperty||function(a,l){if(Object.prototype.hasOwnProperty.call(a,l))return a[l]};return" Search results for "+t.escapeExpression((s=(s=o(n,"value")||(e!=null?o(e,"value"):e))!=null?s:t.hooks.helperMissing,typeof s=="function"?s.call(e??(t.nullContext||{}),{name:"value",hash:{},data:i,loc:{start:{line:3,column:27},end:{line:3,column:36}}}):s))+` +`},compiler:[8,">= 4.3.0"],main:function(t,e,n,r,i){var s,o=t.lookupProperty||function(a,l){if(Object.prototype.hasOwnProperty.call(a,l))return a[l]};return(s=o(n,"if").call(e??(t.nullContext||{}),e!=null?o(e,"isPlain"):e,{name:"if",hash:{},fn:t.program(1,i,0),inverse:t.program(3,i,0),data:i,loc:{start:{line:1,column:0},end:{line:17,column:7}}}))!=null?s:""},useData:!0});var wl='
    ',bl='.content a:not([data-no-tooltip=""])',kn=".tooltip",Fi=".tooltip .tooltip-body",Vi="body .content-inner",El="#content",$i="tooltip-shown",Se=10,xl=Se*4,kl=768,Sl=450,Ll=100,le={currentLinkElement:null,hoverDelayTimeout:null};window.addEventListener("exdoc:loaded",Tl);function Tl(){M(bl).forEach(t=>{_l(t)&&(t.addEventListener("mouseenter",Ol),t.addEventListener("mouseleave",Al))})}function _l(t){return!(Pl(t.href)||!rr(t.href))}function Pl(t){let e=t.replace(El,"");return window.location.href.split("#")[0]===e}function Ol(t){if(window.innerWidth{ir(e.href).then(Il).catch(()=>{})},Ll)}function Il(t){let e=qi({isPlain:t.kind===ie.plain,hint:t}),n=f(Fi);n||(f(Vi).insertAdjacentHTML("beforeend",wl),n=f(Fi)),n.innerHTML=e,Cl(),f(kn).classList.add($i)}function Al(){le.currentLinkElement&&(clearTimeout(le.hoverDelayTimeout),or(),le.currentLinkElement=null,f(kn)?.classList.remove($i))}function Cl(){if(!le.currentLinkElement)return;let t=f(kn),e=le.currentLinkElement.getBoundingClientRect(),n=f(Vi).getBoundingClientRect(),r=t.getBoundingClientRect(),i=Rl(e,n);if(e.left+r.width+Se code:first-child):not(:has(.copy-button))").forEach(t=>{if(!Sn){let r=document.createElement("div");r.innerHTML=Ui,Sn=r.firstChild}let e=Sn.cloneNode(!0);t.appendChild(e);let n;e.addEventListener("click",()=>{clearTimeout(n);let r=Array.from(t.querySelectorAll("code > *:not(.unselectable)")).map(i=>i.textContent).join("");navigator.clipboard.writeText(r),e.classList.add("clicked"),e.disabled=!0,n=setTimeout(()=>{e.classList.remove("clicked"),e.disabled=!1},3e3)})})}var V=Y(zi());var Gi=Y(ae());var Ki=Gi.template({1:function(t,e,n,r,i){var s,o=t.lookupProperty||function(a,l){if(Object.prototype.hasOwnProperty.call(a,l))return a[l]};return" Search results for "+t.escapeExpression((s=(s=o(n,"value")||(e!=null?o(e,"value"):e))!=null?s:t.hooks.helperMissing,typeof s=="function"?s.call(e??(t.nullContext||{}),{name:"value",hash:{},data:i,loc:{start:{line:3,column:27},end:{line:3,column:36}}}):s))+` `},3:function(t,e,n,r,i){return` Invalid search `},5:function(t,e,n,r,i){var s,o=t.lookupProperty||function(a,l){if(Object.prototype.hasOwnProperty.call(a,l))return a[l]};return(s=o(n,"each").call(e??(t.nullContext||{}),e!=null?o(e,"results"):e,{name:"each",hash:{},fn:t.program(6,i,0),inverse:t.noop,data:i,loc:{start:{line:10,column:2},end:{line:21,column:11}}}))!=null?s:""},6:function(t,e,n,r,i){var s,o=t.lambda,a=t.escapeExpression,l=t.lookupProperty||function(u,c){if(Object.prototype.hasOwnProperty.call(u,c))return u[c]};return`

    @@ -100,7 +100,7 @@ See https://handlebarsjs.com/api-reference/runtime-options.html#options-to-contr `},compiler:[8,">= 4.3.0"],main:function(t,e,n,r,i){var s,o=e??(t.nullContext||{}),a=t.lookupProperty||function(l,u){if(Object.prototype.hasOwnProperty.call(l,u))return l[u]};return`

    `+((s=a(n,"if").call(o,e!=null?a(e,"value"):e,{name:"if",hash:{},fn:t.program(1,i,0),inverse:t.program(3,i,0),data:i,loc:{start:{line:2,column:2},end:{line:6,column:9}}}))!=null?s:"")+`

    -`+((s=(a(n,"isNonEmptyArray")||e&&a(e,"isNonEmptyArray")||t.hooks.helperMissing).call(o,e!=null?a(e,"results"):e,{name:"isNonEmptyArray",hash:{},fn:t.program(5,i,0),inverse:t.program(9,i,0),data:i,loc:{start:{line:9,column:0},end:{line:44,column:20}}}))!=null?s:"")},useData:!0});var wt=80,Rl="#search";V.default.tokenizer.separator=/\s+/;V.default.QueryLexer.termSeparator=/\s+/;V.default.Pipeline.registerFunction(Xi,"docTokenSplitter");V.default.Pipeline.registerFunction(Zi,"docTrimmer");window.addEventListener("exdoc:loaded",Ml);function Ml(){let t=window.location.pathname;if(t.endsWith("/search.html")||t.endsWith("/search")){let e=er("q");Hl(e)}}async function Hl(t){if(he(t))Ln({value:t});else{Bi(t);let e=await Nl();try{let n=t.replaceAll(/(\B|\\):/g,"\\:"),r=Wl(e.search(n));Ln({value:t,results:r})}catch(n){Ln({value:t,errorMessage:n.message})}}}function Ln({value:t,results:e,errorMessage:n}){let r=f(Rl),i=Ki({value:t,results:e,errorMessage:n});r.innerHTML=i}async function Nl(){let t=await Dl();if(t)return t;let e=$l();return Bl(e),e}async function Dl(){try{let t=sessionStorage.getItem(Ji());if(t){let e=await ql(t);return V.default.Index.load(e)}else return null}catch(t){return console.error("Failed to load index: ",t),null}}async function Bl(t){try{let e=await Ql(t);sessionStorage.setItem(Ji(),e)}catch(e){console.error("Failed to save index: ",e)}}async function Ql(t){let e=new Blob([JSON.stringify(t)],{type:"application/json"}).stream().pipeThrough(new window.CompressionStream("gzip")),r=await(await new Response(e).blob()).arrayBuffer();return Fl(r)}async function ql(t){let e=new Blob([Vl(t)],{type:"application/json"}).stream().pipeThrough(new window.DecompressionStream("gzip")),n=await new Response(e).text();return JSON.parse(n)}function Fl(t){let e="",n=new Uint8Array(t),r=n.byteLength;for(let i=0;i{this.add(t)})})}function Ul(t){t.pipeline.before(V.default.stemmer,Xi)}function Xi(t){let e=[t],n=/\/\d+$/,r=/\:|\./,i=t.toString();if(i.replace(/^[.,;?!]+|[.,;]+$/g,""),i.startsWith("`")&&i.endsWith("`")&&(i=i.slice(1,-1)),n.test(i)){let o=t.toString().replace(n,"");e.push(t.clone().update(()=>o));let a=o.split(r);if(a.length>1){for(let u of a)e.push(t.clone().update(()=>u));let l=t.toString().split(r);e.push(t.clone().update(()=>l[l.length-1]))}i=a[a.length-1]}else i.startsWith("@")?(i=i.substring(1),e.push(t.clone().update(()=>i))):i.startsWith(":")&&(i=i.substring(1),e.push(t.clone().update(()=>i)));let s=i.split(/\_|\-/);if(s.length>1)for(let o of s)e.push(t.clone().update(()=>o));return e}function jl(t){t.pipeline.before(V.default.stemmer,Zi)}function Zi(t){return t.update(function(e){return e.replace(/^[^@:\w]+/,"").replace(/[^\?\!\w]+$/,"")})}function Wl(t){return t.filter(e=>Yi(e.ref)).map(e=>{let n=Yi(e.ref),r=e.matchData.metadata;return{...n,metadata:r,excerpts:zl(n,r)}})}function Yi(t){return searchData.items.find(e=>e.ref===t)||null}function zl(t,e){let{doc:n}=t,i=Object.keys(e).filter(s=>"doc"in e[s]).map(s=>e[s].doc.position.map(([o,a])=>Gl(n,o,a))).reduce((s,o)=>s.concat(o),[]);return i.length===0?[n.slice(0,wt*2)+(wt*20?"...":"",t.slice(r,e),""+Re(t.slice(e,e+n))+"",t.slice(e+n,i),i{t.key==="Escape"&&ue()}),N.querySelector(".modal-close").addEventListener("click",ue),N.addEventListener("click",t=>{t.target===N&&ue()}))}function ts(t){if(!_n)if(N.contains(t.target))Tn=t.target;else{_n=!0;let e=N.querySelectorAll(Kl);Tn===e[0]?e[e.length-1].focus():e[0].focus(),_n=!1,Tn=document.activeElement}}function bt({title:t,body:e}){Yl(),Pn=document.activeElement,document.addEventListener("focus",ts,!0),N.querySelector(".modal-title").innerHTML=t,N.querySelector(".modal-body").innerHTML=e,N.classList.add("shown"),N.focus()}function ue(){N?.classList.remove("shown"),document.removeEventListener("focus",ts,!0),Pn?.focus(),Pn=null}function ns(){return Boolean(N?.classList.contains("shown"))}var rs='
    ';var Jl="https://hexdocs.pm/%%",Xl="https://www.erlang.org/doc/apps/%%",Zl="https://hex.pm/api/packages?search=name:%%*",eu=".display-quick-switch",ss="#quick-switch-input",os="#quick-switch-results",tu=300,nu=9,as=["erts","asn1","common_test","compiler","crypto","debugger","dialyzer","diameter","edoc","eldap","erl_interface","et","eunit","ftp","inets","jinterface","kernel","megaco","mnesia","observer","odbc","os_mon","parsetools","public_key","reltool","runtime_tools","sasl","snmp","ssh","ssl","stdlib","syntax_tools","tftp","tools","wx","xmerl"],ru=["elixir","eex","ex_unit","hex","iex","logger","mix"].concat(as).map(t=>({name:t})),ls=2,B={autocompleteResults:[],selectedIdx:null};A||window.addEventListener("exdoc:loaded",iu);function iu(){M(eu).forEach(t=>{t.addEventListener("click",In)})}function su(t){if(t.key==="Enter"){let e=t.target.value;au(e),t.preventDefault()}else t.key==="ArrowUp"?(is(-1),t.preventDefault()):t.key==="ArrowDown"&&(is(1),t.preventDefault())}function ou(t){let e=t.target.value;if(e.lengthn.json()).then(n=>{Array.isArray(n)&&(B.autocompleteResults=du(t,n),B.selectedIdx=null,f(ss).value.length>=ls&&cu(B.autocompleteResults))})}function cu(t){f(os).replaceChildren(...t.map(({name:e},n)=>{let r=E("div",{class:"quick-switch-result","data-index":n},[e]);return r.addEventListener("click",()=>On(e)),r}))}function du(t,e){return ru.concat(e).filter(n=>n.name.toLowerCase().includes(t.toLowerCase())).filter(n=>n.releases===void 0||n.releases[0].has_docs===!0).slice(0,nu)}function is(t){B.selectedIdx=hu(t);let e=f(".quick-switch-result.selected"),n=f(`.quick-switch-result[data-index="${B.selectedIdx}"]`);e&&e.classList.remove("selected"),n&&n.classList.add("selected")}function hu(t){let e=B.autocompleteResults.length;if(B.selectedIdx===null){if(t>=0)return 0;if(t<0)return e-1}return(B.selectedIdx+t+e)%e}var fu="#settings-modal-content",Rn=[{key:"c",description:"Toggle sidebar",action:Ue},{key:"n",description:"Cycle themes",action:pr},{key:"s",description:"Focus search bar",displayAs:"/ or s",action:An},{key:"/",action:An},{key:"k",hasModifier:!0,action:An},{key:"v",description:"Open/focus version select",action:gu},{key:"g",description:"Go to package docs",displayAs:"g",action:In},{key:"?",displayAs:"?",description:"Bring up this modal",action:vu}],Cn={shortcutBeingPressed:null};A||(document.addEventListener("keydown",pu),document.addEventListener("keyup",mu));function pu(t){if(Cn.shortcutBeingPressed||t.target.matches("input, select, textarea"))return;let e=Rn.find(n=>n.hasModifier?De()&&t.metaKey||t.ctrlKey?n.key===t.key:!1:t.ctrlKey||t.metaKey||t.altKey?!1:n.key===t.key);e&&(Cn.shortcutBeingPressed=e,t.preventDefault(),e.action(t))}function mu(t){Cn.shortcutBeingPressed=null}function An(t){ue(),xn()}function gu(){ue(),Or()?pn():Ar().then(pn)}function vu(){yu()?ue():Mn()}function yu(){return ns()&&f(fu)}var us=Y(ae());var cs=us.template({1:function(t,e,n,r,i){var s,o=t.lookupProperty||function(a,l){if(Object.prototype.hasOwnProperty.call(a,l))return a[l]};return(s=o(n,"if").call(e??(t.nullContext||{}),e!=null?o(e,"description"):e,{name:"if",hash:{},fn:t.program(2,i,0),inverse:t.noop,data:i,loc:{start:{line:40,column:6},end:{line:53,column:13}}}))!=null?s:""},2:function(t,e,n,r,i){var s,o=t.lookupProperty||function(a,l){if(Object.prototype.hasOwnProperty.call(a,l))return a[l]};return`
    +`+((s=(a(n,"isNonEmptyArray")||e&&a(e,"isNonEmptyArray")||t.hooks.helperMissing).call(o,e!=null?a(e,"results"):e,{name:"isNonEmptyArray",hash:{},fn:t.program(5,i,0),inverse:t.program(9,i,0),data:i,loc:{start:{line:9,column:0},end:{line:44,column:20}}}))!=null?s:"")},useData:!0});var wt=80,Hl="#search";V.default.tokenizer.separator=/\s+/;V.default.QueryLexer.termSeparator=/\s+/;V.default.Pipeline.registerFunction(Xi,"docTokenSplitter");V.default.Pipeline.registerFunction(Zi,"docTrimmer");window.addEventListener("exdoc:loaded",Nl);function Nl(){let t=window.location.pathname;if(t.endsWith("/search.html")||t.endsWith("/search")){let e=er("q");Dl(e)}}async function Dl(t){if(he(t))Ln({value:t});else{Bi(t);let e=await Bl();try{let n=t.replaceAll(/(\B|\\):/g,"\\:"),r=Gl(e.search(n));Ln({value:t,results:r})}catch(n){Ln({value:t,errorMessage:n.message})}}}function Ln({value:t,results:e,errorMessage:n}){let r=f(Hl),i=Ki({value:t,results:e,errorMessage:n});r.innerHTML=i}async function Bl(){let t=await Ql();if(t)return t;let e=jl();return ql(e),e}async function Ql(){try{let t=sessionStorage.getItem(Ji());if(t){let e=await Vl(t);return V.default.Index.load(e)}else return null}catch(t){return console.error("Failed to load index: ",t),null}}async function ql(t){try{let e=await Fl(t);sessionStorage.setItem(Ji(),e)}catch(e){console.error("Failed to save index: ",e)}}async function Fl(t){let e=new Blob([JSON.stringify(t)],{type:"application/json"}).stream().pipeThrough(new window.CompressionStream("gzip")),r=await(await new Response(e).blob()).arrayBuffer();return $l(r)}async function Vl(t){let e=new Blob([Ul(t)],{type:"application/json"}).stream().pipeThrough(new window.DecompressionStream("gzip")),n=await new Response(e).text();return JSON.parse(n)}function $l(t){let e="",n=new Uint8Array(t),r=n.byteLength;for(let i=0;i{this.add(t)})})}function Wl(t){t.pipeline.before(V.default.stemmer,Xi)}function Xi(t){let e=[t],n=/\/\d+$/,r=/\:|\./,i=t.toString();if(i.replace(/^[.,;?!]+|[.,;]+$/g,""),i.startsWith("`")&&i.endsWith("`")&&(i=i.slice(1,-1)),n.test(i)){let o=t.toString().replace(n,"");e.push(t.clone().update(()=>o));let a=o.split(r);if(a.length>1){for(let u of a)e.push(t.clone().update(()=>u));let l=t.toString().split(r);e.push(t.clone().update(()=>l[l.length-1]))}i=a[a.length-1]}else i.startsWith("@")?(i=i.substring(1),e.push(t.clone().update(()=>i))):i.startsWith(":")&&(i=i.substring(1),e.push(t.clone().update(()=>i)));let s=i.split(/\_|\-/);if(s.length>1)for(let o of s)e.push(t.clone().update(()=>o));return e}function zl(t){t.pipeline.before(V.default.stemmer,Zi)}function Zi(t){return t.update(function(e){return e.replace(/^[^@:\w]+/,"").replace(/[^\?\!\w]+$/,"")})}function Gl(t){return t.filter(e=>Yi(e.ref)).map(e=>{let n=Yi(e.ref),r=e.matchData.metadata;return{...n,metadata:r,excerpts:Kl(n,r)}})}function Yi(t){return searchData.items.find(e=>e.ref===t)||null}function Kl(t,e){let{doc:n}=t,i=Object.keys(e).filter(s=>"doc"in e[s]).map(s=>e[s].doc.position.map(([o,a])=>Yl(n,o,a))).reduce((s,o)=>s.concat(o),[]);return i.length===0?[n.slice(0,wt*2)+(wt*20?"...":"",t.slice(r,e),""+Re(t.slice(e,e+n))+"",t.slice(e+n,i),i{t.key==="Escape"&&ue()}),N.querySelector(".modal-close").addEventListener("click",ue),N.addEventListener("click",t=>{t.target===N&&ue()}))}function ts(t){if(!_n)if(N.contains(t.target))Tn=t.target;else{_n=!0;let e=N.querySelectorAll(Jl);Tn===e[0]?e[e.length-1].focus():e[0].focus(),_n=!1,Tn=document.activeElement}}function bt({title:t,body:e}){Xl(),Pn=document.activeElement,document.addEventListener("focus",ts,!0),N.querySelector(".modal-title").innerHTML=t,N.querySelector(".modal-body").innerHTML=e,N.classList.add("shown"),N.focus()}function ue(){N?.classList.remove("shown"),document.removeEventListener("focus",ts,!0),Pn?.focus(),Pn=null}function ns(){return Boolean(N?.classList.contains("shown"))}var rs='
    ';var Zl="https://hexdocs.pm/%%",eu="https://www.erlang.org/doc/apps/%%",tu="https://hex.pm/api/packages?search=name:%%*",nu=".display-quick-switch",ss="#quick-switch-input",os="#quick-switch-results",ru=300,iu=9,as=["erts","asn1","common_test","compiler","crypto","debugger","dialyzer","diameter","edoc","eldap","erl_interface","et","eunit","ftp","inets","jinterface","kernel","megaco","mnesia","observer","odbc","os_mon","parsetools","public_key","reltool","runtime_tools","sasl","snmp","ssh","ssl","stdlib","syntax_tools","tftp","tools","wx","xmerl"],su=["elixir","eex","ex_unit","hex","iex","logger","mix"].concat(as).map(t=>({name:t})),ls=2,B={autocompleteResults:[],selectedIdx:null};A||window.addEventListener("exdoc:loaded",ou);function ou(){M(nu).forEach(t=>{t.addEventListener("click",In)})}function au(t){if(t.key==="Enter"){let e=t.target.value;uu(e),t.preventDefault()}else t.key==="ArrowUp"?(is(-1),t.preventDefault()):t.key==="ArrowDown"&&(is(1),t.preventDefault())}function lu(t){let e=t.target.value;if(e.lengthn.json()).then(n=>{Array.isArray(n)&&(B.autocompleteResults=fu(t,n),B.selectedIdx=null,f(ss).value.length>=ls&&hu(B.autocompleteResults))})}function hu(t){f(os).replaceChildren(...t.map(({name:e},n)=>{let r=E("div",{class:"quick-switch-result","data-index":n},[e]);return r.addEventListener("click",()=>On(e)),r}))}function fu(t,e){return su.concat(e).filter(n=>n.name.toLowerCase().includes(t.toLowerCase())).filter(n=>n.releases===void 0||n.releases[0].has_docs===!0).slice(0,iu)}function is(t){B.selectedIdx=pu(t);let e=f(".quick-switch-result.selected"),n=f(`.quick-switch-result[data-index="${B.selectedIdx}"]`);e&&e.classList.remove("selected"),n&&n.classList.add("selected")}function pu(t){let e=B.autocompleteResults.length;if(B.selectedIdx===null){if(t>=0)return 0;if(t<0)return e-1}return(B.selectedIdx+t+e)%e}var mu="#settings-modal-content",Rn=[{key:"c",description:"Toggle sidebar",action:Ue},{key:"n",description:"Cycle themes",action:pr},{key:"s",description:"Focus search bar",displayAs:"/ or s",action:An},{key:"/",action:An},{key:"k",hasModifier:!0,action:An},{key:"v",description:"Open/focus version select",action:yu},{key:"g",description:"Go to package docs",displayAs:"g",action:In},{key:"?",displayAs:"?",description:"Bring up this modal",action:wu}],Cn={shortcutBeingPressed:null};A||(document.addEventListener("keydown",gu),document.addEventListener("keyup",vu));function gu(t){if(Cn.shortcutBeingPressed||t.target.matches("input, select, textarea"))return;let e=Rn.find(n=>n.hasModifier?De()&&t.metaKey||t.ctrlKey?n.key===t.key:!1:t.ctrlKey||t.metaKey||t.altKey?!1:n.key===t.key);e&&(Cn.shortcutBeingPressed=e,t.preventDefault(),e.action(t))}function vu(t){Cn.shortcutBeingPressed=null}function An(t){ue(),xn()}function yu(){ue(),Or()?pn():Ar().then(pn)}function wu(){bu()?ue():Mn()}function bu(){return ns()&&f(mu)}var us=Y(ae());var cs=us.template({1:function(t,e,n,r,i){var s,o=t.lookupProperty||function(a,l){if(Object.prototype.hasOwnProperty.call(a,l))return a[l]};return(s=o(n,"if").call(e??(t.nullContext||{}),e!=null?o(e,"description"):e,{name:"if",hash:{},fn:t.program(2,i,0),inverse:t.noop,data:i,loc:{start:{line:40,column:6},end:{line:53,column:13}}}))!=null?s:""},2:function(t,e,n,r,i){var s,o=t.lookupProperty||function(a,l){if(Object.prototype.hasOwnProperty.call(a,l))return a[l]};return`
    `+t.escapeExpression(t.lambda(e!=null?o(e,"description"):e,e))+`
    @@ -149,7 +149,7 @@ See https://handlebarsjs.com/api-reference/runtime-options.html#options-to-contr
    -`},useData:!0});var wu=".display-settings",bu="#settings-modal-content",Hn="#modal-settings-tab",Nn="#modal-keyboard-shortcuts-tab",hs="#settings-content",fs="#keyboard-shortcuts-content",Eu=[{title:"Settings",id:"modal-settings-tab"},{title:"Keyboard shortcuts",id:"modal-keyboard-shortcuts-tab"}];window.addEventListener("exdoc:loaded",xu);function xu(){M(wu).forEach(t=>{t.addEventListener("click",Mn)})}function ds(){f(Nn).classList.remove("active"),f(Hn).classList.add("active"),f(hs).classList.remove("hidden"),f(fs).classList.add("hidden")}function ku(){f(Nn).classList.add("active"),f(Hn).classList.remove("active"),f(fs).classList.remove("hidden"),f(hs).classList.add("hidden")}function Mn(){bt({title:Eu.map(({id:s,title:o})=>``).join(""),body:cs({shortcuts:Rn})});let t=f(bu),e=t.querySelector('[name="theme"]'),n=t.querySelector('[name="tooltips"]'),r=t.querySelector('[name="direct_livebook_url"]'),i=t.querySelector('[name="livebook_url"]');H.getAndSubscribe(s=>{e.value=s.theme||"system",n.checked=s.tooltips,s.livebookUrl===null?(r.checked=!1,i.classList.add("hidden"),i.tabIndex=-1):(r.checked=!0,i.classList.remove("hidden"),i.tabIndex=0,i.value=s.livebookUrl)}),e.addEventListener("change",s=>{H.update({theme:s.target.value})}),n.addEventListener("change",s=>{H.update({tooltips:s.target.checked})}),r.addEventListener("change",s=>{let o=s.target.checked?i.value:null;H.update({livebookUrl:o})}),i.addEventListener("input",s=>{H.update({livebookUrl:s.target.value})}),f(Hn).addEventListener("click",s=>{ds()}),f(Nn).addEventListener("click",s=>{ku()}),ds()}var Dn=new WeakMap;function Bn(t,e,n,r){if(!t&&!Dn.has(e))return!1;let i=Dn.get(e)??new WeakMap;Dn.set(e,i);let s=i.get(n)??new Set;i.set(n,s);let o=s.has(r);return t?s.add(r):s.delete(r),o&&t}function Su(t,e){let n=t.target;if(n instanceof Text&&(n=n.parentElement),n instanceof Element&&t.currentTarget instanceof Element){let r=n.closest(e);if(r&&t.currentTarget.contains(r))return r}}function Lu(t,e,n,r={}){let{signal:i,base:s=document}=r;if(i?.aborted)return;let{once:o,...a}=r,l=s instanceof Document?s.documentElement:s,u=Boolean(typeof r=="object"?r.capture:r),c=p=>{let g=Su(p,String(t));if(g){let m=Object.assign(p,{delegateTarget:g});n.call(l,m),o&&(l.removeEventListener(e,c,a),Bn(!1,l,n,d))}},d=JSON.stringify({selector:t,type:e,capture:u});Bn(!0,l,n,d)||l.addEventListener(e,c,a),i?.addEventListener("abort",()=>{Bn(!1,l,n,d)})}var Et=Lu;function O(){return O=Object.assign?Object.assign.bind():function(t){for(var e=1;eString(t).toLowerCase().replace(/[\s/_.]+/g,"-").replace(/[^\w-]+/g,"").replace(/--+/g,"-").replace(/^-+|-+$/g,"")||e||"",Te=({hash:t}={})=>window.location.pathname+window.location.search+(t?window.location.hash:""),Tu=(t,e={})=>{let n=O({url:t=t||Te({hash:!0}),random:Math.random(),source:"swup"},e);window.history.pushState(n,"",t)},Le=(t=null,e={})=>{t=t||Te({hash:!0});let n=O({},window.history.state||{},{url:t,random:Math.random(),source:"swup"},e);window.history.replaceState(n,"",t)},_u=(t,e,n,r)=>{let i=new AbortController;return r=O({},r,{signal:i.signal}),Et(t,e,n,r),{destroy:()=>i.abort()}},I=class extends URL{constructor(e,n=document.baseURI){super(e.toString(),n),Object.setPrototypeOf(this,I.prototype)}get url(){return this.pathname+this.search}static fromElement(e){let n=e.getAttribute("href")||e.getAttribute("xlink:href")||"";return new I(n)}static fromUrl(e){return new I(e)}};var me=class extends Error{constructor(e,n){super(e),this.url=void 0,this.status=void 0,this.aborted=void 0,this.timedOut=void 0,this.name="FetchError",this.url=n.url,this.status=n.status,this.aborted=n.aborted||!1,this.timedOut=n.timedOut||!1}};async function Pu(t,e={}){var n;t=I.fromUrl(t).url;let{visit:r=this.visit}=e,i=O({},this.options.requestHeaders,e.headers),s=(n=e.timeout)!=null?n:this.options.timeout,o=new AbortController,{signal:a}=o;e=O({},e,{headers:i,signal:a});let l,u=!1,c=null;s&&s>0&&(c=setTimeout(()=>{u=!0,o.abort("timeout")},s));try{l=await this.hooks.call("fetch:request",r,{url:t,options:e},(v,{url:w,options:x})=>fetch(w,x)),c&&clearTimeout(c)}catch(v){throw u?(this.hooks.call("fetch:timeout",r,{url:t}),new me(`Request timed out: ${t}`,{url:t,timedOut:u})):v?.name==="AbortError"||a.aborted?new me(`Request aborted: ${t}`,{url:t,aborted:!0}):v}let{status:d,url:h}=l,p=await l.text();if(d===500)throw this.hooks.call("fetch:error",r,{status:d,response:l,url:h}),new me(`Server error: ${h}`,{status:d,url:h});if(!p)throw new me(`Empty response: ${h}`,{status:d,url:h});let{url:g}=I.fromUrl(h),m={url:g,html:p};return!r.cache.write||e.method&&e.method!=="GET"||t!==g||this.cache.set(m.url,m),m}var qn=class{constructor(e){this.swup=void 0,this.pages=new Map,this.swup=e}get size(){return this.pages.size}get all(){let e=new Map;return this.pages.forEach((n,r)=>{e.set(r,O({},n))}),e}has(e){return this.pages.has(this.resolve(e))}get(e){let n=this.pages.get(this.resolve(e));return n&&O({},n)}set(e,n){n=O({},n,{url:e=this.resolve(e)}),this.pages.set(e,n),this.swup.hooks.callSync("cache:set",void 0,{page:n})}update(e,n){e=this.resolve(e);let r=O({},this.get(e),n,{url:e});this.pages.set(e,r)}delete(e){this.pages.delete(this.resolve(e))}clear(){this.pages.clear(),this.swup.hooks.callSync("cache:clear",void 0,void 0)}prune(e){this.pages.forEach((n,r)=>{e(r,n)&&this.delete(r)})}resolve(e){let{url:n}=I.fromUrl(e);return this.swup.resolveUrl(n)}},Fn=(t,e=document)=>e.querySelector(t),Un=(t,e=document)=>Array.from(e.querySelectorAll(t)),ys=()=>new Promise(t=>{requestAnimationFrame(()=>{requestAnimationFrame(()=>{t()})})});function ws(t){return!!t&&(typeof t=="object"||typeof t=="function")&&typeof t.then=="function"}function Ou(t,e=[]){return new Promise((n,r)=>{let i=t(...e);ws(i)?i.then(n,r):n(i)})}function ps(t,e){let n=t?.closest(`[${e}]`);return n!=null&&n.hasAttribute(e)?n?.getAttribute(e)||!0:void 0}var Vn=class{constructor(e){this.swup=void 0,this.swupClasses=["to-","is-changing","is-rendering","is-popstate","is-animating","is-leaving"],this.swup=e}get selectors(){let{scope:e}=this.swup.visit.animation;return e==="containers"?this.swup.visit.containers:e==="html"?["html"]:Array.isArray(e)?e:[]}get selector(){return this.selectors.join(",")}get targets(){return this.selector.trim()?Un(this.selector):[]}add(...e){this.targets.forEach(n=>n.classList.add(...e))}remove(...e){this.targets.forEach(n=>n.classList.remove(...e))}clear(){this.targets.forEach(e=>{let n=e.className.split(" ").filter(r=>this.isSwupClass(r));e.classList.remove(...n)})}isSwupClass(e){return this.swupClasses.some(n=>e.startsWith(n))}},St=class{constructor(e,n){this.id=void 0,this.state=void 0,this.from=void 0,this.to=void 0,this.containers=void 0,this.animation=void 0,this.trigger=void 0,this.cache=void 0,this.history=void 0,this.scroll=void 0,this.meta=void 0;let{to:r,from:i,hash:s,el:o,event:a}=n;this.id=Math.random(),this.state=1,this.from={url:i??e.location.url,hash:e.location.hash},this.to={url:r,hash:s},this.containers=e.options.containers,this.animation={animate:!0,wait:!1,name:void 0,native:e.options.native,scope:e.options.animationScope,selector:e.options.animationSelector},this.trigger={el:o,event:a},this.cache={read:e.options.cache,write:e.options.cache},this.history={action:"push",popstate:!1,direction:void 0},this.scroll={reset:!0,target:void 0},this.meta={}}advance(e){this.state=7}};function Iu(t){return new St(this,t)}var $n=class{constructor(e){this.swup=void 0,this.registry=new Map,this.hooks=["animation:out:start","animation:out:await","animation:out:end","animation:in:start","animation:in:await","animation:in:end","animation:skip","cache:clear","cache:set","content:replace","content:scroll","enable","disable","fetch:request","fetch:error","fetch:timeout","history:popstate","link:click","link:self","link:anchor","link:newtab","page:load","page:view","scroll:top","scroll:anchor","visit:start","visit:transition","visit:abort","visit:end"],this.swup=e,this.init()}init(){this.hooks.forEach(e=>this.create(e))}create(e){this.registry.has(e)||this.registry.set(e,new Map)}exists(e){return this.registry.has(e)}get(e){let n=this.registry.get(e);if(n)return n;console.error(`Unknown hook '${e}'`)}clear(){this.registry.forEach(e=>e.clear())}on(e,n,r={}){let i=this.get(e);if(!i)return console.warn(`Hook '${e}' not found.`),()=>{};let s=O({},r,{id:i.size+1,hook:e,handler:n});return i.set(n,s),()=>this.off(e,n)}before(e,n,r={}){return this.on(e,n,O({},r,{before:!0}))}replace(e,n,r={}){return this.on(e,n,O({},r,{replace:!0}))}once(e,n,r={}){return this.on(e,n,O({},r,{once:!0}))}off(e,n){let r=this.get(e);r&&n?r.delete(n)||console.warn(`Handler for hook '${e}' not found.`):r&&r.clear()}async call(e,n,r,i){let[s,o,a]=this.parseCallArgs(e,n,r,i),{before:l,handler:u,after:c}=this.getHandlers(e,a);await this.run(l,s,o);let[d]=await this.run(u,s,o,!0);return await this.run(c,s,o),this.dispatchDomEvent(e,s,o),d}callSync(e,n,r,i){let[s,o,a]=this.parseCallArgs(e,n,r,i),{before:l,handler:u,after:c}=this.getHandlers(e,a);this.runSync(l,s,o);let[d]=this.runSync(u,s,o,!0);return this.runSync(c,s,o),this.dispatchDomEvent(e,s,o),d}parseCallArgs(e,n,r,i){return n instanceof St||typeof n!="object"&&typeof r!="function"?[n,r,i]:[void 0,n,r]}async run(e,n=this.swup.visit,r,i=!1){let s=[];for(let{hook:o,handler:a,defaultHandler:l,once:u}of e)if(n==null||!n.done){u&&this.off(o,a);try{let c=await Ou(a,[n,r,l]);s.push(c)}catch(c){if(i)throw c;console.error(`Error in hook '${o}':`,c)}}return s}runSync(e,n=this.swup.visit,r,i=!1){let s=[];for(let{hook:o,handler:a,defaultHandler:l,once:u}of e)if(n==null||!n.done){u&&this.off(o,a);try{let c=a(n,r,l);s.push(c),ws(c)&&console.warn(`Swup will not await Promises in handler for synchronous hook '${o}'.`)}catch(c){if(i)throw c;console.error(`Error in hook '${o}':`,c)}}return s}getHandlers(e,n){let r=this.get(e);if(!r)return{found:!1,before:[],handler:[],after:[],replaced:!1};let i=Array.from(r.values()),s=this.sortRegistrations,o=i.filter(({before:d,replace:h})=>d&&!h).sort(s),a=i.filter(({replace:d})=>d).filter(d=>!0).sort(s),l=i.filter(({before:d,replace:h})=>!d&&!h).sort(s),u=a.length>0,c=[];if(n&&(c=[{id:0,hook:e,handler:n}],u)){let d=a.length-1,{handler:h,once:p}=a[d],g=m=>{let v=a[m-1];return v?(w,x)=>v.handler(w,x,g(m-1)):n};c=[{id:0,hook:e,once:p,handler:h,defaultHandler:g(d)}]}return{found:!0,before:o,handler:c,after:l,replaced:u}}sortRegistrations(e,n){var r,i;return((r=e.priority)!=null?r:0)-((i=n.priority)!=null?i:0)||e.id-n.id||0}dispatchDomEvent(e,n,r){if(n!=null&&n.done)return;let i={hook:e,args:r,visit:n||this.swup.visit};document.dispatchEvent(new CustomEvent("swup:any",{detail:i,bubbles:!0})),document.dispatchEvent(new CustomEvent(`swup:${e}`,{detail:i,bubbles:!0}))}parseName(e){let[n,...r]=e.split(".");return[n,r.reduce((i,s)=>O({},i,{[s]:!0}),{})]}},Au=t=>{if(t&&t.charAt(0)==="#"&&(t=t.substring(1)),!t)return null;let e=decodeURIComponent(t),n=document.getElementById(t)||document.getElementById(e)||Fn(`a[name='${CSS.escape(t)}']`)||Fn(`a[name='${CSS.escape(e)}']`);return n||t!=="top"||(n=document.body),n},xt="transition",Qn="animation";async function Cu({selector:t,elements:e}){if(t===!1&&!e)return;let n=[];if(e)n=Array.from(e);else if(t&&(n=Un(t,document.body),!n.length))return void console.warn(`[swup] No elements found matching animationSelector \`${t}\``);let r=n.map(i=>function(s){let{type:o,timeout:a,propCount:l}=function(u){let c=window.getComputedStyle(u),d=kt(c,`${xt}Delay`),h=kt(c,`${xt}Duration`),p=ms(d,h),g=kt(c,`${Qn}Delay`),m=kt(c,`${Qn}Duration`),v=ms(g,m),w=Math.max(p,v),x=w>0?p>v?xt:Qn:null;return{type:x,timeout:w,propCount:x?x===xt?h.length:m.length:0}}(s);return!(!o||!a)&&new Promise(u=>{let c=`${o}end`,d=performance.now(),h=0,p=()=>{s.removeEventListener(c,g),u()},g=m=>{m.target===s&&((performance.now()-d)/1e3=l&&p())};setTimeout(()=>{h0?await Promise.all(r):t&&console.warn(`[swup] No CSS animation duration defined on elements matching \`${t}\``)}function kt(t,e){return(t[e]||"").split(", ")}function ms(t,e){for(;t.lengthgs(n)+gs(t[r])))}function gs(t){return 1e3*parseFloat(t)}function Ru(t,e={},n={}){if(typeof t!="string")throw new Error("swup.navigate() requires a URL parameter");if(this.shouldIgnoreVisit(t,{el:n.el,event:n.event}))return void window.location.assign(t);let{url:r,hash:i}=I.fromUrl(t),s=this.createVisit(O({},n,{to:r,hash:i}));this.performNavigation(s,e)}async function Mu(t,e={}){if(this.navigating){if(this.visit.state>=6)return t.state=2,void(this.onVisitEnd=()=>this.performNavigation(t,e));await this.hooks.call("visit:abort",this.visit,void 0),delete this.visit.to.document,this.visit.state=8}this.navigating=!0,this.visit=t;let{el:n}=t.trigger;e.referrer=e.referrer||this.location.url,e.animate===!1&&(t.animation.animate=!1),t.animation.animate||this.classes.clear();let r=e.history||ps(n,"data-swup-history");typeof r=="string"&&["push","replace"].includes(r)&&(t.history.action=r);let i=e.animation||ps(n,"data-swup-animation");var s,o;typeof i=="string"&&(t.animation.name=i),t.meta=e.meta||{},typeof e.cache=="object"?(t.cache.read=(s=e.cache.read)!=null?s:t.cache.read,t.cache.write=(o=e.cache.write)!=null?o:t.cache.write):e.cache!==void 0&&(t.cache={read:!!e.cache,write:!!e.cache}),delete e.cache;try{await this.hooks.call("visit:start",t,void 0),t.state=3;let a=this.hooks.call("page:load",t,{options:e},async(u,c)=>{let d;return u.cache.read&&(d=this.cache.get(u.to.url)),c.page=d||await this.fetchPage(u.to.url,c.options),c.cache=!!d,c.page});a.then(({html:u})=>{t.advance(5),t.to.html=u,t.to.document=new DOMParser().parseFromString(u,"text/html")});let l=t.to.url+t.to.hash;if(t.history.popstate||(t.history.action==="replace"||t.to.url===this.location.url?Le(l):(this.currentHistoryIndex++,Tu(l,{index:this.currentHistoryIndex}))),this.location=I.fromUrl(l),t.history.popstate&&this.classes.add("is-popstate"),t.animation.name&&this.classes.add(`to-${vs(t.animation.name)}`),t.animation.wait&&await a,t.done||(await this.hooks.call("visit:transition",t,void 0,async()=>{if(!t.animation.animate)return await this.hooks.call("animation:skip",void 0),void await this.renderPage(t,await a);t.advance(4),await this.animatePageOut(t),t.animation.native&&document.startViewTransition?await document.startViewTransition(async()=>await this.renderPage(t,await a)).finished:await this.renderPage(t,await a),await this.animatePageIn(t)}),t.done))return;await this.hooks.call("visit:end",t,void 0,()=>this.classes.clear()),t.state=7,this.navigating=!1,this.onVisitEnd&&(this.onVisitEnd(),this.onVisitEnd=void 0)}catch(a){if(!a||a!=null&&a.aborted)return void(t.state=8);t.state=9,console.error(a),this.options.skipPopStateHandling=()=>(window.location.assign(t.to.url+t.to.hash),!0),window.history.back()}finally{delete t.to.document}}var Hu=async function(t){await this.hooks.call("animation:out:start",t,void 0,()=>{this.classes.add("is-changing","is-animating","is-leaving")}),await this.hooks.call("animation:out:await",t,{skip:!1},(e,{skip:n})=>{if(!n)return this.awaitAnimations({selector:e.animation.selector})}),await this.hooks.call("animation:out:end",t,void 0)},Nu=function(t){var e;let n=t.to.document;if(!n)return!1;let r=((e=n.querySelector("title"))==null?void 0:e.innerText)||"";document.title=r;let i=Un('[data-swup-persist]:not([data-swup-persist=""])'),s=t.containers.map(o=>{let a=document.querySelector(o),l=n.querySelector(o);return a&&l?(a.replaceWith(l.cloneNode(!0)),!0):(a||console.warn(`[swup] Container missing in current document: ${o}`),l||console.warn(`[swup] Container missing in incoming document: ${o}`),!1)}).filter(Boolean);return i.forEach(o=>{let a=o.getAttribute("data-swup-persist"),l=Fn(`[data-swup-persist="${a}"]`);l&&l!==o&&l.replaceWith(o)}),s.length===t.containers.length},Du=function(t){let e={behavior:"auto"},{target:n,reset:r}=t.scroll,i=n??t.to.hash,s=!1;return i&&(s=this.hooks.callSync("scroll:anchor",t,{hash:i,options:e},(o,{hash:a,options:l})=>{let u=this.getAnchorElement(a);return u&&u.scrollIntoView(l),!!u})),r&&!s&&(s=this.hooks.callSync("scroll:top",t,{options:e},(o,{options:a})=>(window.scrollTo(O({top:0,left:0},a)),!0))),s},Bu=async function(t){if(t.done)return;let e=this.hooks.call("animation:in:await",t,{skip:!1},(n,{skip:r})=>{if(!r)return this.awaitAnimations({selector:n.animation.selector})});await ys(),await this.hooks.call("animation:in:start",t,void 0,()=>{this.classes.remove("is-animating")}),await e,await this.hooks.call("animation:in:end",t,void 0)},Qu=async function(t,e){if(t.done)return;t.advance(6);let{url:n}=e;this.isSameResolvedUrl(Te(),n)||(Le(n),this.location=I.fromUrl(n),t.to.url=this.location.url,t.to.hash=this.location.hash),await this.hooks.call("content:replace",t,{page:e},(r,{})=>{if(this.classes.remove("is-leaving"),r.animation.animate&&this.classes.add("is-rendering"),!this.replaceContent(r))throw new Error("[swup] Container mismatch, aborting");r.animation.animate&&(this.classes.add("is-changing","is-animating","is-rendering"),r.animation.name&&this.classes.add(`to-${vs(r.animation.name)}`))}),await this.hooks.call("content:scroll",t,void 0,()=>this.scrollToContent(t)),await this.hooks.call("page:view",t,{url:this.location.url,title:document.title})},qu=function(t){var e;if(e=t,Boolean(e?.isSwupPlugin)){if(t.swup=this,!t._checkRequirements||t._checkRequirements())return t._beforeMount&&t._beforeMount(),t.mount(),this.plugins.push(t),this.plugins}else console.error("Not a swup plugin instance",t)};function Fu(t){let e=this.findPlugin(t);if(e)return e.unmount(),e._afterUnmount&&e._afterUnmount(),this.plugins=this.plugins.filter(n=>n!==e),this.plugins;console.error("No such plugin",e)}function Vu(t){return this.plugins.find(e=>e===t||e.name===t||e.name===`Swup${String(t)}`)}function $u(t){if(typeof this.options.resolveUrl!="function")return console.warn("[swup] options.resolveUrl expects a callback function."),t;let e=this.options.resolveUrl(t);return e&&typeof e=="string"?e.startsWith("//")||e.startsWith("http")?(console.warn("[swup] options.resolveUrl needs to return a relative url"),t):e:(console.warn("[swup] options.resolveUrl needs to return a url"),t)}function Uu(t,e){return this.resolveUrl(t)===this.resolveUrl(e)}var ju={animateHistoryBrowsing:!1,animationSelector:'[class*="transition-"]',animationScope:"html",cache:!0,containers:["#swup"],hooks:{},ignoreVisit:(t,{el:e}={})=>!(e==null||!e.closest("[data-no-swup]")),linkSelector:"a[href]",linkToSelf:"scroll",native:!1,plugins:[],resolveUrl:t=>t,requestHeaders:{"X-Requested-With":"swup",Accept:"text/html, application/xhtml+xml"},skipPopStateHandling:t=>{var e;return((e=t.state)==null?void 0:e.source)!=="swup"},timeout:0},Lt=class{get currentPageUrl(){return this.location.url}constructor(e={}){var n,r;this.version="4.8.1",this.options=void 0,this.defaults=ju,this.plugins=[],this.visit=void 0,this.cache=void 0,this.hooks=void 0,this.classes=void 0,this.location=I.fromUrl(window.location.href),this.currentHistoryIndex=void 0,this.clickDelegate=void 0,this.navigating=!1,this.onVisitEnd=void 0,this.use=qu,this.unuse=Fu,this.findPlugin=Vu,this.log=()=>{},this.navigate=Ru,this.performNavigation=Mu,this.createVisit=Iu,this.delegateEvent=_u,this.fetchPage=Pu,this.awaitAnimations=Cu,this.renderPage=Qu,this.replaceContent=Nu,this.animatePageIn=Bu,this.animatePageOut=Hu,this.scrollToContent=Du,this.getAnchorElement=Au,this.getCurrentUrl=Te,this.resolveUrl=$u,this.isSameResolvedUrl=Uu,this.options=O({},this.defaults,e),this.handleLinkClick=this.handleLinkClick.bind(this),this.handlePopState=this.handlePopState.bind(this),this.cache=new qn(this),this.classes=new Vn(this),this.hooks=new $n(this),this.visit=this.createVisit({to:""}),this.currentHistoryIndex=(n=(r=window.history.state)==null?void 0:r.index)!=null?n:1,this.enable()}async enable(){var e;let{linkSelector:n}=this.options;this.clickDelegate=this.delegateEvent(n,"click",this.handleLinkClick),window.addEventListener("popstate",this.handlePopState),this.options.animateHistoryBrowsing&&(window.history.scrollRestoration="manual"),this.options.native=this.options.native&&!!document.startViewTransition,this.options.plugins.forEach(r=>this.use(r));for(let[r,i]of Object.entries(this.options.hooks)){let[s,o]=this.hooks.parseName(r);this.hooks.on(s,i,o)}((e=window.history.state)==null?void 0:e.source)!=="swup"&&Le(null,{index:this.currentHistoryIndex}),await ys(),await this.hooks.call("enable",void 0,void 0,()=>{let r=document.documentElement;r.classList.add("swup-enabled"),r.classList.toggle("swup-native",this.options.native)})}async destroy(){this.clickDelegate.destroy(),window.removeEventListener("popstate",this.handlePopState),this.cache.clear(),this.options.plugins.forEach(e=>this.unuse(e)),await this.hooks.call("disable",void 0,void 0,()=>{let e=document.documentElement;e.classList.remove("swup-enabled"),e.classList.remove("swup-native")}),this.hooks.clear()}shouldIgnoreVisit(e,{el:n,event:r}={}){let{origin:i,url:s,hash:o}=I.fromUrl(e);return i!==window.location.origin||!(!n||!this.triggerWillOpenNewWindow(n))||!!this.options.ignoreVisit(s+o,{el:n,event:r})}handleLinkClick(e){let n=e.delegateTarget,{href:r,url:i,hash:s}=I.fromElement(n);if(this.shouldIgnoreVisit(r,{el:n,event:e}))return;if(this.navigating&&i===this.visit.to.url)return void e.preventDefault();let o=this.createVisit({to:i,hash:s,el:n,event:e});e.metaKey||e.ctrlKey||e.shiftKey||e.altKey?this.hooks.callSync("link:newtab",o,{href:r}):e.button===0&&this.hooks.callSync("link:click",o,{el:n,event:e},()=>{var a;let l=(a=o.from.url)!=null?a:"";e.preventDefault(),i&&i!==l?this.isSameResolvedUrl(i,l)||this.performNavigation(o):s?this.hooks.callSync("link:anchor",o,{hash:s},()=>{Le(i+s),this.scrollToContent(o)}):this.hooks.callSync("link:self",o,void 0,()=>{this.options.linkToSelf==="navigate"?this.performNavigation(o):(Le(i),this.scrollToContent(o))})})}handlePopState(e){var n,r,i,s;let o=(n=(r=e.state)==null?void 0:r.url)!=null?n:window.location.href;if(this.options.skipPopStateHandling(e)||this.isSameResolvedUrl(Te(),this.location.url))return;let{url:a,hash:l}=I.fromUrl(o),u=this.createVisit({to:a,hash:l,event:e});u.history.popstate=!0;let c=(i=(s=e.state)==null?void 0:s.index)!=null?i:0;c&&c!==this.currentHistoryIndex&&(u.history.direction=c-this.currentHistoryIndex>0?"forwards":"backwards",this.currentHistoryIndex=c),u.animation.animate=!1,u.scroll.reset=!1,u.scroll.target=!1,this.options.animateHistoryBrowsing&&(u.animation.animate=!0,u.scroll.reset=!0),this.hooks.callSync("history:popstate",u,{event:e},()=>{this.performNavigation(u)})}triggerWillOpenNewWindow(e){return!!e.matches('[download], [target="_blank"]')}};function _e(){return _e=Object.assign?Object.assign.bind():function(t){for(var e=1;eString(t).split(".").map(e=>String(parseInt(e||"0",10))).concat(["0","0"]).slice(0,3).join("."),ge=class{constructor(){this.isSwupPlugin=!0,this.swup=void 0,this.version=void 0,this.requires={},this.handlersToUnregister=[]}mount(){}unmount(){this.handlersToUnregister.forEach(e=>e()),this.handlersToUnregister=[]}_beforeMount(){if(!this.name)throw new Error("You must define a name of plugin when creating a class.")}_afterUnmount(){}_checkRequirements(){return typeof this.requires!="object"||Object.entries(this.requires).forEach(([e,n])=>{if(!function(r,i,s){let o=function(a,l){var u;if(a==="swup")return(u=l.version)!=null?u:"";{var c;let d=l.findPlugin(a);return(c=d?.version)!=null?c:""}}(r,s);return!!o&&((a,l)=>l.every(u=>{let[,c,d]=u.match(/^([\D]+)?(.*)$/)||[];var h,p;return((g,m)=>{let v={"":w=>w===0,">":w=>w>0,">=":w=>w>=0,"<":w=>w<0,"<=":w=>w<=0};return(v[m]||v[""])(g)})((p=d,h=bs(h=a),p=bs(p),h.localeCompare(p,void 0,{numeric:!0})),c||">=")}))(o,i)}(e,n=Array.isArray(n)?n:[n],this.swup)){let r=`${e} ${n.join(", ")}`;throw new Error(`Plugin version mismatch: ${this.name} requires ${r}`)}}),!0}on(e,n,r={}){var i;n=!(i=n).name.startsWith("bound ")||i.hasOwnProperty("prototype")?n.bind(this):n;let s=this.swup.hooks.on(e,n,r);return this.handlersToUnregister.push(s),s}once(e,n,r={}){return this.on(e,n,_e({},r,{once:!0}))}before(e,n,r={}){return this.on(e,n,_e({},r,{before:!0}))}replace(e,n,r={}){return this.on(e,n,_e({},r,{replace:!0}))}off(e,n){return this.swup.hooks.off(e,n)}};(function(){if(!(typeof window>"u"||typeof document>"u"||typeof HTMLElement>"u")){var t=!1;try{var e=document.createElement("div");e.addEventListener("focus",function(s){s.preventDefault(),s.stopPropagation()},!0),e.focus(Object.defineProperty({},"preventScroll",{get:function(){if(navigator&&typeof navigator.userAgent<"u"&&navigator.userAgent&&navigator.userAgent.match(/Edge\/1[7-8]/))return t=!1;t=!0}}))}catch{}if(HTMLElement.prototype.nativeFocus===void 0&&!t){HTMLElement.prototype.nativeFocus=HTMLElement.prototype.focus;var n=function(s){for(var o=s.parentNode,a=[],l=document.scrollingElement||document.documentElement;o&&o!==l;)(o.offsetHeightn.replace(`{${r}}`,e[r]||""),t||"")}var Wn=class{constructor(){var e;this.id="swup-announcer",this.style="position:absolute;top:0;left:0;clip:rect(0 0 0 0);clip-path:inset(50%);overflow:hidden;white-space:nowrap;word-wrap:normal;width:1px;height:1px;",this.region=void 0,this.region=(e=this.getRegion())!=null?e:this.createRegion()}getRegion(){return document.getElementById(this.id)}createRegion(){let e=function(n){let r=document.createElement("template");return r.innerHTML=n,r.content.children[0]}(`

    `);return document.body.appendChild(e),e}announce(e,n=0){return new Promise(r=>{setTimeout(()=>{this.region.textContent===e&&(e=`${e}.`),this.region.textContent="",this.region.textContent=e,r()},n)})}};function xs(t){let e;if(e=typeof t=="string"?document.querySelector(t):t,!(e instanceof HTMLElement))return;let n=e.getAttribute("tabindex");e.setAttribute("tabindex","-1"),e.focus({preventScroll:!0}),n!==null&&e.setAttribute("tabindex",n)}var Tt=class extends ge{constructor(e={}){super(),this.name="SwupA11yPlugin",this.requires={swup:">=4"},this.defaults={headingSelector:"h1",respectReducedMotion:!0,autofocus:!1,announcements:{visit:"Navigated to: {title}",url:"New page at {url}"}},this.options=void 0,this.announcer=void 0,this.announcementDelay=100,this.rootSelector="body",this.handleAnchorScroll=(n,{hash:r})=>{let i=this.swup.getAnchorElement(r);i instanceof HTMLElement&&xs(i)},this.options=jn({},this.defaults,e),this.announcer=new Wn}mount(){this.swup.hooks.create("content:announce"),this.swup.hooks.create("content:focus"),this.before("visit:start",this.prepareVisit),this.on("visit:start",this.markAsBusy),this.on("visit:end",this.unmarkAsBusy),this.on("visit:end",this.focusContent),this.on("visit:end",this.announceContent),this.on("scroll:anchor",this.handleAnchorScroll),this.before("visit:start",this.disableAnimations),this.before("link:self",this.disableAnimations),this.before("link:anchor",this.disableAnimations),this.swup.announce=this.announce.bind(this)}unmount(){this.swup.announce=void 0}async announce(e){await this.announcer.announce(e)}markAsBusy(){document.documentElement.setAttribute("aria-busy","true")}unmarkAsBusy(){document.documentElement.removeAttribute("aria-busy")}prepareVisit(e){e.a11y={announce:void 0,focus:this.rootSelector}}announceContent(e){this.swup.hooks.callSync("content:announce",e,void 0,n=>{n.a11y.announce===void 0&&(n.a11y.announce=this.getPageAnnouncement()),n.a11y.announce&&this.announcer.announce(n.a11y.announce,this.announcementDelay)})}focusContent(e){this.swup.hooks.callSync("content:focus",e,void 0,n=>{n.a11y.focus&&(this.options.autofocus&&function(){let r=function(){let i=document.querySelector("body [autofocus]");if(i&&!i.closest('[inert], [aria-disabled], [aria-hidden="true"]'))return i}();return!!r&&(r!==document.activeElement&&r.focus(),!0)}()===!0||xs(n.a11y.focus))})}getPageAnnouncement(){let{headingSelector:e,announcements:n}=this.options;return function({headingSelector:r="h1",announcements:i={}}){var s,o;let a=document.documentElement.lang||"*",{href:l,url:u,pathname:c}=I.fromUrl(window.location.href),d=(s=(o=i[a])!=null?o:i["*"])!=null?s:i;if(typeof d!="object")return;let h=document.querySelector(r);h||console.warn(`SwupA11yPlugin: No main heading (${r}) found on new page`);let p=h?.getAttribute("aria-label")||h?.textContent||document.title||Es(d.url,{href:l,url:u,path:c});return Es(d.visit,{title:p,href:l,url:u,path:c})}({headingSelector:e,announcements:n})}disableAnimations(e){this.options.respectReducedMotion&&window.matchMedia("(prefers-reduced-motion: reduce)").matches&&(e.animation.animate=!1,e.scroll.animate=!1)}};function zn(){return zn=Object.assign?Object.assign.bind():function(t){for(var e=1;e{let a=Math.random()*this.trickleValue;this.setValue(this.value+a)},e!==void 0&&(this.className=String(e)),n!==void 0&&(this.styleAttr=String(n)),r!==void 0&&(this.animationDuration=Number(r)),i!==void 0&&(this.minValue=Number(i)),s!==void 0&&(this.initialValue=Number(s)),o!==void 0&&(this.trickleValue=Number(o)),this.styleElement=this.createStyleElement(),this.progressElement=this.createProgressElement()}get defaultStyles(){return` +`},useData:!0});var Eu=".display-settings",xu="#settings-modal-content",Hn="#modal-settings-tab",Nn="#modal-keyboard-shortcuts-tab",hs="#settings-content",fs="#keyboard-shortcuts-content",ku=[{title:"Settings",id:"modal-settings-tab"},{title:"Keyboard shortcuts",id:"modal-keyboard-shortcuts-tab"}];window.addEventListener("exdoc:loaded",Su);function Su(){M(Eu).forEach(t=>{t.addEventListener("click",Mn)})}function ds(){f(Nn).classList.remove("active"),f(Hn).classList.add("active"),f(hs).classList.remove("hidden"),f(fs).classList.add("hidden")}function Lu(){f(Nn).classList.add("active"),f(Hn).classList.remove("active"),f(fs).classList.remove("hidden"),f(hs).classList.add("hidden")}function Mn(){bt({title:ku.map(({id:s,title:o})=>``).join(""),body:cs({shortcuts:Rn})});let t=f(xu),e=t.querySelector('[name="theme"]'),n=t.querySelector('[name="tooltips"]'),r=t.querySelector('[name="direct_livebook_url"]'),i=t.querySelector('[name="livebook_url"]');H.getAndSubscribe(s=>{e.value=s.theme||"system",n.checked=s.tooltips,s.livebookUrl===null?(r.checked=!1,i.classList.add("hidden"),i.tabIndex=-1):(r.checked=!0,i.classList.remove("hidden"),i.tabIndex=0,i.value=s.livebookUrl)}),e.addEventListener("change",s=>{H.update({theme:s.target.value})}),n.addEventListener("change",s=>{H.update({tooltips:s.target.checked})}),r.addEventListener("change",s=>{let o=s.target.checked?i.value:null;H.update({livebookUrl:o})}),i.addEventListener("input",s=>{H.update({livebookUrl:s.target.value})}),f(Hn).addEventListener("click",s=>{ds()}),f(Nn).addEventListener("click",s=>{Lu()}),ds()}var Dn=new WeakMap;function Bn(t,e,n,r){if(!t&&!Dn.has(e))return!1;let i=Dn.get(e)??new WeakMap;Dn.set(e,i);let s=i.get(n)??new Set;i.set(n,s);let o=s.has(r);return t?s.add(r):s.delete(r),o&&t}function Tu(t,e){let n=t.target;if(n instanceof Text&&(n=n.parentElement),n instanceof Element&&t.currentTarget instanceof Element){let r=n.closest(e);if(r&&t.currentTarget.contains(r))return r}}function _u(t,e,n,r={}){let{signal:i,base:s=document}=r;if(i?.aborted)return;let{once:o,...a}=r,l=s instanceof Document?s.documentElement:s,u=Boolean(typeof r=="object"?r.capture:r),c=p=>{let g=Tu(p,String(t));if(g){let m=Object.assign(p,{delegateTarget:g});n.call(l,m),o&&(l.removeEventListener(e,c,a),Bn(!1,l,n,d))}},d=JSON.stringify({selector:t,type:e,capture:u});Bn(!0,l,n,d)||l.addEventListener(e,c,a),i?.addEventListener("abort",()=>{Bn(!1,l,n,d)})}var Et=_u;function O(){return O=Object.assign?Object.assign.bind():function(t){for(var e=1;eString(t).toLowerCase().replace(/[\s/_.]+/g,"-").replace(/[^\w-]+/g,"").replace(/--+/g,"-").replace(/^-+|-+$/g,"")||e||"",Te=({hash:t}={})=>window.location.pathname+window.location.search+(t?window.location.hash:""),Pu=(t,e={})=>{let n=O({url:t=t||Te({hash:!0}),random:Math.random(),source:"swup"},e);window.history.pushState(n,"",t)},Le=(t=null,e={})=>{t=t||Te({hash:!0});let n=O({},window.history.state||{},{url:t,random:Math.random(),source:"swup"},e);window.history.replaceState(n,"",t)},Ou=(t,e,n,r)=>{let i=new AbortController;return r=O({},r,{signal:i.signal}),Et(t,e,n,r),{destroy:()=>i.abort()}},I=class extends URL{constructor(e,n=document.baseURI){super(e.toString(),n),Object.setPrototypeOf(this,I.prototype)}get url(){return this.pathname+this.search}static fromElement(e){let n=e.getAttribute("href")||e.getAttribute("xlink:href")||"";return new I(n)}static fromUrl(e){return new I(e)}};var ge=class extends Error{constructor(e,n){super(e),this.url=void 0,this.status=void 0,this.aborted=void 0,this.timedOut=void 0,this.name="FetchError",this.url=n.url,this.status=n.status,this.aborted=n.aborted||!1,this.timedOut=n.timedOut||!1}};async function Iu(t,e={}){var n;t=I.fromUrl(t).url;let{visit:r=this.visit}=e,i=O({},this.options.requestHeaders,e.headers),s=(n=e.timeout)!=null?n:this.options.timeout,o=new AbortController,{signal:a}=o;e=O({},e,{headers:i,signal:a});let l,u=!1,c=null;s&&s>0&&(c=setTimeout(()=>{u=!0,o.abort("timeout")},s));try{l=await this.hooks.call("fetch:request",r,{url:t,options:e},(v,{url:w,options:x})=>fetch(w,x)),c&&clearTimeout(c)}catch(v){throw u?(this.hooks.call("fetch:timeout",r,{url:t}),new ge(`Request timed out: ${t}`,{url:t,timedOut:u})):v?.name==="AbortError"||a.aborted?new ge(`Request aborted: ${t}`,{url:t,aborted:!0}):v}let{status:d,url:h}=l,p=await l.text();if(d===500)throw this.hooks.call("fetch:error",r,{status:d,response:l,url:h}),new ge(`Server error: ${h}`,{status:d,url:h});if(!p)throw new ge(`Empty response: ${h}`,{status:d,url:h});let{url:g}=I.fromUrl(h),m={url:g,html:p};return!r.cache.write||e.method&&e.method!=="GET"||t!==g||this.cache.set(m.url,m),m}var qn=class{constructor(e){this.swup=void 0,this.pages=new Map,this.swup=e}get size(){return this.pages.size}get all(){let e=new Map;return this.pages.forEach((n,r)=>{e.set(r,O({},n))}),e}has(e){return this.pages.has(this.resolve(e))}get(e){let n=this.pages.get(this.resolve(e));return n&&O({},n)}set(e,n){n=O({},n,{url:e=this.resolve(e)}),this.pages.set(e,n),this.swup.hooks.callSync("cache:set",void 0,{page:n})}update(e,n){e=this.resolve(e);let r=O({},this.get(e),n,{url:e});this.pages.set(e,r)}delete(e){this.pages.delete(this.resolve(e))}clear(){this.pages.clear(),this.swup.hooks.callSync("cache:clear",void 0,void 0)}prune(e){this.pages.forEach((n,r)=>{e(r,n)&&this.delete(r)})}resolve(e){let{url:n}=I.fromUrl(e);return this.swup.resolveUrl(n)}},Fn=(t,e=document)=>e.querySelector(t),Un=(t,e=document)=>Array.from(e.querySelectorAll(t)),ys=()=>new Promise(t=>{requestAnimationFrame(()=>{requestAnimationFrame(()=>{t()})})});function ws(t){return!!t&&(typeof t=="object"||typeof t=="function")&&typeof t.then=="function"}function Au(t,e=[]){return new Promise((n,r)=>{let i=t(...e);ws(i)?i.then(n,r):n(i)})}function ps(t,e){let n=t?.closest(`[${e}]`);return n!=null&&n.hasAttribute(e)?n?.getAttribute(e)||!0:void 0}var Vn=class{constructor(e){this.swup=void 0,this.swupClasses=["to-","is-changing","is-rendering","is-popstate","is-animating","is-leaving"],this.swup=e}get selectors(){let{scope:e}=this.swup.visit.animation;return e==="containers"?this.swup.visit.containers:e==="html"?["html"]:Array.isArray(e)?e:[]}get selector(){return this.selectors.join(",")}get targets(){return this.selector.trim()?Un(this.selector):[]}add(...e){this.targets.forEach(n=>n.classList.add(...e))}remove(...e){this.targets.forEach(n=>n.classList.remove(...e))}clear(){this.targets.forEach(e=>{let n=e.className.split(" ").filter(r=>this.isSwupClass(r));e.classList.remove(...n)})}isSwupClass(e){return this.swupClasses.some(n=>e.startsWith(n))}},St=class{constructor(e,n){this.id=void 0,this.state=void 0,this.from=void 0,this.to=void 0,this.containers=void 0,this.animation=void 0,this.trigger=void 0,this.cache=void 0,this.history=void 0,this.scroll=void 0,this.meta=void 0;let{to:r,from:i,hash:s,el:o,event:a}=n;this.id=Math.random(),this.state=1,this.from={url:i??e.location.url,hash:e.location.hash},this.to={url:r,hash:s},this.containers=e.options.containers,this.animation={animate:!0,wait:!1,name:void 0,native:e.options.native,scope:e.options.animationScope,selector:e.options.animationSelector},this.trigger={el:o,event:a},this.cache={read:e.options.cache,write:e.options.cache},this.history={action:"push",popstate:!1,direction:void 0},this.scroll={reset:!0,target:void 0},this.meta={}}advance(e){this.state=7}};function Cu(t){return new St(this,t)}var $n=class{constructor(e){this.swup=void 0,this.registry=new Map,this.hooks=["animation:out:start","animation:out:await","animation:out:end","animation:in:start","animation:in:await","animation:in:end","animation:skip","cache:clear","cache:set","content:replace","content:scroll","enable","disable","fetch:request","fetch:error","fetch:timeout","history:popstate","link:click","link:self","link:anchor","link:newtab","page:load","page:view","scroll:top","scroll:anchor","visit:start","visit:transition","visit:abort","visit:end"],this.swup=e,this.init()}init(){this.hooks.forEach(e=>this.create(e))}create(e){this.registry.has(e)||this.registry.set(e,new Map)}exists(e){return this.registry.has(e)}get(e){let n=this.registry.get(e);if(n)return n;console.error(`Unknown hook '${e}'`)}clear(){this.registry.forEach(e=>e.clear())}on(e,n,r={}){let i=this.get(e);if(!i)return console.warn(`Hook '${e}' not found.`),()=>{};let s=O({},r,{id:i.size+1,hook:e,handler:n});return i.set(n,s),()=>this.off(e,n)}before(e,n,r={}){return this.on(e,n,O({},r,{before:!0}))}replace(e,n,r={}){return this.on(e,n,O({},r,{replace:!0}))}once(e,n,r={}){return this.on(e,n,O({},r,{once:!0}))}off(e,n){let r=this.get(e);r&&n?r.delete(n)||console.warn(`Handler for hook '${e}' not found.`):r&&r.clear()}async call(e,n,r,i){let[s,o,a]=this.parseCallArgs(e,n,r,i),{before:l,handler:u,after:c}=this.getHandlers(e,a);await this.run(l,s,o);let[d]=await this.run(u,s,o,!0);return await this.run(c,s,o),this.dispatchDomEvent(e,s,o),d}callSync(e,n,r,i){let[s,o,a]=this.parseCallArgs(e,n,r,i),{before:l,handler:u,after:c}=this.getHandlers(e,a);this.runSync(l,s,o);let[d]=this.runSync(u,s,o,!0);return this.runSync(c,s,o),this.dispatchDomEvent(e,s,o),d}parseCallArgs(e,n,r,i){return n instanceof St||typeof n!="object"&&typeof r!="function"?[n,r,i]:[void 0,n,r]}async run(e,n=this.swup.visit,r,i=!1){let s=[];for(let{hook:o,handler:a,defaultHandler:l,once:u}of e)if(n==null||!n.done){u&&this.off(o,a);try{let c=await Au(a,[n,r,l]);s.push(c)}catch(c){if(i)throw c;console.error(`Error in hook '${o}':`,c)}}return s}runSync(e,n=this.swup.visit,r,i=!1){let s=[];for(let{hook:o,handler:a,defaultHandler:l,once:u}of e)if(n==null||!n.done){u&&this.off(o,a);try{let c=a(n,r,l);s.push(c),ws(c)&&console.warn(`Swup will not await Promises in handler for synchronous hook '${o}'.`)}catch(c){if(i)throw c;console.error(`Error in hook '${o}':`,c)}}return s}getHandlers(e,n){let r=this.get(e);if(!r)return{found:!1,before:[],handler:[],after:[],replaced:!1};let i=Array.from(r.values()),s=this.sortRegistrations,o=i.filter(({before:d,replace:h})=>d&&!h).sort(s),a=i.filter(({replace:d})=>d).filter(d=>!0).sort(s),l=i.filter(({before:d,replace:h})=>!d&&!h).sort(s),u=a.length>0,c=[];if(n&&(c=[{id:0,hook:e,handler:n}],u)){let d=a.length-1,{handler:h,once:p}=a[d],g=m=>{let v=a[m-1];return v?(w,x)=>v.handler(w,x,g(m-1)):n};c=[{id:0,hook:e,once:p,handler:h,defaultHandler:g(d)}]}return{found:!0,before:o,handler:c,after:l,replaced:u}}sortRegistrations(e,n){var r,i;return((r=e.priority)!=null?r:0)-((i=n.priority)!=null?i:0)||e.id-n.id||0}dispatchDomEvent(e,n,r){if(n!=null&&n.done)return;let i={hook:e,args:r,visit:n||this.swup.visit};document.dispatchEvent(new CustomEvent("swup:any",{detail:i,bubbles:!0})),document.dispatchEvent(new CustomEvent(`swup:${e}`,{detail:i,bubbles:!0}))}parseName(e){let[n,...r]=e.split(".");return[n,r.reduce((i,s)=>O({},i,{[s]:!0}),{})]}},Ru=t=>{if(t&&t.charAt(0)==="#"&&(t=t.substring(1)),!t)return null;let e=decodeURIComponent(t),n=document.getElementById(t)||document.getElementById(e)||Fn(`a[name='${CSS.escape(t)}']`)||Fn(`a[name='${CSS.escape(e)}']`);return n||t!=="top"||(n=document.body),n},xt="transition",Qn="animation";async function Mu({selector:t,elements:e}){if(t===!1&&!e)return;let n=[];if(e)n=Array.from(e);else if(t&&(n=Un(t,document.body),!n.length))return void console.warn(`[swup] No elements found matching animationSelector \`${t}\``);let r=n.map(i=>function(s){let{type:o,timeout:a,propCount:l}=function(u){let c=window.getComputedStyle(u),d=kt(c,`${xt}Delay`),h=kt(c,`${xt}Duration`),p=ms(d,h),g=kt(c,`${Qn}Delay`),m=kt(c,`${Qn}Duration`),v=ms(g,m),w=Math.max(p,v),x=w>0?p>v?xt:Qn:null;return{type:x,timeout:w,propCount:x?x===xt?h.length:m.length:0}}(s);return!(!o||!a)&&new Promise(u=>{let c=`${o}end`,d=performance.now(),h=0,p=()=>{s.removeEventListener(c,g),u()},g=m=>{m.target===s&&((performance.now()-d)/1e3=l&&p())};setTimeout(()=>{h0?await Promise.all(r):t&&console.warn(`[swup] No CSS animation duration defined on elements matching \`${t}\``)}function kt(t,e){return(t[e]||"").split(", ")}function ms(t,e){for(;t.lengthgs(n)+gs(t[r])))}function gs(t){return 1e3*parseFloat(t)}function Hu(t,e={},n={}){if(typeof t!="string")throw new Error("swup.navigate() requires a URL parameter");if(this.shouldIgnoreVisit(t,{el:n.el,event:n.event}))return void window.location.assign(t);let{url:r,hash:i}=I.fromUrl(t),s=this.createVisit(O({},n,{to:r,hash:i}));this.performNavigation(s,e)}async function Nu(t,e={}){if(this.navigating){if(this.visit.state>=6)return t.state=2,void(this.onVisitEnd=()=>this.performNavigation(t,e));await this.hooks.call("visit:abort",this.visit,void 0),delete this.visit.to.document,this.visit.state=8}this.navigating=!0,this.visit=t;let{el:n}=t.trigger;e.referrer=e.referrer||this.location.url,e.animate===!1&&(t.animation.animate=!1),t.animation.animate||this.classes.clear();let r=e.history||ps(n,"data-swup-history");typeof r=="string"&&["push","replace"].includes(r)&&(t.history.action=r);let i=e.animation||ps(n,"data-swup-animation");var s,o;typeof i=="string"&&(t.animation.name=i),t.meta=e.meta||{},typeof e.cache=="object"?(t.cache.read=(s=e.cache.read)!=null?s:t.cache.read,t.cache.write=(o=e.cache.write)!=null?o:t.cache.write):e.cache!==void 0&&(t.cache={read:!!e.cache,write:!!e.cache}),delete e.cache;try{await this.hooks.call("visit:start",t,void 0),t.state=3;let a=this.hooks.call("page:load",t,{options:e},async(u,c)=>{let d;return u.cache.read&&(d=this.cache.get(u.to.url)),c.page=d||await this.fetchPage(u.to.url,c.options),c.cache=!!d,c.page});a.then(({html:u})=>{t.advance(5),t.to.html=u,t.to.document=new DOMParser().parseFromString(u,"text/html")});let l=t.to.url+t.to.hash;if(t.history.popstate||(t.history.action==="replace"||t.to.url===this.location.url?Le(l):(this.currentHistoryIndex++,Pu(l,{index:this.currentHistoryIndex}))),this.location=I.fromUrl(l),t.history.popstate&&this.classes.add("is-popstate"),t.animation.name&&this.classes.add(`to-${vs(t.animation.name)}`),t.animation.wait&&await a,t.done||(await this.hooks.call("visit:transition",t,void 0,async()=>{if(!t.animation.animate)return await this.hooks.call("animation:skip",void 0),void await this.renderPage(t,await a);t.advance(4),await this.animatePageOut(t),t.animation.native&&document.startViewTransition?await document.startViewTransition(async()=>await this.renderPage(t,await a)).finished:await this.renderPage(t,await a),await this.animatePageIn(t)}),t.done))return;await this.hooks.call("visit:end",t,void 0,()=>this.classes.clear()),t.state=7,this.navigating=!1,this.onVisitEnd&&(this.onVisitEnd(),this.onVisitEnd=void 0)}catch(a){if(!a||a!=null&&a.aborted)return void(t.state=8);t.state=9,console.error(a),this.options.skipPopStateHandling=()=>(window.location.assign(t.to.url+t.to.hash),!0),window.history.back()}finally{delete t.to.document}}var Du=async function(t){await this.hooks.call("animation:out:start",t,void 0,()=>{this.classes.add("is-changing","is-animating","is-leaving")}),await this.hooks.call("animation:out:await",t,{skip:!1},(e,{skip:n})=>{if(!n)return this.awaitAnimations({selector:e.animation.selector})}),await this.hooks.call("animation:out:end",t,void 0)},Bu=function(t){var e;let n=t.to.document;if(!n)return!1;let r=((e=n.querySelector("title"))==null?void 0:e.innerText)||"";document.title=r;let i=Un('[data-swup-persist]:not([data-swup-persist=""])'),s=t.containers.map(o=>{let a=document.querySelector(o),l=n.querySelector(o);return a&&l?(a.replaceWith(l.cloneNode(!0)),!0):(a||console.warn(`[swup] Container missing in current document: ${o}`),l||console.warn(`[swup] Container missing in incoming document: ${o}`),!1)}).filter(Boolean);return i.forEach(o=>{let a=o.getAttribute("data-swup-persist"),l=Fn(`[data-swup-persist="${a}"]`);l&&l!==o&&l.replaceWith(o)}),s.length===t.containers.length},Qu=function(t){let e={behavior:"auto"},{target:n,reset:r}=t.scroll,i=n??t.to.hash,s=!1;return i&&(s=this.hooks.callSync("scroll:anchor",t,{hash:i,options:e},(o,{hash:a,options:l})=>{let u=this.getAnchorElement(a);return u&&u.scrollIntoView(l),!!u})),r&&!s&&(s=this.hooks.callSync("scroll:top",t,{options:e},(o,{options:a})=>(window.scrollTo(O({top:0,left:0},a)),!0))),s},qu=async function(t){if(t.done)return;let e=this.hooks.call("animation:in:await",t,{skip:!1},(n,{skip:r})=>{if(!r)return this.awaitAnimations({selector:n.animation.selector})});await ys(),await this.hooks.call("animation:in:start",t,void 0,()=>{this.classes.remove("is-animating")}),await e,await this.hooks.call("animation:in:end",t,void 0)},Fu=async function(t,e){if(t.done)return;t.advance(6);let{url:n}=e;this.isSameResolvedUrl(Te(),n)||(Le(n),this.location=I.fromUrl(n),t.to.url=this.location.url,t.to.hash=this.location.hash),await this.hooks.call("content:replace",t,{page:e},(r,{})=>{if(this.classes.remove("is-leaving"),r.animation.animate&&this.classes.add("is-rendering"),!this.replaceContent(r))throw new Error("[swup] Container mismatch, aborting");r.animation.animate&&(this.classes.add("is-changing","is-animating","is-rendering"),r.animation.name&&this.classes.add(`to-${vs(r.animation.name)}`))}),await this.hooks.call("content:scroll",t,void 0,()=>this.scrollToContent(t)),await this.hooks.call("page:view",t,{url:this.location.url,title:document.title})},Vu=function(t){var e;if(e=t,Boolean(e?.isSwupPlugin)){if(t.swup=this,!t._checkRequirements||t._checkRequirements())return t._beforeMount&&t._beforeMount(),t.mount(),this.plugins.push(t),this.plugins}else console.error("Not a swup plugin instance",t)};function $u(t){let e=this.findPlugin(t);if(e)return e.unmount(),e._afterUnmount&&e._afterUnmount(),this.plugins=this.plugins.filter(n=>n!==e),this.plugins;console.error("No such plugin",e)}function Uu(t){return this.plugins.find(e=>e===t||e.name===t||e.name===`Swup${String(t)}`)}function ju(t){if(typeof this.options.resolveUrl!="function")return console.warn("[swup] options.resolveUrl expects a callback function."),t;let e=this.options.resolveUrl(t);return e&&typeof e=="string"?e.startsWith("//")||e.startsWith("http")?(console.warn("[swup] options.resolveUrl needs to return a relative url"),t):e:(console.warn("[swup] options.resolveUrl needs to return a url"),t)}function Wu(t,e){return this.resolveUrl(t)===this.resolveUrl(e)}var zu={animateHistoryBrowsing:!1,animationSelector:'[class*="transition-"]',animationScope:"html",cache:!0,containers:["#swup"],hooks:{},ignoreVisit:(t,{el:e}={})=>!(e==null||!e.closest("[data-no-swup]")),linkSelector:"a[href]",linkToSelf:"scroll",native:!1,plugins:[],resolveUrl:t=>t,requestHeaders:{"X-Requested-With":"swup",Accept:"text/html, application/xhtml+xml"},skipPopStateHandling:t=>{var e;return((e=t.state)==null?void 0:e.source)!=="swup"},timeout:0},Lt=class{get currentPageUrl(){return this.location.url}constructor(e={}){var n,r;this.version="4.8.1",this.options=void 0,this.defaults=zu,this.plugins=[],this.visit=void 0,this.cache=void 0,this.hooks=void 0,this.classes=void 0,this.location=I.fromUrl(window.location.href),this.currentHistoryIndex=void 0,this.clickDelegate=void 0,this.navigating=!1,this.onVisitEnd=void 0,this.use=Vu,this.unuse=$u,this.findPlugin=Uu,this.log=()=>{},this.navigate=Hu,this.performNavigation=Nu,this.createVisit=Cu,this.delegateEvent=Ou,this.fetchPage=Iu,this.awaitAnimations=Mu,this.renderPage=Fu,this.replaceContent=Bu,this.animatePageIn=qu,this.animatePageOut=Du,this.scrollToContent=Qu,this.getAnchorElement=Ru,this.getCurrentUrl=Te,this.resolveUrl=ju,this.isSameResolvedUrl=Wu,this.options=O({},this.defaults,e),this.handleLinkClick=this.handleLinkClick.bind(this),this.handlePopState=this.handlePopState.bind(this),this.cache=new qn(this),this.classes=new Vn(this),this.hooks=new $n(this),this.visit=this.createVisit({to:""}),this.currentHistoryIndex=(n=(r=window.history.state)==null?void 0:r.index)!=null?n:1,this.enable()}async enable(){var e;let{linkSelector:n}=this.options;this.clickDelegate=this.delegateEvent(n,"click",this.handleLinkClick),window.addEventListener("popstate",this.handlePopState),this.options.animateHistoryBrowsing&&(window.history.scrollRestoration="manual"),this.options.native=this.options.native&&!!document.startViewTransition,this.options.plugins.forEach(r=>this.use(r));for(let[r,i]of Object.entries(this.options.hooks)){let[s,o]=this.hooks.parseName(r);this.hooks.on(s,i,o)}((e=window.history.state)==null?void 0:e.source)!=="swup"&&Le(null,{index:this.currentHistoryIndex}),await ys(),await this.hooks.call("enable",void 0,void 0,()=>{let r=document.documentElement;r.classList.add("swup-enabled"),r.classList.toggle("swup-native",this.options.native)})}async destroy(){this.clickDelegate.destroy(),window.removeEventListener("popstate",this.handlePopState),this.cache.clear(),this.options.plugins.forEach(e=>this.unuse(e)),await this.hooks.call("disable",void 0,void 0,()=>{let e=document.documentElement;e.classList.remove("swup-enabled"),e.classList.remove("swup-native")}),this.hooks.clear()}shouldIgnoreVisit(e,{el:n,event:r}={}){let{origin:i,url:s,hash:o}=I.fromUrl(e);return i!==window.location.origin||!(!n||!this.triggerWillOpenNewWindow(n))||!!this.options.ignoreVisit(s+o,{el:n,event:r})}handleLinkClick(e){let n=e.delegateTarget,{href:r,url:i,hash:s}=I.fromElement(n);if(this.shouldIgnoreVisit(r,{el:n,event:e}))return;if(this.navigating&&i===this.visit.to.url)return void e.preventDefault();let o=this.createVisit({to:i,hash:s,el:n,event:e});e.metaKey||e.ctrlKey||e.shiftKey||e.altKey?this.hooks.callSync("link:newtab",o,{href:r}):e.button===0&&this.hooks.callSync("link:click",o,{el:n,event:e},()=>{var a;let l=(a=o.from.url)!=null?a:"";e.preventDefault(),i&&i!==l?this.isSameResolvedUrl(i,l)||this.performNavigation(o):s?this.hooks.callSync("link:anchor",o,{hash:s},()=>{Le(i+s),this.scrollToContent(o)}):this.hooks.callSync("link:self",o,void 0,()=>{this.options.linkToSelf==="navigate"?this.performNavigation(o):(Le(i),this.scrollToContent(o))})})}handlePopState(e){var n,r,i,s;let o=(n=(r=e.state)==null?void 0:r.url)!=null?n:window.location.href;if(this.options.skipPopStateHandling(e)||this.isSameResolvedUrl(Te(),this.location.url))return;let{url:a,hash:l}=I.fromUrl(o),u=this.createVisit({to:a,hash:l,event:e});u.history.popstate=!0;let c=(i=(s=e.state)==null?void 0:s.index)!=null?i:0;c&&c!==this.currentHistoryIndex&&(u.history.direction=c-this.currentHistoryIndex>0?"forwards":"backwards",this.currentHistoryIndex=c),u.animation.animate=!1,u.scroll.reset=!1,u.scroll.target=!1,this.options.animateHistoryBrowsing&&(u.animation.animate=!0,u.scroll.reset=!0),this.hooks.callSync("history:popstate",u,{event:e},()=>{this.performNavigation(u)})}triggerWillOpenNewWindow(e){return!!e.matches('[download], [target="_blank"]')}};function _e(){return _e=Object.assign?Object.assign.bind():function(t){for(var e=1;eString(t).split(".").map(e=>String(parseInt(e||"0",10))).concat(["0","0"]).slice(0,3).join("."),ve=class{constructor(){this.isSwupPlugin=!0,this.swup=void 0,this.version=void 0,this.requires={},this.handlersToUnregister=[]}mount(){}unmount(){this.handlersToUnregister.forEach(e=>e()),this.handlersToUnregister=[]}_beforeMount(){if(!this.name)throw new Error("You must define a name of plugin when creating a class.")}_afterUnmount(){}_checkRequirements(){return typeof this.requires!="object"||Object.entries(this.requires).forEach(([e,n])=>{if(!function(r,i,s){let o=function(a,l){var u;if(a==="swup")return(u=l.version)!=null?u:"";{var c;let d=l.findPlugin(a);return(c=d?.version)!=null?c:""}}(r,s);return!!o&&((a,l)=>l.every(u=>{let[,c,d]=u.match(/^([\D]+)?(.*)$/)||[];var h,p;return((g,m)=>{let v={"":w=>w===0,">":w=>w>0,">=":w=>w>=0,"<":w=>w<0,"<=":w=>w<=0};return(v[m]||v[""])(g)})((p=d,h=bs(h=a),p=bs(p),h.localeCompare(p,void 0,{numeric:!0})),c||">=")}))(o,i)}(e,n=Array.isArray(n)?n:[n],this.swup)){let r=`${e} ${n.join(", ")}`;throw new Error(`Plugin version mismatch: ${this.name} requires ${r}`)}}),!0}on(e,n,r={}){var i;n=!(i=n).name.startsWith("bound ")||i.hasOwnProperty("prototype")?n.bind(this):n;let s=this.swup.hooks.on(e,n,r);return this.handlersToUnregister.push(s),s}once(e,n,r={}){return this.on(e,n,_e({},r,{once:!0}))}before(e,n,r={}){return this.on(e,n,_e({},r,{before:!0}))}replace(e,n,r={}){return this.on(e,n,_e({},r,{replace:!0}))}off(e,n){return this.swup.hooks.off(e,n)}};(function(){if(!(typeof window>"u"||typeof document>"u"||typeof HTMLElement>"u")){var t=!1;try{var e=document.createElement("div");e.addEventListener("focus",function(s){s.preventDefault(),s.stopPropagation()},!0),e.focus(Object.defineProperty({},"preventScroll",{get:function(){if(navigator&&typeof navigator.userAgent<"u"&&navigator.userAgent&&navigator.userAgent.match(/Edge\/1[7-8]/))return t=!1;t=!0}}))}catch{}if(HTMLElement.prototype.nativeFocus===void 0&&!t){HTMLElement.prototype.nativeFocus=HTMLElement.prototype.focus;var n=function(s){for(var o=s.parentNode,a=[],l=document.scrollingElement||document.documentElement;o&&o!==l;)(o.offsetHeightn.replace(`{${r}}`,e[r]||""),t||"")}var Wn=class{constructor(){var e;this.id="swup-announcer",this.style="position:absolute;top:0;left:0;clip:rect(0 0 0 0);clip-path:inset(50%);overflow:hidden;white-space:nowrap;word-wrap:normal;width:1px;height:1px;",this.region=void 0,this.region=(e=this.getRegion())!=null?e:this.createRegion()}getRegion(){return document.getElementById(this.id)}createRegion(){let e=function(n){let r=document.createElement("template");return r.innerHTML=n,r.content.children[0]}(`

    `);return document.body.appendChild(e),e}announce(e,n=0){return new Promise(r=>{setTimeout(()=>{this.region.textContent===e&&(e=`${e}.`),this.region.textContent="",this.region.textContent=e,r()},n)})}};function xs(t){let e;if(e=typeof t=="string"?document.querySelector(t):t,!(e instanceof HTMLElement))return;let n=e.getAttribute("tabindex");e.setAttribute("tabindex","-1"),e.focus({preventScroll:!0}),n!==null&&e.setAttribute("tabindex",n)}var Tt=class extends ve{constructor(e={}){super(),this.name="SwupA11yPlugin",this.requires={swup:">=4"},this.defaults={headingSelector:"h1",respectReducedMotion:!0,autofocus:!1,announcements:{visit:"Navigated to: {title}",url:"New page at {url}"}},this.options=void 0,this.announcer=void 0,this.announcementDelay=100,this.rootSelector="body",this.handleAnchorScroll=(n,{hash:r})=>{let i=this.swup.getAnchorElement(r);i instanceof HTMLElement&&xs(i)},this.options=jn({},this.defaults,e),this.announcer=new Wn}mount(){this.swup.hooks.create("content:announce"),this.swup.hooks.create("content:focus"),this.before("visit:start",this.prepareVisit),this.on("visit:start",this.markAsBusy),this.on("visit:end",this.unmarkAsBusy),this.on("visit:end",this.focusContent),this.on("visit:end",this.announceContent),this.on("scroll:anchor",this.handleAnchorScroll),this.before("visit:start",this.disableAnimations),this.before("link:self",this.disableAnimations),this.before("link:anchor",this.disableAnimations),this.swup.announce=this.announce.bind(this)}unmount(){this.swup.announce=void 0}async announce(e){await this.announcer.announce(e)}markAsBusy(){document.documentElement.setAttribute("aria-busy","true")}unmarkAsBusy(){document.documentElement.removeAttribute("aria-busy")}prepareVisit(e){e.a11y={announce:void 0,focus:this.rootSelector}}announceContent(e){this.swup.hooks.callSync("content:announce",e,void 0,n=>{n.a11y.announce===void 0&&(n.a11y.announce=this.getPageAnnouncement()),n.a11y.announce&&this.announcer.announce(n.a11y.announce,this.announcementDelay)})}focusContent(e){this.swup.hooks.callSync("content:focus",e,void 0,n=>{n.a11y.focus&&(this.options.autofocus&&function(){let r=function(){let i=document.querySelector("body [autofocus]");if(i&&!i.closest('[inert], [aria-disabled], [aria-hidden="true"]'))return i}();return!!r&&(r!==document.activeElement&&r.focus(),!0)}()===!0||xs(n.a11y.focus))})}getPageAnnouncement(){let{headingSelector:e,announcements:n}=this.options;return function({headingSelector:r="h1",announcements:i={}}){var s,o;let a=document.documentElement.lang||"*",{href:l,url:u,pathname:c}=I.fromUrl(window.location.href),d=(s=(o=i[a])!=null?o:i["*"])!=null?s:i;if(typeof d!="object")return;let h=document.querySelector(r);h||console.warn(`SwupA11yPlugin: No main heading (${r}) found on new page`);let p=h?.getAttribute("aria-label")||h?.textContent||document.title||Es(d.url,{href:l,url:u,path:c});return Es(d.visit,{title:p,href:l,url:u,path:c})}({headingSelector:e,announcements:n})}disableAnimations(e){this.options.respectReducedMotion&&window.matchMedia("(prefers-reduced-motion: reduce)").matches&&(e.animation.animate=!1,e.scroll.animate=!1)}};function zn(){return zn=Object.assign?Object.assign.bind():function(t){for(var e=1;e{let a=Math.random()*this.trickleValue;this.setValue(this.value+a)},e!==void 0&&(this.className=String(e)),n!==void 0&&(this.styleAttr=String(n)),r!==void 0&&(this.animationDuration=Number(r)),i!==void 0&&(this.minValue=Number(i)),s!==void 0&&(this.initialValue=Number(s)),o!==void 0&&(this.trickleValue=Number(o)),this.styleElement=this.createStyleElement(),this.progressElement=this.createProgressElement()}get defaultStyles(){return` .${this.className} { position: fixed; display: block; @@ -165,7 +165,7 @@ See https://handlebarsjs.com/api-reference/runtime-options.html#options-to-contr transform: translate3d(0, 0, 0) scaleX(var(--progress, 0)); transform-origin: 0; } - `}show(){this.visible||(this.visible=!0,this.installStyleElement(),this.installProgressElement(),this.startTrickling())}hide(){this.visible&&!this.hiding&&(this.hiding=!0,this.fadeProgressElement(()=>{this.uninstallProgressElement(),this.stopTrickling(),this.visible=!1,this.hiding=!1}))}setValue(e){this.value=Math.min(1,Math.max(this.minValue,e)),this.refresh()}installStyleElement(){document.head.prepend(this.styleElement)}installProgressElement(){this.progressElement.style.setProperty("--progress",String(0)),this.progressElement.style.opacity="1",document.body.prepend(this.progressElement),this.progressElement.scrollTop=0,this.setValue(Math.random()*this.initialValue)}fadeProgressElement(e){this.progressElement.style.opacity="0",setTimeout(e,1.5*this.animationDuration)}uninstallProgressElement(){this.progressElement.remove()}startTrickling(){this.trickleInterval||(this.trickleInterval=window.setInterval(this.trickle,this.animationDuration))}stopTrickling(){window.clearInterval(this.trickleInterval),delete this.trickleInterval}refresh(){requestAnimationFrame(()=>{this.progressElement.style.setProperty("--progress",String(this.value))})}createStyleElement(){let e=document.createElement("style");return this.styleAttr.split(" ").forEach(n=>e.setAttribute(n,"")),e.textContent=this.defaultStyles,e}createProgressElement(){let e=document.createElement("div");return e.className=this.className,e.setAttribute("aria-hidden","true"),e}},_t=class extends ge{constructor(e={}){super(),this.name="SwupProgressPlugin",this.defaults={className:"swup-progress-bar",delay:300,transition:300,minValue:.1,initialValue:.25,finishAnimation:!0},this.options=void 0,this.progressBar=void 0,this.showProgressBarTimeout=void 0,this.hideProgressBarTimeout=void 0,this.options=zn({},this.defaults,e);let{className:n,minValue:r,initialValue:i,transition:s}=this.options;this.progressBar=new Gn({className:n,minValue:r,initialValue:i,animationDuration:s})}mount(){this.on("visit:start",this.startShowingProgress),this.on("page:view",this.stopShowingProgress)}startShowingProgress(){this.progressBar.setValue(0),this.showProgressBarAfterDelay()}stopShowingProgress(){this.progressBar.setValue(1),this.options.finishAnimation?this.finishAnimationAndHideProgressBar():this.hideProgressBar()}showProgressBar(){this.cancelHideProgressBarTimeout(),this.progressBar.show()}showProgressBarAfterDelay(){this.cancelShowProgressBarTimeout(),this.cancelHideProgressBarTimeout(),this.showProgressBarTimeout=window.setTimeout(this.showProgressBar.bind(this),this.options.delay)}hideProgressBar(){this.cancelShowProgressBarTimeout(),this.progressBar.hide()}finishAnimationAndHideProgressBar(){this.cancelShowProgressBarTimeout(),this.hideProgressBarTimeout=window.setTimeout(this.hideProgressBar.bind(this),this.options.transition)}cancelShowProgressBarTimeout(){window.clearTimeout(this.showProgressBarTimeout),delete this.showProgressBarTimeout}cancelHideProgressBarTimeout(){window.clearTimeout(this.hideProgressBarTimeout),delete this.hideProgressBarTimeout}};var ks=()=>{window.dispatchEvent(new Event("exdoc:loaded"))},Wu=(t,{page:e})=>{//i.test(e.html)&&(t.abort(),window.location.reload())};window.addEventListener("DOMContentLoaded",ks);!A&&window.location.protocol!=="file:"&&new Lt({animationSelector:!1,containers:["#main"],ignoreVisit:t=>{let e=t.split("#")[0];return e===window.location.pathname||e===window.location.pathname+".html"},linkSelector:'a[href]:not([href^="/"]):not([href^="http"])',hooks:{"page:load":Wu,"page:view":ks},plugins:[new Tt,new _t({delay:500})]});})(); + `}show(){this.visible||(this.visible=!0,this.installStyleElement(),this.installProgressElement(),this.startTrickling())}hide(){this.visible&&!this.hiding&&(this.hiding=!0,this.fadeProgressElement(()=>{this.uninstallProgressElement(),this.stopTrickling(),this.visible=!1,this.hiding=!1}))}setValue(e){this.value=Math.min(1,Math.max(this.minValue,e)),this.refresh()}installStyleElement(){document.head.prepend(this.styleElement)}installProgressElement(){this.progressElement.style.setProperty("--progress",String(0)),this.progressElement.style.opacity="1",document.body.prepend(this.progressElement),this.progressElement.scrollTop=0,this.setValue(Math.random()*this.initialValue)}fadeProgressElement(e){this.progressElement.style.opacity="0",setTimeout(e,1.5*this.animationDuration)}uninstallProgressElement(){this.progressElement.remove()}startTrickling(){this.trickleInterval||(this.trickleInterval=window.setInterval(this.trickle,this.animationDuration))}stopTrickling(){window.clearInterval(this.trickleInterval),delete this.trickleInterval}refresh(){requestAnimationFrame(()=>{this.progressElement.style.setProperty("--progress",String(this.value))})}createStyleElement(){let e=document.createElement("style");return this.styleAttr.split(" ").forEach(n=>e.setAttribute(n,"")),e.textContent=this.defaultStyles,e}createProgressElement(){let e=document.createElement("div");return e.className=this.className,e.setAttribute("aria-hidden","true"),e}},_t=class extends ve{constructor(e={}){super(),this.name="SwupProgressPlugin",this.defaults={className:"swup-progress-bar",delay:300,transition:300,minValue:.1,initialValue:.25,finishAnimation:!0},this.options=void 0,this.progressBar=void 0,this.showProgressBarTimeout=void 0,this.hideProgressBarTimeout=void 0,this.options=zn({},this.defaults,e);let{className:n,minValue:r,initialValue:i,transition:s}=this.options;this.progressBar=new Gn({className:n,minValue:r,initialValue:i,animationDuration:s})}mount(){this.on("visit:start",this.startShowingProgress),this.on("page:view",this.stopShowingProgress)}startShowingProgress(){this.progressBar.setValue(0),this.showProgressBarAfterDelay()}stopShowingProgress(){this.progressBar.setValue(1),this.options.finishAnimation?this.finishAnimationAndHideProgressBar():this.hideProgressBar()}showProgressBar(){this.cancelHideProgressBarTimeout(),this.progressBar.show()}showProgressBarAfterDelay(){this.cancelShowProgressBarTimeout(),this.cancelHideProgressBarTimeout(),this.showProgressBarTimeout=window.setTimeout(this.showProgressBar.bind(this),this.options.delay)}hideProgressBar(){this.cancelShowProgressBarTimeout(),this.progressBar.hide()}finishAnimationAndHideProgressBar(){this.cancelShowProgressBarTimeout(),this.hideProgressBarTimeout=window.setTimeout(this.hideProgressBar.bind(this),this.options.transition)}cancelShowProgressBarTimeout(){window.clearTimeout(this.showProgressBarTimeout),delete this.showProgressBarTimeout}cancelHideProgressBarTimeout(){window.clearTimeout(this.hideProgressBarTimeout),delete this.hideProgressBarTimeout}};var ks=()=>{window.dispatchEvent(new Event("exdoc:loaded"))},Gu=(t,{page:e})=>{//i.test(e.html)&&(t.abort(),window.location.reload())};window.addEventListener("DOMContentLoaded",ks);!A&&window.location.protocol!=="file:"&&new Lt({animationSelector:!1,containers:["#main"],ignoreVisit:t=>{let e=t.split("#")[0];return e===window.location.pathname||e===window.location.pathname+".html"},linkSelector:'a[href]:not([href^="/"]):not([href^="http"])',hooks:{"page:load":Gu,"page:view":ks},plugins:[new Tt,new _t({delay:500})]});})(); /*! Bundled license information: lunr/lunr.js: diff --git a/documentation/technical/auxiliary/msbms_build_lib/dist/html-elixir-KV3YOVJ3.css b/documentation/technical/auxiliary/msbms_build_lib/dist/html-elixir-KV3YOVJ3.css deleted file mode 100644 index 5d4571d21..000000000 --- a/documentation/technical/auxiliary/msbms_build_lib/dist/html-elixir-KV3YOVJ3.css +++ /dev/null @@ -1,6 +0,0 @@ -:root{--main: hsl(250, 68%, 69%);--mainDark: hsl(250, 68%, 59%);--mainDarkest: hsl(250, 68%, 49%);--mainLight: hsl(250, 68%, 74%);--mainLightest: hsl(250, 68%, 79%);--searchBarFocusColor: #8E7CE6;--searchBarBorderColor: rgba(142, 124, 230, .25);--link-color: var(--mainDark);--link-visited-color: var(--mainDarkest)}body.dark{--link-color: var(--mainLightest);--link-visited-color: var(--mainLight)}@font-face{font-family:Lato;font-style:normal;font-display:swap;font-weight:400;src:url(./lato-latin-ext-400-normal-N27NCBWW.woff2) format("woff2"),url(./lato-all-400-normal-MNITWADU.woff) format("woff");unicode-range:U+0100-024F,U+0259,U+1E00-1EFF,U+2020,U+20A0-20AB,U+20AD-20CF,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Lato;font-style:normal;font-display:swap;font-weight:400;src:url(./lato-latin-400-normal-W7754I4D.woff2) format("woff2"),url(./lato-all-400-normal-MNITWADU.woff) format("woff");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+2000-206F,U+2074,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Lato;font-style:normal;font-display:swap;font-weight:700;src:url(./lato-latin-ext-700-normal-Q2L5DVMW.woff2) format("woff2"),url(./lato-all-700-normal-XMT5XFBS.woff) format("woff");unicode-range:U+0100-024F,U+0259,U+1E00-1EFF,U+2020,U+20A0-20AB,U+20AD-20CF,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Lato;font-style:normal;font-display:swap;font-weight:700;src:url(./lato-latin-700-normal-2XVSBPG4.woff2) format("woff2"),url(./lato-all-700-normal-XMT5XFBS.woff) format("woff");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+2000-206F,U+2074,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}:root{--content-width: 949px;--content-gutter: 60px;--borderRadius-lg: 14px;--borderRadius-base: 8px;--borderRadius-sm: 3px;--navTabBorderWidth: 2px;--sansFontFamily: "Lato", system-ui, Segoe UI, Roboto, Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji";--monoFontFamily: ui-monospace, SFMono-Regular, Consolas, Liberation Mono, Menlo, monospace;--baseLineHeight: 1.5em;--gray25: hsl(207, 43%, 98%);--gray50: hsl(207, 43%, 96%);--gray100: hsl(212, 33%, 91%);--gray200: hsl(210, 29%, 88%);--gray300: hsl(210, 26%, 84%);--gray400: hsl(210, 21%, 64%);--gray450: hsl(210, 21%, 49%);--gray500: hsl(210, 21%, 34%);--gray600: hsl(210, 27%, 26%);--gray700: hsl(212, 35%, 17%);--gray750: hsl(214, 46%, 14%);--gray800: hsl(216, 52%, 11%);--gray800-opacity-0: hsla(216, 52%, 11%, 0%);--gray850: hsl(216, 63%, 8%);--gray900: hsl(218, 73%, 4%);--gray900-opacity-50: hsla(218, 73%, 4%, 50%);--gray900-opacity-0: hsla(218, 73%, 4%, 0%);--coldGrayFaint: hsl(240, 5%, 97%);--coldGrayLight: hsl(240, 5%, 88%);--coldGray-lightened-10: hsl(240, 5%, 56%);--coldGray: hsl(240, 5%, 46%);--coldGray-opacity-10: hsla(240, 5%, 46%, 10%);--coldGrayDark: hsl(240, 5%, 28%);--coldGrayDim: hsl(240, 5%, 18%);--yellowLight: hsl(43, 100%, 95%);--yellowDark: hsl(44, 100%, 15%);--yellow: hsl(60, 100%, 43%);--green-lightened-10: hsl(90, 100%, 45%);--green: hsl(90, 100%, 35%);--white: hsl(0, 0%, 100%);--white-opacity-50: hsla(0, 0%, 100%, 50%);--white-opacity-10: hsla(0, 0%, 100%, 10%);--white-opacity-0: hsla(0, 0%, 100%, 0%);--black: hsl(0, 0%, 0%);--black-opacity-10: hsla(0, 0%, 0%, 10%);--black-opacity-50: hsla(0, 0%, 0%, 50%);--orangeDark: hsl(30, 90%, 40%);--orangeLight: hsl(30, 80%, 50%);--text-xs: .75rem;--text-sm: .875rem;--text-md: 1rem;--text-lg: 1.125rem;--text-xl: 1.25rem;--transition-duration: .15s;--transition-timing: cubic-bezier(.4, 0, .2, 1);--transition-all: all var(--transition-duration) var(--transition-timing);--transition-colors: color var(--transition-duration) var(--transition-timing), background-color var(--transition-duration) var(--transition-timing), border-color var(--transition-duration) var(--transition-timing), text-decoration-color var(--transition-duration) var(--transition-timing), fill var(--transition-duration) var(--transition-timing), stroke var(--transition-duration) var(--transition-timing);--transition-opacity: opacity var(--transition-duration) var(--transition-timing)}@media screen and (max-width: 768px){:root{--content-width: 100%;--content-gutter: 20px}}option{background-color:var(--sidebarBackground)}:root{--background: var(--white);--contrast: var(--black);--textBody: var(--gray800);--textHeaders: var(--gray900);--textDetailAccent: var(--mainLight);--textDetailBackground: var(--coldGrayFaint);--iconAction: var(--coldGray);--iconActionHover: var(--gray800);--blockquoteBackground: var(--coldGrayFaint);--blockquoteBorder: var(--coldGrayLight);--tableHeadBorder: var(--gray100);--tableBodyBorder: var(--gray50);--warningBackground: hsl( 33, 100%, 97%);--warningHeadingBackground: hsl( 33, 87%, 64%);--warningHeading: var(--black);--errorBackground: hsl( 7, 81%, 96%);--errorHeadingBackground: hsl( 6, 80%, 60%);--errorHeading: var(--white);--infoBackground: hsl(206, 91%, 96%);--infoHeadingBackground: hsl(213, 92%, 62%);--infoHeading: var(--white);--neutralBackground: hsl(212, 29%, 92%);--neutralHeadingBackground: hsl(220, 43%, 11%);--neutralHeading: var(--white);--tipBackground: hsl(142, 31%, 93%);--tipHeadingBackground: hsl(134, 39%, 36%);--tipHeading: var(--white);--fnSpecAttr: var(--coldGray);--fnDeprecated: var(--yellowLight);--blink: var(--yellowLight);--codeBackground: var(--gray25);--codeBorder: var(--gray100);--codeScrollThumb: var(--gray400);--codeScrollBackground: var(--codeBorder);--admCodeBackground: var(--gray25);--admCodeBorder: var(--gray100);--admCodeColor: var(--black);--admInlineCodeColor: var(--black);--admInlineCodeBackground: var(--gray25);--admInlineCodeBorder: var(--gray100);--tabBorder: var(--gray300);--tabBorderTop: var(--gray100);--tabShadow: var(--gray25);--bottomActionsBtnBorder: var(--black-opacity-10);--bottomActionsBtnTitle: var(--mainDark);--modalBackground: var(--white);--settingsInput: var(--gray500);--settingsInputBackground: var(--white);--settingsInputBorder: var(--gray300);--settingsSectionBorder: var(--gray300);--quickSwitchInput: var(--gray500);--quickSwitchContour: var(--coldGray);--success: var(--green);--progressBarColor: var(--gray400);--sidebarAccentMain: var(--black);--sidebarBackground: var(--gray50);--sidebarHeader: var(--gray100);--sidebarMuted: var(--gray800);--sidebarHover: var(--black);--sidebarStaleVersion: var(--orangeDark);--sidebarSubheadings: var(--gray500);--sidebarItem: var(--black);--sidebarInactiveItemBorder: var(--gray500);--sidebarInactiveItemMarker: var(--gray200);--sidebarLanguageAccentBar: var(--mainDark);--sidebarActiveItem: var(--mainDarkest);--searchBarBorder: var(--gray200);--searchAccentMain: var(--gray600);--searchLanguageAccentBar: var(--main);--searchSearch: var(--white);--autocompleteBorder: rgba(3, 9, 19, .1);--autocompletePreview: var(--gray25);--autocompleteSelected: var(--gray25);--autocompleteHover: var(--gray50);--autocompleteBackground: var(--white);--suggestionBorder: var(--gray200);--autocompleteResults: var(--gray600);--autocompleteResultsBold: var(--gray800);--autocompleteLabelBack: var(--gray100);--autocompleteLabelFont: var(--gray600)}body.dark{--background: var(--gray900);--contrast: var(--white);--textBody: var(--gray200);--textHeaders: var(--gray100);--textDetailAccent: var(--mainLight);--textDetailBackground: var(--gray700);--iconAction: var(--coldGray-lightened-10);--iconActionHover: var(--white);--blockquoteBackground: var(--coldGray-opacity-10);--blockquoteBorder: var(--coldGrayDim);--tableHeadBorder: var(--gray600);--tableBodyBorder: var(--gray700);--warningBackground: hsla( 33, 30%, 60%, 10%);--warningHeadingBackground: hsla( 33, 66%, 35%, 80%);--warningHeading: var(--white);--errorBackground: hsla( 7, 30%, 60%, 10%);--errorHeadingBackground: hsla( 6, 70%, 40%, 80%);--errorHeading: var(--white);--infoBackground: hsla(206, 30%, 60%, 10%);--infoHeadingBackground: hsla(213, 55%, 35%, 80%);--infoHeading: var(--white);--neutralBackground: hsl(210, 30%, 60%, 10%);--neutralHeadingBackground: var(--gray600);--neutralHeading: var(--white);--tipBackground: hsla(142, 30%, 60%, 10%);--tipHeadingBackground: hsla(134, 45%, 30%, 80%);--tipHeading: var(--white);--fnSpecAttr: var(--gray400);--fnDeprecated: var(--yellowDark);--blink: var(--gray600);--codeBackground: var(--gray750);--codeBorder: var(--gray600);--codeScrollThumb: var(--gray500);--codeScrollBackground: var(--codeBorder);--admCodeBackground: var(--gray750);--admCodeBorder: var(--gray600);--admCodeColor: var(--gray100);--admInlineCodeColor: var(--gray100);--admInlineCodeBackground: var(--gray750);--admInlineCodeBorder: var(--gray600);--tabBorder: var(--gray700);--tabBorderTop: var(--gray700);--tabShadow: var(--black);--bottomActionsBtnBorder: var(--white-opacity-10);--bottomActionsBtnTitle: var(--mainLightest);--modalBackground: var(--gray800);--settingsInput: var(--white);--settingsInputBackground: var(--gray700);--settingsInputBorder: var(--gray700);--settingsSectionBorder: var(--gray700);--quickSwitchInput: var(--gray300);--quickSwitchContour: var(--gray500);--success: var(--green-lightened-10);--progressBarColor: var(--gray300);--sidebarAccentMain: var(--gray50);--sidebarBackground: var(--gray800);--sidebarHeader: var(--gray700);--sidebarMuted: var(--gray300);--sidebarHover: var(--white);--sidebarStaleVersion: var(--orangeLight);--sidebarSubheadings: var(--gray400);--sidebarItem: var(--gray200);--sidebarInactiveItemBorder: var(--gray400);--sidebarInactiveItemMarker: var(--gray600);--sidebarLanguageAccentBar: var(--mainLight);--sidebarActiveItem: var(--mainLightest);--searchBarBorder: var(--gray500);--searchAccentMain: var(--gray300);--searchSearch: var(--gray900);--autocompleteBorder: rgba(28,42,60,.75);--autocompletePreview: var(--gray750);--autocompleteSelected: var(--gray750);--autocompleteHover: var(--gray700);--autocompleteBackground: var(--gray800);--suggestionBorder: var(--gray600);--autocompleteResults: var(--gray200);--autocompleteResultsBold: var(--gray100);--autocompleteLabelBack: var(--gray600);--autocompleteLabelFont: rgba(255, 255, 255, .8)}:root:has(body.dark){color-scheme:dark}*,:before,:after{box-sizing:border-box}html{font-family:system-ui,Segoe UI,Roboto,Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji";line-height:1.15;-webkit-text-size-adjust:100%;tab-size:4}body{margin:0}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:ui-monospace,SFMono-Regular,Consolas,Liberation Mono,Menlo,monospace;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{border-color:currentcolor}button,input,optgroup,select,textarea{font-family:inherit;font-size:100%;line-height:1.15;margin:0}button,[type=button],[type=reset],[type=submit]{-webkit-appearance:button}legend{padding:0}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}@font-face{font-family:remixicon;src:url(./remixicon-QPNJX265.woff2) format("woff2");font-display:swap}[class^=ri-],[class*=" ri-"],.remix-icon{font-family:remixicon;font-style:normal;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}:root{--icon-arrow-up-s: "\ea78";--icon-arrow-down-s: "\ea4e";--icon-arrow-right-s: "\ea6e";--icon-add: "\ea13";--icon-subtract: "\f1af";--icon-error-warning: "\eca1";--icon-external-link-line: "\ecaf";--icon-information: "\ee59";--icon-alert: "\ea21";--icon-double-quotes-l: "\ec51";--icon-link-m: "\eeaf";--icon-close-line: "\eb99";--icon-code-s-slash-line: "\ebad";--icon-menu-line: "\ef3e";--icon-search-2-line: "\f0cd";--icon-settings-3-line: "\f0e6";--icon-printer-line: "\f029"}.ri-lg{font-size:1.3333em;line-height:.75em;vertical-align:-.0667em}.ri-settings-3-line:before{content:var(--icon-settings-3-line)}.ri-add-line:before{content:var(--icon-add)}.ri-subtract-line:before{content:var(--icon-subtract)}.ri-arrow-up-s-line:before{content:var(--icon-arrow-up-s)}.ri-arrow-down-s-line:before{content:var(--icon-arrow-down-s)}.ri-arrow-right-s-line:before{content:var(--icon-arrow-right-s)}.ri-external-link-line:before{content:var(--icon-external-link-line)}.ri-search-2-line:before{content:var(--icon-search-2-line)}.ri-menu-line:before{content:var(--icon-menu-line)}.ri-close-line:before{content:var(--icon-close-line)}.ri-link-m:before{content:var(--icon-link-m)}.ri-code-s-slash-line:before{content:var(--icon-code-s-slash-line)}.ri-error-warning-line:before{content:var(--icon-error-warning)}.ri-information-line:before{content:var(--icon-information)}.ri-alert-line:before{content:var(--icon-alert)}.ri-double-quotes-l:before{content:var(--icon-double-quotes-l)}.ri-printer-line:before{content:var(--icon-printer-line)}html,body{box-sizing:border-box;height:100%;width:100%}body{--sidebarWidth: 300px;--sidebarMinWidth: 300px;--sidebarTransitionDuration: .3s;background-color:var(--background);color:var(--textBody);font-size:var(--text-md);line-height:1.6875em;outline:none!important}*,*:before,*:after{box-sizing:inherit}.body-wrapper{display:flex;height:100%}.sidebar{display:none;flex-direction:column;width:var(--sidebarWidth);min-width:var(--sidebarMinWidth);max-width:50vw;height:100%;position:fixed;top:0;left:calc(-1 * var(--sidebarWidth));z-index:100;resize:horizontal}.sidebar-button{padding:26px 12px 18px 19px;position:fixed;z-index:200;top:0;left:0;will-change:transform;transform:translate(0)}.content{left:0;width:100%;height:100%;position:absolute}.content .content-inner{container:content / inline-size;max-width:var(--content-width);min-height:100%;margin:0 auto;padding:0 var(--content-gutter) 10px}.content-inner:focus{outline:none}.sidebar-transition .sidebar,.sidebar-transition .sidebar-button,.sidebar-transition .content{transition:all var(--sidebarTransitionDuration) ease-in-out allow-discrete}.sidebar-open .sidebar,.sidebar-transition .sidebar{display:flex}.sidebar-open .sidebar{left:0}.sidebar-open .sidebar-button{transform:translate(calc(var(--sidebarWidth) - 100%))}.sidebar-open .content{width:calc(100% - var(--sidebarWidth));left:var(--sidebarWidth)}@media screen and (max-width: 768px){.sidebar-open .content{left:0;width:100%}.sidebar{max-width:90vw}body:not(.sidebar-open) .sidebar-button{position:absolute}}.swup-progress-bar{height:2px;background-color:var(--progressBarColor)}.sidebar{--sidebarFontSize: 16px;--sidebarLineHeight: 20px;font-family:var(--sansFontFamily);font-size:var(--sidebarFontSize);line-height:var(--sidebarLineHeight);background-color:var(--sidebarBackground);color:var(--sidebarAccentMain);overflow:hidden;& .sidebar-tabpanel{scrollbar-width:thin}}.apple-os .sidebar{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.sidebar ul{list-style:none}.sidebar ul li{margin:0;padding:0 10px}.sidebar a{color:var(--sidebarAccentMain);text-decoration:none;transition:var(--transition-colors)}.sidebar a:hover{color:var(--sidebarHover)}.sidebar .external-link{margin-left:2.5px}.sidebar .sidebar-header{background-color:var(--sidebarHeader);width:100%}.sidebar .sidebar-projectInfo{display:flex;justify-content:start;align-items:center;gap:8px;margin:12px 34px 12px 14px}.sidebar .sidebar-projectInfo>div{flex:1}.sidebar .sidebar-projectImage{align-self:flex-end}.sidebar .sidebar-projectImage img{display:block;max-width:48px;max-height:48px}.sidebar .sidebar-projectName{font-weight:700;font-size:var(--text-xl);line-height:24px;color:var(--sidebarAccentMain);margin:0;padding:0;word-wrap:break-word;display:block;width:calc(100% - 12px)}.sidebar .sidebar-projectVersion{display:block;position:relative;margin:0;padding:0;font-size:var(--sidebarFontSize);line-height:var(--sidebarLineHeight);color:var(--sidebarMuted);width:calc(100% - 12px)}.sidebar .sidebar-projectVersion form{display:flex}.sidebar .sidebar-projectVersion select{cursor:pointer;position:relative;margin:0;padding:0 0 0 10px;border:none;-webkit-appearance:none;appearance:none;background-color:transparent;color:var(--sidebarMuted);z-index:2}.sidebar .sidebar-projectVersion option{color:initial}.sidebar .sidebar-projectVersionsCaret{position:absolute;left:0;top:2px;z-index:1;font-size:8px;color:var(--sidebarMuted)}.sidebar .sidebar-projectVersion select::-ms-expand{display:none}.sidebar .sidebar-staleVersion{display:block;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;color:var(--sidebarStaleVersion)}.sidebar .sidebar-staleVersion>a{color:var(--sidebarStaleVersion);font-weight:400}.sidebar .sidebar-staleIcon{font-size:var(--text-lg);position:relative;top:3px;line-height:0}.sidebar .sidebar-list-nav{display:flex;margin:0;padding:0;overflow:auto;scrollbar-width:thin}.sidebar .sidebar-list-nav :is(li,li button){text-transform:uppercase;letter-spacing:.02em;font-size:var(--text-sm);color:var(--sidebarSubheadings);white-space:nowrap}.sidebar .sidebar-list-nav li{display:inline-block;padding:0}.sidebar .sidebar-list-nav button{background:none;border:0;border-radius:0;-webkit-appearance:none;text-align:inherit;color:inherit;font-weight:inherit;cursor:pointer;display:inline-block;line-height:27px;padding:4px 14px;transition:var(--transition-all)}.sidebar .sidebar-list-nav button{border-bottom:var(--navTabBorderWidth) solid transparent}.sidebar .sidebar-list-nav button:not([aria-selected]):hover{border-bottom:var(--navTabBorderWidth) solid var(--sidebarInactiveItemBorder);color:var(--sidebarAccentMain);transition:var(--transition-all)}.sidebar .sidebar-list-nav button[aria-selected]{border-bottom:var(--navTabBorderWidth) solid var(--sidebarLanguageAccentBar);color:var(--sidebarAccentMain)}.sidebar .sidebar-tabpanel{flex:1 1 .01%;overflow-y:auto;overscroll-behavior:contain;position:relative;-webkit-overflow-scrolling:touch;padding-top:12px;scroll-padding-top:40px}.sidebar .full-list{margin:0;padding:0 0 20px;position:relative}.sidebar .full-list :is(li,a){display:block;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.sidebar .full-list li{padding:0;line-height:27px}.sidebar .full-list li.group{text-transform:uppercase;font-weight:700;font-size:.8em;margin:1.5em 0 0;line-height:1.8em;color:var(--sidebarSubheadings);padding-left:15px}.sidebar .full-list li.nesting-context{font-weight:700;font-size:.9em;line-height:1.8em;color:var(--sidebarSubheadings);margin-top:10px;padding-left:15px}.sidebar .full-list a{margin-right:30px;padding:3px 0 3px 12px;border-left:var(--navTabBorderWidth) solid transparent;color:var(--sidebarItem)}.sidebar .full-list a[aria-selected]{color:var(--sidebarActiveItem)}.sidebar .full-list button{appearance:none;background-color:transparent;border:0;padding:0;cursor:pointer;color:inherit;width:20px;text-align:center;font-size:calc(1.2 * var(--sidebarFontSize));line-height:var(--sidebarLineHeight);position:absolute;display:block;right:10px;transform:translateY(-100%)}.sidebar .full-list a[aria-selected]+button{color:var(--sidebarActiveItem)}.sidebar .full-list button:after{font-family:remixicon;font-style:normal;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;content:var(--icon-arrow-down-s)}.sidebar .full-list button[aria-expanded=true]:after{content:var(--icon-arrow-up-s)}.sidebar .full-list ul{display:none;margin:10px 0 10px 10px;padding:0}.sidebar .full-list button[aria-expanded=true]+ul{display:block}.sidebar .full-list>li>a{height:27px;line-height:var(--sidebarLineHeight)}.sidebar .full-list>li>a:hover{border-left-color:var(--sidebarLanguageAccentBar)}.sidebar .full-list>li>a[aria-selected]{border-left-color:var(--sidebarLanguageAccentBar)}.sidebar .full-list>li:last-child{margin-bottom:30px}.sidebar .full-list>li.group:first-child{margin-top:0}.sidebar .full-list>li>ul>li:not(:has(li a[aria-selected=true]))>a[aria-selected=true]:before,.sidebar .full-list>li>ul>li>a:hover:before{content:"\2022";position:absolute;margin-left:-15px;color:var(--sidebarActiveItem)}.sidebar .full-list ul li{line-height:var(--sidebarFontSize);padding:0 8px}.sidebar .full-list ul a{padding-left:15px;height:24px}.sidebar .full-list ul button{font-size:var(--sidebarFontSize)}.sidebar .full-list ul button:after{content:var(--icon-add)}.sidebar .full-list ul button[aria-expanded=true]:after{content:var(--icon-subtract)}.sidebar .full-list ul ul{margin:9px 0 9px 10px}.sidebar .full-list ul ul li{height:20px;color:var(--sidebarAccentMain)}.sidebar .full-list ul ul a{border-left:1px solid var(--sidebarInactiveItemMarker);padding:0 10px;height:20px}.sidebar .full-list ul ul a:hover{border-color:var(--sidebarLanguageAccentBar)}.sidebar .full-list ul ul a[aria-selected]{color:var(--sidebarActiveItem);border-color:var(--sidebarLanguageAccentBar)}.sidebar-button{cursor:pointer;background-color:transparent;border:none;font-size:var(--sidebarFontSize);color:var(--sidebarAccentMain)}.sidebar-button:hover{color:var(--sidebarHover)}body:not(.sidebar-open) .sidebar-button{color:var(--contrast)}@media screen and (max-height: 500px){.sidebar{overflow-y:auto}.sidebar .full-list{overflow:visible}}.top-search{background-color:var(--background);top:0;z-index:99;position:relative;width:100%;padding:10px 0}.search-settings{display:flex;column-gap:12px;align-items:center;width:100%;position:relative}.search-bar{border:1px solid var(--searchBarBorder);border-radius:var(--borderRadius-base);height:48px;position:relative;width:100%}.top-search .search-bar .search-input{background-color:var(--searchSearch);border:1px solid transparent;border-radius:var(--borderRadius-base);color:var(--searchAccentMain);position:relative;height:46px;padding:8px 35px 8px 43px;width:100%;transition:var(--transition-all)}.top-search .search-bar .search-input::placeholder{color:var(--searchAccentMain);opacity:.5}.top-search .search-bar .search-input:focus{border:1px solid var(--searchBarFocusColor);border-radius:calc(var(--borderRadius-base) - 1px);position:relative;box-shadow:0 4px 20px 0 var(--searchBarBorderColor) inset}.top-search .search-bar .search-label{position:relative}.top-search .search-bar .search-button{font-size:var(--text-sm);color:var(--searchAccentMain);background-color:transparent;border:none;cursor:pointer;left:11px;opacity:.5;padding:5px 1px 5px 5px;position:absolute;top:60%;transform:translateY(-60%);z-index:99;transition:var(--transition-all)}.top-search .search-bar.selected .search-button,.top-search .search-bar .search-button:hover,.top-search .search-bar .search-button:focus{color:var(--top-searchLanguageAccentBar);opacity:1}.top-search .search-bar .search-close-button{font-size:var(--text-md);color:var(--searchAccentMain);background-color:transparent;border:none;cursor:pointer;right:11px;margin:0;opacity:.5;padding:5px 1px 5px 0;position:absolute;transform:scaleY(0);top:calc(50% - 13px);transition:var(--transition-all);z-index:99}.top-search .search-bar .search-close-button:hover{opacity:.7}.top-search .search-settings button.icon-settings{display:flex;align-items:center;justify-content:flex-end}.top-search .search-settings .icon-settings{font-size:var(--text-xl);float:right;color:var(--iconAction);text-decoration:none;border:none;transition:color .3s ease-in-out;background-color:transparent;cursor:pointer;padding:0}.top-search .search-settings .icon-settings:hover{color:var(--iconActionHover)}.top-search .search-settings .icon-settings:visited{color:var(--iconAction)}@media screen and (max-width: 768px){.top-search{padding-left:calc(var(--content-gutter) + 36px);padding-right:var(--content-gutter);margin-left:calc(-1 * var(--content-gutter));margin-right:calc(-1 * var(--content-gutter));width:calc(2 * var(--content-gutter) + 100%)}.search-settings{width:100%;box-sizing:border-box}}body.search-focused .search-bar .search-close-button{transform:scaleY(1);transition:var(--transition-all)}@media screen and (hover: hover){body.search-focused .top-search{position:sticky!important}body.search-focused .sidebar-button{position:fixed!important}}@media screen and (hover: none){body.scroll-sticky .top-search{position:sticky!important}body.scroll-sticky .sidebar-button{position:fixed!important}}*:focus,button:focus,[type=button]:focus,[type=reset]:focus,[type=submit]:focus{outline:2px solid var(--main);outline-offset:-2px}*:focus:not(:focus-visible),button:focus:not(:focus-visible),[type=button]:focus:not(:focus-visible),[type=reset]:focus:not(:focus-visible),[type=submit]:focus:not(:focus-visible){outline:0}input[type=text],input[type=number],input[type=date],input[type=datetime],input[type=datetime-local],input[type=email],input[type=month],input[type=number],input[type=password],input[type=search],input[type=tel],input[type=time],input[type=url],input[type=week],textarea{outline:0}.content-inner{font-size:1em;line-height:1.6875em;position:relative;background-color:var(--background);color:var(--textBody)}.content-inner .heading-with-actions{display:flex;flex-wrap:wrap;justify-content:flex-end;align-items:center;gap:6px}.content-inner .heading-with-actions>*:not(h1){flex-shrink:0}.content-inner .heading-with-actions h1{flex-grow:1;justify-self:flex-start;max-width:100%;margin:0;overflow-wrap:break-word}.content-inner .heading-with-actions .icon-action{width:20px;height:20px;display:flex;justify-content:center;align-items:center;font-weight:400}.content-inner .heading-with-actions.top-heading .icon-action{font-size:1.2rem}@container content (width > 600px){.content-inner .heading-with-actions.top-heading{flex-wrap:nowrap;align-items:flex-start;& h1{padding-right:32px}& .icon-action{padding-top:1.7rem}}}.content-inner .top-heading{padding-top:1rem}.content-inner :is(h1,h2,h3,h4,h5,h6){font-family:var(--sansFontFamily);font-weight:700;line-height:1.5em;word-wrap:break-word;color:var(--textHeaders)}.content-inner h1{font-size:2em;margin:.5em 0}.content-inner h1.section-heading{margin:1.5em 0 .5em}.content-inner h1 small{font-weight:400}.content-inner h2{font-size:1.6em;padding-top:1em;margin-bottom:.5em}.content-inner h3{font-size:1.375em;margin:1em 0 .5em}.content-inner li+li{margin-top:.25em}.content-inner :is(a,.a-main){color:var(--link-color);text-decoration:underline;text-decoration-skip-ink:auto}.content-inner :is(a:visited,.a-main:visited){color:var(--link-visited-color)}.content-inner .icon-action{color:var(--iconAction);text-decoration:none;border:none;transition:var(--transition-colors);background-color:transparent;cursor:pointer}.content-inner .icon-action:hover{color:var(--iconActionHover)}.content-inner .icon-action:visited{color:var(--iconAction)}.content-inner .livebook-badge-container{display:flex}.content-inner a.livebook-badge{display:inline-flex}.content-inner .note{color:var(--iconAction);font-size:var(--text-xs);font-weight:400}.content-inner blockquote,.content-inner section.admonition{border-left:3px solid var(--blockquoteBorder);position:relative;margin:1.5625em 0;padding:0 1.2rem;overflow:auto;background-color:var(--blockquoteBackground);border-radius:var(--borderRadius-base)}.content-inner blockquote p:last-child,.content-inner section.admonition p:last-child{padding-bottom:1em;margin-bottom:0}.content-inner table{margin:2em 0;border-collapse:collapse;display:block;overflow:auto}.content-inner th{text-align:left;font-family:var(--sansFontFamily);font-weight:700;padding-bottom:.5em;white-space:nowrap}.content-inner thead tr{border-bottom:1px solid var(--tableHeadBorder)}.content-inner tbody tr{border-bottom:1px solid var(--tableBodyBorder)}.content-inner tbody tr:last-child{border-bottom:none}.content-inner tr{vertical-align:bottom;height:2.5em}.content-inner :is(td,th){padding:.25em .25em .25em 1em;line-height:2em;vertical-align:top}.content-inner .section-heading{--icon-size: 16px;--icon-spacing: 5px;display:grid;grid-template:1fr / 1fr}@media screen and (max-width: 768px){.content-inner .section-heading{--icon-spacing: 2px}}.content-inner .section-heading>:is(.hover-link,.text){grid-row:1;grid-column:1}.content-inner .section-heading .hover-link{text-decoration:none}.content-inner .section-heading i{font-size:var(--icon-size);color:var(--mainLight);top:-2px;margin-left:calc(-1 * (var(--icon-size) + var(--icon-spacing)));padding-right:var(--icon-spacing);position:relative;opacity:0}.content-inner :is(blockquote,section.admonition) .section-heading i{display:none}.content-inner .section-heading:is(:hover,:focus,:target) i{opacity:1}.content-inner .app-vsn{display:none!important;font-size:.6em;line-height:1.5em}@media screen and (max-width: 768px){.content-inner .app-vsn{display:block!important}}.content-inner img{max-width:100%}.content-inner strong>code{font-weight:700}.content-inner code{font-family:var(--monoFontFamily);font-style:normal;line-height:24px;font-weight:400;font-size:var(--text-sm)}@media screen and (max-width: 768px){.content-inner :is(ol,ul){padding-left:calc(1.5 * var(--content-gutter))}}.content-inner section.admonition{border-radius:var(--borderRadius-base);border-left:0}.content-inner section.admonition.warning{background-color:var(--warningBackground)}.content-inner section.admonition.error{background-color:var(--errorBackground)}.content-inner section.admonition.info{background-color:var(--infoBackground)}.content-inner section.admonition.neutral{background-color:var(--neutralBackground)}.content-inner section.admonition.tip{background-color:var(--tipBackground)}.content-inner section.admonition>.admonition-title{color:var(--contrast);margin:0 -1.2rem;padding:.7rem 1.2rem .7rem 3.3rem;font-weight:700;font-style:normal}.content-inner section.admonition>.admonition-title:before{color:var(--contrast);position:absolute;left:1rem;font-size:1.8rem;font-family:remixicon;font-style:normal;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.content-inner section.admonition>.admonition-title.warning{background-color:var(--warningHeadingBackground);color:var(--warningHeading)}.content-inner section.admonition>.admonition-title.warning:before{content:var(--icon-error-warning);color:var(--warningHeading)}.content-inner section.admonition>.admonition-title.error{background-color:var(--errorHeadingBackground);color:var(--errorHeading)}.content-inner section.admonition>.admonition-title.error:before{content:var(--icon-error-warning);color:var(--errorHeading)}.content-inner section.admonition>.admonition-title.info{background-color:var(--infoHeadingBackground);color:var(--infoHeading)}.content-inner section.admonition>.admonition-title.info:before{content:var(--icon-information);color:var(--infoHeading)}.content-inner section.admonition>.admonition-title.neutral{background-color:var(--neutralHeadingBackground);color:var(--neutralHeading)}.content-inner section.admonition>.admonition-title.neutral:before{content:var(--icon-double-quotes-l);color:var(--neutralHeading)}.content-inner section.admonition>.admonition-title.tip{background-color:var(--tipHeadingBackground);color:var(--tipHeading)}.content-inner section.admonition>.admonition-title.tip:before{content:var(--icon-information);color:var(--tipHeading)}.content-inner section.admonition>.admonition-title code{margin:0 .5ch}.content-inner section.admonition code{background-color:var(--admInlineCodeBackground);border:1px solid var(--admInlineCodeBorder);color:var(--admInlineCodeColor)}.content-inner section.admonition pre code{background-color:var(--admCodeBackground);border:1px solid var(--admCodeBorder);color:var(--admCodeColor)}.content-inner section.admonition>.admonition-title :is(a,a:visited){color:inherit;text-decoration-color:currentColor}@media screen and (max-width: 768px){.content-inner section.admonition{margin-left:calc(-1 * var(--content-gutter));margin-right:calc(-1 * var(--content-gutter));padding-left:var(--content-gutter);padding-right:var(--content-gutter);border-radius:0}.content-inner section.admonition>.admonition-title{margin:0 calc(-1 * var(--content-gutter))}}.content-inner .summary h2 a{text-decoration:none;border:none;color:var(--textHeaders)!important}.content-inner .summary span.deprecated{color:var(--darkDeprecated);font-weight:400}.content-inner .summary .summary-row .summary-signature{font-family:var(--monoFontFamily);font-size:13px;font-weight:700}.content-inner .summary .summary-row .summary-signature a{text-decoration:none;border:none}.content-inner .summary .summary-row .summary-synopsis{padding:0 1.2em;margin:0 0 .5em}.content-inner .summary .summary-row .summary-synopsis p{margin:0;padding:0}@font-face{font-family:Consolas;src:local("Consolas");size-adjust:110%}.content-inner.content-inner :is(a:has(code,img),pre a){color:var(--link-color);text-shadow:none;text-decoration:none;background-image:none}.content-inner.content-inner :is(a:has(code,img),pre a):is(:visited,:active,:focus,:hover){color:var(--link-visited-color)}.content-inner code{background-color:var(--codeBackground);vertical-align:baseline;border-radius:var(--borderRadius-sm);padding:.1em .2em;border:1px solid var(--codeBorder);text-transform:none}.content-inner code.inline{border-radius:var(--borderRadius-sm);word-wrap:break-word}.content-inner pre{margin:var(--baseLineHeight) 0}.content-inner pre code{display:block;overflow-x:auto;white-space:inherit;padding:1em;scrollbar-width:thin}.content-inner pre code.output{margin:0 12px;max-height:400px;overflow:auto}.content-inner pre code.output+.copy-button{margin-right:12px}.content-inner pre code.output:before{content:"Output";display:block;position:absolute;top:-16px;left:12px;padding:2px 4px;font-size:var(--text-xs);font-family:var(--monoFontFamily);line-height:1;color:var(--textHeaders);background-color:var(--codeBackground);border:1px solid var(--codeBorder);border-bottom:0;border-radius:2px}@media screen and (max-width: 768px){.content-inner>pre:has(code),.content-inner section>pre:has(code){margin-left:calc(-1 * var(--content-gutter));margin-right:calc(-1 * var(--content-gutter))}.content-inner>pre code,.content-inner section>pre code{padding-left:var(--content-gutter);padding-right:var(--content-gutter);border-radius:0;border-left-width:0;border-right-width:0}}@keyframes blink-background{0%,to{background-color:var(--textDetailBackground)}50%{background-color:var(--blink)}}.content-inner .detail:target .detail-header{animation-duration:.55s;animation-name:blink-background;animation-iteration-count:1;animation-timing-function:ease-in-out}.content-inner .detail-header{margin:1em 0;padding:.5em .85em .5em 1em;background-color:var(--textDetailBackground);border-left:3px solid var(--textDetailAccent);font-size:1em;font-family:var(--monoFontFamily);position:relative}.content-inner .detail-header .signature{font-family:var(--monoFontFamily);font-size:13px;font-weight:700;line-height:2em}.content-inner .detail-header:hover a.detail-link,.content-inner .detail-header a.detail-link:focus{opacity:1;text-decoration:none}.content-inner .detail-header a.detail-link{transition:var(--transition-opacity);position:absolute;top:0;left:0;display:block;opacity:0;padding:.6em;line-height:1.5em;margin-left:-2.5em;text-decoration:none;border:none}@media screen and (max-width: 768px){.content-inner .detail-header a.detail-link{margin-left:-30px}}.content-inner .specs pre{font-family:var(--monoFontFamily);font-size:var(--text-xs);font-style:normal;line-height:24px;white-space:pre-wrap;margin:0;padding:0}.content-inner .specs .attribute{color:var(--fnSpecAttr)}.content-inner .docstring{margin:1.2em 0 3em 1.2em}@media screen and (max-width: 768px){.content-inner .docstring{margin-left:0}}.content-inner .docstring:is(h2,h3,h4,h5){font-weight:700}.content-inner .docstring h2{font-size:1.1em}.content-inner .docstring h3{font-size:1em}.content-inner .docstring h4{font-size:.95em}.content-inner .docstring h5{font-size:.9em}.content-inner div.deprecated{display:block;padding:1em;background-color:var(--fnDeprecated);border-radius:var(--borderRadius-sm);margin:var(--baseLineHeight) 0}.content-inner .footer{margin:4em auto 1em;text-align:center;font-size:var(--text-sm)}.content-inner .footer .line{display:inline-block}.content-inner .footer .footer-button{background-color:transparent;border:0;cursor:pointer;padding:0 4px}.content-inner .footer .footer-hex-package{margin-right:4px}.content-inner .bottom-actions{display:flex;justify-content:space-between;margin-top:4em;gap:12px}.bottom-actions-item{flex:1 1 0%}.content-inner .bottom-actions .bottom-actions-button{display:flex;text-decoration:none;flex-direction:column;border-radius:var(--borderRadius-sm);border:1px solid var(--bottomActionsBtnBorder);padding:12px 16px;min-width:150px;transition:var(--transition-all)}.content-inner .bottom-actions .bottom-actions-button:hover{border-color:var(--mainLight)}.content-inner .bottom-actions .bottom-actions-button .subheader{font-size:.8em;color:var(--textHeaders);white-space:nowrap}.content-inner .bottom-actions .bottom-actions-button .title{color:var(--bottomActionsBtnTitle)}.content-inner .bottom-actions .bottom-actions-button[rel=prev]{text-align:start}.content-inner .bottom-actions .bottom-actions-button[rel=next]{text-align:end}@media screen and (max-width: 768px){.content-inner .bottom-actions{flex-direction:column-reverse}}.page-cheatmd .content-inner{--horizontal-space: 1.5em;--vertical-space: 1em}@media (max-width: 600px){.page-cheatmd .content-inner{--horizontal-space: 1em;--vertical-space: .75em}}.page-cheatmd .content-inner{max-width:1200px}.page-cheatmd .content-inner h1{margin-bottom:var(--vertical-space)}.page-cheatmd .content-inner h2{margin:var(--vertical-space) 0;column-span:all;color:var(--gray700);font-weight:500}.dark .page-cheatmd .content-inner h2{color:var(--gray200)}.page-cheatmd .content-inner h3{margin:0 0 1em;font-weight:400}.page-cheatmd .content-inner section.h3{min-width:300px;margin:0;padding:0 0 calc(var(--vertical-space) * 2) 0;break-inside:avoid}.page-cheatmd .content-inner h3 .text{overflow:hidden}.page-cheatmd .content-inner h3 .text:after{content:"";margin-left:calc(var(--horizontal-space) / 2);vertical-align:baseline;display:inline-block;width:100%;height:1px;margin-right:-100%;margin-bottom:5px;background-color:var(--codeBorder)}.page-cheatmd .content-inner h4{display:block;margin:0;padding:.25em var(--horizontal-space);font-weight:400;background:var(--gray100);color:#567;border:solid 1px 1px 0 1px var(--gray100)}.dark .page-cheatmd .content-inner h4{background:#192f50;color:var(--textBody);border:1px solid #192f50;border-bottom:0}.page-cheatmd .content-inner .h2 p{margin:0;display:block;background:var(--gray50);padding:var(--vertical-space) var(--horizontal-space)}.dark .page-cheatmd .content-inner .h2 p{background:var(--gray700)}.page-cheatmd .content-inner .h2 p>code{color:#eb5757;border-radius:var(--borderRadius-sm);padding:.2em .4em}.page-cheatmd .content-inner pre code{padding:var(--vertical-space) var(--horizontal-space)}.page-cheatmd .content-inner .h2 pre{margin:0}.page-cheatmd .content-inner .h2 pre+pre{margin-top:-1px}.page-cheatmd .content-inner pre.wrap{white-space:break-spaces}@media screen and (max-width: 768px){.page-cheatmd .content-inner pre code{border-left-width:1px!important;border-right-width:1px!important}}.page-cheatmd .content-inner .h2 table{display:table;box-sizing:border-box;width:100%;border-collapse:collapse;margin:0}.page-cheatmd .content-inner .h2 th{padding:var(--vertical-space) var(--horizontal-space);line-height:inherit;margin-bottom:-1px;vertical-align:middle;border-bottom:1px solid var(--codeBorder)}.page-cheatmd .content-inner .h2 td{padding:var(--vertical-space) var(--horizontal-space);border:0;border-bottom:1px solid var(--codeBorder)}.page-cheatmd .content-inner .h2 tr:first-child{border-top:1px solid var(--codeBorder)}.page-cheatmd .content-inner .h2 td code{color:#eb5757;border-radius:var(--borderRadius-sm);padding:.2em .4em}.page-cheatmd .content-inner .h2 thead{background-color:var(--gray50)}.dark .page-cheatmd .content-inner .h2 thead{background-color:var(--gray700)}.page-cheatmd .content-inner .h2 tbody{background-color:var(--codeBackground)}.page-cheatmd .content-inner .h2 :is(ul,ol){margin:0;padding:0}.page-cheatmd .content-inner .h2 li{list-style-position:inside;padding:.5em var(--horizontal-space);line-height:2em;vertical-align:middle;background-color:var(--codeBackground);border-bottom:1px solid var(--codeBorder);margin-top:0}.page-cheatmd .content-inner .h2 :is(ul,ol)+pre code{border-top:0}.page-cheatmd .content-inner .h2 li>code{color:#eb5757;border-radius:var(--borderRadius-sm);padding:.2em .4em}.page-cheatmd .content-inner section.width-50{display:block;width:50%;margin:0}.page-cheatmd .content-inner section.width-50>section>table{width:100%}.page-cheatmd .content-inner section:is(.col-2,.col-2-left,.col-3){column-gap:40px}.page-cheatmd .content-inner section.col-2{column-count:2;height:auto}.page-cheatmd .content-inner section.col-2-left{display:grid;grid-template-columns:calc(100% / 3) auto}.page-cheatmd .content-inner section.col-2-left>h2{grid-column-end:span 2}.page-cheatmd .content-inner section.col-3{column-count:3;height:auto}.page-cheatmd .content-inner section.list-4>ul{display:flex;flex-wrap:wrap}.page-cheatmd .content-inner section.list-4>ul>li{flex:0 0 25%}.page-cheatmd .content-inner section.list-6>ul{display:flex;flex-wrap:wrap}.page-cheatmd .content-inner section.list-6>ul>li{flex:0 0 calc(100% / 6)}@media screen and (max-width: 1400px){.page-cheatmd .content-inner section.col-3{column-count:2}.page-cheatmd .content-inner section.col-2-left{display:flex;flex-direction:column}}@media screen and (max-width: 1200px){.page-cheatmd .content-inner section:is(.col-2,.col-3){display:flex;flex-direction:column}.page-cheatmd .content-inner section.list-6>ul>li{flex:0 0 25%}}@media screen and (max-width: 1000px){.page-cheatmd .content-inner section:is(.list-4,.list-6)>ul>li{flex:0 0 calc(100% / 3)}}@media screen and (max-width: 600px){.page-cheatmd .content-inner section:is(.list-4,.list-6)>ul>li{flex:0 0 50%}.page-cheatmd .content-inner section.width-50{width:100%}}#search{min-height:200px;position:relative}#search .loading{height:64px;width:64px;position:absolute;top:50%;left:calc(50% - 32px)}#search .loading div{box-sizing:border-box;display:block;position:absolute;width:51px;height:51px;margin:6px;border:6px solid var(--coldGray);border-radius:50%;animation:loading 1.2s cubic-bezier(.5,0,.5,1) infinite;border-color:var(--coldGray) transparent transparent transparent}#search .loading div:nth-child(1){animation-delay:-.45s}#search .loading div:nth-child(2){animation-delay:-.3s}#search .loading div:nth-child(3){animation-delay:-.15s}@keyframes loading{0%{transform:rotate(0)}to{transform:rotate(360deg)}}#search .result{margin:2em 0 2.5em}#search .result p{margin:0}#search .result-id{font-size:1.4em;margin:0}#search .result-id a{text-decoration:none;color:var(--textHeaders);transition:var(--transition-colors)}#search .result-id a:is(:visited,:active){color:var(--textHeaders)}#search .result-id a:is(:hover,:focus){color:var(--main)}#search :is(.result-id,.result-elem) em{font-style:normal;color:var(--main)}#search .result-id small{font-weight:400}@keyframes keyboard-shortcuts-show{0%{opacity:0}to{opacity:1}}.modal{animation-duration:.15s;animation-name:keyboard-shortcuts-show;animation-iteration-count:1;animation-timing-function:ease-in-out;display:none;background-color:#000000bf;position:fixed;inset:0;z-index:300}.modal.shown{display:block}.modal .modal-contents{margin:75px auto 0;max-width:500px;background-color:var(--modalBackground);border-radius:var(--borderRadius-sm);box-shadow:2px 2px 8px #0003;padding:25px 35px 35px}@media screen and (max-width: 768px){.modal .modal-contents{padding:20px}}.modal .modal-header{display:flex;align-items:start}.modal .modal-title{display:inline-block;flex-grow:1;font-size:1.2rem;font-weight:700;margin-bottom:20px}.modal .modal-title button{border:none;background-color:transparent;color:var(--textHeaders);font-weight:700;margin-right:30px;padding-left:0;text-align:left;transition:var(--transition-colors)}.modal .modal-title button:hover{color:var(--main);cursor:pointer}.modal .modal-title button.active{color:var(--main)}.modal .modal-close{cursor:pointer;display:block;font-size:1.5rem;margin:-8px -8px 0 0;padding:8px;opacity:.7;background-color:transparent;color:var(--textHeaders);border:none;transition:var(--transition-opacity)}.modal .modal-close:hover{opacity:1}#keyboard-shortcuts-content dl.shortcut-row{display:flex;align-items:center;justify-content:space-between;margin:0;padding:6px 0 8px;border-bottom:1px solid var(--settingsSectionBorder)}#keyboard-shortcuts-content dl.shortcut-row:last-of-type{border-bottom-style:none}#keyboard-shortcuts-content dl.shortcut-row:first-child{padding-top:0}#keyboard-shortcuts-content :is(.shortcut-keys,.shortcut-description){display:inline-block}#keyboard-shortcuts-content kbd>kbd{background-color:var(--settingsInputBorder);color:var(--contrast);border-radius:var(--borderRadius-sm);font-family:inherit;font-weight:700;display:inline-block;line-height:1;padding:4px 7px 6px;min-width:26px;text-align:center;font-size:var(--text-sm)}#keyboard-shortcuts-content :is(.shortcut-keys,.shortcut-description){margin:0}#quick-switch-modal-body{width:100%;position:relative}#quick-switch-modal-body .ri-search-2-line{position:absolute;left:0;top:0;padding:4px 10px;color:var(--quickSwitchContour);font-weight:700}#quick-switch-modal-body #quick-switch-input{width:100%;padding:8px 6px 8px 38px;border:none;color:var(--quickSwitchInput);background-color:transparent;border-bottom:1px solid var(--quickSwitchContour);box-sizing:border-box;transition:all .12s ease-out}#quick-switch-modal-body #quick-switch-results{margin:0}#quick-switch-modal-body .quick-switch-result{padding:2px 5px;border-bottom:1px dotted var(--quickSwitchContour);transition:all .12s ease-out}#quick-switch-modal-body .quick-switch-result:last-child{border-bottom:none}#quick-switch-modal-body .quick-switch-result:hover{cursor:pointer}#quick-switch-modal-body .quick-switch-result:is(:hover,.selected){border-left:4px solid var(--main);background-color:var(--codeBackground)}.autocomplete{display:none;position:absolute;width:calc(100% - 32px);top:55px}.autocomplete .triangle{width:0;height:0;border-left:12px solid transparent;border-right:12px solid transparent;border-bottom:12px solid var(--autocompleteBackground);position:absolute;top:8px;left:26px;transform:translate(-50%);z-index:100;background-color:transparent}.autocomplete-preview{width:100%;margin:0;height:100%;line-height:20px;background-color:var(--background);font-family:var(--sansFontFamily);border:4px solid var(--autocompleteBorder);padding:12px 16px}.autocomplete-preview div,.autocomplete-preview span{display:none}.autocomplete-preview.loading div{float:left;display:block;border:5px solid var(--autocompleteBorder);border-radius:50%;border-top:5px solid var(--textDetailAccent);width:20px;height:20px;animation:spinner 4s linear infinite}.autocomplete-preview.loading span{color:var(--autocompleteResults);display:inline;margin-left:6px}.autocomplete-preview.loading span:after{color:var(--autocompleteResults);content:"Loading"}@keyframes spinner{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.autocomplete-preview.loading iframe{height:0}.autocomplete-preview iframe{width:100%;height:100%;border:0}.autocomplete-results{list-style:none;margin:0;padding:15px 20px;display:flex;flex-wrap:wrap;justify-content:space-between;gap:8px;color:var(--autocompleteResults);font-family:var(--sansFontFamily);font-weight:300;font-size:.9rem}.autocomplete-results .query{margin-right:auto}.autocomplete-results .bold{color:var(--autocompleteResultsBold);font-weight:400}.autocomplete.shown{display:block}.autocomplete-container{position:absolute;top:15px;width:100%;z-index:200}.autocomplete-suggestions{background-color:var(--autocompleteBackground);border-radius:var(--borderRadius-base);box-shadow:0 15px 99px 0 var(--autocompleteBorder);overflow-y:auto;max-height:450px;white-space:normal;overflow-x:hidden;overscroll-behavior-y:contain;scrollbar-width:thin}.autocomplete-suggestions.previewing:has(.selected){max-height:80vh}.autocomplete-suggestions.previewing:has(.selected) .autocomplete-suggestion:not(.selected){display:none}.autocomplete-suggestions.previewing:not(:has(.selected)) .autocomplete-preview{display:none}.autocomplete-suggestions:not(.previewing) .autocomplete-preview{display:none}.autocomplete-suggestion{color:var(--textHeaders)!important;display:block;padding:12px 20px;text-decoration:none!important;transition:var(--transition-colors);border-top:1px solid var(--suggestionBorder);font-size:.9rem}.autocomplete-suggestion.selected{background-color:var(--autocompleteSelected);box-shadow:inset 2px 0 var(--main)}.autocomplete-suggestion:hover{background-color:var(--autocompleteHover)}.autocomplete-suggestion:not(.selected) .autocomplete-preview-indicator{display:none}.autocomplete-preview-indicator{float:right}.autocomplete-preview-indicator button{color:var(--iconAction);display:flex;align-items:center;text-decoration:none;border:1px solid var(--suggestionBorder);border-radius:var(--borderRadius-base);transition:var(--transition-colors);background-color:var(--autocompletePreview);cursor:pointer;padding:4px 8px;font-size:var(--text-sm)}.autocomplete-preview-indicator button:hover{color:var(--iconActionHover);background-color:var(--autocompleteHover)}.autocomplete-preview-indicator button i{margin-right:4px}.autocomplete-suggestions.previewing .autocomplete-preview-indicator-closed{display:none}.autocomplete-suggestions:not(.previewing) .autocomplete-preview-indicator-open{display:none}.autocomplete-suggestion:hover:not(.selected) .autocomplete-preview-indicator-closed{display:block}.autocomplete-suggestion em{font-style:normal;font-weight:700}.autocomplete-suggestion .description{opacity:.6;padding-top:3px}.autocomplete-suggestion .label{background-color:var(--autocompleteLabelBack);opacity:.6;color:var(--autocompleteLabelFont);padding:4px 8px;border-radius:4px;margin-left:5px;text-transform:uppercase;font-family:var(--sansFontFamily);font-size:.7rem}.autocomplete-suggestion .header{margin-right:5px}.autocomplete-suggestion .title,.autocomplete-suggestion .description{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;width:100%}@media screen and (hover: none){.autocomplete-preview-indicator,.autocomplete-results .press-return{display:none!important}}.tooltip{box-shadow:0 0 10px var(--black-opacity-10);max-height:300px;max-width:500px;padding:0;position:absolute;pointer-events:none;margin:0;z-index:99;top:0;left:0;visibility:hidden;transform:translateY(20px);opacity:0;transition:.2s visibility ease-out,.2s transform ease-out,.2s opacity ease-out}.tooltip.tooltip-shown{visibility:visible;transform:translateY(0);opacity:1}.tooltip .tooltip-body{border:1px solid var(--codeBorder);border-radius:var(--borderRadius-sm);overflow:auto}.tooltip .tooltip-body .signature{min-width:320px;width:100%;line-height:1em}.tooltip .tooltip-body .detail-header{border-left:0;margin-bottom:0;margin-top:0}.tooltip .tooltip-body .docstring{background-color:var(--background);padding:1.2em;margin:0;width:498px}.tooltip .tooltip-body .docstring-plain{max-width:498px;width:auto}.tooltip .tooltip-body .version-info{float:right;font-family:var(--monoFontFamily);font-weight:400;opacity:.3;padding-left:.3em}pre{position:relative}pre:hover .copy-button,pre .copy-button:focus{opacity:1}.copy-button{display:flex;opacity:0;position:absolute;top:7px;right:8px;padding:8px;background-color:transparent;backdrop-filter:blur(8px);border-radius:var(--borderRadius-sm);border:1px solid var(--codeBorder);cursor:pointer;transition:var(--transition-all);font-size:var(--text-sm);line-height:24px;color:currentColor;& svg[aria-live=polite]{display:none}}.copy-button svg{opacity:.5;transition:var(--transition-all)}pre .copy-button:hover svg,pre .copy-button:focus-visible svg{opacity:1}.copy-button svg{width:20px}.copy-button.clicked{opacity:1;color:var(--success);& svg[aria-live=polite]{display:block}}.copy-button.clicked svg{display:none;color:currentColor}#settings-modal-content{margin-top:10px}#settings-modal-content .hidden{display:none}#settings-modal-content .input{box-sizing:border-box;width:80%;padding:8px;font-size:var(--text-sm);background-color:var(--settingsInputBackground);color:var(--settingsInput);border:1px solid var(--settingsInputBorder);border-radius:var(--borderRadius-base);transition:var(--transition-all)}#settings-modal-content .input:focus{border-color:var(--main)}#settings-modal-content .input::placeholder{color:var(--gray400)}#settings-modal-content .switch-button-container{display:flex;align-items:center;justify-content:space-between;border-top:1px solid var(--settingsSectionBorder);padding:10px 0}#settings-modal-content .switch-button-container:first-of-type{border-top-style:none;padding-top:0}#settings-modal-content .switch-button-container>div>span{font-size:var(--text-md)}#settings-modal-content .switch-button-container>div>p{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-size:var(--text-sm);line-height:1.4;margin:0;padding-bottom:6px;padding-right:10px}#settings-modal-content .switch-button{position:relative;display:inline-block;flex-shrink:0;width:40px;height:20px;user-select:none;transition:var(--transition-all)}#settings-modal-content .switch-button__checkbox{appearance:none;position:absolute;display:block;width:20px;height:20px;border-radius:1000px;background-color:#91a4b7;border:3px solid #e5edf5;cursor:pointer;transition:var(--transition-all)}#settings-modal-content .switch-button__bg{display:block;width:100%;height:100%;border-radius:1000px;background-color:#e5edf5;cursor:pointer;transition:var(--transition-all)}#settings-modal-content .switch-button__checkbox:checked{background-color:#fff;border-color:var(--main);transform:translate(100%)}#settings-modal-content .switch-button__checkbox:checked+.switch-button__bg{background-color:var(--main)}#settings-modal-content .switch-button__checkbox:focus{outline:0}#settings-modal-content .switch-button__checkbox:focus+.switch-button__bg{outline:2px solid var(--main);outline-offset:2px}#settings-modal-content .switch-button__checkbox:focus:not(:focus-visible)+.switch-button__bg{outline:0}#settings-modal-content .settings-select{cursor:pointer;position:relative;border:none;background-color:transparent;color:var(--textBody)}#settings-modal-content .settings-select option{color:initial}#toast{visibility:hidden;opacity:0;position:fixed;z-index:1;left:50%;bottom:1rem;min-width:3rem;margin:0 -1.2rem;padding:.7rem 1.2rem;text-align:center;font-weight:700;border-radius:var(--borderRadius-base);border:1px solid var(--codeBorder);background-color:var(--codeBackground);color:var(--textBody);transition:opacity .4s ease-in-out,transform .3s ease-out;cursor:default}#toast.show{visibility:visible;opacity:1;transform:translateY(-.75rem)}@media (prefers-reduced-motion: reduce){#toast{transition:none}}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);border:0;user-select:none}@media print{.body-wrapper{display:block}.sidebar,.sidebar-button,.top-search{display:none}.content{padding-left:0;overflow:visible;left:0;width:100%}.summary-row{break-inside:avoid}#toast{display:none}.content-inner{padding:0}.content-inner .section-heading a.hover-link,.content-inner button.icon-action,.content-inner a.icon-action,.content-inner .bottom-actions{display:none}.footer p:first-of-type{display:none}.content-inner section.admonition{border:2px solid var(--gray400)}.content-inner section.admonition>.admonition-title{color:var(--textHeaders);border-bottom:2px solid var(--gray400)}.content-inner pre code.makeup{border-color:var(--gray400);white-space:break-spaces;break-inside:avoid}.content-inner blockquote code.inline,.content-inner code.inline{border-color:var(--gray400)}}@media print{.page-cheatmd .content-inner *{background-color:transparent!important;border-color:var(--gray400)!important}.page-cheatmd .content-inner{max-width:100%;width:100%;padding:0;font-size:.7em}.page-cheatmd .content-inner section:is(.col-2,.col-2-left,.col-3){column-gap:30px}.page-cheatmd .content-inner section.col-2{column-count:2}.page-cheatmd .content-inner section.col-2-left{display:grid}.page-cheatmd .content-inner section.col-3{column-count:3}.page-cheatmd .content-inner h1{margin-top:0;margin-bottom:.5em}.page-cheatmd .content-inner h2.section-heading{font-weight:700;margin-top:1em;column-span:all}.page-cheatmd .content-inner section.h2{break-inside:avoid}.page-cheatmd .content-inner h3{font-weight:700;color:var(--mainDark)}.page-cheatmd .content-inner h3:after{height:2px;background-color:var(--gray400)}.page-cheatmd .content-inner section.h3{min-width:300px;break-inside:avoid}.page-cheatmd .content-inner h4{padding:.5em 0;border:none;font-weight:700;color:#000}.page-cheatmd .content-inner .h2 p{padding-left:0;padding-right:0;border:none!important}.page-cheatmd .content-inner code{line-height:1.5em}.page-cheatmd .content-inner .h2 table{font-variant-numeric:tabular-nums;break-inside:avoid}.page-cheatmd .content-inner .h2 :is(th,td){vertical-align:top;padding-left:0;padding-right:0}.page-cheatmd .content-inner .h2 thead{border-style:solid none;border-width:1px}.page-cheatmd .content-inner .h2 tr{border-bottom:none}.page-cheatmd .content-inner .h2 th{font-weight:700}.page-cheatmd .content-inner .h2 li{padding-left:0;padding-right:0;vertical-align:middle;border-bottom:none}.page-cheatmd .content-inner pre:hover button.copy-button,.page-cheatmd .content-inner div.tooltip{display:none}.page-cheatmd .content-inner footer p:not(.built-using){display:none}}code.makeup .unselectable{-webkit-touch-callout:none;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.makeup .hll{background-color:#ffc}.makeup .bp{color:#3465a4}.makeup .c,.makeup .c1,.makeup .ch,.makeup .cm,.makeup .cp,.makeup .cpf,.makeup .cs{color:#4d4d4d}.makeup .dl{color:#408200}.makeup .err{color:#a40000;border:#ef2929}.makeup .fm,.makeup .g{color:#4d4d4c}.makeup .gd{color:#a40000}.makeup .ge{color:#4d4d4c;font-style:italic}.makeup .gh{color:navy;font-weight:700}.makeup .gi{color:#00a000}.makeup .go{color:#4d4d4c;font-style:italic}.makeup .gp{color:#4d4d4d}.makeup .gr{color:#ef2929}.makeup .gs{color:#4d4d4c;font-weight:700}.makeup .gt{color:#a40000;font-weight:700}.makeup .gu{color:purple;font-weight:700}.makeup .il{color:#0000cf;font-weight:700}.makeup .k,.makeup .kc,.makeup .kd,.makeup .kn,.makeup .kp,.makeup .kr,.makeup .kt{color:#204a87}.makeup .l{color:#4d4d4c}.makeup .ld{color:#c00}.makeup .m,.makeup .mb,.makeup .mf,.makeup .mh,.makeup .mi,.makeup .mo{color:#2937ab}.makeup .n{color:#4d4d4c}.makeup .na{color:#8a7000}.makeup .nb{color:#204a87}.makeup .nc{color:#0000cf}.makeup .nd{color:#5c35cc;font-weight:700}.makeup .ne{color:#c00;font-weight:700}.makeup .nf{color:#b65800}.makeup .ni{color:#bc5400}.makeup .nl{color:#b65800}.makeup .nn{color:#4d4d4c}.makeup .no{color:#a06600}.makeup .nt{color:#204a87;font-weight:700}.makeup .nv,.makeup .nx{color:#4d4d4c}.makeup .o{color:#bc5400}.makeup .ow{color:#204a87}.makeup .p,.makeup .py{color:#4d4d4c}.makeup .s,.makeup .s1,.makeup .s2,.makeup .sa,.makeup .sb,.makeup .sc{color:#408200}.makeup .sd{color:#8f5902;font-style:italic}.makeup .se{color:#204a87}.makeup .sh{color:#408200}.makeup .si{color:#204a87}.makeup .sr{color:#c00}.makeup .ss{color:#a06600}.makeup .sx{color:#408200}.makeup .vc,.makeup .vg,.makeup .vi,.makeup .vm,.makeup .x{color:#4d4d4c}.dark .makeup{color:#dce1e6}.dark .makeup .hll{background-color:#49483e}.dark .makeup .bp{color:#dce1e6}.dark .makeup .c,.dark .makeup .c1,.dark .makeup .ch,.dark .makeup .cm,.dark .makeup .cp,.dark .makeup .cpf,.dark .makeup .cs{color:#969386}.dark .makeup .dl{color:#e6db74}.dark .makeup .err{color:#960050;background-color:#1e0010}.dark .makeup .fm{color:#a6e22e}.dark .makeup .gd{color:#ff5385}.dark .makeup .ge{font-style:italic}.dark .makeup .gi{color:#a6e22e}.dark .makeup .gp{color:#969386}.dark .makeup .gs{font-weight:700}.dark .makeup .gu{color:#969386}.dark .makeup .gt{color:#ff5385;font-weight:700}.dark .makeup .il{color:#ae81ff}.dark .makeup .k,.dark .makeup .kc,.dark .makeup .kd{color:#66d9ef}.dark .makeup .kn{color:#ff5385}.dark .makeup .kp,.dark .makeup .kr,.dark .makeup .kt{color:#66d9ef}.dark .makeup .l,.dark .makeup .ld,.dark .makeup .m,.dark .makeup .mb,.dark .makeup .mf,.dark .makeup .mh,.dark .makeup .mi,.dark .makeup .mo{color:#ae81ff}.dark .makeup .n{color:#dce1e6}.dark .makeup .na{color:#a6e22e}.dark .makeup .nb{color:#dce1e6}.dark .makeup .nc,.dark .makeup .nd,.dark .makeup .ne,.dark .makeup .nf{color:#a6e22e}.dark .makeup .ni,.dark .makeup .nl,.dark .makeup .nn{color:#dce1e6}.dark .makeup .no{color:#66d9ef}.dark .makeup .nt{color:#ff5385}.dark .makeup .nv{color:#dce1e6}.dark .makeup .nx{color:#a6e22e}.dark .makeup .o,.dark .makeup .ow{color:#ff5385}.dark .makeup .p,.dark .makeup .py{color:#dce1e6}.dark .makeup .s,.dark .makeup .s1,.dark .makeup .s2,.dark .makeup .sa,.dark .makeup .sb,.dark .makeup .sc,.dark .makeup .sd{color:#e6db74}.dark .makeup .se{color:#ae81ff}.dark .makeup .sh,.dark .makeup .si,.dark .makeup .sr,.dark .makeup .ss,.dark .makeup .sx{color:#e6db74}.dark .makeup .vc,.dark .makeup .vg,.dark .makeup .vi,.dark .makeup .vm{color:#dce1e6}.tabset{--borderWidth: 1px;--tabsetPadding: var(--baseLineHeight);margin:var(--baseLineHeight) 0;border:var(--borderWidth) solid var(--tabBorder);padding:0 var(--tabsetPadding);border-radius:var(--borderRadius-lg)}.tabset-tablist{display:flex;overflow:auto;scrollbar-width:thin;border-bottom-width:1px;border-bottom-style:solid;border-bottom-color:var(--tabBorderTop)}.tabset-tab{padding:1.1rem var(--tabsetPadding);font-family:var(--sansFontFamily);color:var(--textColor);margin-right:calc(-1 * var(--borderWidth));background-color:transparent;border:0;box-shadow:none;cursor:pointer;border-bottom-width:2px;border-bottom-style:solid;border-bottom-color:transparent;transition:var(--transition-all)}:hover.tabset-tab{border-bottom-color:var(--tabBorderTop);color:var(--textHeaders)}.tabset-tab[aria-selected=true]{border-bottom-color:var(--mainLight);color:var(--textHeaders)}.tabset-tab[aria-selected=true]:focus-visible{background-color:var(--mainLight);border-color:var(--mainLight);color:var(--white)}@media screen and (max-width: 768px){.tabset{--tabsetPadding: calc(var(--baseLineHeight) / 2)}.tabset-panel{padding-top:calc(var(--tabsetPadding) / 2);padding-bottom:calc(var(--tabsetPadding) / 2)}.tabset-panel pre,.tabset-panel blockquote,.tabset-panel section.admonition{margin-left:calc(-1 * var(--tabsetPadding))!important;margin-right:calc(-1 * var(--tabsetPadding))!important}.tabset-panel>pre code{border-left-width:0;border-right-width:0}}@media screen and (max-width: 768px){.tabset-panel>:is(:first-child){&:is(table){margin:.5em 0}}}@media screen and (min-width: 769px){.tabset-panel>:is(:first-child){&:is(blockquote,.admonition){margin-top:1.5em}&:is(p:has(img)){margin-top:1.25em}&:is(table){margin-top:.75em}}.tabset-panel>:is(:last-child){&:is(blockquote,.admonition){margin-bottom:1.5em}&:is(p:not(:has(img)),ul,ol){margin-bottom:1.25em}&:is(table){margin-bottom:.75em}}}body.preview{--sidebarWidth: 0px;overflow:hidden}body.preview .content{height:auto}body.preview .content-inner{padding:0}body.preview .sidebar,body.preview #sidebar-menu,body.preview .hover-link,body.preview .detail-link{display:none}body.preview :is(h1,h2,h3):first-of-type{margin-top:0}body:not(.dark) .content-inner img[src*="#gh-dark-mode-only"],body.dark .content-inner img[src*="#gh-light-mode-only"]{display:none} -/*! Bundled license information: - -modern-normalize/modern-normalize.css: - (*! modern-normalize v3.0.1 | MIT License | https://github.com/sindresorhus/modern-normalize *) -*/ diff --git a/documentation/technical/auxiliary/msbms_build_lib/dist/html-elixir-RLZO5U2C.css b/documentation/technical/auxiliary/msbms_build_lib/dist/html-elixir-RLZO5U2C.css new file mode 100644 index 000000000..af1b3807f --- /dev/null +++ b/documentation/technical/auxiliary/msbms_build_lib/dist/html-elixir-RLZO5U2C.css @@ -0,0 +1,6 @@ +:root{--main: hsl(250, 68%, 69%);--mainDark: hsl(250, 68%, 59%);--mainDarkest: hsl(250, 68%, 49%);--mainLight: hsl(250, 68%, 74%);--mainLightest: hsl(250, 68%, 79%);--searchBarFocusColor: #8E7CE6;--searchBarBorderColor: rgba(142, 124, 230, .25);--link-color: var(--mainDark);--link-visited-color: var(--mainDarkest)}body.dark{--link-color: var(--mainLightest);--link-visited-color: var(--mainLight)}@font-face{font-family:Lato;font-style:normal;font-display:swap;font-weight:400;src:url(./lato-latin-ext-400-normal-N27NCBWW.woff2) format("woff2"),url(./lato-all-400-normal-MNITWADU.woff) format("woff");unicode-range:U+0100-024F,U+0259,U+1E00-1EFF,U+2020,U+20A0-20AB,U+20AD-20CF,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Lato;font-style:normal;font-display:swap;font-weight:400;src:url(./lato-latin-400-normal-W7754I4D.woff2) format("woff2"),url(./lato-all-400-normal-MNITWADU.woff) format("woff");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+2000-206F,U+2074,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Lato;font-style:normal;font-display:swap;font-weight:700;src:url(./lato-latin-ext-700-normal-Q2L5DVMW.woff2) format("woff2"),url(./lato-all-700-normal-XMT5XFBS.woff) format("woff");unicode-range:U+0100-024F,U+0259,U+1E00-1EFF,U+2020,U+20A0-20AB,U+20AD-20CF,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Lato;font-style:normal;font-display:swap;font-weight:700;src:url(./lato-latin-700-normal-2XVSBPG4.woff2) format("woff2"),url(./lato-all-700-normal-XMT5XFBS.woff) format("woff");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+2000-206F,U+2074,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}:root{--content-width: 949px;--content-gutter: 60px;--borderRadius-lg: 14px;--borderRadius-base: 8px;--borderRadius-sm: 3px;--navTabBorderWidth: 2px;--sansFontFamily: "Lato", system-ui, Segoe UI, Roboto, Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji";--monoFontFamily: ui-monospace, SFMono-Regular, Consolas, Liberation Mono, Menlo, monospace;--baseLineHeight: 1.5em;--gray25: hsl(207, 43%, 98%);--gray50: hsl(207, 43%, 96%);--gray100: hsl(212, 33%, 91%);--gray200: hsl(210, 29%, 88%);--gray300: hsl(210, 26%, 84%);--gray400: hsl(210, 21%, 64%);--gray450: hsl(210, 21%, 49%);--gray500: hsl(210, 21%, 34%);--gray600: hsl(210, 27%, 26%);--gray700: hsl(212, 35%, 17%);--gray750: hsl(214, 46%, 14%);--gray800: hsl(216, 52%, 11%);--gray800-opacity-0: hsla(216, 52%, 11%, 0%);--gray850: hsl(216, 63%, 8%);--gray900: hsl(218, 73%, 4%);--gray900-opacity-50: hsla(218, 73%, 4%, 50%);--gray900-opacity-0: hsla(218, 73%, 4%, 0%);--coldGrayFaint: hsl(240, 5%, 97%);--coldGrayLight: hsl(240, 5%, 88%);--coldGray-lightened-10: hsl(240, 5%, 56%);--coldGray: hsl(240, 5%, 46%);--coldGray-opacity-10: hsla(240, 5%, 46%, 10%);--coldGrayDark: hsl(240, 5%, 28%);--coldGrayDim: hsl(240, 5%, 18%);--yellowLight: hsl(43, 100%, 95%);--yellowDark: hsl(44, 100%, 15%);--yellow: hsl(60, 100%, 43%);--green-lightened-10: hsl(90, 100%, 45%);--green: hsl(90, 100%, 35%);--white: hsl(0, 0%, 100%);--white-opacity-50: hsla(0, 0%, 100%, 50%);--white-opacity-10: hsla(0, 0%, 100%, 10%);--white-opacity-0: hsla(0, 0%, 100%, 0%);--black: hsl(0, 0%, 0%);--black-opacity-10: hsla(0, 0%, 0%, 10%);--black-opacity-50: hsla(0, 0%, 0%, 50%);--orangeDark: hsl(30, 90%, 40%);--orangeLight: hsl(30, 80%, 50%);--text-xs: .75rem;--text-sm: .875rem;--text-md: 1rem;--text-lg: 1.125rem;--text-xl: 1.25rem;--transition-duration: .15s;--transition-timing: cubic-bezier(.4, 0, .2, 1);--transition-all: all var(--transition-duration) var(--transition-timing);--transition-colors: color var(--transition-duration) var(--transition-timing), background-color var(--transition-duration) var(--transition-timing), border-color var(--transition-duration) var(--transition-timing), text-decoration-color var(--transition-duration) var(--transition-timing), fill var(--transition-duration) var(--transition-timing), stroke var(--transition-duration) var(--transition-timing);--transition-opacity: opacity var(--transition-duration) var(--transition-timing)}@media screen and (max-width: 768px){:root{--content-width: 100%;--content-gutter: 20px}}option{background-color:var(--sidebarBackground)}:root{--background: var(--white);--contrast: var(--black);--textBody: var(--gray800);--textHeaders: var(--gray900);--textDetailAccent: var(--mainLight);--textDetailBackground: var(--coldGrayFaint);--iconAction: var(--coldGray);--iconActionHover: var(--gray800);--blockquoteBackground: var(--coldGrayFaint);--blockquoteBorder: var(--coldGrayLight);--tableHeadBorder: var(--gray100);--tableBodyBorder: var(--gray50);--warningBackground: hsl( 33, 100%, 97%);--warningHeadingBackground: hsl( 33, 87%, 64%);--warningHeading: var(--black);--errorBackground: hsl( 7, 81%, 96%);--errorHeadingBackground: hsl( 6, 80%, 60%);--errorHeading: var(--white);--infoBackground: hsl(206, 91%, 96%);--infoHeadingBackground: hsl(213, 92%, 62%);--infoHeading: var(--white);--neutralBackground: hsl(212, 29%, 92%);--neutralHeadingBackground: hsl(220, 43%, 11%);--neutralHeading: var(--white);--tipBackground: hsl(142, 31%, 93%);--tipHeadingBackground: hsl(134, 39%, 36%);--tipHeading: var(--white);--fnSpecAttr: var(--coldGray);--fnDeprecated: var(--yellowLight);--blink: var(--yellowLight);--codeBackground: var(--gray25);--codeBorder: var(--gray100);--codeScrollThumb: var(--gray400);--codeScrollBackground: var(--codeBorder);--admCodeBackground: var(--gray25);--admCodeBorder: var(--gray100);--admCodeColor: var(--black);--admInlineCodeColor: var(--black);--admInlineCodeBackground: var(--gray25);--admInlineCodeBorder: var(--gray100);--tabBorder: var(--gray300);--tabBorderTop: var(--gray100);--tabShadow: var(--gray25);--bottomActionsBtnBorder: var(--black-opacity-10);--bottomActionsBtnTitle: var(--mainDark);--modalBackground: var(--white);--settingsInput: var(--gray500);--settingsInputBackground: var(--white);--settingsInputBorder: var(--gray300);--settingsSectionBorder: var(--gray300);--quickSwitchInput: var(--gray500);--quickSwitchContour: var(--coldGray);--success: var(--green);--progressBarColor: var(--gray400);--sidebarAccentMain: var(--black);--sidebarBackground: var(--gray50);--sidebarHeader: var(--gray100);--sidebarMuted: var(--gray800);--sidebarHover: var(--black);--sidebarStaleVersion: var(--orangeDark);--sidebarSubheadings: var(--gray500);--sidebarItem: var(--black);--sidebarInactiveItemBorder: var(--gray500);--sidebarInactiveItemMarker: var(--gray200);--sidebarLanguageAccentBar: var(--mainDark);--sidebarActiveItem: var(--mainDarkest);--searchBarBorder: var(--gray200);--searchAccentMain: var(--gray600);--searchLanguageAccentBar: var(--main);--searchSearch: var(--white);--autocompleteBorder: rgba(3, 9, 19, .1);--autocompletePreview: var(--gray25);--autocompleteSelected: var(--gray25);--autocompleteHover: var(--gray50);--autocompleteBackground: var(--white);--suggestionBorder: var(--gray200);--autocompleteResults: var(--gray600);--autocompleteResultsBold: var(--gray800);--autocompleteLabelBack: var(--gray100);--autocompleteLabelFont: var(--gray600)}body.dark{--background: var(--gray900);--contrast: var(--white);--textBody: var(--gray200);--textHeaders: var(--gray100);--textDetailAccent: var(--mainLight);--textDetailBackground: var(--gray700);--iconAction: var(--coldGray-lightened-10);--iconActionHover: var(--white);--blockquoteBackground: var(--coldGray-opacity-10);--blockquoteBorder: var(--coldGrayDim);--tableHeadBorder: var(--gray600);--tableBodyBorder: var(--gray700);--warningBackground: hsla( 33, 30%, 60%, 10%);--warningHeadingBackground: hsla( 33, 66%, 35%, 80%);--warningHeading: var(--white);--errorBackground: hsla( 7, 30%, 60%, 10%);--errorHeadingBackground: hsla( 6, 70%, 40%, 80%);--errorHeading: var(--white);--infoBackground: hsla(206, 30%, 60%, 10%);--infoHeadingBackground: hsla(213, 55%, 35%, 80%);--infoHeading: var(--white);--neutralBackground: hsl(210, 30%, 60%, 10%);--neutralHeadingBackground: var(--gray600);--neutralHeading: var(--white);--tipBackground: hsla(142, 30%, 60%, 10%);--tipHeadingBackground: hsla(134, 45%, 30%, 80%);--tipHeading: var(--white);--fnSpecAttr: var(--gray400);--fnDeprecated: var(--yellowDark);--blink: var(--gray600);--codeBackground: var(--gray750);--codeBorder: var(--gray600);--codeScrollThumb: var(--gray500);--codeScrollBackground: var(--codeBorder);--admCodeBackground: var(--gray750);--admCodeBorder: var(--gray600);--admCodeColor: var(--gray100);--admInlineCodeColor: var(--gray100);--admInlineCodeBackground: var(--gray750);--admInlineCodeBorder: var(--gray600);--tabBorder: var(--gray700);--tabBorderTop: var(--gray700);--tabShadow: var(--black);--bottomActionsBtnBorder: var(--white-opacity-10);--bottomActionsBtnTitle: var(--mainLightest);--modalBackground: var(--gray800);--settingsInput: var(--white);--settingsInputBackground: var(--gray700);--settingsInputBorder: var(--gray700);--settingsSectionBorder: var(--gray700);--quickSwitchInput: var(--gray300);--quickSwitchContour: var(--gray500);--success: var(--green-lightened-10);--progressBarColor: var(--gray300);--sidebarAccentMain: var(--gray50);--sidebarBackground: var(--gray800);--sidebarHeader: var(--gray700);--sidebarMuted: var(--gray300);--sidebarHover: var(--white);--sidebarStaleVersion: var(--orangeLight);--sidebarSubheadings: var(--gray400);--sidebarItem: var(--gray200);--sidebarInactiveItemBorder: var(--gray400);--sidebarInactiveItemMarker: var(--gray600);--sidebarLanguageAccentBar: var(--mainLight);--sidebarActiveItem: var(--mainLightest);--searchBarBorder: var(--gray500);--searchAccentMain: var(--gray300);--searchSearch: var(--gray900);--autocompleteBorder: rgba(28,42,60,.75);--autocompletePreview: var(--gray750);--autocompleteSelected: var(--gray750);--autocompleteHover: var(--gray700);--autocompleteBackground: var(--gray800);--suggestionBorder: var(--gray600);--autocompleteResults: var(--gray200);--autocompleteResultsBold: var(--gray100);--autocompleteLabelBack: var(--gray600);--autocompleteLabelFont: rgba(255, 255, 255, .8)}:root:has(body.dark){color-scheme:dark}*,:before,:after{box-sizing:border-box}html{font-family:system-ui,Segoe UI,Roboto,Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji";line-height:1.15;-webkit-text-size-adjust:100%;tab-size:4}body{margin:0}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:ui-monospace,SFMono-Regular,Consolas,Liberation Mono,Menlo,monospace;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{border-color:currentcolor}button,input,optgroup,select,textarea{font-family:inherit;font-size:100%;line-height:1.15;margin:0}button,[type=button],[type=reset],[type=submit]{-webkit-appearance:button}legend{padding:0}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}@font-face{font-family:remixicon;src:url(./remixicon-QPNJX265.woff2) format("woff2");font-display:swap}[class^=ri-],[class*=" ri-"],.remix-icon{font-family:remixicon;font-style:normal;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}:root{--icon-arrow-up-s: "\ea78";--icon-arrow-down-s: "\ea4e";--icon-arrow-right-s: "\ea6e";--icon-add: "\ea13";--icon-subtract: "\f1af";--icon-error-warning: "\eca1";--icon-external-link-line: "\ecaf";--icon-information: "\ee59";--icon-alert: "\ea21";--icon-double-quotes-l: "\ec51";--icon-link-m: "\eeaf";--icon-close-line: "\eb99";--icon-code-s-slash-line: "\ebad";--icon-menu-line: "\ef3e";--icon-search-2-line: "\f0cd";--icon-settings-3-line: "\f0e6";--icon-printer-line: "\f029"}.ri-lg{font-size:1.3333em;line-height:.75em;vertical-align:-.0667em}.ri-settings-3-line:before{content:var(--icon-settings-3-line)}.ri-add-line:before{content:var(--icon-add)}.ri-subtract-line:before{content:var(--icon-subtract)}.ri-arrow-up-s-line:before{content:var(--icon-arrow-up-s)}.ri-arrow-down-s-line:before{content:var(--icon-arrow-down-s)}.ri-arrow-right-s-line:before{content:var(--icon-arrow-right-s)}.ri-external-link-line:before{content:var(--icon-external-link-line)}.ri-search-2-line:before{content:var(--icon-search-2-line)}.ri-menu-line:before{content:var(--icon-menu-line)}.ri-close-line:before{content:var(--icon-close-line)}.ri-link-m:before{content:var(--icon-link-m)}.ri-code-s-slash-line:before{content:var(--icon-code-s-slash-line)}.ri-error-warning-line:before{content:var(--icon-error-warning)}.ri-information-line:before{content:var(--icon-information)}.ri-alert-line:before{content:var(--icon-alert)}.ri-double-quotes-l:before{content:var(--icon-double-quotes-l)}.ri-printer-line:before{content:var(--icon-printer-line)}html,body{box-sizing:border-box;height:100%;width:100%}body{--sidebarWidth: 300px;--sidebarMinWidth: 300px;--sidebarTransitionDuration: .3s;background-color:var(--background);color:var(--textBody);font-size:var(--text-md);line-height:1.6875em;outline:none!important}*,*:before,*:after{box-sizing:inherit}.body-wrapper{display:flex;height:100%}.sidebar{display:none;flex-direction:column;width:var(--sidebarWidth);min-width:var(--sidebarMinWidth);max-width:50vw;height:100%;position:fixed;top:0;left:calc(-1 * var(--sidebarWidth));z-index:100;resize:horizontal}.sidebar-button{padding:26px 12px 18px 19px;position:fixed;z-index:200;top:0;left:0;will-change:transform;transform:translate(0)}.content{left:0;width:100%;height:100%;position:absolute}.content .content-inner{container:content / inline-size;max-width:var(--content-width);min-height:100%;margin:0 auto;padding:0 var(--content-gutter) 10px}.content-inner:focus{outline:none}.sidebar-transition .sidebar,.sidebar-transition .sidebar-button,.sidebar-transition .content{transition:all var(--sidebarTransitionDuration) ease-in-out allow-discrete}.sidebar-open .sidebar,.sidebar-transition .sidebar{display:flex}.sidebar-open .sidebar{left:0}.sidebar-open .sidebar-button{transform:translate(calc(var(--sidebarWidth) - 100%))}.sidebar-open .content{width:calc(100% - var(--sidebarWidth));left:var(--sidebarWidth)}@media screen and (max-width: 768px){.sidebar-open .content{left:0;width:100%}.sidebar{max-width:90vw}body:not(.sidebar-open) .sidebar-button{position:absolute}}.swup-progress-bar{height:2px;background-color:var(--progressBarColor)}.sidebar{--sidebarFontSize: 16px;--sidebarLineHeight: 20px;font-family:var(--sansFontFamily);font-size:var(--sidebarFontSize);line-height:var(--sidebarLineHeight);background-color:var(--sidebarBackground);color:var(--sidebarAccentMain);overflow:hidden;& .sidebar-tabpanel{scrollbar-width:thin}}.apple-os .sidebar{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.sidebar ul{list-style:none}.sidebar ul li{margin:0;padding:0 10px}.sidebar a{color:var(--sidebarAccentMain);text-decoration:none;transition:var(--transition-colors)}.sidebar a:hover{color:var(--sidebarHover)}.sidebar .external-link{margin-left:2.5px}.sidebar .sidebar-header{background-color:var(--sidebarHeader);width:100%}.sidebar .sidebar-projectInfo{display:flex;justify-content:start;align-items:center;gap:8px;margin:12px 34px 12px 14px}.sidebar .sidebar-projectInfo>div{flex:1}.sidebar .sidebar-projectImage{align-self:flex-end}.sidebar .sidebar-projectImage img{display:block;max-width:48px;max-height:48px}.sidebar .sidebar-projectName{font-weight:700;font-size:var(--text-xl);line-height:24px;color:var(--sidebarAccentMain);margin:0;padding:0;word-wrap:break-word;display:block;width:calc(100% - 12px)}.sidebar .sidebar-projectVersion{display:block;position:relative;margin:0;padding:0;font-size:var(--sidebarFontSize);line-height:var(--sidebarLineHeight);color:var(--sidebarMuted);width:calc(100% - 12px)}.sidebar .sidebar-projectVersion form{display:flex}.sidebar .sidebar-projectVersion select{cursor:pointer;position:relative;margin:0;padding:0 0 0 10px;border:none;-webkit-appearance:none;appearance:none;background-color:transparent;color:var(--sidebarMuted);z-index:2}.sidebar .sidebar-projectVersion option{color:initial}.sidebar .sidebar-projectVersionsCaret{position:absolute;left:0;top:2px;z-index:1;font-size:8px;color:var(--sidebarMuted)}.sidebar .sidebar-projectVersion select::-ms-expand{display:none}.sidebar .sidebar-staleVersion{display:block;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;color:var(--sidebarStaleVersion)}.sidebar .sidebar-staleVersion>a{color:var(--sidebarStaleVersion);font-weight:400}.sidebar .sidebar-staleIcon{font-size:var(--text-lg);line-height:0}.sidebar .sidebar-list-nav{display:flex;margin:0;padding:0;overflow:auto;scrollbar-width:thin}.sidebar .sidebar-list-nav :is(li,li button){text-transform:uppercase;letter-spacing:.02em;font-size:var(--text-sm);color:var(--sidebarSubheadings);white-space:nowrap}.sidebar .sidebar-list-nav li{display:inline-block;padding:0}.sidebar .sidebar-list-nav button{background:none;border:0;border-radius:0;-webkit-appearance:none;text-align:inherit;color:inherit;font-weight:inherit;cursor:pointer;display:inline-block;line-height:27px;padding:4px 14px;transition:var(--transition-all)}.sidebar .sidebar-list-nav button{border-bottom:var(--navTabBorderWidth) solid transparent}.sidebar .sidebar-list-nav button:not([aria-selected]):hover{border-bottom:var(--navTabBorderWidth) solid var(--sidebarInactiveItemBorder);color:var(--sidebarAccentMain);transition:var(--transition-all)}.sidebar .sidebar-list-nav button[aria-selected]{border-bottom:var(--navTabBorderWidth) solid var(--sidebarLanguageAccentBar);color:var(--sidebarAccentMain)}.sidebar .sidebar-tabpanel{flex:1 1 .01%;overflow-y:auto;overscroll-behavior:contain;position:relative;-webkit-overflow-scrolling:touch;padding-top:12px;scroll-padding-top:40px}.sidebar .full-list{margin:0;padding:0 0 20px;position:relative}.sidebar .full-list :is(li,a){display:block;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.sidebar .full-list li{padding:0;line-height:27px}.sidebar .full-list li.group{text-transform:uppercase;font-weight:700;font-size:.8em;margin:1.5em 0 0;line-height:1.8em;color:var(--sidebarSubheadings);padding-left:15px}.sidebar .full-list li.nesting-context{font-weight:700;font-size:.9em;line-height:1.8em;color:var(--sidebarSubheadings);margin-top:10px;padding-left:15px}.sidebar .full-list a{margin-right:30px;padding:3px 0 3px 12px;border-left:var(--navTabBorderWidth) solid transparent;color:var(--sidebarItem)}.sidebar .full-list a[aria-selected]{color:var(--sidebarActiveItem)}.sidebar .full-list button{appearance:none;background-color:transparent;border:0;padding:0;cursor:pointer;color:inherit;width:20px;text-align:center;font-size:calc(1.2 * var(--sidebarFontSize));line-height:var(--sidebarLineHeight);position:absolute;display:block;right:10px;transform:translateY(-100%)}.sidebar .full-list a[aria-selected]+button{color:var(--sidebarActiveItem)}.sidebar .full-list button:after{font-family:remixicon;font-style:normal;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;content:var(--icon-arrow-down-s)}.sidebar .full-list button[aria-expanded=true]:after{content:var(--icon-arrow-up-s)}.sidebar .full-list ul{display:none;margin:10px 0 10px 10px;padding:0}.sidebar .full-list button[aria-expanded=true]+ul{display:block}.sidebar .full-list>li>a{height:27px;line-height:var(--sidebarLineHeight)}.sidebar .full-list>li>a:hover{border-left-color:var(--sidebarLanguageAccentBar)}.sidebar .full-list>li>a[aria-selected]{border-left-color:var(--sidebarLanguageAccentBar)}.sidebar .full-list>li:last-child{margin-bottom:30px}.sidebar .full-list>li.group:first-child{margin-top:0}.sidebar .full-list>li>ul>li:not(:has(li a[aria-selected=true]))>a[aria-selected=true]:before,.sidebar .full-list>li>ul>li>a:hover:before{content:"\2022";position:absolute;margin-left:-15px;color:var(--sidebarActiveItem)}.sidebar .full-list ul li{line-height:var(--sidebarFontSize);padding:0 8px}.sidebar .full-list ul a{padding-left:15px;height:24px}.sidebar .full-list ul button{font-size:var(--sidebarFontSize)}.sidebar .full-list ul button:after{content:var(--icon-add)}.sidebar .full-list ul button[aria-expanded=true]:after{content:var(--icon-subtract)}.sidebar .full-list ul ul{margin:9px 0 9px 10px}.sidebar .full-list ul ul li{height:20px;color:var(--sidebarAccentMain)}.sidebar .full-list ul ul a{border-left:1px solid var(--sidebarInactiveItemMarker);padding:0 10px;height:20px}.sidebar .full-list ul ul a:hover{border-color:var(--sidebarLanguageAccentBar)}.sidebar .full-list ul ul a[aria-selected]{color:var(--sidebarActiveItem);border-color:var(--sidebarLanguageAccentBar)}.sidebar-button{cursor:pointer;background-color:transparent;border:none;font-size:var(--sidebarFontSize);color:var(--sidebarAccentMain)}.sidebar-button:hover{color:var(--sidebarHover)}body:not(.sidebar-open) .sidebar-button{color:var(--contrast)}@media screen and (max-height: 500px){.sidebar{overflow-y:auto}.sidebar .full-list{overflow:visible}}.top-search{background-color:var(--background);top:0;z-index:99;position:relative;width:100%;padding:10px 0}.search-settings{display:flex;column-gap:12px;align-items:center;width:100%;position:relative}.search-bar{border:1px solid var(--searchBarBorder);border-radius:var(--borderRadius-base);height:48px;position:relative;width:100%}.top-search .search-bar .search-input{background-color:var(--searchSearch);border:1px solid transparent;border-radius:var(--borderRadius-base);color:var(--searchAccentMain);position:relative;height:46px;padding:8px 35px 8px 43px;width:100%;transition:var(--transition-all)}.top-search .search-bar .search-input::placeholder{color:var(--searchAccentMain);opacity:.5}.top-search .search-bar .search-input:focus{border:1px solid var(--searchBarFocusColor);border-radius:calc(var(--borderRadius-base) - 1px);position:relative;box-shadow:0 4px 20px 0 var(--searchBarBorderColor) inset}.top-search .search-bar .search-label{position:relative}.top-search .search-bar .search-button{font-size:var(--text-sm);color:var(--searchAccentMain);background-color:transparent;border:none;cursor:pointer;left:11px;opacity:.5;padding:5px 1px 5px 5px;position:absolute;top:60%;transform:translateY(-60%);z-index:99;transition:var(--transition-all)}.top-search .search-bar.selected .search-button,.top-search .search-bar .search-button:hover,.top-search .search-bar .search-button:focus{color:var(--top-searchLanguageAccentBar);opacity:1}.top-search .search-bar .search-close-button{font-size:var(--text-md);color:var(--searchAccentMain);background-color:transparent;border:none;cursor:pointer;right:11px;margin:0;opacity:.5;padding:5px 1px 5px 0;position:absolute;transform:scaleY(0);top:calc(50% - 13px);transition:var(--transition-all);z-index:99}.top-search .search-bar .search-close-button:hover{opacity:.7}.top-search .search-settings button.icon-settings{display:flex;align-items:center;justify-content:flex-end}.top-search .search-settings .icon-settings{font-size:var(--text-xl);float:right;color:var(--iconAction);text-decoration:none;border:none;transition:color .3s ease-in-out;background-color:transparent;cursor:pointer;padding:0}.top-search .search-settings .icon-settings:hover{color:var(--iconActionHover)}.top-search .search-settings .icon-settings:visited{color:var(--iconAction)}@media screen and (max-width: 768px){.top-search{padding-left:calc(var(--content-gutter) + 36px);padding-right:var(--content-gutter);margin-left:calc(-1 * var(--content-gutter));margin-right:calc(-1 * var(--content-gutter));width:calc(2 * var(--content-gutter) + 100%)}.search-settings{width:100%;box-sizing:border-box}}body.search-focused .search-bar .search-close-button{transform:scaleY(1);transition:var(--transition-all)}@media screen and (hover: hover){body.search-focused .top-search{position:sticky!important}body.search-focused .sidebar-button{position:fixed!important}}@media screen and (hover: none){body.scroll-sticky .top-search{position:sticky!important}body.scroll-sticky .sidebar-button{position:fixed!important}}*:focus,button:focus,[type=button]:focus,[type=reset]:focus,[type=submit]:focus{outline:2px solid var(--main);outline-offset:-2px}*:focus:not(:focus-visible),button:focus:not(:focus-visible),[type=button]:focus:not(:focus-visible),[type=reset]:focus:not(:focus-visible),[type=submit]:focus:not(:focus-visible){outline:0}input[type=text],input[type=number],input[type=date],input[type=datetime],input[type=datetime-local],input[type=email],input[type=month],input[type=number],input[type=password],input[type=search],input[type=tel],input[type=time],input[type=url],input[type=week],textarea{outline:0}.content-inner{font-size:1em;line-height:1.6875em;position:relative;background-color:var(--background);color:var(--textBody)}.content-inner .heading-with-actions{display:flex;flex-wrap:wrap;justify-content:flex-end;align-items:center;gap:6px}.content-inner .heading-with-actions>*:not(h1){flex-shrink:0}.content-inner .heading-with-actions h1{flex-grow:1;justify-self:flex-start;max-width:100%;margin:0;overflow-wrap:break-word}.content-inner .heading-with-actions .icon-action{width:20px;height:20px;display:flex;justify-content:center;align-items:center;font-weight:400}.content-inner .heading-with-actions.top-heading .icon-action{font-size:1.2rem}@container content (width > 600px){.content-inner .heading-with-actions.top-heading{flex-wrap:nowrap;align-items:flex-start;& h1{padding-right:32px}& .icon-action{padding-top:1.7rem}}}.content-inner .top-heading{padding-top:1rem}.content-inner :is(h1,h2,h3,h4,h5,h6){font-family:var(--sansFontFamily);font-weight:700;line-height:1.5em;word-wrap:break-word;color:var(--textHeaders)}.content-inner h1{font-size:2em;margin:.5em 0}.content-inner h1.section-heading{margin:1.5em 0 .5em}.content-inner div.group-description{margin:0 0 3em}.content-inner h1 small{font-weight:400}.content-inner h2{font-size:1.6em;padding-top:1em;margin-bottom:.5em}.content-inner h3{font-size:1.375em;margin:1em 0 .5em}.content-inner li+li{margin-top:.25em}.content-inner :is(a,.a-main){color:var(--link-color);text-decoration:underline;text-decoration-skip-ink:auto}.content-inner :is(a:visited,.a-main:visited){color:var(--link-visited-color)}.content-inner .icon-action{color:var(--iconAction);text-decoration:none;border:none;transition:var(--transition-colors);background-color:transparent;cursor:pointer}.content-inner .icon-action:hover{color:var(--iconActionHover)}.content-inner .icon-action:visited{color:var(--iconAction)}.content-inner .livebook-badge-container{display:flex}.content-inner a.livebook-badge{display:inline-flex}.content-inner .note{color:var(--iconAction);font-size:var(--text-xs);font-weight:400}.content-inner blockquote,.content-inner section.admonition{border-left:3px solid var(--blockquoteBorder);position:relative;margin:1.5625em 0;padding:0 1.2rem;overflow:auto;background-color:var(--blockquoteBackground);border-radius:var(--borderRadius-base)}.content-inner blockquote p:last-child,.content-inner section.admonition p:last-child{padding-bottom:1em;margin-bottom:0}.content-inner table{margin:2em 0;border-collapse:collapse;display:block;overflow:auto}.content-inner th{text-align:left;font-family:var(--sansFontFamily);font-weight:700;padding-bottom:.5em;white-space:nowrap}.content-inner thead tr{border-bottom:1px solid var(--tableHeadBorder)}.content-inner tbody tr{border-bottom:1px solid var(--tableBodyBorder)}.content-inner tbody tr:last-child{border-bottom:none}.content-inner tr{vertical-align:bottom;height:2.5em}.content-inner :is(td,th){padding:.25em .25em .25em 1em;line-height:2em;vertical-align:top}.content-inner .section-heading{--icon-size: 16px;--icon-spacing: 5px;display:grid;grid-template:1fr / 1fr}@media screen and (max-width: 768px){.content-inner .section-heading{--icon-spacing: 2px}}.content-inner .section-heading>:is(.hover-link,.text){grid-row:1;grid-column:1}.content-inner .section-heading .hover-link{text-decoration:none}.content-inner .section-heading i{font-size:var(--icon-size);color:var(--mainLight);top:-2px;margin-left:calc(-1 * (var(--icon-size) + var(--icon-spacing)));padding-right:var(--icon-spacing);position:relative;opacity:0}.content-inner :is(blockquote,section.admonition) .section-heading i{display:none}.content-inner .section-heading:is(:hover,:focus,:target) i{opacity:1}.content-inner .app-vsn{display:none!important;font-size:.6em;line-height:1.5em}@media screen and (max-width: 768px){.content-inner .app-vsn{display:block!important}}.content-inner img{max-width:100%}.content-inner strong>code{font-weight:700}.content-inner code{font-family:var(--monoFontFamily);font-style:normal;line-height:24px;font-weight:400;font-size:var(--text-sm)}@media screen and (max-width: 768px){.content-inner :is(ol,ul){padding-left:calc(1.5 * var(--content-gutter))}}.content-inner section.admonition{border-radius:var(--borderRadius-base);border-left:0}.content-inner section.admonition.warning{background-color:var(--warningBackground)}.content-inner section.admonition.error{background-color:var(--errorBackground)}.content-inner section.admonition.info{background-color:var(--infoBackground)}.content-inner section.admonition.neutral{background-color:var(--neutralBackground)}.content-inner section.admonition.tip{background-color:var(--tipBackground)}.content-inner section.admonition>.admonition-title{color:var(--contrast);margin:0 -1.2rem;padding:.7rem 1.2rem .7rem 3.3rem;font-weight:700;font-style:normal}.content-inner section.admonition>.admonition-title:before{color:var(--contrast);position:absolute;left:1rem;font-size:1.8rem;font-family:remixicon;font-style:normal;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.content-inner section.admonition>.admonition-title.warning{background-color:var(--warningHeadingBackground);color:var(--warningHeading)}.content-inner section.admonition>.admonition-title.warning:before{content:var(--icon-error-warning);color:var(--warningHeading)}.content-inner section.admonition>.admonition-title.error{background-color:var(--errorHeadingBackground);color:var(--errorHeading)}.content-inner section.admonition>.admonition-title.error:before{content:var(--icon-error-warning);color:var(--errorHeading)}.content-inner section.admonition>.admonition-title.info{background-color:var(--infoHeadingBackground);color:var(--infoHeading)}.content-inner section.admonition>.admonition-title.info:before{content:var(--icon-information);color:var(--infoHeading)}.content-inner section.admonition>.admonition-title.neutral{background-color:var(--neutralHeadingBackground);color:var(--neutralHeading)}.content-inner section.admonition>.admonition-title.neutral:before{content:var(--icon-double-quotes-l);color:var(--neutralHeading)}.content-inner section.admonition>.admonition-title.tip{background-color:var(--tipHeadingBackground);color:var(--tipHeading)}.content-inner section.admonition>.admonition-title.tip:before{content:var(--icon-information);color:var(--tipHeading)}.content-inner section.admonition>.admonition-title code{margin:0 .5ch}.content-inner section.admonition code{background-color:var(--admInlineCodeBackground);border:1px solid var(--admInlineCodeBorder);color:var(--admInlineCodeColor)}.content-inner section.admonition pre code{background-color:var(--admCodeBackground);border:1px solid var(--admCodeBorder);color:var(--admCodeColor)}.content-inner section.admonition>.admonition-title :is(a,a:visited){color:inherit;text-decoration-color:currentColor}@media screen and (max-width: 768px){.content-inner section.admonition{margin-left:calc(-1 * var(--content-gutter));margin-right:calc(-1 * var(--content-gutter));padding-left:var(--content-gutter);padding-right:var(--content-gutter);border-radius:0}.content-inner section.admonition>.admonition-title{margin:0 calc(-1 * var(--content-gutter))}}.content-inner .summary h2 a{text-decoration:none;border:none;color:var(--textHeaders)!important}.content-inner .summary span.deprecated{color:var(--darkDeprecated);font-weight:400}.content-inner .summary .summary-row .summary-signature{font-family:var(--monoFontFamily);font-size:13px;font-weight:700}.content-inner .summary .summary-row .summary-signature a{text-decoration:none;border:none}.content-inner .summary .summary-row .summary-synopsis{padding:0 1.2em;margin:0 0 .5em}.content-inner .summary .summary-row .summary-synopsis p{margin:0;padding:0}@font-face{font-family:Consolas;src:local("Consolas");size-adjust:110%}.content-inner.content-inner :is(a:has(code,img),pre a){color:var(--link-color);text-shadow:none;text-decoration:none;background-image:none}.content-inner.content-inner :is(a:has(code,img),pre a):is(:visited,:active,:focus,:hover){color:var(--link-visited-color)}.content-inner code{background-color:var(--codeBackground);vertical-align:baseline;border-radius:var(--borderRadius-sm);padding:.1em .2em;border:1px solid var(--codeBorder);text-transform:none}.content-inner code.inline{border-radius:var(--borderRadius-sm);word-wrap:break-word}.content-inner pre{margin:var(--baseLineHeight) 0}.content-inner pre code{display:block;overflow-x:auto;white-space:inherit;padding:1em;scrollbar-width:thin}.content-inner pre code.output{margin:0 12px;max-height:400px;overflow:auto}.content-inner pre code.output+.copy-button{margin-right:12px}.content-inner pre code.output:before{content:"Output";display:block;position:absolute;top:-16px;left:12px;padding:2px 4px;font-size:var(--text-xs);font-family:var(--monoFontFamily);line-height:1;color:var(--textHeaders);background-color:var(--codeBackground);border:1px solid var(--codeBorder);border-bottom:0;border-radius:2px}@media screen and (max-width: 768px){.content-inner>pre:has(code),.content-inner section>pre:has(code){margin-left:calc(-1 * var(--content-gutter));margin-right:calc(-1 * var(--content-gutter))}.content-inner>pre code,.content-inner section>pre code{padding-left:var(--content-gutter);padding-right:var(--content-gutter);border-radius:0;border-left-width:0;border-right-width:0}}@keyframes blink-background{0%,to{background-color:var(--textDetailBackground)}50%{background-color:var(--blink)}}.content-inner .detail:target .detail-header{animation-duration:.55s;animation-name:blink-background;animation-iteration-count:1;animation-timing-function:ease-in-out}.content-inner .detail-header{margin:1em 0;padding:.5em .85em .5em 1em;background-color:var(--textDetailBackground);border-left:3px solid var(--textDetailAccent);font-size:1em;font-family:var(--monoFontFamily);position:relative}.content-inner .detail-header .signature{font-family:var(--monoFontFamily);font-size:13px;font-weight:700;line-height:2em}.content-inner .detail-header:hover a.detail-link,.content-inner .detail-header a.detail-link:focus{opacity:1;text-decoration:none}.content-inner .detail-header a.detail-link{transition:var(--transition-opacity);position:absolute;top:0;left:0;display:block;opacity:0;padding:.6em;line-height:1.5em;margin-left:-2.5em;text-decoration:none;border:none}@media screen and (max-width: 768px){.content-inner .detail-header a.detail-link{margin-left:-30px}}.content-inner .specs pre{font-family:var(--monoFontFamily);font-size:var(--text-xs);font-style:normal;line-height:24px;white-space:pre-wrap;margin:0;padding:0}.content-inner .specs .attribute{color:var(--fnSpecAttr)}.content-inner .docstring{margin:1.2em 0 3em 1.2em}@media screen and (max-width: 768px){.content-inner .docstring{margin-left:0}}.content-inner .docstring:is(h2,h3,h4,h5){font-weight:700}.content-inner .docstring h2{font-size:1.1em}.content-inner .docstring h3{font-size:1em}.content-inner .docstring h4{font-size:.95em}.content-inner .docstring h5{font-size:.9em}.content-inner div.deprecated{display:block;padding:1em;background-color:var(--fnDeprecated);border-radius:var(--borderRadius-sm);margin:var(--baseLineHeight) 0}.content-inner .footer{margin:4em auto 1em;text-align:center;font-size:var(--text-sm)}.content-inner .footer .line{display:inline-block}.content-inner .footer .footer-button{background-color:transparent;border:0;cursor:pointer;padding:0 4px}.content-inner .footer .footer-hex-package{margin-right:4px}.content-inner .bottom-actions{display:flex;justify-content:space-between;margin-top:7em;gap:12px}.bottom-actions-item{flex:1 1 0%}.content-inner .bottom-actions .bottom-actions-button{display:flex;text-decoration:none;flex-direction:column;border-radius:var(--borderRadius-sm);border:1px solid var(--bottomActionsBtnBorder);padding:12px 16px;min-width:150px;transition:var(--transition-all)}.content-inner .bottom-actions .bottom-actions-button:hover{border-color:var(--mainLight)}.content-inner .bottom-actions .bottom-actions-button .subheader{font-size:.8em;color:var(--textHeaders);white-space:nowrap}.content-inner .bottom-actions .bottom-actions-button .title{color:var(--bottomActionsBtnTitle)}.content-inner .bottom-actions .bottom-actions-button[rel=prev]{text-align:start}.content-inner .bottom-actions .bottom-actions-button[rel=next]{text-align:end}@media screen and (max-width: 768px){.content-inner .bottom-actions{flex-direction:column-reverse}}.page-cheatmd .content-inner{--horizontal-space: 1.5em;--vertical-space: 1em}@media (max-width: 600px){.page-cheatmd .content-inner{--horizontal-space: 1em;--vertical-space: .75em}}.page-cheatmd .content-inner{max-width:1200px}.page-cheatmd .content-inner h1{margin-bottom:var(--vertical-space)}.page-cheatmd .content-inner h2{margin:var(--vertical-space) 0;column-span:all;color:var(--gray700);font-weight:500}.dark .page-cheatmd .content-inner h2{color:var(--gray200)}.page-cheatmd .content-inner h3{margin:0 0 1em;font-weight:400}.page-cheatmd .content-inner section.h3{min-width:300px;margin:0;padding:0 0 calc(var(--vertical-space) * 2) 0;break-inside:avoid}.page-cheatmd .content-inner h3 .text{overflow:hidden}.page-cheatmd .content-inner h3 .text:after{content:"";margin-left:calc(var(--horizontal-space) / 2);vertical-align:baseline;display:inline-block;width:100%;height:1px;margin-right:-100%;margin-bottom:5px;background-color:var(--codeBorder)}.page-cheatmd .content-inner h4{display:block;margin:0;padding:.25em var(--horizontal-space);font-weight:400;background:var(--gray100);color:#567;border:solid 1px 1px 0 1px var(--gray100)}.dark .page-cheatmd .content-inner h4{background:#192f50;color:var(--textBody);border:1px solid #192f50;border-bottom:0}.page-cheatmd .content-inner .h2 p{margin:0;display:block;background:var(--gray50);padding:var(--vertical-space) var(--horizontal-space)}.dark .page-cheatmd .content-inner .h2 p{background:var(--gray700)}.page-cheatmd .content-inner .h2 p>code{color:#eb5757;border-radius:var(--borderRadius-sm);padding:.2em .4em}.page-cheatmd .content-inner pre code{padding:var(--vertical-space) var(--horizontal-space)}.page-cheatmd .content-inner .h2 pre{margin:0}.page-cheatmd .content-inner .h2 pre+pre{margin-top:-1px}.page-cheatmd .content-inner pre.wrap{white-space:break-spaces}@media screen and (max-width: 768px){.page-cheatmd .content-inner pre code{border-left-width:1px!important;border-right-width:1px!important}}.page-cheatmd .content-inner .h2 table{display:table;box-sizing:border-box;width:100%;border-collapse:collapse;margin:0}.page-cheatmd .content-inner .h2 th{padding:var(--vertical-space) var(--horizontal-space);line-height:inherit;margin-bottom:-1px;vertical-align:middle;border-bottom:1px solid var(--codeBorder)}.page-cheatmd .content-inner .h2 td{padding:var(--vertical-space) var(--horizontal-space);border:0;border-bottom:1px solid var(--codeBorder)}.page-cheatmd .content-inner .h2 tr:first-child{border-top:1px solid var(--codeBorder)}.page-cheatmd .content-inner .h2 td code{color:#eb5757;border-radius:var(--borderRadius-sm);padding:.2em .4em}.page-cheatmd .content-inner .h2 thead{background-color:var(--gray50)}.dark .page-cheatmd .content-inner .h2 thead{background-color:var(--gray700)}.page-cheatmd .content-inner .h2 tbody{background-color:var(--codeBackground)}.page-cheatmd .content-inner .h2 :is(ul,ol){margin:0;padding:0}.page-cheatmd .content-inner .h2 li{list-style-position:inside;padding:.5em var(--horizontal-space);line-height:2em;vertical-align:middle;background-color:var(--codeBackground);border-bottom:1px solid var(--codeBorder);margin-top:0}.page-cheatmd .content-inner .h2 :is(ul,ol)+pre code{border-top:0}.page-cheatmd .content-inner .h2 li>code{color:#eb5757;border-radius:var(--borderRadius-sm);padding:.2em .4em}.page-cheatmd .content-inner section.width-50{display:block;width:50%;margin:0}.page-cheatmd .content-inner section.width-50>section>table{width:100%}.page-cheatmd .content-inner section:is(.col-2,.col-2-left,.col-3){column-gap:40px}.page-cheatmd .content-inner section.col-2{column-count:2;height:auto}.page-cheatmd .content-inner section.col-2-left{display:grid;grid-template-columns:calc(100% / 3) auto}.page-cheatmd .content-inner section.col-2-left>h2{grid-column-end:span 2}.page-cheatmd .content-inner section.col-3{column-count:3;height:auto}.page-cheatmd .content-inner section.list-4>ul{display:flex;flex-wrap:wrap}.page-cheatmd .content-inner section.list-4>ul>li{flex:0 0 25%}.page-cheatmd .content-inner section.list-6>ul{display:flex;flex-wrap:wrap}.page-cheatmd .content-inner section.list-6>ul>li{flex:0 0 calc(100% / 6)}@media screen and (max-width: 1400px){.page-cheatmd .content-inner section.col-3{column-count:2}.page-cheatmd .content-inner section.col-2-left{display:flex;flex-direction:column}}@media screen and (max-width: 1200px){.page-cheatmd .content-inner section:is(.col-2,.col-3){display:flex;flex-direction:column}.page-cheatmd .content-inner section.list-6>ul>li{flex:0 0 25%}}@media screen and (max-width: 1000px){.page-cheatmd .content-inner section:is(.list-4,.list-6)>ul>li{flex:0 0 calc(100% / 3)}}@media screen and (max-width: 600px){.page-cheatmd .content-inner section:is(.list-4,.list-6)>ul>li{flex:0 0 50%}.page-cheatmd .content-inner section.width-50{width:100%}}#search{min-height:200px;position:relative}#search .loading{height:64px;width:64px;position:absolute;top:50%;left:calc(50% - 32px)}#search .loading div{box-sizing:border-box;display:block;position:absolute;width:51px;height:51px;margin:6px;border:6px solid var(--coldGray);border-radius:50%;animation:loading 1.2s cubic-bezier(.5,0,.5,1) infinite;border-color:var(--coldGray) transparent transparent transparent}#search .loading div:nth-child(1){animation-delay:-.45s}#search .loading div:nth-child(2){animation-delay:-.3s}#search .loading div:nth-child(3){animation-delay:-.15s}@keyframes loading{0%{transform:rotate(0)}to{transform:rotate(360deg)}}#search .result{margin:2em 0 2.5em}#search .result p{margin:0}#search .result-id{font-size:1.4em;margin:0}#search .result-id a{text-decoration:none;color:var(--textHeaders);transition:var(--transition-colors)}#search .result-id a:is(:visited,:active){color:var(--textHeaders)}#search .result-id a:is(:hover,:focus){color:var(--main)}#search :is(.result-id,.result-elem) em{font-style:normal;color:var(--main)}#search .result-id small{font-weight:400}@keyframes keyboard-shortcuts-show{0%{opacity:0}to{opacity:1}}.modal{animation-duration:.15s;animation-name:keyboard-shortcuts-show;animation-iteration-count:1;animation-timing-function:ease-in-out;display:none;background-color:#000000bf;position:fixed;inset:0;z-index:300}.modal.shown{display:block}.modal .modal-contents{margin:75px auto 0;max-width:500px;background-color:var(--modalBackground);border-radius:var(--borderRadius-sm);box-shadow:2px 2px 8px #0003;padding:25px 35px 35px}@media screen and (max-width: 768px){.modal .modal-contents{padding:20px}}.modal .modal-header{display:flex;align-items:start}.modal .modal-title{display:inline-block;flex-grow:1;font-size:1.2rem;font-weight:700;margin-bottom:20px}.modal .modal-title button{border:none;background-color:transparent;color:var(--textHeaders);font-weight:700;margin-right:30px;padding-left:0;text-align:left;transition:var(--transition-colors)}.modal .modal-title button:hover{color:var(--main);cursor:pointer}.modal .modal-title button.active{color:var(--main)}.modal .modal-close{cursor:pointer;display:block;font-size:1.5rem;margin:-8px -8px 0 0;padding:8px;opacity:.7;background-color:transparent;color:var(--textHeaders);border:none;transition:var(--transition-opacity)}.modal .modal-close:hover{opacity:1}#keyboard-shortcuts-content dl.shortcut-row{display:flex;align-items:center;justify-content:space-between;margin:0;padding:6px 0 8px;border-bottom:1px solid var(--settingsSectionBorder)}#keyboard-shortcuts-content dl.shortcut-row:last-of-type{border-bottom-style:none}#keyboard-shortcuts-content dl.shortcut-row:first-child{padding-top:0}#keyboard-shortcuts-content :is(.shortcut-keys,.shortcut-description){display:inline-block}#keyboard-shortcuts-content kbd>kbd{background-color:var(--settingsInputBorder);color:var(--contrast);border-radius:var(--borderRadius-sm);font-family:inherit;font-weight:700;display:inline-block;line-height:1;padding:4px 7px 6px;min-width:26px;text-align:center;font-size:var(--text-sm)}#keyboard-shortcuts-content :is(.shortcut-keys,.shortcut-description){margin:0}#quick-switch-modal-body{width:100%;position:relative}#quick-switch-modal-body .ri-search-2-line{position:absolute;left:0;top:0;padding:4px 10px;color:var(--quickSwitchContour);font-weight:700}#quick-switch-modal-body #quick-switch-input{width:100%;padding:8px 6px 8px 38px;border:none;color:var(--quickSwitchInput);background-color:transparent;border-bottom:1px solid var(--quickSwitchContour);box-sizing:border-box;transition:all .12s ease-out}#quick-switch-modal-body #quick-switch-results{margin:0}#quick-switch-modal-body .quick-switch-result{padding:2px 5px;border-bottom:1px dotted var(--quickSwitchContour);transition:all .12s ease-out}#quick-switch-modal-body .quick-switch-result:last-child{border-bottom:none}#quick-switch-modal-body .quick-switch-result:hover{cursor:pointer}#quick-switch-modal-body .quick-switch-result:is(:hover,.selected){border-left:4px solid var(--main);background-color:var(--codeBackground)}.autocomplete{display:none;position:absolute;width:calc(100% - 32px);top:55px}.autocomplete .triangle{width:0;height:0;border-left:12px solid transparent;border-right:12px solid transparent;border-bottom:12px solid var(--autocompleteBackground);position:absolute;top:8px;left:26px;transform:translate(-50%);z-index:100;background-color:transparent}.autocomplete-preview{width:100%;margin:0;height:100%;line-height:20px;background-color:var(--background);font-family:var(--sansFontFamily);border:4px solid var(--autocompleteBorder);padding:12px 16px}.autocomplete-preview div,.autocomplete-preview span{display:none}.autocomplete-preview.loading div{float:left;display:block;border:5px solid var(--autocompleteBorder);border-radius:50%;border-top:5px solid var(--textDetailAccent);width:20px;height:20px;animation:spinner 4s linear infinite}.autocomplete-preview.loading span{color:var(--autocompleteResults);display:inline;margin-left:6px}.autocomplete-preview.loading span:after{color:var(--autocompleteResults);content:"Loading"}@keyframes spinner{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.autocomplete-preview.loading iframe{height:0}.autocomplete-preview iframe{width:100%;height:100%;border:0}.autocomplete-results{list-style:none;margin:0;padding:15px 20px;display:flex;flex-wrap:wrap;justify-content:space-between;gap:8px;color:var(--autocompleteResults);font-family:var(--sansFontFamily);font-weight:300;font-size:.9rem}.autocomplete-results .query{margin-right:auto}.autocomplete-results .bold{color:var(--autocompleteResultsBold);font-weight:400}.autocomplete.shown{display:block}.autocomplete-container{position:absolute;top:15px;width:100%;z-index:200}.autocomplete-suggestions{background-color:var(--autocompleteBackground);border-radius:var(--borderRadius-base);box-shadow:0 15px 99px 0 var(--autocompleteBorder);overflow-y:auto;max-height:450px;white-space:normal;overflow-x:hidden;overscroll-behavior-y:contain;scrollbar-width:thin}.autocomplete-suggestions.previewing:has(.selected){max-height:80vh}.autocomplete-suggestions.previewing:has(.selected) .autocomplete-suggestion:not(.selected){display:none}.autocomplete-suggestions.previewing:not(:has(.selected)) .autocomplete-preview{display:none}.autocomplete-suggestions:not(.previewing) .autocomplete-preview{display:none}.autocomplete-suggestion{color:var(--textHeaders)!important;display:block;padding:12px 20px;text-decoration:none!important;transition:var(--transition-colors);border-top:1px solid var(--suggestionBorder);font-size:.9rem}.autocomplete-suggestion.selected{background-color:var(--autocompleteSelected);box-shadow:inset 2px 0 var(--main)}.autocomplete-suggestion:hover{background-color:var(--autocompleteHover)}.autocomplete-suggestion:not(.selected) .autocomplete-preview-indicator{display:none}.autocomplete-preview-indicator{float:right}.autocomplete-preview-indicator button{color:var(--iconAction);display:flex;align-items:center;text-decoration:none;border:1px solid var(--suggestionBorder);border-radius:var(--borderRadius-base);transition:var(--transition-colors);background-color:var(--autocompletePreview);cursor:pointer;padding:4px 8px;font-size:var(--text-sm)}.autocomplete-preview-indicator button:hover{color:var(--iconActionHover);background-color:var(--autocompleteHover)}.autocomplete-preview-indicator button i{margin-right:4px}.autocomplete-suggestions.previewing .autocomplete-preview-indicator-closed{display:none}.autocomplete-suggestions:not(.previewing) .autocomplete-preview-indicator-open{display:none}.autocomplete-suggestion:hover:not(.selected) .autocomplete-preview-indicator-closed{display:block}.autocomplete-suggestion em{font-style:normal;font-weight:700}.autocomplete-suggestion .description{opacity:.6;padding-top:3px}.autocomplete-suggestion .label{background-color:var(--autocompleteLabelBack);opacity:.6;color:var(--autocompleteLabelFont);padding:4px 8px;border-radius:4px;margin-left:5px;text-transform:uppercase;font-family:var(--sansFontFamily);font-size:.7rem}.autocomplete-suggestion .header{margin-right:5px}.autocomplete-suggestion .title,.autocomplete-suggestion .description{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;width:100%}@media screen and (hover: none){.autocomplete-preview-indicator,.autocomplete-results .press-return{display:none!important}}.tooltip{box-shadow:0 0 10px var(--black-opacity-10);max-height:300px;max-width:500px;padding:0;position:absolute;pointer-events:none;margin:0;z-index:99;top:0;left:0;visibility:hidden;transform:translateY(20px);opacity:0;transition:.2s visibility ease-out,.2s transform ease-out,.2s opacity ease-out}.tooltip.tooltip-shown{visibility:visible;transform:translateY(0);opacity:1}.tooltip .tooltip-body{border:1px solid var(--codeBorder);border-radius:var(--borderRadius-sm);overflow:auto}.tooltip .tooltip-body .signature{min-width:320px;width:100%;line-height:1em}.tooltip .tooltip-body .detail-header{border-left:0;margin-bottom:0;margin-top:0}.tooltip .tooltip-body .docstring{background-color:var(--background);padding:1.2em;margin:0;width:498px}.tooltip .tooltip-body .docstring-plain{max-width:498px;width:auto}.tooltip .tooltip-body .version-info{float:right;font-family:var(--monoFontFamily);font-weight:400;opacity:.3;padding-left:.3em}pre{position:relative}pre:hover .copy-button,pre .copy-button:focus{opacity:1}.copy-button{display:flex;opacity:0;position:absolute;top:7px;right:8px;padding:8px;background-color:transparent;backdrop-filter:blur(8px);border-radius:var(--borderRadius-sm);border:1px solid var(--codeBorder);cursor:pointer;transition:var(--transition-all);font-size:var(--text-sm);line-height:24px;color:currentColor;& svg[aria-live=polite]{display:none}}.copy-button svg{opacity:.5;transition:var(--transition-all)}pre .copy-button:hover svg,pre .copy-button:focus-visible svg{opacity:1}.copy-button svg{width:20px}.copy-button.clicked{opacity:1;color:var(--success);& svg[aria-live=polite]{display:block}}.copy-button.clicked svg{display:none;color:currentColor}#settings-modal-content{margin-top:10px}#settings-modal-content .hidden{display:none}#settings-modal-content .input{box-sizing:border-box;width:80%;padding:8px;font-size:var(--text-sm);background-color:var(--settingsInputBackground);color:var(--settingsInput);border:1px solid var(--settingsInputBorder);border-radius:var(--borderRadius-base);transition:var(--transition-all)}#settings-modal-content .input:focus{border-color:var(--main)}#settings-modal-content .input::placeholder{color:var(--gray400)}#settings-modal-content .switch-button-container{display:flex;align-items:center;justify-content:space-between;border-top:1px solid var(--settingsSectionBorder);padding:10px 0}#settings-modal-content .switch-button-container:first-of-type{border-top-style:none;padding-top:0}#settings-modal-content .switch-button-container>div>span{font-size:var(--text-md)}#settings-modal-content .switch-button-container>div>p{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-size:var(--text-sm);line-height:1.4;margin:0;padding-bottom:6px;padding-right:10px}#settings-modal-content .switch-button{position:relative;display:inline-block;flex-shrink:0;width:40px;height:20px;user-select:none;transition:var(--transition-all)}#settings-modal-content .switch-button__checkbox{appearance:none;position:absolute;display:block;width:20px;height:20px;border-radius:1000px;background-color:#91a4b7;border:3px solid #e5edf5;cursor:pointer;transition:var(--transition-all)}#settings-modal-content .switch-button__bg{display:block;width:100%;height:100%;border-radius:1000px;background-color:#e5edf5;cursor:pointer;transition:var(--transition-all)}#settings-modal-content .switch-button__checkbox:checked{background-color:#fff;border-color:var(--main);transform:translate(100%)}#settings-modal-content .switch-button__checkbox:checked+.switch-button__bg{background-color:var(--main)}#settings-modal-content .switch-button__checkbox:focus{outline:0}#settings-modal-content .switch-button__checkbox:focus+.switch-button__bg{outline:2px solid var(--main);outline-offset:2px}#settings-modal-content .switch-button__checkbox:focus:not(:focus-visible)+.switch-button__bg{outline:0}#settings-modal-content .settings-select{cursor:pointer;position:relative;border:none;background-color:transparent;color:var(--textBody)}#settings-modal-content .settings-select option{color:initial}#toast{visibility:hidden;opacity:0;position:fixed;z-index:1;left:50%;bottom:1rem;min-width:3rem;margin:0 -1.2rem;padding:.7rem 1.2rem;text-align:center;font-weight:700;border-radius:var(--borderRadius-base);border:1px solid var(--codeBorder);background-color:var(--codeBackground);color:var(--textBody);transition:opacity .4s ease-in-out,transform .3s ease-out;cursor:default}#toast.show{visibility:visible;opacity:1;transform:translateY(-.75rem)}@media (prefers-reduced-motion: reduce){#toast{transition:none}}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);border:0;user-select:none}@media print{.body-wrapper{display:block}.sidebar,.sidebar-button,.top-search{display:none}.content{padding-left:0;overflow:visible;left:0;width:100%}.summary-row{break-inside:avoid}#toast{display:none}.content-inner{padding:0}.content-inner .section-heading a.hover-link,.content-inner button.icon-action,.content-inner a.icon-action,.content-inner .bottom-actions{display:none}.footer p:first-of-type{display:none}.content-inner section.admonition{border:2px solid var(--gray400)}.content-inner section.admonition>.admonition-title{color:var(--textHeaders);border-bottom:2px solid var(--gray400)}.content-inner pre code.makeup{border-color:var(--gray400);white-space:break-spaces;break-inside:avoid}.content-inner blockquote code.inline,.content-inner code.inline{border-color:var(--gray400)}}@media print{.page-cheatmd .content-inner *{background-color:transparent!important;border-color:var(--gray400)!important}.page-cheatmd .content-inner{max-width:100%;width:100%;padding:0;font-size:.7em}.page-cheatmd .content-inner section:is(.col-2,.col-2-left,.col-3){column-gap:30px}.page-cheatmd .content-inner section.col-2{column-count:2}.page-cheatmd .content-inner section.col-2-left{display:grid}.page-cheatmd .content-inner section.col-3{column-count:3}.page-cheatmd .content-inner h1{margin-top:0;margin-bottom:.5em}.page-cheatmd .content-inner h2.section-heading{font-weight:700;margin-top:1em;column-span:all}.page-cheatmd .content-inner section.h2{break-inside:avoid}.page-cheatmd .content-inner h3{font-weight:700;color:var(--mainDark)}.page-cheatmd .content-inner h3:after{height:2px;background-color:var(--gray400)}.page-cheatmd .content-inner section.h3{min-width:300px;break-inside:avoid}.page-cheatmd .content-inner h4{padding:.5em 0;border:none;font-weight:700;color:#000}.page-cheatmd .content-inner .h2 p{padding-left:0;padding-right:0;border:none!important}.page-cheatmd .content-inner code{line-height:1.5em}.page-cheatmd .content-inner .h2 table{font-variant-numeric:tabular-nums;break-inside:avoid}.page-cheatmd .content-inner .h2 :is(th,td){vertical-align:top;padding-left:0;padding-right:0}.page-cheatmd .content-inner .h2 thead{border-style:solid none;border-width:1px}.page-cheatmd .content-inner .h2 tr{border-bottom:none}.page-cheatmd .content-inner .h2 th{font-weight:700}.page-cheatmd .content-inner .h2 li{padding-left:0;padding-right:0;vertical-align:middle;border-bottom:none}.page-cheatmd .content-inner pre:hover button.copy-button,.page-cheatmd .content-inner div.tooltip{display:none}.page-cheatmd .content-inner footer p:not(.built-using){display:none}}code.makeup .unselectable{-webkit-touch-callout:none;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.makeup .hll{background-color:#ffc}.makeup .bp{color:#3465a4}.makeup .c,.makeup .c1,.makeup .ch,.makeup .cm,.makeup .cp,.makeup .cpf,.makeup .cs{color:#4d4d4d}.makeup .dl{color:#408200}.makeup .err{color:#a40000;border:#ef2929}.makeup .fm,.makeup .g{color:#4d4d4c}.makeup .gd{color:#a40000}.makeup .ge{color:#4d4d4c;font-style:italic}.makeup .gh{color:navy;font-weight:700}.makeup .gi{color:#00a000}.makeup .go{color:#4d4d4c;font-style:italic}.makeup .gp{color:#4d4d4d}.makeup .gr{color:#ef2929}.makeup .gs{color:#4d4d4c;font-weight:700}.makeup .gt{color:#a40000;font-weight:700}.makeup .gu{color:purple;font-weight:700}.makeup .il{color:#0000cf;font-weight:700}.makeup .k,.makeup .kc,.makeup .kd,.makeup .kn,.makeup .kp,.makeup .kr,.makeup .kt{color:#204a87}.makeup .l{color:#4d4d4c}.makeup .ld{color:#c00}.makeup .m,.makeup .mb,.makeup .mf,.makeup .mh,.makeup .mi,.makeup .mo{color:#2937ab}.makeup .n{color:#4d4d4c}.makeup .na{color:#8a7000}.makeup .nb{color:#204a87}.makeup .nc{color:#0000cf}.makeup .nd{color:#5c35cc;font-weight:700}.makeup .ne{color:#c00;font-weight:700}.makeup .nf{color:#b65800}.makeup .ni{color:#bc5400}.makeup .nl{color:#b65800}.makeup .nn{color:#4d4d4c}.makeup .no{color:#a06600}.makeup .nt{color:#204a87;font-weight:700}.makeup .nv,.makeup .nx{color:#4d4d4c}.makeup .o{color:#bc5400}.makeup .ow{color:#204a87}.makeup .p,.makeup .py{color:#4d4d4c}.makeup .s,.makeup .s1,.makeup .s2,.makeup .sa,.makeup .sb,.makeup .sc{color:#408200}.makeup .sd{color:#8f5902;font-style:italic}.makeup .se{color:#204a87}.makeup .sh{color:#408200}.makeup .si{color:#204a87}.makeup .sr{color:#c00}.makeup .ss{color:#a06600}.makeup .sx{color:#408200}.makeup .vc,.makeup .vg,.makeup .vi,.makeup .vm,.makeup .x{color:#4d4d4c}.dark .makeup{color:#dce1e6}.dark .makeup .hll{background-color:#49483e}.dark .makeup .bp{color:#dce1e6}.dark .makeup .c,.dark .makeup .c1,.dark .makeup .ch,.dark .makeup .cm,.dark .makeup .cp,.dark .makeup .cpf,.dark .makeup .cs{color:#969386}.dark .makeup .dl{color:#e6db74}.dark .makeup .err{color:#960050;background-color:#1e0010}.dark .makeup .fm{color:#a6e22e}.dark .makeup .gd{color:#ff5385}.dark .makeup .ge{font-style:italic}.dark .makeup .gi{color:#a6e22e}.dark .makeup .gp{color:#969386}.dark .makeup .gs{font-weight:700}.dark .makeup .gu{color:#969386}.dark .makeup .gt{color:#ff5385;font-weight:700}.dark .makeup .il{color:#ae81ff}.dark .makeup .k,.dark .makeup .kc,.dark .makeup .kd{color:#66d9ef}.dark .makeup .kn{color:#ff5385}.dark .makeup .kp,.dark .makeup .kr,.dark .makeup .kt{color:#66d9ef}.dark .makeup .l,.dark .makeup .ld,.dark .makeup .m,.dark .makeup .mb,.dark .makeup .mf,.dark .makeup .mh,.dark .makeup .mi,.dark .makeup .mo{color:#ae81ff}.dark .makeup .n{color:#dce1e6}.dark .makeup .na{color:#a6e22e}.dark .makeup .nb{color:#dce1e6}.dark .makeup .nc,.dark .makeup .nd,.dark .makeup .ne,.dark .makeup .nf{color:#a6e22e}.dark .makeup .ni,.dark .makeup .nl,.dark .makeup .nn{color:#dce1e6}.dark .makeup .no{color:#66d9ef}.dark .makeup .nt{color:#ff5385}.dark .makeup .nv{color:#dce1e6}.dark .makeup .nx{color:#a6e22e}.dark .makeup .o,.dark .makeup .ow{color:#ff5385}.dark .makeup .p,.dark .makeup .py{color:#dce1e6}.dark .makeup .s,.dark .makeup .s1,.dark .makeup .s2,.dark .makeup .sa,.dark .makeup .sb,.dark .makeup .sc,.dark .makeup .sd{color:#e6db74}.dark .makeup .se{color:#ae81ff}.dark .makeup .sh,.dark .makeup .si,.dark .makeup .sr,.dark .makeup .ss,.dark .makeup .sx{color:#e6db74}.dark .makeup .vc,.dark .makeup .vg,.dark .makeup .vi,.dark .makeup .vm{color:#dce1e6}.tabset{--borderWidth: 1px;--tabsetPadding: var(--baseLineHeight);margin:var(--baseLineHeight) 0;border:var(--borderWidth) solid var(--tabBorder);padding:0 var(--tabsetPadding);border-radius:var(--borderRadius-lg)}.tabset-tablist{display:flex;overflow:auto;scrollbar-width:thin;border-bottom-width:1px;border-bottom-style:solid;border-bottom-color:var(--tabBorderTop)}.tabset-tab{padding:1.1rem var(--tabsetPadding);font-family:var(--sansFontFamily);color:var(--textColor);margin-right:calc(-1 * var(--borderWidth));background-color:transparent;border:0;box-shadow:none;cursor:pointer;border-bottom-width:2px;border-bottom-style:solid;border-bottom-color:transparent;transition:var(--transition-all)}:hover.tabset-tab{border-bottom-color:var(--tabBorderTop);color:var(--textHeaders)}.tabset-tab[aria-selected=true]{border-bottom-color:var(--mainLight);color:var(--textHeaders)}.tabset-tab[aria-selected=true]:focus-visible{background-color:var(--mainLight);border-color:var(--mainLight);color:var(--white)}@media screen and (max-width: 768px){.tabset{--tabsetPadding: calc(var(--baseLineHeight) / 2)}.tabset-panel{padding-top:calc(var(--tabsetPadding) / 2);padding-bottom:calc(var(--tabsetPadding) / 2)}.tabset-panel pre,.tabset-panel blockquote,.tabset-panel section.admonition{margin-left:calc(-1 * var(--tabsetPadding))!important;margin-right:calc(-1 * var(--tabsetPadding))!important}.tabset-panel>pre code{border-left-width:0;border-right-width:0}}@media screen and (max-width: 768px){.tabset-panel>:is(:first-child){&:is(table){margin:.5em 0}}}@media screen and (min-width: 769px){.tabset-panel>:is(:first-child){&:is(blockquote,.admonition){margin-top:1.5em}&:is(p:has(img)){margin-top:1.25em}&:is(table){margin-top:.75em}}.tabset-panel>:is(:last-child){&:is(blockquote,.admonition){margin-bottom:1.5em}&:is(p:not(:has(img)),ul,ol){margin-bottom:1.25em}&:is(table){margin-bottom:.75em}}}body.preview{--sidebarWidth: 0px;overflow:hidden}body.preview .content{height:auto}body.preview .content-inner{padding:0}body.preview .sidebar,body.preview #sidebar-menu,body.preview .hover-link,body.preview .detail-link{display:none}body.preview :is(h1,h2,h3):first-of-type{margin-top:0}body:not(.dark) .content-inner img[src*="#gh-dark-mode-only"],body.dark .content-inner img[src*="#gh-light-mode-only"]{display:none} +/*! Bundled license information: + +modern-normalize/modern-normalize.css: + (*! modern-normalize v3.0.1 | MIT License | https://github.com/sindresorhus/modern-normalize *) +*/ diff --git a/documentation/technical/auxiliary/msbms_build_lib/dist/search_data-6DDC0733.js b/documentation/technical/auxiliary/msbms_build_lib/dist/search_data-6FAF4665.js similarity index 63% rename from documentation/technical/auxiliary/msbms_build_lib/dist/search_data-6DDC0733.js rename to documentation/technical/auxiliary/msbms_build_lib/dist/search_data-6FAF4665.js index ff13b3341..13a2aa4e4 100644 --- a/documentation/technical/auxiliary/msbms_build_lib/dist/search_data-6DDC0733.js +++ b/documentation/technical/auxiliary/msbms_build_lib/dist/search_data-6FAF4665.js @@ -1 +1 @@ -searchData={"items":[{"type":"task","title":"mix msbms.db.clean","doc":"Cleans database artifacts for MSBMS components.\n\nThis task allows you to:\n- Reset the database (drops all objects and runs bootstrap script)\n\nNote: Database migration cleaning is handled by `mix msbms.elixir.clean --migrations`\nsince migrations are part of the Elixir project structure.\n\nIt calls functions from `MsbmsBuildLib` to perform the actual operations.","ref":"Mix.Tasks.Msbms.Db.Clean.html"},{"type":"task","title":"Command line options - mix msbms.db.clean","doc":"* `--reset` - Resets the database, dropping all objects and running the\n bootstrap script. After reset, the specified database user will be\n granted the `ms_syst_documentation` role.\n * `--base-dir PATH` - Specifies the base directory of the MSBMS project.\n Defaults to the current working directory.\n * `--log-level LEVEL` - Sets the logging level (e.g., debug, info, warn, error).\n Defaults to \"info\".\n * `--db-host HOST` - Database host (default: localhost).\n * `--db-port PORT` - Database port (default: 5432).\n * `--db-user USER` - Database user (default: postgres).\n * `--db-name DATABASE` - Database name (default: postgres).\n * `--dbadmin-password PASS` - Password for the `ms_syst_privileged` role\n created by the bootstrap script. If not provided, defaults to\n \"musesystems-insecure-publicly-known-password\".","ref":"Mix.Tasks.Msbms.Db.Clean.html#module-command-line-options"},{"type":"task","title":"Database Requirements - mix msbms.db.clean","doc":"Database cleaning functions require a superuser role as the clean process\nwill both drop and create roles and databases.\n\nFor security reasons, the main database password is not accepted as a command\nline argument. Instead, use either a correctly configured `.pgpass` file or\nenvironment variables. See the PostgreSQL documentation for more information.","ref":"Mix.Tasks.Msbms.Db.Clean.html#module-database-requirements"},{"type":"task","title":"Examples - mix msbms.db.clean","doc":"mix msbms.db.clean --reset --db-user postgres\n mix msbms.db.clean --reset --dbadmin-password mypassword\n mix msbms.db.clean --reset --db-host myhost --db-user postgres\n\nThe `--reset` option is required.","ref":"Mix.Tasks.Msbms.Db.Clean.html#module-examples"},{"type":"function","title":"Mix.Tasks.Msbms.Db.Clean.run/1","doc":"Callback implementation for Mix.Task.run/1 .","ref":"Mix.Tasks.Msbms.Db.Clean.html#run/1"},{"type":"task","title":"mix msbms.db.docs","doc":"Builds database documentation for MSBMS components.\n\nThis task generates documentation from the database schema and requires\nan active database connection. The database role used must be a member\nof the `ms_syst_documentation` group role prior to using this task.\n\nIt calls functions from `MsbmsBuildLib` to perform the actual operations.","ref":"Mix.Tasks.Msbms.Db.Docs.html"},{"type":"task","title":"Command line options - mix msbms.db.docs","doc":"* `--base-dir PATH` - Specifies the base directory of the MSBMS project.\n Defaults to the current working directory.\n * `-c NAME`, `--component NAME` - Specifies a component to operate on.\n Can be provided multiple times.\n * `--component-file PATH` - Specifies a file containing component names\n (one per line, # for comments). Can be combined with `-c` options.\n * `--log-level LEVEL` - Sets the logging level (e.g., debug, info, warn, error).\n Defaults to \"info\".\n * `--db-host HOST` - Database host (default: localhost).\n * `--db-port PORT` - Database port (default: 5432).\n * `--db-user USER` - Database user (required for DB documentation).\n * `--db-name DATABASE` - Database name (default: postgres).","ref":"Mix.Tasks.Msbms.Db.Docs.html#module-command-line-options"},{"type":"task","title":"Component File Format - mix msbms.db.docs","doc":"Component files support:\n- One component name per line\n- Comments starting with `#` are ignored\n- Empty lines are ignored\n- Leading/trailing whitespace is trimmed\n\nExample component file:\n # Core components\n mssub_mcp_common\n mssub_mcp_types\n\n # Optional component\n ms_logger","ref":"Mix.Tasks.Msbms.Db.Docs.html#module-component-file-format"},{"type":"task","title":"Database Credentials - mix msbms.db.docs","doc":"For security reasons, database passwords are not accepted as command line\narguments. Instead, use either a correctly configured `.pgpass` file or\nenvironment variables to pass credentials. See the PostgreSQL documentation\nfor more information on either configuration option.","ref":"Mix.Tasks.Msbms.Db.Docs.html#module-database-credentials"},{"type":"task","title":"Examples - mix msbms.db.docs","doc":"mix msbms.db.docs --db-user postgres\n mix msbms.db.docs --db-host localhost --db-user myuser\n mix msbms.db.docs --base-dir /path/to/project --db-user postgres -c my_app1\n mix msbms.db.docs --db-user postgres --component-file .ci/group-1.txt\n mix msbms.db.docs --db-user postgres --component-file .ci/group-1.txt -c extra_component","ref":"Mix.Tasks.Msbms.Db.Docs.html#module-examples"},{"type":"function","title":"Mix.Tasks.Msbms.Db.Docs.run/1","doc":"Callback implementation for Mix.Task.run/1 .","ref":"Mix.Tasks.Msbms.Db.Docs.html#run/1"},{"type":"task","title":"mix msbms.elixir.build","doc":"Builds Elixir components and database migrations for MSBMS projects.\n\nThis task allows you to build:\n- Elixir components (compiles code and refreshes Dialyzer PLT files)\n- Database migrations\n\nIt calls functions from `MsbmsBuildLib` to perform the actual operations.","ref":"Mix.Tasks.Msbms.Elixir.Build.html"},{"type":"task","title":"Command line options - mix msbms.elixir.build","doc":"* `--elixir` - Builds Elixir components.\n * `--db-migrations` - Builds database migrations.\n * `--all` - Builds all of the above.\n * `--elixir-env ENV` - Specifies the Elixir environment (e.g., dev, test, prod).\n Defaults to \"dev\".\n * `--base-dir PATH` - Specifies the base directory of the MSBMS project.\n Defaults to the current working directory.\n * `-c NAME`, `--component NAME` - Specifies a component to operate on.\n Can be provided multiple times.\n * `--component-file PATH` - Specifies a file containing component names\n (one per line, # for comments). Can be combined with `-c` options.\n * `--log-level LEVEL` - Sets the logging level (e.g., debug, info, warn, error).\n Defaults to \"info\".","ref":"Mix.Tasks.Msbms.Elixir.Build.html#module-command-line-options"},{"type":"task","title":"Component File Format - mix msbms.elixir.build","doc":"Component files support:\n- One component name per line\n- Comments starting with `#` are ignored\n- Empty lines are ignored\n- Leading/trailing whitespace is trimmed\n\nExample component file:\n # Core components\n mssub_mcp_common\n mssub_mcp_types\n\n # Optional component\n ms_logger","ref":"Mix.Tasks.Msbms.Elixir.Build.html#module-component-file-format"},{"type":"task","title":"Examples - mix msbms.elixir.build","doc":"mix msbms.elixir.build --elixir\n mix msbms.elixir.build --all --elixir-env prod\n mix msbms.elixir.build --db-migrations -c my_app1 -c my_app2\n mix msbms.elixir.build --elixir --base-dir /path/to/project\n mix msbms.elixir.build --all --component-file .ci/group-1.txt\n mix msbms.elixir.build --elixir --component-file .ci/group-1.txt -c extra_component\n\nAt least one of `--elixir`, `--db-migrations`, or `--all` must be specified.","ref":"Mix.Tasks.Msbms.Elixir.Build.html#module-examples"},{"type":"function","title":"Mix.Tasks.Msbms.Elixir.Build.run/1","doc":"Callback implementation for Mix.Task.run/1 .","ref":"Mix.Tasks.Msbms.Elixir.Build.html#run/1"},{"type":"task","title":"mix msbms.elixir.clean","doc":"Cleans various Elixir-related artifacts for MSBMS components.\n\nThis task allows you to clean:\n- Elixir Language Server (.elixir_ls) files\n- Dialyzer PLT files\n- Build artifacts (_build directory)\n- Dependency files (deps directory and mix.lock)\n- Database migration files (considered a sensitive operation)\n\nIt calls functions from `MsbmsBuildLib` to perform the actual operations.","ref":"Mix.Tasks.Msbms.Elixir.Clean.html"},{"type":"task","title":"Command line options - mix msbms.elixir.clean","doc":"* `--ls` - Cleans Elixir Language Server files.\n * `--plt` - Cleans Dialyzer PLT files.\n * `--build` - Cleans build artifacts.\n * `--deps` - Cleans dependency files.\n * `--migrations` - Removes database migration files. This is considered\n a sensitive operation when dealing with subsystems as migrations in\n those contexts aren't meant to be regularly rebuilt.\n * `--all` - Cleans all of the above Elixir-related artifacts (but NOT\n migrations, due to their sensitive nature).\n * `--base-dir PATH` - Specifies the base directory of the MSBMS project.\n Defaults to the current working directory.\n * `-c NAME`, `--component NAME` - Specifies a component to operate on.\n Can be provided multiple times.\n * `--component-file PATH` - Specifies a file containing component names\n (one per line, # for comments). Can be combined with `-c` options.\n * `--log-level LEVEL` - Sets the logging level (e.g., debug, info, warn, error).\n Defaults to \"info\".","ref":"Mix.Tasks.Msbms.Elixir.Clean.html#module-command-line-options"},{"type":"task","title":"Component File Format - mix msbms.elixir.clean","doc":"Component files support:\n- One component name per line\n- Comments starting with `#` are ignored\n- Empty lines are ignored\n- Leading/trailing whitespace is trimmed\n\nExample component file:\n # Core components\n mssub_mcp_common\n mssub_mcp_types\n\n # Optional component\n ms_logger","ref":"Mix.Tasks.Msbms.Elixir.Clean.html#module-component-file-format"},{"type":"task","title":"Examples - mix msbms.elixir.clean","doc":"mix msbms.elixir.clean --ls\n mix msbms.elixir.clean --all --base-dir /path/to/project\n mix msbms.elixir.clean --plt --build -c my_app1 -c my_app2\n mix msbms.elixir.clean --deps\n mix msbms.elixir.clean --migrations -c my_app1\n mix msbms.elixir.clean --all --component-file .ci/group-1.txt\n mix msbms.elixir.clean --plt --component-file .ci/group-1.txt -c extra_component\n\nAt least one of `--ls`, `--plt`, `--build`, `--deps`, `--migrations`, or `--all` must be specified.\nNote: `--migrations` must be explicitly requested and is not included in `--all`.","ref":"Mix.Tasks.Msbms.Elixir.Clean.html#module-examples"},{"type":"function","title":"Mix.Tasks.Msbms.Elixir.Clean.run/1","doc":"Callback implementation for Mix.Task.run/1 .","ref":"Mix.Tasks.Msbms.Elixir.Clean.html#run/1"},{"type":"task","title":"mix msbms.elixir.deps","doc":"Manages Elixir application dependencies.\n\nThis task allows you to clean, install, or update dependencies for\nElixir components within a MSBMS project structure. It calls functions\nfrom `MsbmsBuildLib` to perform the actual operations.","ref":"Mix.Tasks.Msbms.Elixir.Deps.html"},{"type":"task","title":"Command line options - mix msbms.elixir.deps","doc":"* `--clean` - Cleans dependency files (`deps` directory and `mix.lock`).\n * `--install` - Installs dependencies (equivalent to `mix deps.get`).\n * `--update` - Updates dependencies (equivalent to `mix deps.update --all`).\n * `--base-dir PATH` - Specifies the base directory of the MSBMS project.\n Defaults to the current working directory.\n * `-c NAME`, `--component NAME` - Specifies a component to operate on.\n Can be provided multiple times. If not specified, operations may apply\n to all discoverable components or the root project, depending on the\n underlying `MsbmsBuildLib` logic.\n * `--component-file PATH` - Specifies a file containing component names\n (one per line, # for comments). Can be combined with `-c` options.\n * `--log-level LEVEL` - Sets the logging level (e.g., debug, info, warn, error).\n Defaults to \"info\".","ref":"Mix.Tasks.Msbms.Elixir.Deps.html#module-command-line-options"},{"type":"task","title":"Component File Format - mix msbms.elixir.deps","doc":"Component files support:\n- One component name per line\n- Comments starting with `#` are ignored\n- Empty lines are ignored\n- Leading/trailing whitespace is trimmed\n\nExample component file:\n # Core components\n mssub_mcp_common\n mssub_mcp_types\n\n # Optional component\n ms_logger","ref":"Mix.Tasks.Msbms.Elixir.Deps.html#module-component-file-format"},{"type":"task","title":"Examples - mix msbms.elixir.deps","doc":"mix msbms.elixir.deps --install\n mix msbms.elixir.deps --update --base-dir /path/to/project\n mix msbms.elixir.deps --clean -c my_app1 -c my_app2\n mix msbms.elixir.deps --clean --install -c my_app\n mix msbms.elixir.deps --install --component-file .ci/group-1.txt\n mix msbms.elixir.deps --update --component-file .ci/group-1.txt -c extra_component\n\nAt least one of `--clean`, `--install`, or `--update` must be specified.\nIf multiple actions are specified, they are performed in the order: clean, install, update.","ref":"Mix.Tasks.Msbms.Elixir.Deps.html#module-examples"},{"type":"function","title":"Mix.Tasks.Msbms.Elixir.Deps.run/1","doc":"Callback implementation for Mix.Task.run/1 .","ref":"Mix.Tasks.Msbms.Elixir.Deps.html#run/1"},{"type":"task","title":"mix msbms.elixir.docs","doc":"Builds Elixir documentation for MSBMS components using ExDoc.\n\nIt calls functions from `MsbmsBuildLib` to perform the actual operations.","ref":"Mix.Tasks.Msbms.Elixir.Docs.html"},{"type":"task","title":"Command line options - mix msbms.elixir.docs","doc":"* `--base-dir PATH` - Specifies the base directory of the MSBMS project.\n Defaults to the current working directory.\n * `-c NAME`, `--component NAME` - Specifies a component to operate on.\n Can be provided multiple times.\n * `--component-file PATH` - Specifies a file containing component names\n (one per line, # for comments). Can be combined with `-c` options.\n * `--log-level LEVEL` - Sets the logging level (e.g., debug, info, warn, error).\n Defaults to \"info\".","ref":"Mix.Tasks.Msbms.Elixir.Docs.html#module-command-line-options"},{"type":"task","title":"Component File Format - mix msbms.elixir.docs","doc":"Component files support:\n- One component name per line\n- Comments starting with `#` are ignored\n- Empty lines are ignored\n- Leading/trailing whitespace is trimmed\n\nExample component file:\n # Core components\n mssub_mcp_common\n mssub_mcp_types\n\n # Optional component\n ms_logger","ref":"Mix.Tasks.Msbms.Elixir.Docs.html#module-component-file-format"},{"type":"task","title":"Examples - mix msbms.elixir.docs","doc":"mix msbms.elixir.docs\n mix msbms.elixir.docs --base-dir /path/to/project\n mix msbms.elixir.docs -c my_app1 -c my_app2\n mix msbms.elixir.docs --component-file .ci/group-1.txt\n mix msbms.elixir.docs --component-file .ci/group-1.txt -c extra_component","ref":"Mix.Tasks.Msbms.Elixir.Docs.html#module-examples"},{"type":"function","title":"Mix.Tasks.Msbms.Elixir.Docs.run/1","doc":"Callback implementation for Mix.Task.run/1 .","ref":"Mix.Tasks.Msbms.Elixir.Docs.html#run/1"},{"type":"task","title":"mix msbms.elixir.scaffold","doc":"Scaffolds a new Elixir component for MSBMS projects.\n\nThis task creates a new Elixir component project structure based on the standard\ntemplates, with all files properly configured for the new component.","ref":"Mix.Tasks.Msbms.Elixir.Scaffold.html"},{"type":"task","title":"Command line options - mix msbms.elixir.scaffold","doc":"* `--name NAME` - The name of the component (e.g., \"mscmp_new_feature\"). Required.\n * `--path PATH` - The relative path where the component should be created.\n Defaults to \"app_server/components/system\".\n * `--display-name NAME` - Human-friendly name for the component.\n Defaults to a capitalized version of the component name.\n * `--description DESC` - Brief description of the component.\n Defaults to a generic description.\n * `--section SECTION` - Documentation section atom.\n Defaults to derived from component name.\n * `--comp-short-name NAME` - Override the derived short component name.\n Defaults to removing categorizing prefix (e.g., \"mscmp_syst_\" → \"\").\n * `--module-name NAME` - Override the derived module name.\n Defaults to PascalCase of full component name.\n * `--module-short-name NAME` - Override the derived short module name.\n Defaults to PascalCase of short component name.\n * `--base-dir PATH` - Specifies the base directory of the MSBMS project.\n Defaults to the current working directory.\n * `--log-level LEVEL` - Sets the logging level (e.g., debug, info, warn, error).\n Defaults to \"info\".","ref":"Mix.Tasks.Msbms.Elixir.Scaffold.html#module-command-line-options"},{"type":"task","title":"Examples - mix msbms.elixir.scaffold","doc":"# Create a new system component\n mix msbms.elixir.scaffold --name mscmp_new_feature\n\n # Create a new application component with custom details\n mix msbms.elixir.scaffold --name msapp_new_app \\\n --path app_server/components/application \\\n --display-name \"New Application\" \\\n --description \"Provides new application functionality.\"\n\n # Create a subsystem component\n mix msbms.elixir.scaffold --name mssub_new_subsystem \\\n --path app_server/subsystems \\\n --display-name \"New Subsystem\"\n\n # Override derived names for edge cases\n mix msbms.elixir.scaffold --name legacy_system_component \\\n --comp-short-name legacy \\\n --module-short-name Legacy\n\nThe `--name` option is required.","ref":"Mix.Tasks.Msbms.Elixir.Scaffold.html#module-examples"},{"type":"function","title":"Mix.Tasks.Msbms.Elixir.Scaffold.run/1","doc":"Callback implementation for Mix.Task.run/1 .","ref":"Mix.Tasks.Msbms.Elixir.Scaffold.html#run/1"},{"type":"task","title":"mix msbms.elixir.test","doc":"Runs various types of Elixir tests for MSBMS components.\n\nThis task allows you to run:\n- Unit tests\n- Integration tests\n- Doctests\n- Credo tests (static code analysis)\n- Dialyzer tests (static type analysis)\n\nIt calls functions from `MsbmsBuildLib` to perform the actual operations.","ref":"Mix.Tasks.Msbms.Elixir.Test.html"},{"type":"task","title":"Command line options - mix msbms.elixir.test","doc":"* `--unit` - Runs unit tests.\n * `--integration` - Runs integration tests.\n * `--doctest` - Runs doctests.\n * `--credo` - Runs credo tests (static code analysis).\n * `--dialyzer` - Runs dialyzer tests (static type analysis).\n * `--all` - Runs all of the above test types.\n * `--base-dir PATH` - Specifies the base directory of the MSBMS project.\n Defaults to the current working directory.\n * `-c NAME`, `--component NAME` - Specifies a component to operate on.\n Can be provided multiple times.\n * `--component-file PATH` - Specifies a file containing component names\n (one per line, # for comments). Can be combined with `-c` options.\n * `--log-level LEVEL` - Sets the logging level (e.g., debug, info, warn, error).\n Defaults to \"info\".","ref":"Mix.Tasks.Msbms.Elixir.Test.html#module-command-line-options"},{"type":"task","title":"Component File Format - mix msbms.elixir.test","doc":"Component files support:\n- One component name per line\n- Comments starting with `#` are ignored\n- Empty lines are ignored\n- Leading/trailing whitespace is trimmed\n\nExample component file:\n # Core components\n mssub_mcp_common\n mssub_mcp_types\n\n # Optional component\n ms_logger","ref":"Mix.Tasks.Msbms.Elixir.Test.html#module-component-file-format"},{"type":"task","title":"Examples - mix msbms.elixir.test","doc":"mix msbms.elixir.test --unit\n mix msbms.elixir.test --all --base-dir /path/to/project\n mix msbms.elixir.test --credo --dialyzer -c my_app1 -c my_app2\n mix msbms.elixir.test --integration --doctest\n mix msbms.elixir.test --all --component-file .ci/group-1.txt\n mix msbms.elixir.test --unit --component-file .ci/group-1.txt -c extra_component\n\nAt least one of `--unit`, `--integration`, `--doctest`, `--credo`, `--dialyzer`, or `--all` must be specified.","ref":"Mix.Tasks.Msbms.Elixir.Test.html#module-examples"},{"type":"function","title":"Mix.Tasks.Msbms.Elixir.Test.run/1","doc":"Callback implementation for Mix.Task.run/1 .","ref":"Mix.Tasks.Msbms.Elixir.Test.html#run/1"},{"type":"task","title":"mix msbms.meta.gencomplist","doc":"Generates the system components list documentation file for MSBMS.\n\nThis task scans all components in the project, extracts metadata from their\n`mix.exs` and `README.md` files, and generates a formatted markdown file\nsuitable for Hugo/Docsy static site generation.\n\nThe generated documentation includes:\n- Component categorization (Platform, Subsystems, Components)\n- Component descriptions from README files\n- First-party (MSBMS) dependencies\n- Third-party dependencies (runtime only)\n- Links to API and database documentation\n\nIt calls functions from `MsbmsBuildLib` to perform the actual operations.","ref":"Mix.Tasks.Msbms.Meta.Gencomplist.html"},{"type":"task","title":"Command line options - mix msbms.meta.gencomplist","doc":"* `--base-dir PATH` - Specifies the base directory of the MSBMS project.\n Defaults to the current working directory.\n * `--output PATH` - Specifies the output file path relative to base-dir.\n Defaults to \"documentation/book/content/en/technical/system-components-list.md\".\n * `--log-level LEVEL` - Sets the logging level (e.g., debug, info, warn, error).\n Defaults to \"info\".\n * `--dry-run` - Shows what would be generated without writing the file.","ref":"Mix.Tasks.Msbms.Meta.Gencomplist.html#module-command-line-options"},{"type":"task","title":"Component Discovery - mix msbms.meta.gencomplist","doc":"The task automatically discovers components by:\n- Scanning standard component paths (app_server/components/*, app_server/subsystems/*, etc.)\n- Categorizing by naming convention:\n * `mscmp_*` → Components\n * `mssub_*` → Subsystems\n * `msplatform` → Platform\n * `msapp_*` → Applications","ref":"Mix.Tasks.Msbms.Meta.Gencomplist.html#module-component-discovery"},{"type":"task","title":"Description Extraction - mix msbms.meta.gencomplist","doc":"Component descriptions are extracted from `README.md` files:\n- Text after `` marker\n- Stops at `` marker (if present) or first `##` heading (fallback)\n- Falls back to first paragraph after title if no MDOC marker found\n\nTo control the description length, add a `` marker in your README.md\nafter the description text you want included in the component listing.","ref":"Mix.Tasks.Msbms.Meta.Gencomplist.html#module-description-extraction"},{"type":"task","title":"Dependency Filtering - mix msbms.meta.gencomplist","doc":"Third-party dependencies are filtered to exclude development/test-only dependencies\n(those specified with `:only` option in mix.exs).","ref":"Mix.Tasks.Msbms.Meta.Gencomplist.html#module-dependency-filtering"},{"type":"task","title":"Examples - mix msbms.meta.gencomplist","doc":"# Generate with defaults\n mix msbms.meta.gencomplist\n\n # Generate with custom output path\n mix msbms.meta.gencomplist --output docs/my-components.md\n\n # Preview without writing\n mix msbms.meta.gencomplist --dry-run\n\n # Generate with debug logging\n mix msbms.meta.gencomplist --log-level debug\n\n # Generate from specific project directory\n mix msbms.meta.gencomplist --base-dir /path/to/musebms","ref":"Mix.Tasks.Msbms.Meta.Gencomplist.html#module-examples"},{"type":"function","title":"Mix.Tasks.Msbms.Meta.Gencomplist.run/1","doc":"Callback implementation for Mix.Task.run/1 .","ref":"Mix.Tasks.Msbms.Meta.Gencomplist.html#run/1"},{"type":"module","title":"MsbmsBuildLib","doc":"MsbmsBuildLib is a comprehensive Elixir build utilities library that provides\nautomated build, test, documentation, and maintenance tasks for multi-component\nprojects within the Muse Systems Business Management System ecosystem.\n\n","ref":"MsbmsBuildLib.html"},{"type":"module","title":"Overview - MsbmsBuildLib","doc":"This library serves as a centralized toolset for managing complex,\nmulti-component projects that span both Elixir applications and database\nschemas. It provides a unified interface through Mix tasks and programmatic APIs\nto handle common development operations across multiple project components\nsimultaneously.","ref":"MsbmsBuildLib.html#module-overview"},{"type":"module","title":"Key Capabilities - MsbmsBuildLib","doc":"- **Multi-Component Build Management**: Coordinate build processes across\n multiple Elixir applications and libraries within a single project structure\n\n - **Database Operations**: Manage database cleaning, migration handling, and\n documentation generation for PostgreSQL-based components\n\n - **Documentation Generation**: Automated building of both Elixir (ExDoc) and\n database documentation with proper cross-referencing\n\n - **Development Environment Maintenance**: Clean and manage development\n artifacts including Language Server files, PLT caches, build directories,\n and dependencies\n\n - **Testing Coordination**: Execute test suites across multiple components\n with unified reporting and configuration\n\n - **Project Discovery**: Automatically discover and manage project components\n based on filesystem markers and conventions\n\nThe library is designed specifically for complex business management systems\nwhere multiple interconnected components (applications, libraries, database\nschemas) need to be developed, tested, and maintained as a cohesive unit while\npreserving modular boundaries and independent deployment capabilities.","ref":"MsbmsBuildLib.html#module-key-capabilities"},{"type":"function","title":"MsbmsBuildLib.build_docs_db/3","doc":"Builds the DB documentation for the given components.\n\nGenerates database documentation by extracting schema information and comments\nfrom the database and creating formatted documentation files.","ref":"MsbmsBuildLib.html#build_docs_db/3"},{"type":"function","title":"Parameters - MsbmsBuildLib.build_docs_db/3","doc":"* `base_dir` - The base directory path where the project is located\n * `components` - List of component names to build documentation for\n * `db_opts` - Keyword list of database connection options:\n * `:host` - Database host (default: \"127.0.0.1\")\n * `:port` - Database port (default: 5432)\n * `:user` - Database user (required)\n * `:password` - Database password (required)\n * `:database` - Database name (default: \"postgres\")\n * `:dbadmin_password` - Database admin password (default: \"musesystems-insecure-publicly-known-password\")","ref":"MsbmsBuildLib.html#build_docs_db/3-parameters"},{"type":"function","title":"Returns - MsbmsBuildLib.build_docs_db/3","doc":"* `:ok` on successful documentation generation\n * `{:error, message}` if documentation generation fails","ref":"MsbmsBuildLib.html#build_docs_db/3-returns"},{"type":"function","title":"MsbmsBuildLib.build_docs_elixir/2","doc":"Builds the Elixir documentation for the given components.\n\nGenerates ExDoc documentation for the specified Elixir components using their respective\ndocumentation configurations.","ref":"MsbmsBuildLib.html#build_docs_elixir/2"},{"type":"function","title":"Parameters - MsbmsBuildLib.build_docs_elixir/2","doc":"* `base_dir` - The base directory path where the project is located\n * `components` - List of component names to generate documentation for","ref":"MsbmsBuildLib.html#build_docs_elixir/2-parameters"},{"type":"function","title":"Returns - MsbmsBuildLib.build_docs_elixir/2","doc":"* `:ok` on successful documentation generation\n * `{:error, message}` if documentation generation fails","ref":"MsbmsBuildLib.html#build_docs_elixir/2-returns"},{"type":"function","title":"MsbmsBuildLib.build_elixir/3","doc":"Builds the Elixir project.\n\nCompiles the Elixir components for the specified environment, handling dependencies\nand compilation in the correct order.","ref":"MsbmsBuildLib.html#build_elixir/3"},{"type":"function","title":"Parameters - MsbmsBuildLib.build_elixir/3","doc":"* `base_dir` - The base directory path where the project is located\n * `components` - List of component names to build\n * `elixir_env` - The Elixir environment to build for (e.g., \"dev\", \"test\", \"prod\")","ref":"MsbmsBuildLib.html#build_elixir/3-parameters"},{"type":"function","title":"Returns - MsbmsBuildLib.build_elixir/3","doc":"* `:ok` on successful build completion\n * `{:error, message}` if the build fails","ref":"MsbmsBuildLib.html#build_elixir/3-returns"},{"type":"function","title":"MsbmsBuildLib.build_migrations/2","doc":"Builds the database migrations for the given components.\n\nProcesses and prepares database migration files for the specified components,\nensuring they are ready for execution against the target database.","ref":"MsbmsBuildLib.html#build_migrations/2"},{"type":"function","title":"Parameters - MsbmsBuildLib.build_migrations/2","doc":"* `base_dir` - The base directory path where the project is located\n * `components` - List of component names to build migrations for","ref":"MsbmsBuildLib.html#build_migrations/2-parameters"},{"type":"function","title":"Returns - MsbmsBuildLib.build_migrations/2","doc":"* `:ok` on successful migration build completion\n * `{:error, message}` if the migration build fails","ref":"MsbmsBuildLib.html#build_migrations/2-returns"},{"type":"function","title":"MsbmsBuildLib.clean_build/2","doc":"Cleans the build artifacts in the given components.\n\nRemoves compiled beam files, build directories, and other compilation artifacts.","ref":"MsbmsBuildLib.html#clean_build/2"},{"type":"function","title":"Parameters - MsbmsBuildLib.clean_build/2","doc":"* `base_dir` - The base directory path\n * `components` - List of component names to clean","ref":"MsbmsBuildLib.html#clean_build/2-parameters"},{"type":"function","title":"Returns - MsbmsBuildLib.clean_build/2","doc":"* `:ok` on successful cleanup\n * `{:error, message}` if cleanup fails","ref":"MsbmsBuildLib.html#clean_build/2-returns"},{"type":"function","title":"MsbmsBuildLib.clean_db/2","doc":"Cleans the database for the given components.\n\nDrops and recreates database schemas, removing all data and schema objects\nfor a fresh start. This is a destructive operation.","ref":"MsbmsBuildLib.html#clean_db/2"},{"type":"function","title":"Parameters - MsbmsBuildLib.clean_db/2","doc":"* `base_dir` - The base directory path\n * `db_opts` - Keyword list of database connection options:\n * `:host` - Database host (default: \"127.0.0.1\")\n * `:port` - Database port (default: 5432)\n * `:user` - Database user (required)\n * `:password` - Database password (required)\n * `:database` - Database name (default: \"postgres\")\n * `:dbadmin_password` - Database admin password (default: \"musesystems-insecure-publicly-known-password\")","ref":"MsbmsBuildLib.html#clean_db/2-parameters"},{"type":"function","title":"Returns - MsbmsBuildLib.clean_db/2","doc":"* `:ok` on successful database cleanup\n * `{:error, message}` if cleanup fails","ref":"MsbmsBuildLib.html#clean_db/2-returns"},{"type":"function","title":"MsbmsBuildLib.clean_db_migrations/2","doc":"Cleans the database migrations for the given components.\n\nRemoves migration tracking state and history, allowing migrations to be re-run\nfrom scratch. Does not affect the actual database schema.","ref":"MsbmsBuildLib.html#clean_db_migrations/2"},{"type":"function","title":"Parameters - MsbmsBuildLib.clean_db_migrations/2","doc":"* `base_dir` - The base directory path\n * `components` - List of component names to clean","ref":"MsbmsBuildLib.html#clean_db_migrations/2-parameters"},{"type":"function","title":"Returns - MsbmsBuildLib.clean_db_migrations/2","doc":"* `:ok` on successful cleanup\n * `{:error, message}` if cleanup fails","ref":"MsbmsBuildLib.html#clean_db_migrations/2-returns"},{"type":"function","title":"MsbmsBuildLib.clean_deps/2","doc":"Cleans the dependencies in the given components.\n\nRemoves downloaded and compiled dependency files, forcing a fresh dependency resolution\non the next build.","ref":"MsbmsBuildLib.html#clean_deps/2"},{"type":"function","title":"Parameters - MsbmsBuildLib.clean_deps/2","doc":"* `base_dir` - The base directory path\n * `components` - List of component names to clean","ref":"MsbmsBuildLib.html#clean_deps/2-parameters"},{"type":"function","title":"Returns - MsbmsBuildLib.clean_deps/2","doc":"* `:ok` on successful cleanup\n * `{:error, message}` if cleanup fails","ref":"MsbmsBuildLib.html#clean_deps/2-returns"},{"type":"function","title":"MsbmsBuildLib.clean_ls/2","doc":"Cleans the Elixir Language Server in the given components.","ref":"MsbmsBuildLib.html#clean_ls/2"},{"type":"function","title":"Parameters - MsbmsBuildLib.clean_ls/2","doc":"* `base_dir` - The base directory path\n * `components` - List of component names to clean","ref":"MsbmsBuildLib.html#clean_ls/2-parameters"},{"type":"function","title":"Returns - MsbmsBuildLib.clean_ls/2","doc":"* `:ok` on successful cleanup\n * `{:error, message}` if cleanup fails","ref":"MsbmsBuildLib.html#clean_ls/2-returns"},{"type":"function","title":"MsbmsBuildLib.clean_plt/2","doc":"Cleans the PLT (Persistent Lookup Table) in the given components.\n\nRemoves Dialyzer PLT files that cache type information for faster subsequent analysis.","ref":"MsbmsBuildLib.html#clean_plt/2"},{"type":"function","title":"Parameters - MsbmsBuildLib.clean_plt/2","doc":"* `base_dir` - The base directory path\n * `components` - List of component names to clean","ref":"MsbmsBuildLib.html#clean_plt/2-parameters"},{"type":"function","title":"Returns - MsbmsBuildLib.clean_plt/2","doc":"* `:ok` on successful cleanup\n * `{:error, message}` if cleanup fails","ref":"MsbmsBuildLib.html#clean_plt/2-returns"},{"type":"function","title":"MsbmsBuildLib.db_component_paths/0","doc":"Get the DB component paths.\n\nReturns a list of relative paths where database components are located within the project.","ref":"MsbmsBuildLib.html#db_component_paths/0"},{"type":"function","title":"Returns - MsbmsBuildLib.db_component_paths/0","doc":"* List of database component paths as strings","ref":"MsbmsBuildLib.html#db_component_paths/0-returns"},{"type":"function","title":"MsbmsBuildLib.db_docs_root/0","doc":"Get the DB docs root.\n\nReturns the root directory path where database documentation should be generated.","ref":"MsbmsBuildLib.html#db_docs_root/0"},{"type":"function","title":"Returns - MsbmsBuildLib.db_docs_root/0","doc":"* Root path for database documentation as a string","ref":"MsbmsBuildLib.html#db_docs_root/0-returns"},{"type":"function","title":"MsbmsBuildLib.elixir_build_config_path/0","doc":"Get the path to the Elixir build configuration file.\n\nReturns the path to the Elixir build configuration file.","ref":"MsbmsBuildLib.html#elixir_build_config_path/0"},{"type":"function","title":"MsbmsBuildLib.elixir_component_paths/0","doc":"Get the Elixir component paths.\n\nReturns a list of relative paths where Elixir components are located within the project.","ref":"MsbmsBuildLib.html#elixir_component_paths/0"},{"type":"function","title":"Returns - MsbmsBuildLib.elixir_component_paths/0","doc":"* List of Elixir component paths as strings","ref":"MsbmsBuildLib.html#elixir_component_paths/0-returns"},{"type":"function","title":"MsbmsBuildLib.elixir_docs_root/0","doc":"Get the Elixir docs root.\n\nReturns the root directory path where Elixir documentation should be generated.","ref":"MsbmsBuildLib.html#elixir_docs_root/0"},{"type":"function","title":"Returns - MsbmsBuildLib.elixir_docs_root/0","doc":"* Root path for Elixir documentation as a string","ref":"MsbmsBuildLib.html#elixir_docs_root/0-returns"},{"type":"function","title":"MsbmsBuildLib.generate_component_list_doc/2","doc":"Generates the system components list documentation file.\n\nThis function scans all components in the project, extracts their metadata\n(dependencies, descriptions, documentation links), and generates a formatted\nmarkdown file suitable for Hugo/Docsy static site generation.","ref":"MsbmsBuildLib.html#generate_component_list_doc/2"},{"type":"function","title":"Parameters - MsbmsBuildLib.generate_component_list_doc/2","doc":"* `base_dir` - The base directory path where the project is located\n * `opts` - Keyword list of options:\n * `:output_path` - Output file path relative to base_dir\n (default: \"documentation/book/content/en/technical/system-components-list.md\")\n * `:dry_run` - If true, generates content but doesn't write file (default: false)","ref":"MsbmsBuildLib.html#generate_component_list_doc/2-parameters"},{"type":"function","title":"Returns - MsbmsBuildLib.generate_component_list_doc/2","doc":"* `{:ok, output_path}` - Path to the generated file on success (when dry_run is false)\n * `{:ok, content}` - Generated content as string on success (when dry_run is true)\n * `{:error, message}` - Error message if generation fails","ref":"MsbmsBuildLib.html#generate_component_list_doc/2-returns"},{"type":"function","title":"Examples - MsbmsBuildLib.generate_component_list_doc/2","doc":"# Generate with default output path\n MsbmsBuildLib.generate_component_list_doc(\"/path/to/project\")\n\n # Generate with custom output path\n MsbmsBuildLib.generate_component_list_doc(\n \"/path/to/project\",\n output_path: \"docs/components.md\"\n )\n\n # Generate without writing file (dry run)\n {:ok, content} = MsbmsBuildLib.generate_component_list_doc(\n \"/path/to/project\",\n dry_run: true\n )","ref":"MsbmsBuildLib.html#generate_component_list_doc/2-examples"},{"type":"function","title":"MsbmsBuildLib.install_elixir_deps/2","doc":"Installs Elixir dependencies for the given components.\n\nDownloads and compiles all required dependencies for the specified components,\nensuring they are available for compilation and runtime.","ref":"MsbmsBuildLib.html#install_elixir_deps/2"},{"type":"function","title":"Parameters - MsbmsBuildLib.install_elixir_deps/2","doc":"* `base_dir` - The base directory path where the project is located\n * `components` - List of component names to install dependencies for","ref":"MsbmsBuildLib.html#install_elixir_deps/2-parameters"},{"type":"function","title":"Returns - MsbmsBuildLib.install_elixir_deps/2","doc":"* `:ok` on successful dependency installation\n * `{:error, message}` if installation fails","ref":"MsbmsBuildLib.html#install_elixir_deps/2-returns"},{"type":"function","title":"MsbmsBuildLib.project_directories/0","doc":"Get the project directories.\n\nReturns a list of standard project directory names used throughout the build system.","ref":"MsbmsBuildLib.html#project_directories/0"},{"type":"function","title":"Returns - MsbmsBuildLib.project_directories/0","doc":"* List of project directory names as strings","ref":"MsbmsBuildLib.html#project_directories/0-returns"},{"type":"function","title":"MsbmsBuildLib.project_markers/0","doc":"Get the project markers.\n\nReturns a list of file markers that identify project boundaries or special locations.","ref":"MsbmsBuildLib.html#project_markers/0"},{"type":"function","title":"Returns - MsbmsBuildLib.project_markers/0","doc":"* List of project marker file names as strings","ref":"MsbmsBuildLib.html#project_markers/0-returns"},{"type":"function","title":"MsbmsBuildLib.read_component_file/2","doc":"Reads and parses a component list file.\n\nThe file format supports:\n- One component name per line\n- Comments starting with `#` are ignored\n- Empty lines are ignored\n- Leading/trailing whitespace is trimmed","ref":"MsbmsBuildLib.html#read_component_file/2"},{"type":"function","title":"Parameters - MsbmsBuildLib.read_component_file/2","doc":"* `base_dir` - The base directory path where the project is located\n * `file_path` - Path to the component file (relative to base_dir)","ref":"MsbmsBuildLib.html#read_component_file/2-parameters"},{"type":"function","title":"Returns - MsbmsBuildLib.read_component_file/2","doc":"* `{:ok, components}` - List of component names from the file\n * `{:error, reason}` - Error message if file cannot be read or parsed","ref":"MsbmsBuildLib.html#read_component_file/2-returns"},{"type":"function","title":"MsbmsBuildLib.run_tests/3","doc":"Runs tests for the given components.\n\nExecutes various types of tests including unit tests, integration tests, doctests,\ncode quality checks (Credo), and static analysis (Dialyzer) based on the provided options.","ref":"MsbmsBuildLib.html#run_tests/3"},{"type":"function","title":"Parameters - MsbmsBuildLib.run_tests/3","doc":"* `base_dir` - The base directory path where the project is located\n * `components` - List of component names to test (empty list means all components)\n * `opts` - Keyword list of test options:\n * `:test_unit` - Whether to run unit tests (default: true)\n * `:test_integration` - Whether to run integration tests (default: true)\n * `:test_doctest` - Whether to run doctests (default: true)\n * `:run_credo` - Whether to run credo tests (default: true)\n * `:run_dialyzer` - Whether to run dialyzer tests (default: true)","ref":"MsbmsBuildLib.html#run_tests/3-parameters"},{"type":"function","title":"Returns - MsbmsBuildLib.run_tests/3","doc":"* `:ok` if all specified tests pass\n * `{:error, message}` if any tests fail","ref":"MsbmsBuildLib.html#run_tests/3-returns"},{"type":"function","title":"MsbmsBuildLib.scaffold_elixir_component/4","doc":"Scaffolds a new Elixir component from templates.\n\nCreates a new Elixir component project structure based on the standard\ntemplates, with all files properly configured for the new component.","ref":"MsbmsBuildLib.html#scaffold_elixir_component/4"},{"type":"function","title":"Parameters - MsbmsBuildLib.scaffold_elixir_component/4","doc":"* `base_dir` - The base directory path where the project is located\n * `component_name` - The name of the component (e.g., \"mscmp_syst_new_feature\")\n * `target_path` - The relative path where the component should be created\n * `opts` - Optional configuration options","ref":"MsbmsBuildLib.html#scaffold_elixir_component/4-parameters"},{"type":"function","title":"Options - MsbmsBuildLib.scaffold_elixir_component/4","doc":"* `:component_display_name` - Human-friendly name for the component\n * `:component_description` - Brief description of the component\n * `:comp_short_name` - Override the derived short component name (removes categorizing prefix)\n * `:module_name` - Override the derived module name (PascalCase of full component name)\n * `:module_short_name` - Override the derived short module name (PascalCase of short component name)","ref":"MsbmsBuildLib.html#scaffold_elixir_component/4-options"},{"type":"function","title":"Returns - MsbmsBuildLib.scaffold_elixir_component/4","doc":"* `:ok` on successful scaffolding\n * `{:error, message}` if scaffolding fails","ref":"MsbmsBuildLib.html#scaffold_elixir_component/4-returns"},{"type":"function","title":"Examples - MsbmsBuildLib.scaffold_elixir_component/4","doc":"# Create a new system component (names derived automatically)\n MsbmsBuildLib.scaffold_elixir_component(\n \"/path/to/project\",\n \"mscmp_syst_new_feature\",\n \"app_server/components/system\",\n component_display_name: \"New Feature Component\",\n component_description: \"Provides new feature functionality.\"\n )\n\n # Create a new application component\n MsbmsBuildLib.scaffold_elixir_component(\n \"/path/to/project\",\n \"msapp_new_app\",\n \"app_server/components/application\"\n )\n\n # Override derived names for edge cases\n MsbmsBuildLib.scaffold_elixir_component(\n \"/path/to/project\",\n \"legacy_system_component\",\n \"app_server/components/system\",\n comp_short_name: \"legacy\",\n module_short_name: \"Legacy\"\n )","ref":"MsbmsBuildLib.html#scaffold_elixir_component/4-examples"},{"type":"function","title":"MsbmsBuildLib.set_log_level/1","doc":"Sets the log level for the build system.\n\nConfigures the logging level for all build operations, controlling the verbosity\nof output during build processes.","ref":"MsbmsBuildLib.html#set_log_level/1"},{"type":"function","title":"Parameters - MsbmsBuildLib.set_log_level/1","doc":"* `level` - The desired log level (`:debug`, `:info`, `:warning`, `:error`)","ref":"MsbmsBuildLib.html#set_log_level/1-parameters"},{"type":"function","title":"Returns - MsbmsBuildLib.set_log_level/1","doc":"* `:ok` - Always returns `:ok`","ref":"MsbmsBuildLib.html#set_log_level/1-returns"},{"type":"function","title":"MsbmsBuildLib.update_elixir_deps/2","doc":"Updates Elixir dependencies for the given components.\n\nUpdates all dependencies to their latest compatible versions as specified\nin the dependency configuration files.","ref":"MsbmsBuildLib.html#update_elixir_deps/2"},{"type":"function","title":"Parameters - MsbmsBuildLib.update_elixir_deps/2","doc":"* `base_dir` - The base directory path where the project is located\n * `components` - List of component names to update dependencies for","ref":"MsbmsBuildLib.html#update_elixir_deps/2-parameters"},{"type":"function","title":"Returns - MsbmsBuildLib.update_elixir_deps/2","doc":"* `:ok` on successful dependency update\n * `{:error, message}` if update fails","ref":"MsbmsBuildLib.html#update_elixir_deps/2-returns"},{"type":"module","title":"MsbmsBuildLib.Types","doc":"Type definitions for the MsbmsBuildLib module.\n\nThis module defines the core types used throughout the build library for\nrepresenting components, paths, artifacts, and other build-related concepts.\nThese types ensure consistency and type safety across the build system's API.","ref":"MsbmsBuildLib.Types.html"},{"type":"module","title":"Type Categories - MsbmsBuildLib.Types","doc":"","ref":"MsbmsBuildLib.Types.html#module-type-categories"},{"type":"module","title":"Component Types - MsbmsBuildLib.Types","doc":"- `component_name/0` - Individual component identifiers\n- `components/0` - Collections of component names\n- `component_path/0` - File system paths to components\n- `component_paths/0` - Collections of component paths","ref":"MsbmsBuildLib.Types.html#module-component-types"},{"type":"module","title":"Artifact Types - MsbmsBuildLib.Types","doc":"- `kind/0` - Different types of build artifacts (Elixir, DB, docs)","ref":"MsbmsBuildLib.Types.html#module-artifact-types"},{"type":"module","title":"Migration Types - MsbmsBuildLib.Types","doc":"- `migration_target/0` - Database migration configuration tuples","ref":"MsbmsBuildLib.Types.html#module-migration-types"},{"type":"type","title":"MsbmsBuildLib.Types.component_name/0","doc":"The name of a component in the project.\n\nComponent names should match their representation in the file system exactly.\nThis typically uses snake_case naming convention and corresponds to the\ndirectory name where the component is located.","ref":"MsbmsBuildLib.Types.html#t:component_name/0"},{"type":"type","title":"Naming Convention - MsbmsBuildLib.Types.component_name/0","doc":"Component names should use the file system representation rather than the\nElixir module representation:\n\n- ✅ Correct: `\"mscmp_syst_enums\"`\n- ❌ Incorrect: `\"MscmpSystEnums\"`","ref":"MsbmsBuildLib.Types.html#t:component_name/0-naming-convention"},{"type":"type","title":"Examples - MsbmsBuildLib.Types.component_name/0","doc":"# Valid component names\n \"mscmp_syst_enums\"\n \"mscmp_syst_utils\"\n \"msapp_mcp_web\"\n \"mssub_mcp\"","ref":"MsbmsBuildLib.Types.html#t:component_name/0-examples"},{"type":"type","title":"MsbmsBuildLib.Types.component_path/0","doc":"A fully qualified file system path to a component in the project.\n\nThis represents the absolute path to a component's root directory, where\nthe component's source code, configuration files, and other artifacts\nare located. The path should be valid and accessible from the current\nworking directory context.","ref":"MsbmsBuildLib.Types.html#t:component_path/0"},{"type":"type","title":"Path Format - MsbmsBuildLib.Types.component_path/0","doc":"Paths are typically absolute and point to the component's root directory:\n\n \"/full/path/to/project/components/mscmp_syst_enums\"\n \"/full/path/to/project/apps/msapp_mcp_web\"","ref":"MsbmsBuildLib.Types.html#t:component_path/0-path-format"},{"type":"type","title":"Usage - MsbmsBuildLib.Types.component_path/0","doc":"These paths are used internally by build functions to locate and operate\non specific components within the project structure.","ref":"MsbmsBuildLib.Types.html#t:component_path/0-usage"},{"type":"type","title":"MsbmsBuildLib.Types.component_paths/0","doc":"A list of fully qualified file system paths to components in the project.\n\nThis collection type is used when build operations need to process multiple\ncomponents by their full paths rather than just their names. It's typically\nused internally after component names have been resolved to their actual\nfile system locations.","ref":"MsbmsBuildLib.Types.html#t:component_paths/0"},{"type":"type","title":"Usage - MsbmsBuildLib.Types.component_paths/0","doc":"This type is commonly used in internal build pipeline functions where\nthe system has already resolved component names to their full paths\nand needs to perform batch operations across multiple components.","ref":"MsbmsBuildLib.Types.html#t:component_paths/0-usage"},{"type":"type","title":"MsbmsBuildLib.Types.components/0","doc":"A list of component names for batch operations.\n\nThis type represents a collection of component names that can be processed\ntogether in build operations. An empty list typically indicates that all\navailable components should be processed.","ref":"MsbmsBuildLib.Types.html#t:components/0"},{"type":"type","title":"Examples - MsbmsBuildLib.Types.components/0","doc":"iex> components = [\"mscmp_syst_enums\", \"mscmp_syst_utils\"]\n iex> MsbmsBuildLib.clean_build(base_dir, components)","ref":"MsbmsBuildLib.Types.html#t:components/0-examples"},{"type":"type","title":"MsbmsBuildLib.Types.kind/0","doc":"The different kinds of project artifacts that can be built or managed.\n\nThis type categorizes the various types of build artifacts and outputs\nthat the build system can create and manage. Each kind represents a\ndifferent aspect of the project's deliverables.","ref":"MsbmsBuildLib.Types.html#t:kind/0"},{"type":"type","title":"Artifact Types - MsbmsBuildLib.Types.kind/0","doc":"- `:elixir` - Compiled Elixir/Erlang code artifacts including BEAM files,\n applications, and releases. This includes the core application logic\n and libraries.\n\n- `:db` - Database artifacts including schemas, migrations, stored procedures,\n functions, and other database objects. These define the data layer of\n the application.\n\n- `:elixir_docs` - Generated documentation for Elixir code using ExDoc.\n This includes API documentation, guides, and module documentation\n extracted from the source code.\n\n- `:db_docs` - Generated documentation for database objects including\n schema documentation, table descriptions, and database design\n documentation extracted from database metadata and comments.","ref":"MsbmsBuildLib.Types.html#t:kind/0-artifact-types"},{"type":"type","title":"Usage - MsbmsBuildLib.Types.kind/0","doc":"These kinds are used to categorize build operations and determine which\nspecific build tools and processes should be applied to different parts\nof the project.","ref":"MsbmsBuildLib.Types.html#t:kind/0-usage"},{"type":"type","title":"MsbmsBuildLib.Types.migration_target/0","doc":"Configuration tuple for components that require persistent database migration management.\n\nThis type associates database migration metadata with component locations,\nenabling the build system to properly manage database schema evolution\nfor deployable components.","ref":"MsbmsBuildLib.Types.html#t:migration_target/0"},{"type":"type","title":"Target Scope - MsbmsBuildLib.Types.migration_target/0","doc":"Migration targets typically focus on Subsystems, which represent the\narchitectural level where complete, deployable databases are defined.\nWhile other components may create and use migrations during development\nand testing, these are usually transient and not deployed to production\nenvironments.","ref":"MsbmsBuildLib.Types.html#t:migration_target/0-target-scope"},{"type":"type","title":"Tuple Elements - MsbmsBuildLib.Types.migration_target/0","doc":"* `component_name` - The name of the component as it appears in the file system\n (e.g., `\"mssub_mcp\"` for the MCP subsystem)\n\n* `database_type` - A string reference to a specific database buildplan that\n defines the build process for this type of database. This determines which\n migration tools and processes are used (e.g., `\"application_db\"`,\n `\"analytics_db\"`)\n\n* `component_path` - The absolute file system path to the root directory of\n the component's Elixir project, where migration files and configuration\n are located","ref":"MsbmsBuildLib.Types.html#t:migration_target/0-tuple-elements"},{"type":"type","title":"Examples - MsbmsBuildLib.Types.migration_target/0","doc":"# MCP subsystem with application database\n {\"mssub_mcp\", \"application_db\", \"/full/path/to/project/subsystems/mssub_mcp\"}\n\n # Analytics subsystem with specialized database\n {\"mssub_analytics\", \"analytics_db\", \"/full/path/to/project/subsystems/mssub_analytics\"}","ref":"MsbmsBuildLib.Types.html#t:migration_target/0-examples"},{"type":"type","title":"Usage - MsbmsBuildLib.Types.migration_target/0","doc":"These tuples are used by the migration build system to locate migration\nfiles, determine the appropriate build process, and coordinate database\nschema updates across different deployment environments.","ref":"MsbmsBuildLib.Types.html#t:migration_target/0-usage"}],"proglang":"elixir","content_type":"text/markdown","producer":{"name":"ex_doc","version":"0.38.2"}} \ No newline at end of file +searchData={"items":[{"type":"task","title":"mix msbms.db.clean","doc":"Cleans database artifacts for MSBMS components.\n\nThis task allows you to:\n- Reset the database (drops all objects and runs bootstrap script)\n\nNote: Database migration cleaning is handled by `mix msbms.elixir.clean --migrations`\nsince migrations are part of the Elixir project structure.\n\nIt calls functions from `MsbmsBuildLib` to perform the actual operations.","ref":"Mix.Tasks.Msbms.Db.Clean.html"},{"type":"task","title":"Command line options - mix msbms.db.clean","doc":"* `--reset` - Resets the database, dropping all objects and running the\n bootstrap script. After reset, the specified database user will be\n granted the `ms_syst_documentation` role.\n * `--base-dir PATH` - Specifies the base directory of the MSBMS project.\n Defaults to the current working directory.\n * `--log-level LEVEL` - Sets the logging level (e.g., debug, info, warn, error).\n Defaults to \"info\".\n * `--db-host HOST` - Database host (default: localhost).\n * `--db-port PORT` - Database port (default: 5432).\n * `--db-user USER` - Database user (default: postgres).\n * `--db-name DATABASE` - Database name (default: postgres).\n * `--dbadmin-password PASS` - Password for the `ms_syst_privileged` role\n created by the bootstrap script. If not provided, defaults to\n \"musesystems-insecure-publicly-known-password\".","ref":"Mix.Tasks.Msbms.Db.Clean.html#module-command-line-options"},{"type":"task","title":"Database Requirements - mix msbms.db.clean","doc":"Database cleaning functions require a superuser role as the clean process\nwill both drop and create roles and databases.\n\nFor security reasons, the main database password is not accepted as a command\nline argument. Instead, use either a correctly configured `.pgpass` file or\nenvironment variables. See the PostgreSQL documentation for more information.","ref":"Mix.Tasks.Msbms.Db.Clean.html#module-database-requirements"},{"type":"task","title":"Examples - mix msbms.db.clean","doc":"mix msbms.db.clean --reset --db-user postgres\n mix msbms.db.clean --reset --dbadmin-password mypassword\n mix msbms.db.clean --reset --db-host myhost --db-user postgres\n\nThe `--reset` option is required.","ref":"Mix.Tasks.Msbms.Db.Clean.html#module-examples"},{"type":"function","title":"Mix.Tasks.Msbms.Db.Clean.run/1","doc":"Callback implementation for Mix.Task.run/1 .","ref":"Mix.Tasks.Msbms.Db.Clean.html#run/1"},{"type":"task","title":"mix msbms.db.docs","doc":"Builds database documentation for MSBMS components.\n\nThis task generates documentation from the database schema and requires\nan active database connection. The database role used must be a member\nof the `ms_syst_documentation` group role prior to using this task.\n\nIt calls functions from `MsbmsBuildLib` to perform the actual operations.","ref":"Mix.Tasks.Msbms.Db.Docs.html"},{"type":"task","title":"Command line options - mix msbms.db.docs","doc":"* `--base-dir PATH` - Specifies the base directory of the MSBMS project.\n Defaults to the current working directory.\n * `-c NAME`, `--component NAME` - Specifies a component to operate on.\n Can be provided multiple times.\n * `--component-file PATH` - Specifies a file containing component names\n (one per line, # for comments). Can be combined with `-c` options.\n * `--log-level LEVEL` - Sets the logging level (e.g., debug, info, warn, error).\n Defaults to \"info\".\n * `--db-host HOST` - Database host (default: localhost).\n * `--db-port PORT` - Database port (default: 5432).\n * `--db-user USER` - Database user (required for DB documentation).\n * `--db-name DATABASE` - Database name (default: postgres).","ref":"Mix.Tasks.Msbms.Db.Docs.html#module-command-line-options"},{"type":"task","title":"Component File Format - mix msbms.db.docs","doc":"Component files support:\n- One component name per line\n- Comments starting with `#` are ignored\n- Empty lines are ignored\n- Leading/trailing whitespace is trimmed\n\nExample component file:\n # Core components\n mssub_mcp_common\n mssub_mcp_types\n\n # Optional component\n ms_logger","ref":"Mix.Tasks.Msbms.Db.Docs.html#module-component-file-format"},{"type":"task","title":"Database Credentials - mix msbms.db.docs","doc":"For security reasons, database passwords are not accepted as command line\narguments. Instead, use either a correctly configured `.pgpass` file or\nenvironment variables to pass credentials. See the PostgreSQL documentation\nfor more information on either configuration option.","ref":"Mix.Tasks.Msbms.Db.Docs.html#module-database-credentials"},{"type":"task","title":"Examples - mix msbms.db.docs","doc":"mix msbms.db.docs --db-user postgres\n mix msbms.db.docs --db-host localhost --db-user myuser\n mix msbms.db.docs --base-dir /path/to/project --db-user postgres -c my_app1\n mix msbms.db.docs --db-user postgres --component-file .ci/group-1.txt\n mix msbms.db.docs --db-user postgres --component-file .ci/group-1.txt -c extra_component","ref":"Mix.Tasks.Msbms.Db.Docs.html#module-examples"},{"type":"function","title":"Mix.Tasks.Msbms.Db.Docs.run/1","doc":"Callback implementation for Mix.Task.run/1 .","ref":"Mix.Tasks.Msbms.Db.Docs.html#run/1"},{"type":"task","title":"mix msbms.elixir.build","doc":"Builds Elixir components and database migrations for MSBMS projects.\n\nThis task allows you to build:\n- Elixir components (compiles code and refreshes Dialyzer PLT files)\n- Database migrations\n\nIt calls functions from `MsbmsBuildLib` to perform the actual operations.","ref":"Mix.Tasks.Msbms.Elixir.Build.html"},{"type":"task","title":"Command line options - mix msbms.elixir.build","doc":"* `--elixir` - Builds Elixir components.\n * `--db-migrations` - Builds database migrations.\n * `--all` - Builds all of the above.\n * `--elixir-env ENV` - Specifies the Elixir environment (e.g., dev, test, prod).\n Defaults to \"dev\".\n * `--base-dir PATH` - Specifies the base directory of the MSBMS project.\n Defaults to the current working directory.\n * `-c NAME`, `--component NAME` - Specifies a component to operate on.\n Can be provided multiple times.\n * `--component-file PATH` - Specifies a file containing component names\n (one per line, # for comments). Can be combined with `-c` options.\n * `--log-level LEVEL` - Sets the logging level (e.g., debug, info, warn, error).\n Defaults to \"info\".","ref":"Mix.Tasks.Msbms.Elixir.Build.html#module-command-line-options"},{"type":"task","title":"Component File Format - mix msbms.elixir.build","doc":"Component files support:\n- One component name per line\n- Comments starting with `#` are ignored\n- Empty lines are ignored\n- Leading/trailing whitespace is trimmed\n\nExample component file:\n # Core components\n mssub_mcp_common\n mssub_mcp_types\n\n # Optional component\n ms_logger","ref":"Mix.Tasks.Msbms.Elixir.Build.html#module-component-file-format"},{"type":"task","title":"Examples - mix msbms.elixir.build","doc":"mix msbms.elixir.build --elixir\n mix msbms.elixir.build --all --elixir-env prod\n mix msbms.elixir.build --db-migrations -c my_app1 -c my_app2\n mix msbms.elixir.build --elixir --base-dir /path/to/project\n mix msbms.elixir.build --all --component-file .ci/group-1.txt\n mix msbms.elixir.build --elixir --component-file .ci/group-1.txt -c extra_component\n\nAt least one of `--elixir`, `--db-migrations`, or `--all` must be specified.","ref":"Mix.Tasks.Msbms.Elixir.Build.html#module-examples"},{"type":"function","title":"Mix.Tasks.Msbms.Elixir.Build.run/1","doc":"Callback implementation for Mix.Task.run/1 .","ref":"Mix.Tasks.Msbms.Elixir.Build.html#run/1"},{"type":"task","title":"mix msbms.elixir.clean","doc":"Cleans various Elixir-related artifacts for MSBMS components.\n\nThis task allows you to clean:\n- Elixir Language Server (.elixir_ls) files\n- Dialyzer PLT files\n- Build artifacts (_build directory)\n- Dependency files (deps directory and mix.lock)\n- Database migration files (considered a sensitive operation)\n\nIt calls functions from `MsbmsBuildLib` to perform the actual operations.","ref":"Mix.Tasks.Msbms.Elixir.Clean.html"},{"type":"task","title":"Command line options - mix msbms.elixir.clean","doc":"* `--ls` - Cleans Elixir Language Server files.\n * `--plt` - Cleans Dialyzer PLT files.\n * `--build` - Cleans build artifacts.\n * `--deps` - Cleans dependency files.\n * `--migrations` - Removes database migration files. This is considered\n a sensitive operation when dealing with subsystems as migrations in\n those contexts aren't meant to be regularly rebuilt.\n * `--all` - Cleans all of the above Elixir-related artifacts (but NOT\n migrations, due to their sensitive nature).\n * `--base-dir PATH` - Specifies the base directory of the MSBMS project.\n Defaults to the current working directory.\n * `-c NAME`, `--component NAME` - Specifies a component to operate on.\n Can be provided multiple times.\n * `--component-file PATH` - Specifies a file containing component names\n (one per line, # for comments). Can be combined with `-c` options.\n * `--log-level LEVEL` - Sets the logging level (e.g., debug, info, warn, error).\n Defaults to \"info\".","ref":"Mix.Tasks.Msbms.Elixir.Clean.html#module-command-line-options"},{"type":"task","title":"Component File Format - mix msbms.elixir.clean","doc":"Component files support:\n- One component name per line\n- Comments starting with `#` are ignored\n- Empty lines are ignored\n- Leading/trailing whitespace is trimmed\n\nExample component file:\n # Core components\n mssub_mcp_common\n mssub_mcp_types\n\n # Optional component\n ms_logger","ref":"Mix.Tasks.Msbms.Elixir.Clean.html#module-component-file-format"},{"type":"task","title":"Examples - mix msbms.elixir.clean","doc":"mix msbms.elixir.clean --ls\n mix msbms.elixir.clean --all --base-dir /path/to/project\n mix msbms.elixir.clean --plt --build -c my_app1 -c my_app2\n mix msbms.elixir.clean --deps\n mix msbms.elixir.clean --migrations -c my_app1\n mix msbms.elixir.clean --all --component-file .ci/group-1.txt\n mix msbms.elixir.clean --plt --component-file .ci/group-1.txt -c extra_component\n\nAt least one of `--ls`, `--plt`, `--build`, `--deps`, `--migrations`, or `--all` must be specified.\nNote: `--migrations` must be explicitly requested and is not included in `--all`.","ref":"Mix.Tasks.Msbms.Elixir.Clean.html#module-examples"},{"type":"function","title":"Mix.Tasks.Msbms.Elixir.Clean.run/1","doc":"Callback implementation for Mix.Task.run/1 .","ref":"Mix.Tasks.Msbms.Elixir.Clean.html#run/1"},{"type":"task","title":"mix msbms.elixir.deps","doc":"Manages Elixir application dependencies.\n\nThis task allows you to clean, install, or update dependencies for\nElixir components within a MSBMS project structure. It calls functions\nfrom `MsbmsBuildLib` to perform the actual operations.","ref":"Mix.Tasks.Msbms.Elixir.Deps.html"},{"type":"task","title":"Command line options - mix msbms.elixir.deps","doc":"* `--clean` - Cleans dependency files (`deps` directory and `mix.lock`).\n * `--install` - Installs dependencies (equivalent to `mix deps.get`).\n * `--update` - Updates dependencies (equivalent to `mix deps.update --all`).\n * `--base-dir PATH` - Specifies the base directory of the MSBMS project.\n Defaults to the current working directory.\n * `-c NAME`, `--component NAME` - Specifies a component to operate on.\n Can be provided multiple times. If not specified, operations may apply\n to all discoverable components or the root project, depending on the\n underlying `MsbmsBuildLib` logic.\n * `--component-file PATH` - Specifies a file containing component names\n (one per line, # for comments). Can be combined with `-c` options.\n * `--log-level LEVEL` - Sets the logging level (e.g., debug, info, warn, error).\n Defaults to \"info\".","ref":"Mix.Tasks.Msbms.Elixir.Deps.html#module-command-line-options"},{"type":"task","title":"Component File Format - mix msbms.elixir.deps","doc":"Component files support:\n- One component name per line\n- Comments starting with `#` are ignored\n- Empty lines are ignored\n- Leading/trailing whitespace is trimmed\n\nExample component file:\n # Core components\n mssub_mcp_common\n mssub_mcp_types\n\n # Optional component\n ms_logger","ref":"Mix.Tasks.Msbms.Elixir.Deps.html#module-component-file-format"},{"type":"task","title":"Examples - mix msbms.elixir.deps","doc":"mix msbms.elixir.deps --install\n mix msbms.elixir.deps --update --base-dir /path/to/project\n mix msbms.elixir.deps --clean -c my_app1 -c my_app2\n mix msbms.elixir.deps --clean --install -c my_app\n mix msbms.elixir.deps --install --component-file .ci/group-1.txt\n mix msbms.elixir.deps --update --component-file .ci/group-1.txt -c extra_component\n\nAt least one of `--clean`, `--install`, or `--update` must be specified.\nIf multiple actions are specified, they are performed in the order: clean, install, update.","ref":"Mix.Tasks.Msbms.Elixir.Deps.html#module-examples"},{"type":"function","title":"Mix.Tasks.Msbms.Elixir.Deps.run/1","doc":"Callback implementation for Mix.Task.run/1 .","ref":"Mix.Tasks.Msbms.Elixir.Deps.html#run/1"},{"type":"task","title":"mix msbms.elixir.docs","doc":"Builds Elixir documentation for MSBMS components using ExDoc.\n\nIt calls functions from `MsbmsBuildLib` to perform the actual operations.","ref":"Mix.Tasks.Msbms.Elixir.Docs.html"},{"type":"task","title":"Command line options - mix msbms.elixir.docs","doc":"* `--base-dir PATH` - Specifies the base directory of the MSBMS project.\n Defaults to the current working directory.\n * `-c NAME`, `--component NAME` - Specifies a component to operate on.\n Can be provided multiple times.\n * `--component-file PATH` - Specifies a file containing component names\n (one per line, # for comments). Can be combined with `-c` options.\n * `--log-level LEVEL` - Sets the logging level (e.g., debug, info, warn, error).\n Defaults to \"info\".","ref":"Mix.Tasks.Msbms.Elixir.Docs.html#module-command-line-options"},{"type":"task","title":"Component File Format - mix msbms.elixir.docs","doc":"Component files support:\n- One component name per line\n- Comments starting with `#` are ignored\n- Empty lines are ignored\n- Leading/trailing whitespace is trimmed\n\nExample component file:\n # Core components\n mssub_mcp_common\n mssub_mcp_types\n\n # Optional component\n ms_logger","ref":"Mix.Tasks.Msbms.Elixir.Docs.html#module-component-file-format"},{"type":"task","title":"Examples - mix msbms.elixir.docs","doc":"mix msbms.elixir.docs\n mix msbms.elixir.docs --base-dir /path/to/project\n mix msbms.elixir.docs -c my_app1 -c my_app2\n mix msbms.elixir.docs --component-file .ci/group-1.txt\n mix msbms.elixir.docs --component-file .ci/group-1.txt -c extra_component","ref":"Mix.Tasks.Msbms.Elixir.Docs.html#module-examples"},{"type":"function","title":"Mix.Tasks.Msbms.Elixir.Docs.run/1","doc":"Callback implementation for Mix.Task.run/1 .","ref":"Mix.Tasks.Msbms.Elixir.Docs.html#run/1"},{"type":"task","title":"mix msbms.elixir.scaffold","doc":"Scaffolds a new Elixir component for MSBMS projects.\n\nThis task creates a new Elixir component project structure based on the standard\ntemplates, with all files properly configured for the new component.","ref":"Mix.Tasks.Msbms.Elixir.Scaffold.html"},{"type":"task","title":"Command line options - mix msbms.elixir.scaffold","doc":"* `--name NAME` - The name of the component (e.g., \"mscmp_new_feature\"). Required.\n * `--path PATH` - The relative path where the component should be created.\n Defaults to \"app_server/components/system\".\n * `--display-name NAME` - Human-friendly name for the component.\n Defaults to a capitalized version of the component name.\n * `--description DESC` - Brief description of the component.\n Defaults to a generic description.\n * `--section SECTION` - Documentation section atom.\n Defaults to derived from component name.\n * `--comp-short-name NAME` - Override the derived short component name.\n Defaults to removing categorizing prefix (e.g., \"mscmp_syst_\" → \"\").\n * `--module-name NAME` - Override the derived module name.\n Defaults to PascalCase of full component name.\n * `--module-short-name NAME` - Override the derived short module name.\n Defaults to PascalCase of short component name.\n * `--base-dir PATH` - Specifies the base directory of the MSBMS project.\n Defaults to the current working directory.\n * `--log-level LEVEL` - Sets the logging level (e.g., debug, info, warn, error).\n Defaults to \"info\".","ref":"Mix.Tasks.Msbms.Elixir.Scaffold.html#module-command-line-options"},{"type":"task","title":"Examples - mix msbms.elixir.scaffold","doc":"# Create a new system component\n mix msbms.elixir.scaffold --name mscmp_new_feature\n\n # Create a new application component with custom details\n mix msbms.elixir.scaffold --name msapp_new_app \\\n --path app_server/components/application \\\n --display-name \"New Application\" \\\n --description \"Provides new application functionality.\"\n\n # Create a subsystem component\n mix msbms.elixir.scaffold --name mssub_new_subsystem \\\n --path app_server/subsystems \\\n --display-name \"New Subsystem\"\n\n # Override derived names for edge cases\n mix msbms.elixir.scaffold --name legacy_system_component \\\n --comp-short-name legacy \\\n --module-short-name Legacy\n\nThe `--name` option is required.","ref":"Mix.Tasks.Msbms.Elixir.Scaffold.html#module-examples"},{"type":"function","title":"Mix.Tasks.Msbms.Elixir.Scaffold.run/1","doc":"Callback implementation for Mix.Task.run/1 .","ref":"Mix.Tasks.Msbms.Elixir.Scaffold.html#run/1"},{"type":"task","title":"mix msbms.elixir.test","doc":"Runs various types of Elixir tests for MSBMS components.\n\nThis task allows you to run:\n- Unit tests\n- Integration tests\n- Doctests\n- Credo tests (static code analysis)\n- Dialyzer tests (static type analysis)\n\nIt calls functions from `MsbmsBuildLib` to perform the actual operations.","ref":"Mix.Tasks.Msbms.Elixir.Test.html"},{"type":"task","title":"Command line options - mix msbms.elixir.test","doc":"* `--unit` - Runs unit tests.\n * `--integration` - Runs integration tests.\n * `--doctest` - Runs doctests.\n * `--credo` - Runs credo tests (static code analysis).\n * `--dialyzer` - Runs dialyzer tests (static type analysis).\n * `--all` - Runs all of the above test types.\n * `--base-dir PATH` - Specifies the base directory of the MSBMS project.\n Defaults to the current working directory.\n * `-c NAME`, `--component NAME` - Specifies a component to operate on.\n Can be provided multiple times.\n * `--component-file PATH` - Specifies a file containing component names\n (one per line, # for comments). Can be combined with `-c` options.\n * `--log-level LEVEL` - Sets the logging level (e.g., debug, info, warn, error).\n Defaults to \"info\".","ref":"Mix.Tasks.Msbms.Elixir.Test.html#module-command-line-options"},{"type":"task","title":"Component File Format - mix msbms.elixir.test","doc":"Component files support:\n- One component name per line\n- Comments starting with `#` are ignored\n- Empty lines are ignored\n- Leading/trailing whitespace is trimmed\n\nExample component file:\n # Core components\n mssub_mcp_common\n mssub_mcp_types\n\n # Optional component\n ms_logger","ref":"Mix.Tasks.Msbms.Elixir.Test.html#module-component-file-format"},{"type":"task","title":"Examples - mix msbms.elixir.test","doc":"mix msbms.elixir.test --unit\n mix msbms.elixir.test --all --base-dir /path/to/project\n mix msbms.elixir.test --credo --dialyzer -c my_app1 -c my_app2\n mix msbms.elixir.test --integration --doctest\n mix msbms.elixir.test --all --component-file .ci/group-1.txt\n mix msbms.elixir.test --unit --component-file .ci/group-1.txt -c extra_component\n\nAt least one of `--unit`, `--integration`, `--doctest`, `--credo`, `--dialyzer`, or `--all` must be specified.","ref":"Mix.Tasks.Msbms.Elixir.Test.html#module-examples"},{"type":"function","title":"Mix.Tasks.Msbms.Elixir.Test.run/1","doc":"Callback implementation for Mix.Task.run/1 .","ref":"Mix.Tasks.Msbms.Elixir.Test.html#run/1"},{"type":"task","title":"mix msbms.meta.gencomplist","doc":"Generates the system components list documentation file for MSBMS.\n\nThis task scans all components in the project, extracts metadata from their\n`mix.exs` and `README.md` files, and generates a formatted markdown file\nsuitable for Hugo/Docsy static site generation.\n\nThe generated documentation includes:\n- Component categorization (Platform, Subsystems, Components)\n- Component descriptions from README files\n- First-party (MSBMS) dependencies\n- Third-party dependencies (runtime only)\n- Links to API and database documentation\n\nIt calls functions from `MsbmsBuildLib` to perform the actual operations.","ref":"Mix.Tasks.Msbms.Meta.Gencomplist.html"},{"type":"task","title":"Command line options - mix msbms.meta.gencomplist","doc":"* `--base-dir PATH` - Specifies the base directory of the MSBMS project.\n Defaults to the current working directory.\n * `--output PATH` - Specifies the output file path relative to base-dir.\n Defaults to \"documentation/book/content/en/technical/system-components-list.md\".\n * `--log-level LEVEL` - Sets the logging level (e.g., debug, info, warn, error).\n Defaults to \"info\".\n * `--dry-run` - Shows what would be generated without writing the file.","ref":"Mix.Tasks.Msbms.Meta.Gencomplist.html#module-command-line-options"},{"type":"task","title":"Component Discovery - mix msbms.meta.gencomplist","doc":"The task automatically discovers components by:\n- Scanning standard component paths (app_server/components/*, app_server/subsystems/*, etc.)\n- Categorizing by naming convention:\n * `mscmp_*` → Components\n * `mssub_*` → Subsystems\n * `msplatform` → Platform\n * `msapp_*` → Applications","ref":"Mix.Tasks.Msbms.Meta.Gencomplist.html#module-component-discovery"},{"type":"task","title":"Description Extraction - mix msbms.meta.gencomplist","doc":"Component descriptions are extracted from `README.md` files:\n- Text after `` marker\n- Stops at `` marker (if present) or first `##` heading (fallback)\n- Falls back to first paragraph after title if no MDOC marker found\n\nTo control the description length, add a `` marker in your README.md\nafter the description text you want included in the component listing.","ref":"Mix.Tasks.Msbms.Meta.Gencomplist.html#module-description-extraction"},{"type":"task","title":"Dependency Filtering - mix msbms.meta.gencomplist","doc":"Third-party dependencies are filtered to exclude development/test-only dependencies\n(those specified with `:only` option in mix.exs).","ref":"Mix.Tasks.Msbms.Meta.Gencomplist.html#module-dependency-filtering"},{"type":"task","title":"Examples - mix msbms.meta.gencomplist","doc":"# Generate with defaults\n mix msbms.meta.gencomplist\n\n # Generate with custom output path\n mix msbms.meta.gencomplist --output docs/my-components.md\n\n # Preview without writing\n mix msbms.meta.gencomplist --dry-run\n\n # Generate with debug logging\n mix msbms.meta.gencomplist --log-level debug\n\n # Generate from specific project directory\n mix msbms.meta.gencomplist --base-dir /path/to/musebms","ref":"Mix.Tasks.Msbms.Meta.Gencomplist.html#module-examples"},{"type":"function","title":"Mix.Tasks.Msbms.Meta.Gencomplist.run/1","doc":"Callback implementation for Mix.Task.run/1 .","ref":"Mix.Tasks.Msbms.Meta.Gencomplist.html#run/1"},{"type":"module","title":"MsbmsBuildLib","doc":"MsbmsBuildLib is a comprehensive Elixir build utilities library that provides\nautomated build, test, documentation, and maintenance tasks for multi-component\nprojects within the Muse Systems Business Management System ecosystem.\n\n","ref":"MsbmsBuildLib.html"},{"type":"module","title":"Overview - MsbmsBuildLib","doc":"This library serves as a centralized toolset for managing complex,\nmulti-component projects that span both Elixir applications and database\nschemas. It provides a unified interface through Mix tasks and programmatic APIs\nto handle common development operations across multiple project components\nsimultaneously.","ref":"MsbmsBuildLib.html#module-overview"},{"type":"module","title":"Key Capabilities - MsbmsBuildLib","doc":"- **Multi-Component Build Management**: Coordinate build processes across\n multiple Elixir applications and libraries within a single project structure\n\n - **Database Operations**: Manage database cleaning, migration handling, and\n documentation generation for PostgreSQL-based components\n\n - **Documentation Generation**: Automated building of both Elixir (ExDoc) and\n database documentation with proper cross-referencing\n\n - **Development Environment Maintenance**: Clean and manage development\n artifacts including Language Server files, PLT caches, build directories,\n and dependencies\n\n - **Testing Coordination**: Execute test suites across multiple components\n with unified reporting and configuration\n\n - **Project Discovery**: Automatically discover and manage project components\n based on filesystem markers and conventions\n\nThe library is designed specifically for complex business management systems\nwhere multiple interconnected components (applications, libraries, database\nschemas) need to be developed, tested, and maintained as a cohesive unit while\npreserving modular boundaries and independent deployment capabilities.","ref":"MsbmsBuildLib.html#module-key-capabilities"},{"type":"function","title":"MsbmsBuildLib.db_component_paths/0","doc":"Get the DB component paths.\n\nReturns a list of relative paths where database components are located within the project.","ref":"MsbmsBuildLib.html#db_component_paths/0"},{"type":"function","title":"Returns - MsbmsBuildLib.db_component_paths/0","doc":"* List of database component paths as strings","ref":"MsbmsBuildLib.html#db_component_paths/0-returns"},{"type":"function","title":"MsbmsBuildLib.db_docs_root/0","doc":"Get the DB docs root.\n\nReturns the root directory path where database documentation should be generated.","ref":"MsbmsBuildLib.html#db_docs_root/0"},{"type":"function","title":"Returns - MsbmsBuildLib.db_docs_root/0","doc":"* Root path for database documentation as a string","ref":"MsbmsBuildLib.html#db_docs_root/0-returns"},{"type":"function","title":"MsbmsBuildLib.elixir_build_config_path/0","doc":"Get the path to the Elixir build configuration file.\n\nReturns the path to the Elixir build configuration file.","ref":"MsbmsBuildLib.html#elixir_build_config_path/0"},{"type":"function","title":"MsbmsBuildLib.elixir_component_paths/0","doc":"Get the Elixir component paths.\n\nReturns a list of relative paths where Elixir components are located within the project.","ref":"MsbmsBuildLib.html#elixir_component_paths/0"},{"type":"function","title":"Returns - MsbmsBuildLib.elixir_component_paths/0","doc":"* List of Elixir component paths as strings","ref":"MsbmsBuildLib.html#elixir_component_paths/0-returns"},{"type":"function","title":"MsbmsBuildLib.elixir_docs_root/0","doc":"Get the Elixir docs root.\n\nReturns the root directory path where Elixir documentation should be generated.","ref":"MsbmsBuildLib.html#elixir_docs_root/0"},{"type":"function","title":"Returns - MsbmsBuildLib.elixir_docs_root/0","doc":"* Root path for Elixir documentation as a string","ref":"MsbmsBuildLib.html#elixir_docs_root/0-returns"},{"type":"function","title":"MsbmsBuildLib.project_directories/0","doc":"Get the project directories.\n\nReturns a list of standard project directory names used throughout the build system.","ref":"MsbmsBuildLib.html#project_directories/0"},{"type":"function","title":"Returns - MsbmsBuildLib.project_directories/0","doc":"* List of project directory names as strings","ref":"MsbmsBuildLib.html#project_directories/0-returns"},{"type":"function","title":"MsbmsBuildLib.project_markers/0","doc":"Get the project markers.\n\nReturns a list of file markers that identify project boundaries or special locations.","ref":"MsbmsBuildLib.html#project_markers/0"},{"type":"function","title":"Returns - MsbmsBuildLib.project_markers/0","doc":"* List of project marker file names as strings","ref":"MsbmsBuildLib.html#project_markers/0-returns"},{"type":"function","title":"MsbmsBuildLib.clean_build/2","doc":"Cleans the build artifacts in the given components.\n\nRemoves compiled beam files, build directories, and other compilation artifacts.","ref":"MsbmsBuildLib.html#clean_build/2"},{"type":"function","title":"Parameters - MsbmsBuildLib.clean_build/2","doc":"* `base_dir` - The base directory path\n * `components` - List of component names to clean","ref":"MsbmsBuildLib.html#clean_build/2-parameters"},{"type":"function","title":"Returns - MsbmsBuildLib.clean_build/2","doc":"* `:ok` on successful cleanup\n * `{:error, message}` if cleanup fails","ref":"MsbmsBuildLib.html#clean_build/2-returns"},{"type":"function","title":"MsbmsBuildLib.clean_db/2","doc":"Cleans the database for the given components.\n\nDrops and recreates database schemas, removing all data and schema objects\nfor a fresh start. This is a destructive operation.","ref":"MsbmsBuildLib.html#clean_db/2"},{"type":"function","title":"Parameters - MsbmsBuildLib.clean_db/2","doc":"* `base_dir` - The base directory path\n * `db_opts` - Keyword list of database connection options:\n * `:host` - Database host (default: \"127.0.0.1\")\n * `:port` - Database port (default: 5432)\n * `:user` - Database user (required)\n * `:password` - Database password (required)\n * `:database` - Database name (default: \"postgres\")\n * `:dbadmin_password` - Database admin password (default: \"musesystems-insecure-publicly-known-password\")","ref":"MsbmsBuildLib.html#clean_db/2-parameters"},{"type":"function","title":"Returns - MsbmsBuildLib.clean_db/2","doc":"* `:ok` on successful database cleanup\n * `{:error, message}` if cleanup fails","ref":"MsbmsBuildLib.html#clean_db/2-returns"},{"type":"function","title":"MsbmsBuildLib.clean_db_migrations/2","doc":"Cleans the database migrations for the given components.\n\nRemoves migration tracking state and history, allowing migrations to be re-run\nfrom scratch. Does not affect the actual database schema.","ref":"MsbmsBuildLib.html#clean_db_migrations/2"},{"type":"function","title":"Parameters - MsbmsBuildLib.clean_db_migrations/2","doc":"* `base_dir` - The base directory path\n * `components` - List of component names to clean","ref":"MsbmsBuildLib.html#clean_db_migrations/2-parameters"},{"type":"function","title":"Returns - MsbmsBuildLib.clean_db_migrations/2","doc":"* `:ok` on successful cleanup\n * `{:error, message}` if cleanup fails","ref":"MsbmsBuildLib.html#clean_db_migrations/2-returns"},{"type":"function","title":"MsbmsBuildLib.clean_deps/2","doc":"Cleans the dependencies in the given components.\n\nRemoves downloaded and compiled dependency files, forcing a fresh dependency resolution\non the next build.","ref":"MsbmsBuildLib.html#clean_deps/2"},{"type":"function","title":"Parameters - MsbmsBuildLib.clean_deps/2","doc":"* `base_dir` - The base directory path\n * `components` - List of component names to clean","ref":"MsbmsBuildLib.html#clean_deps/2-parameters"},{"type":"function","title":"Returns - MsbmsBuildLib.clean_deps/2","doc":"* `:ok` on successful cleanup\n * `{:error, message}` if cleanup fails","ref":"MsbmsBuildLib.html#clean_deps/2-returns"},{"type":"function","title":"MsbmsBuildLib.clean_ls/2","doc":"Cleans the Elixir Language Server in the given components.","ref":"MsbmsBuildLib.html#clean_ls/2"},{"type":"function","title":"Parameters - MsbmsBuildLib.clean_ls/2","doc":"* `base_dir` - The base directory path\n * `components` - List of component names to clean","ref":"MsbmsBuildLib.html#clean_ls/2-parameters"},{"type":"function","title":"Returns - MsbmsBuildLib.clean_ls/2","doc":"* `:ok` on successful cleanup\n * `{:error, message}` if cleanup fails","ref":"MsbmsBuildLib.html#clean_ls/2-returns"},{"type":"function","title":"MsbmsBuildLib.clean_plt/2","doc":"Cleans the PLT (Persistent Lookup Table) in the given components.\n\nRemoves Dialyzer PLT files that cache type information for faster subsequent analysis.","ref":"MsbmsBuildLib.html#clean_plt/2"},{"type":"function","title":"Parameters - MsbmsBuildLib.clean_plt/2","doc":"* `base_dir` - The base directory path\n * `components` - List of component names to clean","ref":"MsbmsBuildLib.html#clean_plt/2-parameters"},{"type":"function","title":"Returns - MsbmsBuildLib.clean_plt/2","doc":"* `:ok` on successful cleanup\n * `{:error, message}` if cleanup fails","ref":"MsbmsBuildLib.html#clean_plt/2-returns"},{"type":"function","title":"MsbmsBuildLib.build_docs_db/3","doc":"Builds the DB documentation for the given components.\n\nGenerates database documentation by extracting schema information and comments\nfrom the database and creating formatted documentation files.","ref":"MsbmsBuildLib.html#build_docs_db/3"},{"type":"function","title":"Parameters - MsbmsBuildLib.build_docs_db/3","doc":"* `base_dir` - The base directory path where the project is located\n * `components` - List of component names to build documentation for\n * `db_opts` - Keyword list of database connection options:\n * `:host` - Database host (default: \"127.0.0.1\")\n * `:port` - Database port (default: 5432)\n * `:user` - Database user (required)\n * `:password` - Database password (required)\n * `:database` - Database name (default: \"postgres\")\n * `:dbadmin_password` - Database admin password (default: \"musesystems-insecure-publicly-known-password\")","ref":"MsbmsBuildLib.html#build_docs_db/3-parameters"},{"type":"function","title":"Returns - MsbmsBuildLib.build_docs_db/3","doc":"* `:ok` on successful documentation generation\n * `{:error, message}` if documentation generation fails","ref":"MsbmsBuildLib.html#build_docs_db/3-returns"},{"type":"function","title":"MsbmsBuildLib.build_docs_elixir/2","doc":"Builds the Elixir documentation for the given components.\n\nGenerates ExDoc documentation for the specified Elixir components using their respective\ndocumentation configurations.","ref":"MsbmsBuildLib.html#build_docs_elixir/2"},{"type":"function","title":"Parameters - MsbmsBuildLib.build_docs_elixir/2","doc":"* `base_dir` - The base directory path where the project is located\n * `components` - List of component names to generate documentation for","ref":"MsbmsBuildLib.html#build_docs_elixir/2-parameters"},{"type":"function","title":"Returns - MsbmsBuildLib.build_docs_elixir/2","doc":"* `:ok` on successful documentation generation\n * `{:error, message}` if documentation generation fails","ref":"MsbmsBuildLib.html#build_docs_elixir/2-returns"},{"type":"function","title":"MsbmsBuildLib.generate_component_list_doc/2","doc":"Generates the system components list documentation file.\n\nThis function scans all components in the project, extracts their metadata\n(dependencies, descriptions, documentation links), and generates a formatted\nmarkdown file suitable for Hugo/Docsy static site generation.","ref":"MsbmsBuildLib.html#generate_component_list_doc/2"},{"type":"function","title":"Parameters - MsbmsBuildLib.generate_component_list_doc/2","doc":"* `base_dir` - The base directory path where the project is located\n * `opts` - Keyword list of options:\n * `:output_path` - Output file path relative to base_dir\n (default: \"documentation/book/content/en/technical/system-components-list.md\")\n * `:dry_run` - If true, generates content but doesn't write file (default: false)","ref":"MsbmsBuildLib.html#generate_component_list_doc/2-parameters"},{"type":"function","title":"Returns - MsbmsBuildLib.generate_component_list_doc/2","doc":"* `{:ok, output_path}` - Path to the generated file on success (when dry_run is false)\n * `{:ok, content}` - Generated content as string on success (when dry_run is true)\n * `{:error, message}` - Error message if generation fails","ref":"MsbmsBuildLib.html#generate_component_list_doc/2-returns"},{"type":"function","title":"Examples - MsbmsBuildLib.generate_component_list_doc/2","doc":"# Generate with default output path\n MsbmsBuildLib.generate_component_list_doc(\"/path/to/project\")\n\n # Generate with custom output path\n MsbmsBuildLib.generate_component_list_doc(\n \"/path/to/project\",\n output_path: \"docs/components.md\"\n )\n\n # Generate without writing file (dry run)\n {:ok, content} = MsbmsBuildLib.generate_component_list_doc(\n \"/path/to/project\",\n dry_run: true\n )","ref":"MsbmsBuildLib.html#generate_component_list_doc/2-examples"},{"type":"function","title":"MsbmsBuildLib.install_elixir_deps/2","doc":"Installs Elixir dependencies for the given components.\n\nDownloads and compiles all required dependencies for the specified components,\nensuring they are available for compilation and runtime.","ref":"MsbmsBuildLib.html#install_elixir_deps/2"},{"type":"function","title":"Parameters - MsbmsBuildLib.install_elixir_deps/2","doc":"* `base_dir` - The base directory path where the project is located\n * `components` - List of component names to install dependencies for","ref":"MsbmsBuildLib.html#install_elixir_deps/2-parameters"},{"type":"function","title":"Returns - MsbmsBuildLib.install_elixir_deps/2","doc":"* `:ok` on successful dependency installation\n * `{:error, message}` if installation fails","ref":"MsbmsBuildLib.html#install_elixir_deps/2-returns"},{"type":"function","title":"MsbmsBuildLib.update_elixir_deps/2","doc":"Updates Elixir dependencies for the given components.\n\nUpdates all dependencies to their latest compatible versions as specified\nin the dependency configuration files.","ref":"MsbmsBuildLib.html#update_elixir_deps/2"},{"type":"function","title":"Parameters - MsbmsBuildLib.update_elixir_deps/2","doc":"* `base_dir` - The base directory path where the project is located\n * `components` - List of component names to update dependencies for","ref":"MsbmsBuildLib.html#update_elixir_deps/2-parameters"},{"type":"function","title":"Returns - MsbmsBuildLib.update_elixir_deps/2","doc":"* `:ok` on successful dependency update\n * `{:error, message}` if update fails","ref":"MsbmsBuildLib.html#update_elixir_deps/2-returns"},{"type":"function","title":"MsbmsBuildLib.run_tests/3","doc":"Runs tests for the given components.\n\nExecutes various types of tests including unit tests, integration tests, doctests,\ncode quality checks (Credo), and static analysis (Dialyzer) based on the provided options.","ref":"MsbmsBuildLib.html#run_tests/3"},{"type":"function","title":"Parameters - MsbmsBuildLib.run_tests/3","doc":"* `base_dir` - The base directory path where the project is located\n * `components` - List of component names to test (empty list means all components)\n * `opts` - Keyword list of test options:\n * `:test_unit` - Whether to run unit tests (default: true)\n * `:test_integration` - Whether to run integration tests (default: true)\n * `:test_doctest` - Whether to run doctests (default: true)\n * `:run_credo` - Whether to run credo tests (default: true)\n * `:run_dialyzer` - Whether to run dialyzer tests (default: true)","ref":"MsbmsBuildLib.html#run_tests/3-parameters"},{"type":"function","title":"Returns - MsbmsBuildLib.run_tests/3","doc":"* `:ok` if all specified tests pass\n * `{:error, message}` if any tests fail","ref":"MsbmsBuildLib.html#run_tests/3-returns"},{"type":"function","title":"MsbmsBuildLib.build_elixir/3","doc":"Builds the Elixir project.\n\nCompiles the Elixir components for the specified environment, handling dependencies\nand compilation in the correct order.","ref":"MsbmsBuildLib.html#build_elixir/3"},{"type":"function","title":"Parameters - MsbmsBuildLib.build_elixir/3","doc":"* `base_dir` - The base directory path where the project is located\n * `components` - List of component names to build\n * `elixir_env` - The Elixir environment to build for (e.g., \"dev\", \"test\", \"prod\")","ref":"MsbmsBuildLib.html#build_elixir/3-parameters"},{"type":"function","title":"Returns - MsbmsBuildLib.build_elixir/3","doc":"* `:ok` on successful build completion\n * `{:error, message}` if the build fails","ref":"MsbmsBuildLib.html#build_elixir/3-returns"},{"type":"function","title":"MsbmsBuildLib.build_migrations/2","doc":"Builds the database migrations for the given components.\n\nProcesses and prepares database migration files for the specified components,\nensuring they are ready for execution against the target database.","ref":"MsbmsBuildLib.html#build_migrations/2"},{"type":"function","title":"Parameters - MsbmsBuildLib.build_migrations/2","doc":"* `base_dir` - The base directory path where the project is located\n * `components` - List of component names to build migrations for","ref":"MsbmsBuildLib.html#build_migrations/2-parameters"},{"type":"function","title":"Returns - MsbmsBuildLib.build_migrations/2","doc":"* `:ok` on successful migration build completion\n * `{:error, message}` if the migration build fails","ref":"MsbmsBuildLib.html#build_migrations/2-returns"},{"type":"function","title":"MsbmsBuildLib.scaffold_elixir_component/4","doc":"Scaffolds a new Elixir component from templates.\n\nCreates a new Elixir component project structure based on the standard\ntemplates, with all files properly configured for the new component.","ref":"MsbmsBuildLib.html#scaffold_elixir_component/4"},{"type":"function","title":"Parameters - MsbmsBuildLib.scaffold_elixir_component/4","doc":"* `base_dir` - The base directory path where the project is located\n * `component_name` - The name of the component (e.g., \"mscmp_syst_new_feature\")\n * `target_path` - The relative path where the component should be created\n * `opts` - Optional configuration options","ref":"MsbmsBuildLib.html#scaffold_elixir_component/4-parameters"},{"type":"function","title":"Options - MsbmsBuildLib.scaffold_elixir_component/4","doc":"* `:component_display_name` - Human-friendly name for the component\n * `:component_description` - Brief description of the component\n * `:comp_short_name` - Override the derived short component name (removes categorizing prefix)\n * `:module_name` - Override the derived module name (PascalCase of full component name)\n * `:module_short_name` - Override the derived short module name (PascalCase of short component name)","ref":"MsbmsBuildLib.html#scaffold_elixir_component/4-options"},{"type":"function","title":"Returns - MsbmsBuildLib.scaffold_elixir_component/4","doc":"* `:ok` on successful scaffolding\n * `{:error, message}` if scaffolding fails","ref":"MsbmsBuildLib.html#scaffold_elixir_component/4-returns"},{"type":"function","title":"Examples - MsbmsBuildLib.scaffold_elixir_component/4","doc":"# Create a new system component (names derived automatically)\n MsbmsBuildLib.scaffold_elixir_component(\n \"/path/to/project\",\n \"mscmp_syst_new_feature\",\n \"app_server/components/system\",\n component_display_name: \"New Feature Component\",\n component_description: \"Provides new feature functionality.\"\n )\n\n # Create a new application component\n MsbmsBuildLib.scaffold_elixir_component(\n \"/path/to/project\",\n \"msapp_new_app\",\n \"app_server/components/application\"\n )\n\n # Override derived names for edge cases\n MsbmsBuildLib.scaffold_elixir_component(\n \"/path/to/project\",\n \"legacy_system_component\",\n \"app_server/components/system\",\n comp_short_name: \"legacy\",\n module_short_name: \"Legacy\"\n )","ref":"MsbmsBuildLib.html#scaffold_elixir_component/4-examples"},{"type":"function","title":"MsbmsBuildLib.read_component_file/2","doc":"Reads and parses a component list file.\n\nThe file format supports:\n- One component name per line\n- Comments starting with `#` are ignored\n- Empty lines are ignored\n- Leading/trailing whitespace is trimmed","ref":"MsbmsBuildLib.html#read_component_file/2"},{"type":"function","title":"Parameters - MsbmsBuildLib.read_component_file/2","doc":"* `base_dir` - The base directory path where the project is located\n * `file_path` - Path to the component file (relative to base_dir)","ref":"MsbmsBuildLib.html#read_component_file/2-parameters"},{"type":"function","title":"Returns - MsbmsBuildLib.read_component_file/2","doc":"* `{:ok, components}` - List of component names from the file\n * `{:error, reason}` - Error message if file cannot be read or parsed","ref":"MsbmsBuildLib.html#read_component_file/2-returns"},{"type":"function","title":"MsbmsBuildLib.set_log_level/1","doc":"Sets the log level for the build system.\n\nConfigures the logging level for all build operations, controlling the verbosity\nof output during build processes.","ref":"MsbmsBuildLib.html#set_log_level/1"},{"type":"function","title":"Parameters - MsbmsBuildLib.set_log_level/1","doc":"* `level` - The desired log level (`:debug`, `:info`, `:warning`, `:error`)","ref":"MsbmsBuildLib.html#set_log_level/1-parameters"},{"type":"function","title":"Returns - MsbmsBuildLib.set_log_level/1","doc":"* `:ok` - Always returns `:ok`","ref":"MsbmsBuildLib.html#set_log_level/1-returns"},{"type":"module","title":"MsbmsBuildLib.Types","doc":"Type definitions for the MsbmsBuildLib module.\n\nThis module defines the core types used throughout the build library for\nrepresenting components, paths, artifacts, and other build-related concepts.\nThese types ensure consistency and type safety across the build system's API.","ref":"MsbmsBuildLib.Types.html"},{"type":"module","title":"Type Categories - MsbmsBuildLib.Types","doc":"","ref":"MsbmsBuildLib.Types.html#module-type-categories"},{"type":"module","title":"Component Types - MsbmsBuildLib.Types","doc":"- `component_name/0` - Individual component identifiers\n- `components/0` - Collections of component names\n- `component_path/0` - File system paths to components\n- `component_paths/0` - Collections of component paths","ref":"MsbmsBuildLib.Types.html#module-component-types"},{"type":"module","title":"Artifact Types - MsbmsBuildLib.Types","doc":"- `kind/0` - Different types of build artifacts (Elixir, DB, docs)","ref":"MsbmsBuildLib.Types.html#module-artifact-types"},{"type":"module","title":"Migration Types - MsbmsBuildLib.Types","doc":"- `migration_target/0` - Database migration configuration tuples","ref":"MsbmsBuildLib.Types.html#module-migration-types"},{"type":"type","title":"MsbmsBuildLib.Types.component_name/0","doc":"The name of a component in the project.\n\nComponent names should match their representation in the file system exactly.\nThis typically uses snake_case naming convention and corresponds to the\ndirectory name where the component is located.","ref":"MsbmsBuildLib.Types.html#t:component_name/0"},{"type":"type","title":"Naming Convention - MsbmsBuildLib.Types.component_name/0","doc":"Component names should use the file system representation rather than the\nElixir module representation:\n\n- ✅ Correct: `\"mscmp_syst_enums\"`\n- ❌ Incorrect: `\"MscmpSystEnums\"`","ref":"MsbmsBuildLib.Types.html#t:component_name/0-naming-convention"},{"type":"type","title":"Examples - MsbmsBuildLib.Types.component_name/0","doc":"# Valid component names\n \"mscmp_syst_enums\"\n \"mscmp_syst_utils\"\n \"msapp_mcp_web\"\n \"mssub_mcp\"","ref":"MsbmsBuildLib.Types.html#t:component_name/0-examples"},{"type":"type","title":"MsbmsBuildLib.Types.component_path/0","doc":"A fully qualified file system path to a component in the project.\n\nThis represents the absolute path to a component's root directory, where\nthe component's source code, configuration files, and other artifacts\nare located. The path should be valid and accessible from the current\nworking directory context.","ref":"MsbmsBuildLib.Types.html#t:component_path/0"},{"type":"type","title":"Path Format - MsbmsBuildLib.Types.component_path/0","doc":"Paths are typically absolute and point to the component's root directory:\n\n \"/full/path/to/project/components/mscmp_syst_enums\"\n \"/full/path/to/project/apps/msapp_mcp_web\"","ref":"MsbmsBuildLib.Types.html#t:component_path/0-path-format"},{"type":"type","title":"Usage - MsbmsBuildLib.Types.component_path/0","doc":"These paths are used internally by build functions to locate and operate\non specific components within the project structure.","ref":"MsbmsBuildLib.Types.html#t:component_path/0-usage"},{"type":"type","title":"MsbmsBuildLib.Types.component_paths/0","doc":"A list of fully qualified file system paths to components in the project.\n\nThis collection type is used when build operations need to process multiple\ncomponents by their full paths rather than just their names. It's typically\nused internally after component names have been resolved to their actual\nfile system locations.","ref":"MsbmsBuildLib.Types.html#t:component_paths/0"},{"type":"type","title":"Usage - MsbmsBuildLib.Types.component_paths/0","doc":"This type is commonly used in internal build pipeline functions where\nthe system has already resolved component names to their full paths\nand needs to perform batch operations across multiple components.","ref":"MsbmsBuildLib.Types.html#t:component_paths/0-usage"},{"type":"type","title":"MsbmsBuildLib.Types.components/0","doc":"A list of component names for batch operations.\n\nThis type represents a collection of component names that can be processed\ntogether in build operations. An empty list typically indicates that all\navailable components should be processed.","ref":"MsbmsBuildLib.Types.html#t:components/0"},{"type":"type","title":"Examples - MsbmsBuildLib.Types.components/0","doc":"iex> components = [\"mscmp_syst_enums\", \"mscmp_syst_utils\"]\n iex> MsbmsBuildLib.clean_build(base_dir, components)","ref":"MsbmsBuildLib.Types.html#t:components/0-examples"},{"type":"type","title":"MsbmsBuildLib.Types.kind/0","doc":"The different kinds of project artifacts that can be built or managed.\n\nThis type categorizes the various types of build artifacts and outputs\nthat the build system can create and manage. Each kind represents a\ndifferent aspect of the project's deliverables.","ref":"MsbmsBuildLib.Types.html#t:kind/0"},{"type":"type","title":"Artifact Types - MsbmsBuildLib.Types.kind/0","doc":"- `:elixir` - Compiled Elixir/Erlang code artifacts including BEAM files,\n applications, and releases. This includes the core application logic\n and libraries.\n\n- `:db` - Database artifacts including schemas, migrations, stored procedures,\n functions, and other database objects. These define the data layer of\n the application.\n\n- `:elixir_docs` - Generated documentation for Elixir code using ExDoc.\n This includes API documentation, guides, and module documentation\n extracted from the source code.\n\n- `:db_docs` - Generated documentation for database objects including\n schema documentation, table descriptions, and database design\n documentation extracted from database metadata and comments.","ref":"MsbmsBuildLib.Types.html#t:kind/0-artifact-types"},{"type":"type","title":"Usage - MsbmsBuildLib.Types.kind/0","doc":"These kinds are used to categorize build operations and determine which\nspecific build tools and processes should be applied to different parts\nof the project.","ref":"MsbmsBuildLib.Types.html#t:kind/0-usage"},{"type":"type","title":"MsbmsBuildLib.Types.migration_target/0","doc":"Configuration tuple for components that require persistent database migration management.\n\nThis type associates database migration metadata with component locations,\nenabling the build system to properly manage database schema evolution\nfor deployable components.","ref":"MsbmsBuildLib.Types.html#t:migration_target/0"},{"type":"type","title":"Target Scope - MsbmsBuildLib.Types.migration_target/0","doc":"Migration targets typically focus on Subsystems, which represent the\narchitectural level where complete, deployable databases are defined.\nWhile other components may create and use migrations during development\nand testing, these are usually transient and not deployed to production\nenvironments.","ref":"MsbmsBuildLib.Types.html#t:migration_target/0-target-scope"},{"type":"type","title":"Tuple Elements - MsbmsBuildLib.Types.migration_target/0","doc":"* `component_name` - The name of the component as it appears in the file system\n (e.g., `\"mssub_mcp\"` for the MCP subsystem)\n\n* `database_type` - A string reference to a specific database buildplan that\n defines the build process for this type of database. This determines which\n migration tools and processes are used (e.g., `\"application_db\"`,\n `\"analytics_db\"`)\n\n* `component_path` - The absolute file system path to the root directory of\n the component's Elixir project, where migration files and configuration\n are located","ref":"MsbmsBuildLib.Types.html#t:migration_target/0-tuple-elements"},{"type":"type","title":"Examples - MsbmsBuildLib.Types.migration_target/0","doc":"# MCP subsystem with application database\n {\"mssub_mcp\", \"application_db\", \"/full/path/to/project/subsystems/mssub_mcp\"}\n\n # Analytics subsystem with specialized database\n {\"mssub_analytics\", \"analytics_db\", \"/full/path/to/project/subsystems/mssub_analytics\"}","ref":"MsbmsBuildLib.Types.html#t:migration_target/0-examples"},{"type":"type","title":"Usage - MsbmsBuildLib.Types.migration_target/0","doc":"These tuples are used by the migration build system to locate migration\nfiles, determine the appropriate build process, and coordinate database\nschema updates across different deployment environments.","ref":"MsbmsBuildLib.Types.html#t:migration_target/0-usage"}],"proglang":"elixir","content_type":"text/markdown","producer":{"name":"ex_doc","version":"0.38.4"}} \ No newline at end of file diff --git a/documentation/technical/auxiliary/msbms_build_lib/dist/sidebar_items-2DA0BB0B.js b/documentation/technical/auxiliary/msbms_build_lib/dist/sidebar_items-2DA0BB0B.js deleted file mode 100644 index e8559d300..000000000 --- a/documentation/technical/auxiliary/msbms_build_lib/dist/sidebar_items-2DA0BB0B.js +++ /dev/null @@ -1 +0,0 @@ -sidebarNodes={"modules":[{"id":"MsbmsBuildLib","deprecated":false,"group":"API","title":"MsbmsBuildLib","nodeGroups":[{"name":"Constants Retrieval","nodes":[{"id":"db_component_paths/0","deprecated":false,"title":"db_component_paths()","anchor":"db_component_paths/0"},{"id":"db_docs_root/0","deprecated":false,"title":"db_docs_root()","anchor":"db_docs_root/0"},{"id":"elixir_build_config_path/0","deprecated":false,"title":"elixir_build_config_path()","anchor":"elixir_build_config_path/0"},{"id":"elixir_component_paths/0","deprecated":false,"title":"elixir_component_paths()","anchor":"elixir_component_paths/0"},{"id":"elixir_docs_root/0","deprecated":false,"title":"elixir_docs_root()","anchor":"elixir_docs_root/0"},{"id":"project_directories/0","deprecated":false,"title":"project_directories()","anchor":"project_directories/0"},{"id":"project_markers/0","deprecated":false,"title":"project_markers()","anchor":"project_markers/0"}],"key":"constants-retrieval"},{"name":"Build Cleaning","nodes":[{"id":"clean_build/2","deprecated":false,"title":"clean_build(base_dir, components)","anchor":"clean_build/2"},{"id":"clean_db/2","deprecated":false,"title":"clean_db(base_dir, db_opts)","anchor":"clean_db/2"},{"id":"clean_db_migrations/2","deprecated":false,"title":"clean_db_migrations(base_dir, components)","anchor":"clean_db_migrations/2"},{"id":"clean_deps/2","deprecated":false,"title":"clean_deps(base_dir, components)","anchor":"clean_deps/2"},{"id":"clean_ls/2","deprecated":false,"title":"clean_ls(base_dir, components)","anchor":"clean_ls/2"},{"id":"clean_plt/2","deprecated":false,"title":"clean_plt(base_dir, components)","anchor":"clean_plt/2"}],"key":"build-cleaning"},{"name":"Build Documentation","nodes":[{"id":"build_docs_db/3","deprecated":false,"title":"build_docs_db(base_dir, components, db_opts)","anchor":"build_docs_db/3"},{"id":"build_docs_elixir/2","deprecated":false,"title":"build_docs_elixir(base_dir, components)","anchor":"build_docs_elixir/2"}],"key":"build-documentation"},{"name":"Documentation Generation","nodes":[{"id":"generate_component_list_doc/2","deprecated":false,"title":"generate_component_list_doc(base_dir, opts \\\\ [])","anchor":"generate_component_list_doc/2"}],"key":"documentation-generation"},{"name":"Dependency Management","nodes":[{"id":"install_elixir_deps/2","deprecated":false,"title":"install_elixir_deps(base_dir, components)","anchor":"install_elixir_deps/2"},{"id":"update_elixir_deps/2","deprecated":false,"title":"update_elixir_deps(base_dir, components)","anchor":"update_elixir_deps/2"}],"key":"dependency-management"},{"name":"Test Execution","nodes":[{"id":"run_tests/3","deprecated":false,"title":"run_tests(base_dir, components, opts \\\\ [])","anchor":"run_tests/3"}],"key":"test-execution"},{"name":"Build Elixir","nodes":[{"id":"build_elixir/3","deprecated":false,"title":"build_elixir(base_dir, components, elixir_env)","anchor":"build_elixir/3"}],"key":"build-elixir"},{"name":"Build Migrations","nodes":[{"id":"build_migrations/2","deprecated":false,"title":"build_migrations(base_dir, components)","anchor":"build_migrations/2"}],"key":"build-migrations"},{"name":"Project Scaffolding","nodes":[{"id":"scaffold_elixir_component/4","deprecated":false,"title":"scaffold_elixir_component(base_dir, component_name, target_path, opts \\\\ [])","anchor":"scaffold_elixir_component/4"}],"key":"project-scaffolding"},{"name":"Utility","nodes":[{"id":"read_component_file/2","deprecated":false,"title":"read_component_file(base_dir, file_path)","anchor":"read_component_file/2"},{"id":"set_log_level/1","deprecated":false,"title":"set_log_level(level)","anchor":"set_log_level/1"}],"key":"utility"}],"sections":[{"id":"Overview","anchor":"module-overview"}]},{"id":"MsbmsBuildLib.Types","deprecated":false,"group":"Supporting Types","title":"MsbmsBuildLib.Types","nodeGroups":[{"name":"Types","nodes":[{"id":"component_name/0","deprecated":false,"title":"component_name()","anchor":"t:component_name/0"},{"id":"component_path/0","deprecated":false,"title":"component_path()","anchor":"t:component_path/0"},{"id":"component_paths/0","deprecated":false,"title":"component_paths()","anchor":"t:component_paths/0"},{"id":"components/0","deprecated":false,"title":"components()","anchor":"t:components/0"},{"id":"kind/0","deprecated":false,"title":"kind()","anchor":"t:kind/0"},{"id":"migration_target/0","deprecated":false,"title":"migration_target()","anchor":"t:migration_target/0"}],"key":"types"}],"sections":[{"id":"Type Categories","anchor":"module-type-categories"}]}],"extras":[{"id":"api-reference","group":"","title":"API Reference","headers":[{"id":"Modules","anchor":"modules"},{"id":"Mix Tasks","anchor":"tasks"}]}],"tasks":[{"id":"Mix.Tasks.Msbms.Db.Clean","deprecated":false,"group":"","title":"mix msbms.db.clean","nodeGroups":[{"name":"Functions","nodes":[{"id":"run/1","deprecated":false,"title":"run(args)","anchor":"run/1"}],"key":"functions"}],"sections":[{"id":"Command line options","anchor":"module-command-line-options"},{"id":"Database Requirements","anchor":"module-database-requirements"},{"id":"Examples","anchor":"module-examples"}]},{"id":"Mix.Tasks.Msbms.Db.Docs","deprecated":false,"group":"","title":"mix msbms.db.docs","nodeGroups":[{"name":"Functions","nodes":[{"id":"run/1","deprecated":false,"title":"run(args)","anchor":"run/1"}],"key":"functions"}],"sections":[{"id":"Command line options","anchor":"module-command-line-options"},{"id":"Component File Format","anchor":"module-component-file-format"},{"id":"Database Credentials","anchor":"module-database-credentials"},{"id":"Examples","anchor":"module-examples"}]},{"id":"Mix.Tasks.Msbms.Elixir.Build","deprecated":false,"group":"","title":"mix msbms.elixir.build","nodeGroups":[{"name":"Functions","nodes":[{"id":"run/1","deprecated":false,"title":"run(args)","anchor":"run/1"}],"key":"functions"}],"sections":[{"id":"Command line options","anchor":"module-command-line-options"},{"id":"Component File Format","anchor":"module-component-file-format"},{"id":"Examples","anchor":"module-examples"}]},{"id":"Mix.Tasks.Msbms.Elixir.Clean","deprecated":false,"group":"","title":"mix msbms.elixir.clean","nodeGroups":[{"name":"Functions","nodes":[{"id":"run/1","deprecated":false,"title":"run(args)","anchor":"run/1"}],"key":"functions"}],"sections":[{"id":"Command line options","anchor":"module-command-line-options"},{"id":"Component File Format","anchor":"module-component-file-format"},{"id":"Examples","anchor":"module-examples"}]},{"id":"Mix.Tasks.Msbms.Elixir.Deps","deprecated":false,"group":"","title":"mix msbms.elixir.deps","nodeGroups":[{"name":"Functions","nodes":[{"id":"run/1","deprecated":false,"title":"run(args)","anchor":"run/1"}],"key":"functions"}],"sections":[{"id":"Command line options","anchor":"module-command-line-options"},{"id":"Component File Format","anchor":"module-component-file-format"},{"id":"Examples","anchor":"module-examples"}]},{"id":"Mix.Tasks.Msbms.Elixir.Docs","deprecated":false,"group":"","title":"mix msbms.elixir.docs","nodeGroups":[{"name":"Functions","nodes":[{"id":"run/1","deprecated":false,"title":"run(args)","anchor":"run/1"}],"key":"functions"}],"sections":[{"id":"Command line options","anchor":"module-command-line-options"},{"id":"Component File Format","anchor":"module-component-file-format"},{"id":"Examples","anchor":"module-examples"}]},{"id":"Mix.Tasks.Msbms.Elixir.Scaffold","deprecated":false,"group":"","title":"mix msbms.elixir.scaffold","nodeGroups":[{"name":"Functions","nodes":[{"id":"run/1","deprecated":false,"title":"run(args)","anchor":"run/1"}],"key":"functions"}],"sections":[{"id":"Command line options","anchor":"module-command-line-options"},{"id":"Examples","anchor":"module-examples"}]},{"id":"Mix.Tasks.Msbms.Elixir.Test","deprecated":false,"group":"","title":"mix msbms.elixir.test","nodeGroups":[{"name":"Functions","nodes":[{"id":"run/1","deprecated":false,"title":"run(args)","anchor":"run/1"}],"key":"functions"}],"sections":[{"id":"Command line options","anchor":"module-command-line-options"},{"id":"Component File Format","anchor":"module-component-file-format"},{"id":"Examples","anchor":"module-examples"}]},{"id":"Mix.Tasks.Msbms.Meta.Gencomplist","deprecated":false,"group":"","title":"mix msbms.meta.gencomplist","nodeGroups":[{"name":"Functions","nodes":[{"id":"run/1","deprecated":false,"title":"run(args)","anchor":"run/1"}],"key":"functions"}],"sections":[{"id":"Command line options","anchor":"module-command-line-options"},{"id":"Component Discovery","anchor":"module-component-discovery"},{"id":"Description Extraction","anchor":"module-description-extraction"},{"id":"Dependency Filtering","anchor":"module-dependency-filtering"},{"id":"Examples","anchor":"module-examples"}]}]} \ No newline at end of file diff --git a/documentation/technical/auxiliary/msbms_build_lib/dist/sidebar_items-A487BB95.js b/documentation/technical/auxiliary/msbms_build_lib/dist/sidebar_items-A487BB95.js new file mode 100644 index 000000000..e246791b2 --- /dev/null +++ b/documentation/technical/auxiliary/msbms_build_lib/dist/sidebar_items-A487BB95.js @@ -0,0 +1 @@ +sidebarNodes={"modules":[{"id":"MsbmsBuildLib","deprecated":false,"group":"API","title":"MsbmsBuildLib","sections":[{"id":"Overview","anchor":"module-overview"}],"nodeGroups":[{"name":"Constants Retrieval","nodes":[{"id":"db_component_paths/0","deprecated":false,"title":"db_component_paths()","anchor":"db_component_paths/0"},{"id":"db_docs_root/0","deprecated":false,"title":"db_docs_root()","anchor":"db_docs_root/0"},{"id":"elixir_build_config_path/0","deprecated":false,"title":"elixir_build_config_path()","anchor":"elixir_build_config_path/0"},{"id":"elixir_component_paths/0","deprecated":false,"title":"elixir_component_paths()","anchor":"elixir_component_paths/0"},{"id":"elixir_docs_root/0","deprecated":false,"title":"elixir_docs_root()","anchor":"elixir_docs_root/0"},{"id":"project_directories/0","deprecated":false,"title":"project_directories()","anchor":"project_directories/0"},{"id":"project_markers/0","deprecated":false,"title":"project_markers()","anchor":"project_markers/0"}],"key":"constants-retrieval"},{"name":"Build Cleaning","nodes":[{"id":"clean_build/2","deprecated":false,"title":"clean_build(base_dir, components)","anchor":"clean_build/2"},{"id":"clean_db/2","deprecated":false,"title":"clean_db(base_dir, db_opts)","anchor":"clean_db/2"},{"id":"clean_db_migrations/2","deprecated":false,"title":"clean_db_migrations(base_dir, components)","anchor":"clean_db_migrations/2"},{"id":"clean_deps/2","deprecated":false,"title":"clean_deps(base_dir, components)","anchor":"clean_deps/2"},{"id":"clean_ls/2","deprecated":false,"title":"clean_ls(base_dir, components)","anchor":"clean_ls/2"},{"id":"clean_plt/2","deprecated":false,"title":"clean_plt(base_dir, components)","anchor":"clean_plt/2"}],"key":"build-cleaning"},{"name":"Build Documentation","nodes":[{"id":"build_docs_db/3","deprecated":false,"title":"build_docs_db(base_dir, components, db_opts)","anchor":"build_docs_db/3"},{"id":"build_docs_elixir/2","deprecated":false,"title":"build_docs_elixir(base_dir, components)","anchor":"build_docs_elixir/2"}],"key":"build-documentation"},{"name":"Documentation Generation","nodes":[{"id":"generate_component_list_doc/2","deprecated":false,"title":"generate_component_list_doc(base_dir, opts \\\\ [])","anchor":"generate_component_list_doc/2"}],"key":"documentation-generation"},{"name":"Dependency Management","nodes":[{"id":"install_elixir_deps/2","deprecated":false,"title":"install_elixir_deps(base_dir, components)","anchor":"install_elixir_deps/2"},{"id":"update_elixir_deps/2","deprecated":false,"title":"update_elixir_deps(base_dir, components)","anchor":"update_elixir_deps/2"}],"key":"dependency-management"},{"name":"Test Execution","nodes":[{"id":"run_tests/3","deprecated":false,"title":"run_tests(base_dir, components, opts \\\\ [])","anchor":"run_tests/3"}],"key":"test-execution"},{"name":"Build Elixir","nodes":[{"id":"build_elixir/3","deprecated":false,"title":"build_elixir(base_dir, components, elixir_env)","anchor":"build_elixir/3"}],"key":"build-elixir"},{"name":"Build Migrations","nodes":[{"id":"build_migrations/2","deprecated":false,"title":"build_migrations(base_dir, components)","anchor":"build_migrations/2"}],"key":"build-migrations"},{"name":"Project Scaffolding","nodes":[{"id":"scaffold_elixir_component/4","deprecated":false,"title":"scaffold_elixir_component(base_dir, component_name, target_path, opts \\\\ [])","anchor":"scaffold_elixir_component/4"}],"key":"project-scaffolding"},{"name":"Utility","nodes":[{"id":"read_component_file/2","deprecated":false,"title":"read_component_file(base_dir, file_path)","anchor":"read_component_file/2"},{"id":"set_log_level/1","deprecated":false,"title":"set_log_level(level)","anchor":"set_log_level/1"}],"key":"utility"}]},{"id":"MsbmsBuildLib.Types","deprecated":false,"group":"Supporting Types","title":"MsbmsBuildLib.Types","sections":[{"id":"Type Categories","anchor":"module-type-categories"}],"nodeGroups":[{"name":"Types","nodes":[{"id":"component_name/0","deprecated":false,"title":"component_name()","anchor":"t:component_name/0"},{"id":"component_path/0","deprecated":false,"title":"component_path()","anchor":"t:component_path/0"},{"id":"component_paths/0","deprecated":false,"title":"component_paths()","anchor":"t:component_paths/0"},{"id":"components/0","deprecated":false,"title":"components()","anchor":"t:components/0"},{"id":"kind/0","deprecated":false,"title":"kind()","anchor":"t:kind/0"},{"id":"migration_target/0","deprecated":false,"title":"migration_target()","anchor":"t:migration_target/0"}],"key":"types"}]}],"extras":[{"id":"api-reference","group":"","title":"API Reference","headers":[{"id":"Modules","anchor":"modules"},{"id":"Mix Tasks","anchor":"tasks"}]}],"tasks":[{"id":"Mix.Tasks.Msbms.Db.Clean","deprecated":false,"group":"","title":"mix msbms.db.clean","sections":[{"id":"Command line options","anchor":"module-command-line-options"},{"id":"Database Requirements","anchor":"module-database-requirements"},{"id":"Examples","anchor":"module-examples"}],"nodeGroups":[{"name":"Functions","nodes":[{"id":"run/1","deprecated":false,"title":"run(args)","anchor":"run/1"}],"key":"functions"}]},{"id":"Mix.Tasks.Msbms.Db.Docs","deprecated":false,"group":"","title":"mix msbms.db.docs","sections":[{"id":"Command line options","anchor":"module-command-line-options"},{"id":"Component File Format","anchor":"module-component-file-format"},{"id":"Database Credentials","anchor":"module-database-credentials"},{"id":"Examples","anchor":"module-examples"}],"nodeGroups":[{"name":"Functions","nodes":[{"id":"run/1","deprecated":false,"title":"run(args)","anchor":"run/1"}],"key":"functions"}]},{"id":"Mix.Tasks.Msbms.Elixir.Build","deprecated":false,"group":"","title":"mix msbms.elixir.build","sections":[{"id":"Command line options","anchor":"module-command-line-options"},{"id":"Component File Format","anchor":"module-component-file-format"},{"id":"Examples","anchor":"module-examples"}],"nodeGroups":[{"name":"Functions","nodes":[{"id":"run/1","deprecated":false,"title":"run(args)","anchor":"run/1"}],"key":"functions"}]},{"id":"Mix.Tasks.Msbms.Elixir.Clean","deprecated":false,"group":"","title":"mix msbms.elixir.clean","sections":[{"id":"Command line options","anchor":"module-command-line-options"},{"id":"Component File Format","anchor":"module-component-file-format"},{"id":"Examples","anchor":"module-examples"}],"nodeGroups":[{"name":"Functions","nodes":[{"id":"run/1","deprecated":false,"title":"run(args)","anchor":"run/1"}],"key":"functions"}]},{"id":"Mix.Tasks.Msbms.Elixir.Deps","deprecated":false,"group":"","title":"mix msbms.elixir.deps","sections":[{"id":"Command line options","anchor":"module-command-line-options"},{"id":"Component File Format","anchor":"module-component-file-format"},{"id":"Examples","anchor":"module-examples"}],"nodeGroups":[{"name":"Functions","nodes":[{"id":"run/1","deprecated":false,"title":"run(args)","anchor":"run/1"}],"key":"functions"}]},{"id":"Mix.Tasks.Msbms.Elixir.Docs","deprecated":false,"group":"","title":"mix msbms.elixir.docs","sections":[{"id":"Command line options","anchor":"module-command-line-options"},{"id":"Component File Format","anchor":"module-component-file-format"},{"id":"Examples","anchor":"module-examples"}],"nodeGroups":[{"name":"Functions","nodes":[{"id":"run/1","deprecated":false,"title":"run(args)","anchor":"run/1"}],"key":"functions"}]},{"id":"Mix.Tasks.Msbms.Elixir.Scaffold","deprecated":false,"group":"","title":"mix msbms.elixir.scaffold","sections":[{"id":"Command line options","anchor":"module-command-line-options"},{"id":"Examples","anchor":"module-examples"}],"nodeGroups":[{"name":"Functions","nodes":[{"id":"run/1","deprecated":false,"title":"run(args)","anchor":"run/1"}],"key":"functions"}]},{"id":"Mix.Tasks.Msbms.Elixir.Test","deprecated":false,"group":"","title":"mix msbms.elixir.test","sections":[{"id":"Command line options","anchor":"module-command-line-options"},{"id":"Component File Format","anchor":"module-component-file-format"},{"id":"Examples","anchor":"module-examples"}],"nodeGroups":[{"name":"Functions","nodes":[{"id":"run/1","deprecated":false,"title":"run(args)","anchor":"run/1"}],"key":"functions"}]},{"id":"Mix.Tasks.Msbms.Meta.Gencomplist","deprecated":false,"group":"","title":"mix msbms.meta.gencomplist","sections":[{"id":"Command line options","anchor":"module-command-line-options"},{"id":"Component Discovery","anchor":"module-component-discovery"},{"id":"Description Extraction","anchor":"module-description-extraction"},{"id":"Dependency Filtering","anchor":"module-dependency-filtering"},{"id":"Examples","anchor":"module-examples"}],"nodeGroups":[{"name":"Functions","nodes":[{"id":"run/1","deprecated":false,"title":"run(args)","anchor":"run/1"}],"key":"functions"}]}]} \ No newline at end of file diff --git a/documentation/technical/auxiliary/msbms_build_lib/index.html b/documentation/technical/auxiliary/msbms_build_lib/index.html index ccdc0b610..db605a5c4 100644 --- a/documentation/technical/auxiliary/msbms_build_lib/index.html +++ b/documentation/technical/auxiliary/msbms_build_lib/index.html @@ -2,9 +2,9 @@ - msbms_build_lib v1.2.0 — Documentation + msbms_build_lib v1.2.1 — Documentation - + diff --git a/documentation/technical/auxiliary/msbms_build_lib/msbms_build_lib.epub b/documentation/technical/auxiliary/msbms_build_lib/msbms_build_lib.epub index cc5953e8a72081b85e51fc4d07bb4267f5ece769..600ceab9fb4c7c4d670772a550dea21b4f8f18de 100644 GIT binary patch delta 34883 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 delta 35020 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 y{{XQVil&V-875zxDT(1Gw11p@%%G*j*X diff --git a/documentation/technical/auxiliary/msbms_build_lib/search.html b/documentation/technical/auxiliary/msbms_build_lib/search.html index 48d912748..732f5849d 100644 --- a/documentation/technical/auxiliary/msbms_build_lib/search.html +++ b/documentation/technical/auxiliary/msbms_build_lib/search.html @@ -4,19 +4,19 @@ - - + + - Search — msbms_build_lib v1.2.0 + Search — msbms_build_lib v1.2.1 - + - + - + @@ -39,7 +39,7 @@ msbms_build_lib
    @@ -81,7 +81,7 @@

    - +